Bash a magie uvozovek

Bash nemá datové typy, nebo spíše má, ale jen jeden a tím je textový řetězec. Čeho má ale nadbytek, je uvozovek a apostrofů. Nejlepší bude příklad

p=whoami
echo $p
echo '$p'
echo "$p"
echo `$p`

Výsledek

whoami
$p
whoami
vitfo

Příkazem p=whoami vytvoříme proměnnou s hodnotou whoami. Následně se ji pokoušíme vypsat. K hodnotě proměnné se přistupuje pomocí znaku dolar a názvu proměnné ($p). Při obrácených apostrofech Basch chápe řetězec jako příkaz (výsledkem je vitfo). V případě jednoduchých uvozovek je text chápán doslovně a je v něm zamezeno nahrazování proměnných jejich hodnotou (u dvojitých uvozovek se proměnná nahradí hodnotou) což ilustruje další příklad:

w=World
echo "Hello $w!"
echo 'Hello $w!'

Výsledek

Hello World!
Hello $w!

A ještě jedna drobnost. Pokud chceme vytvořit proměnnou obsahující delší text, musíme použít dvojité závorky.

sentence=Toto je věta.
echo $sentence
./script.sh: řádek 12: je: příkaz nenalezen

sentence="Toto je věta."
echo $sentence 
Toto je věta.

Zdroj: www.root.cz/clanky/programovani-v-bash-shellu/

Začínáme programovat v Go: 2. díl – popis programu

V úvodním příspěvku o programování v jazyce Go jsme si ve složce go\src vytvořili pracovní složku (workspace) s názvem workspace. Doporučovaný způsob je, vytvořit si workspace a adresářovou strukturu, která bude jedinečná. Ideálním způsobem je za název workpace použít doménové jméno (pokud takové vlastníte). Pokud ne, stačí unikátní název. V %USERPROFILE%\go (na Windows v C:\Users\YourName\go) si vytvoříme složku src (tu už máme) a v ní adresářovou strukturu např. vitfo.cz\hello (ze začátku vám bude stačit i původní název workspace).

V minulém příspěvku jsme instalaci Go otestovali vytvořením souboru hello.go a jeho spuštěním. Nyní si kód tohoto souboru vysvětlíme.

package main

import "fmt"

func main() {
	fmt.Printf("Hello world")
}

package

package main

První řádek v programu určuje balíček (package), ve kterém se program nachází. Tento příkaz je povinný. Program (běh programu) začíná v balíčku main. Pokud má být program spustitelný, je třeba, aby měl alespoň jeden soubor s package main. Program hello má jediný soubor, a protože ho chceme spouštět, obsahuje řádek package main.

import

import "fmt"

Řádka s import říká, že se má načíst (importovat) balíček s názvem fmt (fmt je zkratka pro format). Tento balíček obsahuje funkce a pokud je chceme použít, musíme balíček nejdříve naimportovat. Jinak řečeno, pokud program potřebuje něco, co už je někde vytvořeno, importuje si balíček, ve kterém se daná funkcionalita nachází, pomocí klíčového slova import.

funkce main

func main() {
	...
}

Řádek s func main() vytváří funkci s názvem main, což je vstupní bod programu (vstupním bodem programu je soubor s package main, který obsahuje funkci main, která je to první, co se z programu zavolá). Klíčové slovo func se používá pro definování funkce.

importované fukce

fmt.Printf("Hello world")

Příkaz fmt.Prinln() znamená, že z importovaného balíčku fmt se volá funkce Println(). Funkce Println má jeden parametr. Hodnota, která se funkci předá (argument), se vytiskne. Všimněte si velkého písmene v názvu funkce. To znamená, že tato funkce je přístupná (dá se použít) i jinde, než v souboru, kde byla vytvořena. Pokud by v balíčku fmt byla funkce println() nemohli bychom ji použít.

Zaokrouhlování v Javě pomocí BigDecimal

Pro práci s desetinnými čísly je vhodné místo double (více zde) používat BigDecimal. BigDecimal je možné nastavit scale (počet desetinných míst) a roundingMode (způsob zaokrouhlení). V příkladu je uvedeno jen několik způsobů zaokrouhlení. BigDecimal jich je možno nastavit více.

double number = 1.5555;
BigDecimal x = new BigDecimal(String.valueOf(number));
BigDecimal y = new BigDecimal(String.valueOf(number));
BigDecimal z = new BigDecimal(String.valueOf(number));

System.out.println("HALF_UP");
System.out.println(x.setScale(3, RoundingMode.HALF_UP));
System.out.println(y.setScale(2, RoundingMode.HALF_UP));
System.out.println(z.setScale(1, RoundingMode.HALF_UP));

System.out.println("HALF_DOWN");
System.out.println(x.setScale(3, RoundingMode.HALF_DOWN));
System.out.println(y.setScale(2, RoundingMode.HALF_DOWN));
System.out.println(z.setScale(1, RoundingMode.HALF_DOWN));

System.out.println("FLOOR");
System.out.println(x.setScale(3, RoundingMode.FLOOR));
System.out.println(y.setScale(2, RoundingMode.FLOOR));
System.out.println(z.setScale(1, RoundingMode.FLOOR));

System.out.println("CEILING");
System.out.println(x.setScale(3, RoundingMode.CEILING));
System.out.println(y.setScale(2, RoundingMode.CEILING));
System.out.println(z.setScale(1, RoundingMode.CEILING));

Výsledek:

HALF_UP
1.556
1.56
1.6

HALF_DOWN
1.555
1.56
1.6

FLOOR
1.555
1.55
1.5

CEILING
1.556
1.56
1.6

Jak naučit dítě počítat: 5 – 6 let

Tento příspěvek je o osobních zkušenostech s výukou počítání malého dítětě. Zde najdete předchozí příspěvky na toto téma („Jak naučit dítě počítat“, a „Jak naučit dítě počítat: 4 – 5 let“).

Hlavní předpoklady
1. Musí vás to bavit
2. Platí podmínka číslo 1
Pokud to baví vás, bude to s velkou pravděpodobností bavit i dítě.

Tady jsou cvičení, která jsme s prckem dělali, když byl v období 5 až 6 let. S obdobnými úkoly jsme pokračovali až do jeho nástupu do školy (kde ho matematika baví a kde ještě s jedním žáčkem dostává od paní učitelky náročnější úkoly než zbytek třídy).

Nakreslení počtu tvarů dle číslice

jak_naucit_pocitat_5-6_07

Propojení počtu a číslice

Číst dálJak naučit dítě počítat: 5 – 6 let

PostgreSQL nemůže po updatu na Windows nastartovat

Databáze PostgreSQL, která mi běží lokálně se zničeho nic zastavila. Zkusil jsem ji tedy nastartovat. Pro start jsem použil tento příkaz:

pg_ctl -D "C:\Program Files\PostgreSQL\9.4\data" start

PostgreSQL sice nenastartoval, ale výpis mě trochu nasměroval, i když mě překvapilo, že by konfigurační soubor postgresql.conf měl obsahovat chyby. V poslední době jsem v něm nic neměnil.

C:\Program Files\PostgreSQL\9.4\bin>2017-12-16 18:42:03 CET LOG:  invalid value for parameter "lc_monetary": "Czech_Czech Republic.1250"
2017-12-16 18:42:03 CET LOG:  invalid value for parameter "lc_numeric": "Czech_Czech Republic.1250"
2017-12-16 18:42:03 CET LOG:  invalid value for parameter "lc_time": "Czech_Czech Republic.1250"
2017-12-16 18:42:03 CET FATAL:  configuration file "C:/Program Files/PostgreSQL/9.4/data/postgresql.conf" contains errors

Chvíle googlení a odpověď je na světě. Microsoft ve svém updatu změnil locale pro Českou republiku. Zde je řešení problému: dba.stackexchange.com/…/postgresql-9-5-wont-start-after-windows-10-fall-update

Když jsem pak spustil:

pg_ctl -D "C:\Program Files\PostgreSQL\9.4\data" start

databáze fungovala. Bohužel byla spuštěna pouze, když běžel cmd. Po jeho vypnutí byla opět nedostupná. Bylo tedy třeba ve Správci úloh najít process postgresql-x64-9.4 a ten spustit.

Získání náhodného čísla v Bashi

Náhodné číslo v Bashi získáme voláním interní funkce bashe $RANDOM (pozor, nejedná se o proměnnou, ale o funkci). Tato funkce vrací pseudonáhodné číslo v rozsahu 0 až 32767.

echo $RANDOM

nebo

randomNumber=$RANDOM
echo $randomNumber

Vygenerování náhodného čísla v rozsahu 1 – 10 provedeme pomocí operátoru modulo (zbytek po dělení)

echo $(( ($RANDOM % 10) + 1 ))

Začínáme programovat v Go: 1 díl – instalace a první program

Go je programovací jazyk vytvořený společností Google. Jako jeho autoři jsou uváděni Robert Griesemer, Rob Pike a Ken Thompson a jako datum vzniku rok 2009. Jedná se kompilovaný a typovaný (používá datové typy) jazyk.

Instalace (pro Windows)
Stránka pro stažení zde. Kliknout na instalátor pro Microsoft Windows (koncovka .msi). Spustit stažený soubor.

Ověření instalace
Vytvořte si adresář go\src\hello (mkdir go\src\hello) v C:\Users\vaše_uživatelké_jméno. V adresári hello si vytvořte soubor hello.go. Do něj napište následující text.

package main

import "fmt"

func main() {
	fmt.Printf("Hello world")
}

Soubor uložte a v příkazovém řádku spusťte příkaz go build (v C:\Users\vaše_uživatelké_jméno\go\workspace\src\hello).
Pokud si nyní vypíšete obsah složky hello, zjistíte, že zde přibyl soubor hello.exe. Jedná se o spustitelný soubor, který byl vytvořen přízem build. Tento soubor spusťe. V příkazovém řádku to znamená, že napíšete jeho jméno (ať již bez přípony .exe nebo s ní – fungují oba způsoby).

c:\Go\workspace\src\hello>hello.exe
Hello world
c:\Go\workspace\src\hello>hello
Hello world

Pokud se vám zobrazil text „Hello world“, go instalace je funkční. Příkaz go clean smaže spustitelný soubor z adresáře. Kód si můžete vyzkoušel i bez buildu. Stačí zadat go run nazev_programu.

Zaokrouhlování v Javě pomocí knihovny Math

Knihovna Math nabízí pro zaokrouhlování tyto funkce:

  • round: vrací celé číslo (long), očekávané zaokrouhlení (od 5 nahoru)
  • rint: vrací desetinné číslo (double), podobné jakou round, ale ne vždy
  • floor: vrací desetinné číslo (double), zaokrouhluje směrem dolů
  • ceil: vrací desetinné číslo (double), zaokrouhluje směrem nahoru
double a = 1.4;
double b = 1.5;
double c = 1.6;
double na = -1.4;
double nb = -1.5;
double nc = -1.6;

System.out.println("round");
System.out.println(Math.round(a));
System.out.println(Math.round(b));
System.out.println(Math.round(c));
System.out.println(Math.round(na));
System.out.println(Math.round(nb));
System.out.println(Math.round(nc));

System.out.println("floor");
System.out.println(Math.floor(a));
System.out.println(Math.floor(b));
System.out.println(Math.floor(c));
System.out.println(Math.floor(na));
System.out.println(Math.floor(nb));
System.out.println(Math.floor(nc));

System.out.println("ceil");
System.out.println(Math.ceil(a));
System.out.println(Math.ceil(b));
System.out.println(Math.ceil(c));
System.out.println(Math.ceil(na));
System.out.println(Math.ceil(nb));
System.out.println(Math.ceil(nc));

Výsledek:

round
1
2
2
-1
-1
-2

floor
1.0
1.0
1.0
-2.0
-2.0
-2.0

ceil
2.0
2.0
2.0
-1.0
-1.0
-1.0