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ál

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ál

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ál

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ál

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ál