Root oprávnění v docker kontejneru

Docker nabízí příkaz exec, který spustí zadaný příkaz v běžícím kontejneru. Pokud tedy máme kontejner s názvem postgres, který obsahuje PostgreSQL databázi, pak příkazem docker exec -it postgres psql -U postgres spustíme v kontejneru postgres příkaz psql s paramatrem -U (uživatelské jméno) postgres. Tím se přihlásíme k databázi běžící v kontejneru.

Někdy můžeme chtít v kontejneru vykonávat nějakou činnost (např. vytvářet složky), k čemuž ale občas potřebujeme root oprávnění. Takto se vytvoříme složku realms v kontejneru s názvem keycloak. Do kontejneru se přihlásíme jako root: docker exec -u 0 keycloak bash -c "mkdir realms"

MongoDB shell

Shell pro MongoDB se nazývá mongosh. Dříve se používala shell mongo, která byla odstraněna ve verzi MongoDB 6.0. Pokud se pokusíte zavolat mongo a dostanete chybu bash: mongo: command not found, mongo shell již na vašem systému není k dispozici. Pokud máte běžíci docker kontejner mongo, dovnitř kontejneru se dostanete pomocí docker exec -it mongo bash. K databázi se pak připojíte příkazem mongosh -u username -p password. Zobrazí se vám verze mongosh i mongo databáze.

Using MongoDB:		6.0.2
Using Mongosh:		1.6.0

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

Shell můžete ukončit několika způsoby:
Napište .exit, exit, nebo exit().
Napište quit nebo quit().
Stiskněte Ctrl + D.
Stiskněte dvakrát Ctrl + C.

Mongo quickstart

Mongo databáze ukládá záznamy jako dokumenty (documents), což je obdoba záznamů (řádků) v klasické SQL databázi. Dokumenty jsou v tak zvaných kolekcích (collections), což je obdoba tabulek v klasické SQL databázi. Databáze tedy obsahuje jednu nebo více kolekcí, které obsahují dokumenty. Sloupec (column) v SQL databázi zhruba odpovídá poli (field) v Mongu. Velmi hezky zpracované porovnání příkazů a názvosloví mezi Mongem a SQL je zde.

Číst dálMongo quickstart

Spuštění bashe v docker kontejneru

Docker nabízí příkaz exec, který spustí zadaný příkaz v běžícím kontejneru. V tomto příspěvku jsem si vytvořil kontejner s databází PostgreSQL a k databázi jsem se připojil z lokálního počítače pomocí nástroje psql. Pokud chci v tomto kontejneru spustit bash v pseudoterminálu, použiji tento příkaz:

docker exec -it my-postgres bash

-i, --interactive: interaktivní vstup
-t, --tty: spustí pseudo terminál

Zdroj: stackoverflow.com/…/how-do-i-get-into-a-docker-containers-shell

Scope funkce v Kotlinu

Cílem block functions je vykonat blok kódu v kontextu daného kódu. To znamená, že pokud zavoláte takovou funkci na objektu s lambdou, vytvoří se rozsah (scope), ve kterém můžete k objektu přistupovat bez uvedení jeho jména. Tyto funkce se mezi sebou liší tím, jak je možné k objektu v rámci scope přistoupit a jaký je výsledek celého výrazu.

Číst dálScope funkce v Kotlinu

Peníze vs měna

Měna je konkrétní peněžní jednotka určitého státu. Měnou České republiky je Česká koruna. Peníze jsou prostředek směny. To jest prostředek používaný při směně. Bavíme se zde o nepřímé směně. Přímá směna by byla přímá výměna zboží za jiný druh zboží (např. slepice za boty). Peníze vznikly jako produkt trhu, který zjednodušuje směnu a uchovává (měl by) hodnotu. Peníze můžeme rozdělit do několika skupin:

  • Komoditní peníze
  • Papírové peníze a mince
  • Kryptoměny
  • Fiatové peníze
  • Bankovní peníze
  • Účetní peníze

Číst dálPeníze vs měna

Kam až může vyrůst cena bitcoinu

Jednoduchá odpověď je, že to nikdo neví. Můžeme se ale podívat na jiné prostředky a jejich ocenění.

Zlato
Bitcoin je považován za digitální zlato. Podle odhadů bylo doposud vytěženo okolo 200 000 tun zlata a něco přes 50 000 tun ho obsahují potvrzená naleziště. Pokud budeme vycházet z ceny 1 800$ za trojskou unci, dostaneme se na částku cca 11,5 bilionu dolarů (200 000 tun -> 200 000 000 kg -> 6 400 000 000 oz) * 1 800 = cca 11 500 000 000 000$ [1,152×1013]) jako na hodnotu doposud vytěženého zlata (visualcapitalist.com/chart-how-much-gold-is-in-the-world, gold.org/about-gold/gold-supply/gold-mining/how-much-gold)

Číst dálKam až může vyrůst cena bitcoinu

Kotlin delegated properties

Properties jsou většinou představeny odpovídajícím polem ve třídě (např. val x: Int). Mohou ale být i delegovány. Jejich hodnota je získána od toho, na koho byla tato práce přenesena (delegována). Jinak řečeno getValue a setValue funce zajišťuje delegovaný kód. Delegované vlastnosti se používají deklarováním vlastnosti a delegáta, kterého používají.

Příklad 1

class Example {
    var property: Int by Delegate()
}

class Delegate {
    var random = Random(0)

    operator fun getValue(thisRef: Any?, property: KProperty<*>): Int {
        println("$javaClass - getting random value | thisRef -> $thisRef, property -> $property")
        return random.nextInt()
    }

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: Int) {
        println("$javaClass creating new random with seed value: $value | thisRef -> $thisRef, property -> $property")
        random = Random(value)
    }
}

fun main() {
    val e = Example()
    println(e.property)
    e.property = 10
    println(e.property)
}

Číst dálKotlin delegated properties