23. 12. 2021

Ředitelská

Nikdy jsem nic
neuměl,
všichni se mi
smáli.
Teď se na ně
na všechny
dívám z výšky,
z dáli.

Teď jsem já pan
ředitel
a oni jsou
nuly.
Já si kouřím
doutníky,
oni Startky
hulí.

Teď jsem já pan
ředitel,
ne jak jiní
mnozí.
Já si řídím
bavorák,
je škodovka
vozí.

Nikdy jsem nic
neuměl,
co však na tom
sejde?
Teď jsem já pan
ředitel,
táhni z cesty,
šmejde!

Manažerská

Na zlatém
podnose
nese se
kančí,
na horní
palubě
čile se
tančí.

Do lodi
zatéká,
posádka
jančí,
na horní
palubě
pořád se
tančí.

Moc pozdě
nastalo
vystřízli-
vění.
A horní
paluba…
už dávno
není.

1. 6. 2021

Quine–McCluskey & Wolfram language

Potřebujeme minimalizovat logickou funkci, která pro hodnoty 1, 2, 3, 4, 5, 6 a 10 vrací 1, pro 11 a 14 může vracet cokoliv, a pro zbývající hodnoty vrací nulu. K výpočtu minimální logické funkce se používá Quine–McCluskey algorithm. Ve Wolfram language ho zavoláme následujícím způsobem:

BooleanMinimize[BooleanFunction[Reverse[{0,1,1,1,1,1,1,0,0,0,1,_,0,0,_,0}]]][a,b,c,d]

Dostaneme:

(!a && b && !d) || (!a && !c && d) || (!b && c)

Pomocí BooleanFunction si vytvoříme logickou funkci, které předložíme seznam očekávaných hodnot. Pozor, funkce očekává hodnoty v obráceném pořadí, proto musíme použít Reverse. Pomocí BooleanMinimize pak vypočítáme minimalizaci logické funkce. Výrazem [a,b,c,d] do obecné logické funkce dosadíme konkrétní jména proměnných.

25. 4. 2021

Jak nainstalovat, nakonfigurovat a používat Poetry

Poetry je správce softwarových projektů napsaných v jazyce Python. Chová se velmi podobně jako Cargo, což je správce projektů v jazyce Rust.

Poetry nainstalujeme na Windows následujícím příkazem:

(Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python -

V případě konfliktů mezi různými verzemi Pythonu je možné závěrečný příkaz python nahradit absolutní cestou k souboru python.exe.

Nakonfigurujeme Poetry tak, aby se virtuální prostředí vytvářelo vždycky v aktuálním projektu:

poetry config virtualenvs.in-project true

Poetry máme nainstalováno a nakonfigurováno a můžeme ho začít používat.

Založíme nový projekt:

poetry new PROJNAME

Skočíme do vytvořeného adresáře:

cd PROJNAME

Přidáme projektové závislosti:

poetry add PKG1 PKG2 PKG3

Přidáme vývojové závislosti:

poetry add -D PKG4 PKG5 PKG6

Potřebné informace jsou uloženy v souboru pyproject.toml. Ten můžeme vložit repozitáře jako součást projektu. Na jiném počítači pak z tohoto souboru vytvoříme potřebné prostředí příkazem:

poetry install

V takovém prostředí můžeme spouštět libovolné příkazy takto:

poetry run ANYCOMMANDYOULIKE

7. 2. 2021

Aktivace lokálního prostředí nodejs v PowerShellu

Příkaz npm init vytvoří soubor package.json s nastavením projektu. Příkaz npm install nainstaluje závislosti projektu do adresáře node_modules. Spustitelné programy jsou uloženy v adresáři node_modules\.bin. Bohužel přímé spouštění těchto programů s cestou (např. node_modules\.bin\sass) nefunguje správně. Je potřeba toto lokální prostředí „aktivovat“, tj. zařídit, aby se cesta node_modules\.bin dostala do systémové proměnné PATH. Jednou z možností, jak to zařídit, je příkaz PowerShellu:

$Env:Path += ";$(npm bin)"

Po jeho vykonání můžeme spouštět programy nainstalované pomocí npm install bez cesty a všechno funguje správně.

6. 2. 2021

Výměna HD za SSD

Jak převést obsah starého pomalého a odcházejícího disku na nový rychlý SSD tak, aby zůstala zachována instalace Windows a všech programů a licencí?

Z USB flash disku zavedeme a bez instalace spustíme Ubuntu Desktop, takže můžeme využívat plný sortiment linuxových nástrojů. Který z nich ale vybrat?

Můžeme kopírovat celé disky stejným způsobem, jako kopírujeme soubory (sudo /dev/sda /dev/sdb), ale při prvním čtení prvního vadného sektoru ze zdrojového disku příkaz selže a není možné ho donutit k pokračování. Nebo je možné použít příkaz blokového kopírování (sudo dd if=/dev/sda of=/dev/sdb), který umožňuje ignorovat vadné bloky, ale zase je otázkou, jakou nastavit velikost kopírovaných bloků. Příliš malá velikost (např. 512 B) povede k dlouhé době kopírování, příliš velká velikost povede k přeskakování takto velkých bloků i v případě, že je v nich vadný byť jen jediný sektor.

Naštěstí existuje příkaz ddrescue. Tento příkaz se nejprve pokusí kopírovat celý obsah pomocí velkých bloků. Pokud kopírování některého bloku selže, jeho pozice se zapamatuje, ale kopírování běží dál až do konce. V dalším kole dochází ke kopírování problematických bloků po menších a menších částech, až se nakonec kopírují jednotlivé sektory. Tímto způsobem je program schopen fungovat rychle a efektivně, ale zároveň nedojde ke zbytečným ztrátám dat.

Použitá varianta příkazu

ddrescue -f -r3 /dev/sda /dev/sdb mapfile

správně zkopírovala celý obsah HD na SSD až na jediný vadný sektor.

13. 10. 2018

Fedora na Raspberry Pi – rozšíření souborového systému

Pokud chceme na Raspberry Pi 3B+ nainstalovat linuxovou distribuci Fedora, je dobré se řídit příslušným návodem. V případě, že použijeme manuální postup přenosu instalačního obrazu na SD kartu, nedojde po nastartování systému k automatickému rozšíření souborového systému na celou velikost SD karty a toto rozšíření musíme zajistit sami. Na výše uvedené stránce je uveden takovýto postup:
# enlarge the 3rd partition (this example uses mmcblk0)
growpart /dev/mmcblk0 3
# grow the volume to take up the rest of the disk
resize2fs /dev/mmcblk0p4
# extend the root filesystem to take up the space
# just added to the volume that it is in
lvextend -l 100%FREE /dev/mapper/fedora-root
# resize root partition for the server image (which uses xfs)
xfs_growfs -d /
Příkaz growpart nefunguje a musíme ho nahradit příkazem sfdisk, do kterého je nutno ručně zadat ", +" (tj. čárka, mezera, plus, bez uvozovek), jak je popsáno v článku Resize by sfdisk. Příkaz resize2fs také negunguje a musíme ho nahradit příkazem pvresize. Výsledná posloupnost příkazů je pak:
sudo sfdisk -N 3 /dev/mmcblk0 --force
sudo pvresize /dev/mmcblk0p3
sudo lvextend -l 100%VG /dev/mapper/fedora-root
sudo xfs_growfs -d /
Tento postup skončí úspěšně.