Offpunk byl vydán ve verzi 3.0. Jedná se o webový prohlížeč běžící v terminálu a podporující také protokoly Gemini, Gopher a RSS. Přibyl nástroj xkcdpunk pro zobrazení XKCD v terminálu.
Promethee je projekt, který implementuje UEFI (Unified Extensible Firmware Interface) bindingy pro JavaScript. Z bootovacího média načítá a spouští soubor 'script.js', který může používat UEFI služby. Cílem je vytvořit zavaděč, který lze přizpůsobit pomocí HTML/CSS/JS. Repozitář se zdrojovými kódy je na Codebergu.
Zpráva Justičního výboru Sněmovny reprezentantů upozorňuje na cenzurní kampaň Evropské komise, mířenou proti svobodě projevu na sociálních sítích. V dokumentu se uvádí, že se Evropská komise během posledních šesti let účastnila více než 100 uzavřených jednání, během nichž po platformách požadovala úpravy pravidel moderování obsahu, přičemž toto úsilí Komise zahrnovalo i cenzuru politických názorů a pravdivých informací. Výbor zdůrazňuje, že tento přístup Bruselu ohrožuje ústavou zaručená práva Američanů na svobodu projevu.
Linus Torvalds vydal jádro Linux 6.19. Podrobný výčet změn je ke zhlédnutí na stránce Kernel Newbies, stručné výběry v LWN (část první, druhá).
Do prodeje jde tichá bezdrátová herní myš Logitech PRO X2 SUPERSTRIKE s analogovými spínači s haptickou odezvou (HITS, Haptic Inductive Trigger System). Cena je 4 459 Kč.
Microsoft na GitHubu zveřejnil zdrojový kód projektu LiteBox, jedná se o 'knihovní operační systém' (library OS) zaměřený na bezpečnost, využívající systémovou architekturu LVBS k ochraně jádra před útoky z uživatelského prostoru. LiteBox je napsán v Rustu a uvolněný pod licencí MIT. Projekt je teprve v rané fázi vývoje.
BreezyBox je open-source shell a virtuální terminál pro populární jednočip ESP32. Nabízí základní unixové příkazy, sledování aktuálního pracovního adresáře (CWD), jednoduchý instalátor a spouštěč aplikací v podobě ELF binárních souborů, zabudovaný HTTP server nebo třeba ovládání WiFi - ukázka použití coby 'malého osobního počítače'. Ačkoliv je BreezyBox inspirovaný BusyBoxem, oproti němu má tento projekt několik externích závislostí, zejména na ESP-IDF SDK. BreezyBox je dostupný pod licencí MIT.
Byl představen cross-assembler xa.sh, napsaný čistě v Bourne shell skriptu. Tento nástroj umožňuje zpracovávat assemblerový kód pro Intel 8080, přičemž je možné snadno přidat podporu i pro další architektury, například 6502 a 6809. Skript využívá pouze různé běžné unixové příkazy jako jsou awk, sed nebo printf. Skript si lze stáhnout z GitHubového repozitáře projektu.
Byla představena nová verze modelu Claude Opus 4.6 od společnosti Anthropic. Jako demonstraci možností Anthropic využil 16 agentů Claude Opus 4.6 k vytvoření kompilátoru jazyka C, napsaného v programovacím jazyce Rust. Claude pracoval téměř autonomně, projekt trval zhruba dva týdny a náklady činily přibližně 20 000 dolarů. Výsledkem je fungující kompilátor o 100 000 řádcích kódu, jehož zdrojový kód je volně dostupný na GitHubu pod licencí Creative Commons.
Kultovní britský seriál The IT Crowd (Ajťáci) oslavil dvacáté výročí svého prvního vysílání. Sitcom o dvou sociálně nemotorných pracovnících a jejich nadřízené zaujal diváky svým humorem a ikonickými hláškami. Seriál, který debutoval v roce 2006, si i po dvou dekádách udržuje silnou fanouškovskou základnu a pravidelně se objevuje v seznamech nejlepších komedií své doby. Nedávné zatčení autora seriálu Grahama Linehana za hatecrime však vyvolává otázku, jestli by tento sitcom v současné Velké Británii vůbec vznikl.
Po dlouhé době jsem si zkusil napsat nějakou prkotinu v dc pro kterou jsem potřeboval formátovat výstup. Prostředky dc jsou v tomto směru skutečně omezené. No skoro by se dalo napsat prakticky žádné. Prostě nic. Všechno si člověk musí napsat sám. Naštěstí v tomto případě toho nebylo moc.
mysql: ERROR 1005 (HY000) at line 21: Can't create table './dbname/tablename' (errno: 150)
Informativní chybová hláška, že? Z toho je na první pohled jasné, v čem je chyba. No přece ...
O víkendu jsem si vzal do vlaku na čtení Algoritmy, Datové struktury a programovací techniky od Computer Pressu. Ta kniha je plná chyb, popisky v textu nesouhlasí s obrázky, na mnoha místech nesmyslně přeložená a spousta dalších podobných nepříjemností. Část z toho vzniklo zjevně při překladu, ale dost hodně je také věcí velmi mizerné redakce. To je ale u Computer Pressu celkem obvyklé, skoro by se dalo říct, norma. Nicméně mě to přimělo si některé příklady zkusit vyřešit jen tak cvičně.
V diskusi pod článkem o lua na rootu je odkaz na jeden benchmark skriptovacích jazyků. Řekněme si na rovinu, že zvolená úloha je pro skriptovací jazyky zcela nevhodná. Nicméně mě zajímalo jak na tom bude erlnag, pro který je taková úloha snad ještě nevhodnější. Výsledkem jsem byl docela překvapen. HiPe verze erlangu se překvapivě dostala s relative speed 14.75 mezi Java 1.4.2 a Io 20070410 Vector a bez HiPe s relative speed 47.5 mezi Lua 5.1 a ocaml bytecode 3.09.2. To rozhodně není špatné.
To si jednou takhle brouzdám po CPANu a hledám binding do Erlangu a pak mě napadne kouknout se kolem. Kromě toho, že jsou tam k nalezení moduly k telekomunikačním výpočtům Erlang B a C, které vymyslel ten člověk po němž dostal Erlang jméno (jo to je ten chlápek jehož obrázek se objeví na začátku a na konci toho Monthy Pythoního filměčku Erlang The Movie), tak je tam k nalezení i takový srandovní modul jménem fp.
Jedna z výtek na adresu erlangu, co jsem zaznamenal, je nemožnost napsat rekurzivní funkci přímo v shellu. Přitom je to spíše příznak nedostatku informovanosti. Přiznám se bez mučení, že jsem to taky ze začátku nevěděl, protože k tomu je potřeba devilish ingenuity (slovy Joe Armstronga na straně 57). Ve výše odkazované disertační práci je jako ukázka výpočet faktoriálu.
Když zdrojový kód zkrátíte a zároveň vám vzroste rychlost exekuce, tak si můžete být skoro jistí, že už do toho pomalu pronikáte. Prohlížel jsem si takhle nějaký kód v erlangu a viděl jsem tam takovou hezkou vychytávku (stejná myšlenka je použita níže ve funkci mapper/2 a collector/2), kdy dotyčný procházel pomocí lists:foldl list a zároveň z něho vytvářel slovník (dict). No a pak mě napadlo jestli bych taky nemohl přepsat stavový algoritmus z mého prvního erlangového modulu na rekurzivní, ale se schopností foldl/foldr funkce a pak ostatní funkce jako map a perms přepsat se stejným trikem. Zároveň mi vrtalo hlavou jestli se to náhodou nezrychlí a byl jsem dost překvený, nárust výkonu byl více než dvojnásobný a kódu dost podstatně ubylo (dostal jsem se na 1,1 us což je ani ne 2x víc než v C napsaný Alghoritm-Permute pro perl!).
Ve funkcionálních jazycích se spousta (většina?) algorimů zapisuje jako rekurze. Nejinak je tomu i u erlangu. Jenže rekurze je pro normální dnešní CPU fuj a tak se to řeší (a nejen ve funkcionálních jazycích) tzv. tail rekurzí. Prakticky jde o nahrazení rekurze cyklem a nealokuje se kvůli tomu další paměť na zásobníku, ale různé jazyky se s tím umí vyrovnat různě.
Nedávno jsem narazil na úžasný nový (pro mě), průmyslově ověřený funkcionální jazyk. Jmenuje se Erlang. Jeho vlastnosti mě přiměly říct wow! Posuďte sami. Za pozornost stojí například distributed (no on je to taky tak trochu komplet OS co se dokáže tvářit, že jede jako by jeden homogenní OS na heterogenním HW) a Hot code upgrade (viz example 14), nebo "Mnesia is a nice example of the power of Erlang: in how many languages could you write a fully-featured industrial-strength distributed DBMS in less than 20,000 lines of code?"
Při ladění jednoho kusu kódu jsem narazil na další perlovou nechutnost. Vyzkoušejte sami:
perl -le 'sub a {@{$_[0]}}; sub b {a($_[0]), a($_[1])}; print scalar b([1,2], [3,4,5])'Jaký by jste čekali výsledek? Já jsem čekal 5 a ono 3. Skoro bych to považoval za bug. Proč 5? Protože perl -le 'sub a {@{$_[0]}}; sub b {a($_[0]), a($_[1])}; print scalar(@c=b([1,2], [3,4,5]))'
Většinou prograuju v Perlu, ale zároveň po očku sleduju Python. Můj pocit z něj se vyvýjí v takových vlnách, chvilku se mi líbí hodně, chvilku méně a tak pořád dokola. Některé věci se mi v něm líbí, ale poslední dobou je pocit spíše rozpačitý. Jeho syntaxe je, jak bych to jen řekl, příliš košatá. Ony se dělají vtípky na to, že Perlový zdroják je před komprimací k nerozeznání od stavu po komprimaci. Hloupej vtípek, ale syntaxe Perlu je vlastně strašně jednoduchá až primitivní, to se ale o Pythonu nedá říct ani omylem. Už jen těch klíčových slov! I když ke klíčovým slovům Perlu přihodím všechny ty podivné znaky se speciálním významem, tak to nebudu ani na desetině syntaktických prvků Pythonu. Jo, já vím, Lisp je Lisp, ale Perl má taky něco do sebe. (No a radši nebudu ani zmiňovat dc, že) A proč to všechno píšu?
Tak jsem uvnitř podmínky grepu potřeboval vyhodnotit nějakou složitější věc a měl jsem možnost napsat to jako annonymní sub a nebo do. Položil jsem si otázku co bude rychlejší?
Dnes to bude jen taková drobnost. Implementace basename a ověření platného jména proměné.
Občas by člověk potřeboval něco naprogramovat v BASHi a nepamatuje si, nedělá to často a tak. No a k tomu by se mu hodily nějaké tu základní konstrukce vytesané do webu.
Další z řady šíleností. Eratosthenovo síto v dc. Rychlost nic moc, ale padlé na hlavu je to dost.
dc -e '?dSavSb[SadLa+d1r:cdla>e]se[dlexsz]sd1[1+d;c0=ddlb>f]dsfx[p]sdlaSb1lfx'
Updated:
Trošku rychlejší verze inspired by Yeti.
dc -e '?dSavSb[d1r:cSadLa+dla!<e]se[ddSa2*Lad*lexszsz]sd3[d;c0=d2+dlb!<f]dsfx[p]sdlaSb2p3lfx'
Pokud někdo vyžaduje výsledek na jednom řádku tak koncovou část [p]sdlaSb2p3lfx je možné nahradit [[,]Pdn]sdlaSb2n3lfx10P
P.S.: Jsem si vědom, že zbytečně plýtvám pamětí (nad 100000 je to prakticky nepoužitelné), ale myslím, že by to hodně zpomalilo dělat nějaké přepočty indexů (nahrazením d1r:c za d2/1r:c a d;c za d2/;c se spotřeba paměti zmenší na polovinu, ale taky bohužel rychlost) a hlavně jsem línej to předělat ;-) .
Tak jsem se mrknul co dovede dc. Fakt užitečná hračička. Tak třeba jak udělat program pro nalezení největšího společného dělitele. Brnkačka:
dc -e '[r]sb[szpq]sc[sadlarla>b~d0=cldx]sd??ldx'No já vím, že jsem cvok, ale tahle věcička se mi fakt líbí.
tac v sedu sed 'x;1!H;$!d;x'už není tak c00l, už vím co chci mít v podpisu teď.
Updated: Takže to mám blbě a až budu mít čas tak to zkusím přepsat.
Updated2: Po obědě se makat nechce, tak konečně fungující verze.
dc -e '[rSadLar%d0<a]sa??laxsap'A to s použitím jediného registru. Pro ty co vyžadují GUI tu mám vylepšenou verzi :-)
dc -e '[rSadLar%d0<a]sa[a=]P?[b=]P?laxsa[result:]Pp'
Updated3: Zkrácení o jeden znak a ochrana před poškozením od uživatele.
dc -e '??[rSadLar%d0<a]dsaxsap' dc -e '[a=]P?[b=]P?[rSadLar%d0<a]dsaxsa[result:]Pp'
Updated4: Nějak nemám den nebo co. Ještě kratší verze.
dc -e '??[dSarLa%d0<a]dsaxsap' dc -e '[a=]P?[b=]P?[dSarLa%d0<a]dsaxsa[result:]Pp'
Updated5: A ještě jeden znak.
dc -e '??[dSarLa%d0<a]dsax+p' dc -e '[a=]P?[b=]P?[dSarLa%d0<a]dsax+[result:]Pp'
Nemaje klasického informatického vzdělání byl jsem toho ve škole ušetřen. O čem mluvím? Všechny ty algoritmy pro třídění a tak. No a pak to člověk potřebuje a neví. Když už to zjistí, tak si to chce vytesat do kamene. Ehm do webu. Tak taky rozšířím zbytečně duplicitní stránky, na kterých je taková, nebo onaká implementace quicksortu. Až to zas někdy budu potřebovat a jestli bude abíčko ještě existovat, tak to třeba tady najdu.
Nemám rád lidi, co se přímo rozplývají nad FF nebo Mozillou. Mám u nich pocit, že jsou přinejmenším zaslepení. Přemíra ,,chytrosti`` některých progremů je totiž na pováženou. Krom nedomyšleností, které jsem už párkrát uvedl jinde, jsem narazil na jednu, kterám mě ,,pobavila``. Kdo máte rádi FF a Mozillu raději nečtěte dále, protože se vašemu miláčkovi dostane vybraných slov.
Tak jsem zase potřeboval něco naprogramovat. Člověk by si řekl, když nevím jak na to v bashi, použij něco silnějšího, třeba perl. Ale to bych nebyl já, kdybych to aspoň nezkusil. Takže máme nějaký textový soubor s daty z měření a v něm za komentářem jsou popisky jednotlivých sloupečků. Kdyby to byla jen jedna série s jedněmi popisky, tak je to naprosto jednoduché, ale těch sérií je víc a jak na potvoru každá má jiné popisky. No a já z toho chci vytvořit příkaz pro gnuplot s tím, že si uživatel může vybrat kterou sérii a který sloupeček chce zobrazit. To vyžaduje mít možnost načíst jednotlivé popisky do proměných a pak se přes indexy k nim dostat při zpracování parametrů na příkazovém řádku.
Občas je potřeba udělat ve scriptu zpracování parametrů a když už, tak pořádně. Nejdřív jsem to dělal všechno přes bash a jeho expanze a dokázal jsem si udělat prakticky cokoli, co jsem si usmyslel, ale bylo to trošku nepřehledné a pracné. A pak jsem objevil getopt (getopts v bashi je taková hračka, která mě teda rozhodně neuspokojila).
V článku jsem se dočetl o zajímavé knížce a nejen já. Kolega ji dokonce pořídil do firmy. Tak jsem si v ní zalistoval. Narazil jsem na dobrej příklad kdy nepoužít sed. Je to hned první příklad použití editoru sed 3.4.1 Vyhledávání souborů v adresářích v PATH.