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ě.

8. 4. 2018

Linux na emulovaném procesoru ARM64

Mějme linuxovou distribuci Fedora 27 nainstalovanou na 64bitovém procesoru Intel nebo AMD. Pomocí emulátoru QEMU můžeme vytvořit virtuálním počítač s emulovaným 64bitovým procesorem ARM, na kterém běží linuxová distribuce Fedora 27. Nejprve si na hostitelském počítači nainstalujme potřebné softwarové balíčky.
sudo dnf install edk2-aarch64 libguestfs-tools-c qemu-system-aarch64
Poté spusťme vytvoření a instalaci virtuálního počítače.
sudo virt-install \
      --name Fedora_27_AArch64 \
      --ram 2048 \
      --arch aarch64 \
      --disk size=8 \
      --os-variant fedora22 \
      --location https://dl.fedoraproject.org/pub/fedora-secondary/releases/27/Everything/aarch64/os/ \
      --extra-args "inst.ks=https://pwhalen.fedorapeople.org/kickstarts/Fedora-Minimal-AArch64.ks"
Poslední parametr zapíná KickStart, tj. použití předchystaných odpovědí pro instalační program, aby je člověk nemusel zadávat ručně a instalace proběhla automaticky. Výše uvedená konfigurace vytváří administrátorský účet „root“ s heslem „fedora“. Existenci nainstalovaného virtuálního počítače můžeme zkontrolovat příkazem virsh.
virsh --connect qemu:///system list --all
Stejným příkazem můžeme virtuální počítač následně ovládat. Z hostitelského počítače se do virtuálního počítače můžeme připojit příkazem ssh. Virtuální počítač vzhledem k softwarové emulaci není příliš rychlý, ale běží v něm standardní distribuce Fedora 27 a všechno funguje běžným a známým způsobem.

20. 1. 2018

Vzestupná

Déšť dopadal
zespoda mi
na tělo,
to když v létě
z ničeho nic
vzpršelo.

Sníh obarvil
nohavice
na bílo,
to když v zimě
překvapivě
vzsněžilo.