Začínáme programovat v Go: 6. díl – základní datové typy

V tomto díle se seznámíme s některými základními datovými typy. Nebude se jednat o komplexní výčet. S dalšími se pak postupně seznámíme v dalších dílech tutoriálu.

boolean
Hodnota může být pravda (true), nebo nepravda (false)

string
Textový řetězec. S tímto datovým typem jsme se již setkali. Cokoliv uzavřené v dvojitých uvozovkách je považováno za textový retězec (string).

int
Celé číslo.

Nejlepší je ukázat si vše na příkladu.

package main

import "fmt"

func main() {
	var x int = 12
	var y int = 7
	var a string = "12"
	var b string = "7"
	var yes bool = true
	var no bool = false

	fmt.Println(x, y, x + y)
	fmt.Println(a, b, a + b)
	fmt.Println(yes, no)
}

Výsledek

12 7 19
12 7 127
true false

Při vytváření (deklaraci) proměnných se nejdříve uvede klíčové slovo var (jako variable), následně pak název proměnné a nakonec její datový typ. Rovnítkem se proměnné přiřadí hodnota.

Vytváříme dvě proměnné typu celé číslo (x, y), dvě proměnné typu textový řetězec (a, b) a dvě proměnné typu pravda nepravda (yes, no). Všimněte si, že pokud použime operátor pro sčítání (+) na čísla, provede se matematická operace sčítání (12 + 7 = 19) a pokud stejný operátor použijeme na textové řetězce, dojde k jejich spojení („12“ + „7“ = „127“). Funkce Println zobrazí všechny argumenty (hodnoty), které dostane.

Úkol
Vytvořte program, ve kterém budete mít několik proměnných typu int (celé číslo) a proveďte s nimi operace sčítání (+), odčítání (-), násobení (*) a dělení (/). Pozor na to, že int je celé číslo. Pokud budete dělit dvě celá čísla např. 7 děleno 3, tak výsledek bude 2 (a ne 2,3333333).

Možné řešení

package main

import "fmt"

func main() {
	var x int = 16
	var y int = 8

	fmt.Println(x + y)
	fmt.Println(x - y)
	fmt.Println(x * y)
	fmt.Println(x / y)
}

Spring – Java konfigurační soubor a konfigurace anotacemi

Spring má dva hlavní způsoby konfigurace (XML a Javu), ale tři hlavní přístupy ke konfiguraci a každý z těchto přístupů má několik názvů.

  • Konfigurace využívající XML (XML based configuration)
    • XML konfigurační soubor a XML konfigurace (XML config and XML-driven/based configuration)
    • XML konfigurační soubor a konfigurace anotacemi (XML config and annotation-driven/based configuration)
  • Konfigurace využívající Javu
    • Java konfigurační soubor a konfigurace anotacemi (Java config and annotation-driven/based configuration | Java based configuration | JavaConfig)

Java konfigurační soubor a konfigurace anotacemi
V tomto příspěvku se podíváme na Java konfigurační soubor a konfigurace anotacemi. V tomto případě se používá pro konfiguraci Java třída a anotace (@Autowired, @Service, …).

Naše jednoduchá aplikace bude mít dvě rozhraní MessageService a SecurityService. Rozhraní MessageService bude mít metodu String getMessage() a SecurityService String encode(String text). Funkčnost aplikace je tato: nejdříve získá řetězec (metoda getMessage()) a ten potom zašifruje (metoda encode()). Vlastní způsob šifrování, implementovaný v SecurityServiceImpl, bude triviální. Všechny písmena e v textu změníme za € a všechna písmena s za §.

Číst dálSpring – Java konfigurační soubor a konfigurace anotacemi

Hadoop, getmerge a .crc soubor

Příkaz getmerge (hdfs dfs -getmerge zdrojovy-adresar cilovy-soubor) v Hadoopu vezme všechny soubory v zadaném adresáři, sloučí je do jednoho lokálního souboru. Tento příkaz je podobný příkazu get (hdfs dfs -get zdrojovy-soubor cilovy-soubor) který provede kopii jednoho souboru. Na rozdíl od get, ale vytvoří skrytý soubor .nazev-ciloveho-souboru.crc. Soubor .crc obsahuje kontrolní součet.

Na toto chování upozorňuje issue ticket HADOOP-12643. Na tomto ticketu mě zaujalo, že vznikl 15. prosince 2015 18:23, komentář k němu přibyl ten samý den o dvě minuty později a pak nic. Tento ticket je stále ve stavu OPEN (aktuálně tedy více než dva roky).

hadoop-getmerge.crc-secret-file

Nastavení velikosti teminálového okna v Ubuntu

Pokud otevíráte terminál v Ubuntu, otevře se ve standardní velikosti 80 sloupců 24 řádků. To není moc a pokud s terminálem pracujete, často si jej musíte zvětšit. Výchozí velikosti s můžete změnit takto. Otevřete si terminál a zvětšete jej na maximum (jinak se vám v horní liště nezobrazí volby) -> Upravit -> Předvolby profilu -> nastavit velikost tak, jak vám vyhovuje.

ubuntu-nastaveni-velikosti-terminalu

ubuntu-nastaveni-velikosti-terminalu_2

Spring – XML konfigurační soubor a konfigurace anotacemi

Spring má dva hlavní způsoby konfigurace (XML a Javu), ale tři hlavní přístupy ke konfiguraci a každý z těchto přístupů má několik názvů.

  • Konfigurace využívající XML (XML based configuration)
    • XML konfigurační soubor a XML konfigurace (XML config and XML-driven/based configuration)
    • XML konfigurační soubor a konfigurace anotacemi (XML config and annotation-driven/based configuration)
  • Konfigurace využívající Javu
    • Java konfigurační soubor a konfigurace anotacemi (Java config and annotation-driven/based configuration | Java based configuration | JavaConfig)

XML konfigurační soubor a konfigurace anotacemi
V tomto příspěvku se podíváme na XML konfigurační soubor a konfigurace anotacemi. V tomto případě se používá pro konfiguraci XML soubor, ale pro injektování (vytvoření instance a dosazení do požadované proměnné) se používají anotace (@Autowired, @Service, …).

Naše jednoduchá aplikace bude mít dvě rozhraní MessageService a SecurityService. Rozhraní MessageService bude mít metodu String getMessage() a SecurityService String encode(String text). Funkčnost aplikace je tato: nejdříve získá řetězec (metoda getMessage()) a ten potom zašifruje (metoda encode()). Vlastní způsob šifrování, implementovaný v SecurityServiceImpl, bude triviální. Všechny písmena e v textu změníme za € a všechna písmena s za §.

Číst dálSpring – XML konfigurační soubor a konfigurace anotacemi

Generování názvů kontejnerů v Dockeru

Když vytvoříte nový kontejner v dockeru pomocí docker run a nezadáte parametr --name, docker vytvoří kontejner a pojmenuje ho podle sebe. Vznikají tak zajímavé názvy jako: dazzling_swanson, loving_shockley, wonderful_curran či suspicious_knuth. Jedná se o jména vědců + přídavné jméno. Například Shockley se odkazuje na William Shockley co-invented the transistor – https://en.wikipedia.org/wiki/William_Shockley, Curran na Samuel Curran was an Irish physicist who worked alongside his wife during WWII and invented the proximity fuse čí Knuth na Donald Knuth – American computer scientist, author of „The Art of Computer Programming“ and creator of the TeX typesetting system. https://en.wikipedia.org/wiki/Donald_Knuth.

Nikdy ale kontejner nebude pojmenován boring_wozniak. Proč? Protože Steve Wozniak is not boring:

if name == "boring_wozniak" /* Steve Wozniak is not boring */ {
	goto begin
}

Zde je celý kód metody generující názvy:

func GetRandomName(retry int) string {
begin:
	name := fmt.Sprintf("%s_%s", left[rand.Intn(len(left))], right[rand.Intn(len(right))])
	if name == "boring_wozniak" /* Steve Wozniak is not boring */ {
		goto begin
	}

	if retry > 0 {
		name = fmt.Sprintf("%s%d", name, rand.Intn(10))
	}
	return name
}

Zdroj: frightanic.com/…-default-container-names/

Nastavení JAVA_HOME v Ubuntu

Proměnnou JAVA_HOME nastavíme tak, že si otevřeme soubor /etc/environment a do něj vložíme záznam:

JAVA_HOME="/usr/lib/jvm/java-8-oracle"

Soubor environment znovu načteme:

source /etc/environment

To, že naše proměnná je funkční můžeme otestovat výpisem do konzole:

echo $JAVA_HOME
/usr/lib/jvm/java-8-oracle

Zdroj: askubuntu.com/…/how-to-set-java-home-for-java

Začínáme programovat v Go: 5. díl – spojování řetězců

V tomto díle si ukážeme, jak spojovat textové řetězce dohromady. Textové řetězce můžeme spojovat pomocí operátoru + (plus).

var name string = "John"
var surname string = "Smith"

fmt.Println(name + " " + surname")

Tato část kódu by na obrazovku vytiskla John Smith. Došlo by ke spojení tří textových řetězců a to „John“, “ “ a „Smith“ a zobrazení výsledného spojeného řetězce na konzoli. Mezera je textový retězec o délce (počtu znaků) jedna.

Zde je jiný příklad. Jen připomínám, že hodnota ve dvojitých uvozovkách je textový řetězec, i když obsahuje číslice.

package main

import "fmt"

func main() {
	var a string = "111"
	var b string = "222"
	var c string = a

	var whole string = a + b + c

	fmt.Println(whole)
}

Výsledek

111222111

Jak jste si mohli všimnout, můžeme vytvářet proměnné i tak, že jim přiřadíme jako hodnotu jinou proměnnou (v našem případě proměnná c má stejnou hodnotu jako a). V příkladu byla vytvořena proměnná whole, která obsahovala hodnotu spojení tří textových řetězců a to 111 222 a 111.

Úkol
Vytvořte program, který bude mít alespoň tři textové proměnné a ty spojte do jedné věty.

Možné řešení

package main

import "fmt"

func main() {
	var first string = "Toto"
	var second string = "je"
	var third string = "možné"
	var fourth string = "řešení"
	var fifth string = "úkolu"
	var space string = " "

	fmt.Println(first + space + second + space + third + space + fourth + space + fifth)
}

Instalace Java 8 na Ubuntu

Nejdříve je nutné přidat repozitář do souboru /etc/apt/sources.list příkazem add-apt-repository:

vitfo@vitfo-VirtualBox:/etc/opt/hbase-1.2.6$ sudo add-apt-repository ppa:webupd8team/java
[sudo] password for vitfo: 
 Oracle Java (JDK) Installer (automatically downloads and installs Oracle JDK7 / JDK8 / JDK9). There are no actual Java files in this PPA.

Important -> Why Oracle Java 7 And 6 Installers No Longer Work: http://www.webupd8.org/2017/06/why-oracle-java-7-and-6-installers-no.html

Ubuntu 16.10 Yakkety Yak is no longer supported by Canonical (and thus, Launchpad and this PPA). The PPA supports Ubuntu 17.10, 17.04, 16.04, 14.04 and 12.04.

More info (and Ubuntu installation instructions):
- for Oracle Java 7: http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html
- for Oracle Java 8: http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html

Debian installation instructions:
- Oracle Java 7: http://www.webupd8.org/2012/06/how-to-install-oracle-java-7-in-debian.html
- Oracle Java 8: http://www.webupd8.org/2014/03/how-to-install-oracle-java-8-in-debian.html

Oracle Java 9 (for both Ubuntu and Debian): http://www.webupd8.org/2015/02/install-oracle-java-9-in-ubuntu-linux.html

Oracle JDK 9 is now considered stable. There are currently only 64bit builds (no other builds are available for download: http://www.oracle.com/technetwork/java/javase/downloads/index.html )
 More info: https://launchpad.net/~webupd8team/+archive/ubuntu/java
Press [ENTER] to continue or ctrl-c to cancel adding it

gpg: keyring `/tmp/tmpcs1we49p/secring.gpg' created
gpg: keyring `/tmp/tmpcs1we49p/pubring.gpg' created
gpg: requesting key EEA14886 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpcs1we49p/trustdb.gpg: trustdb created
gpg: key EEA14886: public key "Launchpad VLC" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK

Aktualizovat (update) informace o balíčcích příkazem apt update:

Číst dálInstalace Java 8 na Ubuntu

Nefunkční debugování v STS

Pokud jste si nainstalovali STS (Spring Tool Suite) a zkoušíte marně debugovat, tak na vině bude pravděpodobně výchozí zapnutí „Skip All Breakpoints“, které ignoruje všechny breakpointy. Pokud je ikona breakpointu na řádku přeškrtnuta, máte právě toto nastavení aktivní. Vypnout se dá v perspektivě Debug, když v horním řádku záložky Breakpoints odznačíte ikonu Skip All Breakpoints.

sts-skip-all-breakpoints