Friday, 28 July 2023
Právě dnes uběhne 121 let od narození sira Karla Raimunda Poppera.
Právě dnes uběhne 121 let od narození sira Karla Raimunda Poppera.
Člověka, který měl na mě větší vliv než kdokoli jiný v mém životě a proti kterému jsou i živí lidé jen stíny z podsvětí. A na jeho památku vyvrátíme některé nesmysly, které se o jeho učení šíří.:)
Dole byste měli vidět screenshot příspěvku, který jsem chtěl použít jako zadání „napište, v čem text Popera dezintepretuje“.
Už jsem tady kdysi popisoval dezinterpretace principu „intolerence vůči intoleratním“. A tady máme další nádherný příklad zaštiťování se autoritou, i když autor komentáře Popperovo dílo nezná, nebo se s ním seznámil v příručce typu „jak věrohodně předstírat na večírku znalosti o evropské filosofii“. Nebudu vás ale trápit a tvrzení nekompatibilní s Popperovým učením odhalím sám.
(Zase jde o typ článku, který se před mnoha lety objevoval i na tomto blogu. Jestli vás tato témata zajímala, pokračuje prosím ve čtení článku.)
Friday, 28 July 2023 10:40:34 (Central Europe Standard Time, UTC+01:00)
Ostatní
Monday, 13 February 2023
Bajka o tom, jak je důležité uklízet bordel po unit/integračních/akceptačních testech
V memories na FB se mi objevil příspěvek, který potěší některé mé přátele, kteří si mysleli, že historka, kterou doprovázím striktní doporučení, proč musí všechny testy po sobě důkladně uklízet, je jen vymyšlená didaktická pomůcka a nikdy se v reálu nestala.
1) To si tak vyvinete virtuální GPS. GPS, která simuluje reálnou GPS, ale posílá pozici vypočtenou z pozice BTS stanic mobilních operátorů. Já vím, že dnes máte všichni lokalizaci mobilního telefonu přes BTS operátorů v Androidu i v iOS, ale nebývalo tomu tak. Určitě ne na Windows Mobile/CE.
2) Tuto virtuální GPS potřebujete otestovat. Testy by měly odpovědět na zásadní otázky typu "Ukradl jsem a dekódoval data z Googlu správně?" "Když BTS s pozicí v mé databázi není, načte se z Googlu, pokud ten ji už stačil ukrást jiným uživatelům, a zobrazí navigační program správně polohu"? Protože vaše žena je samodruhá a prochází se často na čerstvém vzduchu, instruujete ji, kudy se má procházet, aby nasbírala všechna potřebná data a negenerovala moc "false positives" testů.
Všechno dobré, domácí idyla trvá.
3) Asi po týdnu, kdy všechny mé testy úspěšně doběhly, jela Petra nakoupit do Prahy. Měla na svém telefonu zapnutou navigaci TomTom. Až do Prahy cesta probíhala normálně, jen bylo Petře divné, že někdy TT ukazoval, že jede mimo silnici.
4) To jsme se dověděl při telefonátu (asi) z Chodova, kdy mi zoufalá Petra říkala, že na Chodově se navigace zbláznila a ona neví, kde teď je. Prý pozice v TomTomu neustále lítá z jedné silnice na druhou, TT stále počítá trasu a dostal se do smyčky, kdy jediná instrukce, kterou pan Miloslav vydává, zní "až to bude možné, otočte se".
Chvíli jsem přemýšlel nad příčinou a došlo mi, že TT je stále připojen k virtuální GPS s aproximovanou polohou. A ve městě se nedivím, že neustále přepočítává jednu trasu za druhou.
5) Pointa je, že po dokončení všech testů musíte po sobě důkladně uklízet. Protože po telefonu instruovat uživatele, aby v registrech odstranil záznamy virtuální GPS a zadal původní hodnoty, je trest pro něj i pro vás a takovou situaci si zapamatujete, i kdybyste nechtěli. Petra sice předčasně neporodila, ale nebylo k tomu při ťukání stylusem na neznámém místě, kdy výsledek celé operace byl nejistý, a při vědomí, že její vestavěné biologické navigační schopnosti jsou horší a chaotičtější než navigace TT s virtuální GPS, daleko.
Automatizované unit/integrační/ akceptační testy, které běží v nějakém cloudu, sice nejsou tak nepříjemné, když zhavarují kvůli datům, které zanechal test nějakého vývojářského prasete před vámi, ale zkoumat, proč spadnul nějaký test, abyste zjistili, že jen proto, že někdo zapomněl odmazat nějaké soubory, klíče, nebo třeba certifikáty, není také žádná zábava. Nemůžete-li zlikvidovat celou instanci testovacího virtuálního stroje, ukliďte po sobě alespoň ručně veškerý bordel. Jinak má člověk, který přijde testovat po vás, chuť zlikvidovat úplně jinou nevirtuální hmotu a objednat si k tomu fyzické služby v nějaké agentuře ve zcela reálném světě.
Monday, 13 February 2023 08:36:56 (Central Europe Standard Time, UTC+01:00)
Thursday, 29 December 2022
Knihy s hodnocením 5* a 4* na mém Goodreads profilu (2022)
Je tu tradiční přehled knih, které mě v roce 2022 nejvíce zaujaly.
Opět připomínám, že v seznamu jsou knihy, které jsem přečetl v roce 2022, ale vydány mohly být v kterémkoli jiném roce.
Poslední tři roky ještě vyhlašuji "kniha - zklamání roku". Nejde tedy o absolutně nejhorší knihu, kterou jsem tento rok přečetl, ale o knihu, u které byl největší rozpor mezi tím, co jsem od knihy čekal a co jsem nakonec dostal.
Odkaz na celý článek.
Thursday, 29 December 2022 10:30:59 (Central Europe Standard Time, UTC+01:00)
Wednesday, 23 November 2022
Kniha o Pythonu pro začátečníky?
Pythonista, který čte knihy pro začátečníky a dokáže poznat, která je dobrá. Najde se tu někdo takový? Asi ne, ale přesto se zkusím zeptat.
Pro synka Míšu (13 let) bych chtěl doporučit nějakou pěknou knihu o Pythonu. Asi raději v češtině, čímž se výběr dost zužuje.
Kniha by měla nenásilně vysvětlit.
1) Základy programování v Pythonu.
2) Základní datové struktury a kdy je použít.
A jniha by měla fungovat jako základní referenční příručka, která je vždy po ruce. I Míša ví, že na webu je dost tutorialů, ale nějaká kniha s výkladem, kde zazní "proč", a ne jen "jak", by pro něj mohla být přínosná.
Míša se naučil v Pythonu "nějak" programovat a s pomocí knihovny PyGame napsal pár her. Létající objekty, raketky, autíčka.
Programuje dost živelně a rychle, což není na škodu, ale přišla doba, kdy:
1) Bylo by dobré, aby viděl i někde jinde, že není nejlepší pokaždé celý kód narvat do jedné funkce. Výkřik "Tak jsem něco napsal. Pojď se, taťko, podívat, jak jsem to zase naprasil." sice výborně utužuje naše vzájemné vztahy, ale z posledního proifovaného kódu mě už přece jen bolely oči. Příklady v knize by ale neměly působit uměle - refaktorizace už tak malé funkce do ještě menších funkcí jen kvůli tomu, že to tak autorovi přijde správné a nepoučený čtenář snese hodně.
2) Nějaký základní výklad datových struktur. Posledně Míša vytvořil piškvorky na ploše 3x3, ale jak jsem později zjistil, plocha 3x3 byla v malování vytvořený statický obrázek :), na který potom vykresloval kolečka/křížky, příznak, jaký čtverec je aktivní atd. Když jsem po něm chtěl, aby vykresloval "nekonečnou" plochu, nebo alespoň čtvercovou plochu o velikosti zadané uživatelem, dostali jsme se právě k tomu, proč je pro reprezentaci stavu tohoto typu hry vhodné (dvourozměrné) pole a proč se nedá vše v programu řešit konečným množstvím ifů, několika tucty špatně pojmenovaných proměnných a enumerací fixního počtu "vítězných" stavů.
3) Výklad by neměl svou suchopárností potlačovat právě tu radost z "prasení" kódu a objevování. Neměl by dogmaticky tvrdit, že se pokaždé programuje právě jen takto a nikdy jinak. Naopak, měl by ukazovat, že k výsledku vede mnoho cest a že programování je aktivita v otevřeném světě, kde jen úplní hlupáci postupují po vyznačených cestičkách a v ruce nesou bibli momentálně platných zásad, pravidel a konvencí, protože se bojí, aby je kolegové-inkvizitoři při code review nezačali křižovat, místo toho, aby dodali po všech stránkách originální, problém skutečně řešící a technicky brilantní řešení. Výklad by ale měl nenásilně sugerovat, že je dobré pravidla perfektně znát, než je začnu z důvodu vyššího projektového dobra porušovat. Výklad by neměl ukazovat OOP/FP na místech, kde OOP/FP ničemu neposlouží a jde jen o samoúčelné hrátky typu "júúú dekorátor a heč, znám i monády a chrstnu ti je do tváře v každé kapitole, i když jsem jejich princip sám nepochopil".
4) A kdyby v průběhu výkladu autor vytvářel nějakou hru, bylo by to ideální, ale to už bych chtěl asi moc.
5) Kniha musí být pro novější verzi Pythonu.
V Pythonu nedělám. V ČJ jsem našel jen dvě knihy, které vypadají zajímavě.
Pecinovský, Rudolf: Začínáme programovat v jazyku Python 2., přepracované a rozšířené vydání. Grada.
Nejsem úplně nadšený z toho, že jde o Pecinovského, který asi přesedlal z Javy, ale třeba mám jen (odůvodněné) předsudky.
Summerfield, Mark: Python 3: Výukový kurz. Computer Press 2021.
Bohužel jde o překlad a už jsem zase narazil na to, že tyhle překlady stále dělají individua, evidentně blbější než DeepL i Google Translate, která přeloží klíčová slova jazyka ve výpisech zdrojového kódu. A neotřelý český překlad, ve kterém se objevuje slovo "madlo" a znamená Win handle, mě ve snech straší pořád.
Nemáte někdo tip? Díky.
Wednesday, 23 November 2022 13:40:11 (Central Europe Standard Time, UTC+01:00)
Ostatní
Tuesday, 28 June 2022
Školení C++, C#, .NET, OOP je opět možné objednat
V animovaném gifu je ukázka z jednoho příkladu, který jsem ukazoval minulý týden.
Předpokládám, že se dá snadno poznat, čeho se příklad týká.
A dávám to sem, protože mám vyřízeny všechny resty, které se týkají inhouse kurzů objednaných v době covidové a přesunutých na lepší časy. Lepší časy sice kvůli válce na Ukrajině nepřišly, ale přesto jsem stihnul za poslední 4 měsíce dokončit více kurzů než za celé předchozí dva roky.
A proto i tady píšu, že jestli jste ode mě poslední rok obdrželi email "inhouse kurzy se prozatím objednat nedají a neřeknu vám přesný termín, kdy je zase bude možné objednat", tak už tato informace neplatí.
Příklad dole je napsán v C++ 20. A jestli jste se zaradovali, že v C++ 20 jsou coroutines, ale pak jste zjistili, že ve standardní knihovně si "co_awaitování" moc neužijete, ukážu vám svou knihovnu, kde jsou všechny typy potřebné pro psaní paralelizovaného a asynchronního kódu.
A jestli jste ještě třeba nepřešli z C++ 98 na C++ 11 (C++ 14, C++ 17) a potřebujete do nové spletité syntaktické džungle průvodce, který vám proseká cestu k jednoduššímu jazyku, který se za tím starým bordelem skrývá, můžeme se také domluvit.
Objednat se dají samozřejmě ale i kurzy, kde hlavní roli hraje C# a třeba .NET 6.
A pokud nechcete řešit nějaké triviality, které si může člověk, který není líný, přečíst a nastudovat v každém druhém tutorialu a přežvýkají vám je na každém školení, určitě se domluvíme.
Tuesday, 28 June 2022 16:49:57 (Central Europe Standard Time, UTC+01:00)
.NET Framework | C# | C++
Wednesday, 22 June 2022
Friday, 22 October 2021
Smart Home–tip na nějakou SM Gateway
Po nějaké době (psáno původně na FB, na blogu jsem ještě o smart home asi nepsal) zase něco ke "smart home" zařízením.
Neměl byste někdo vyzkoušenou nějakou smart home bránu, která:
1) Dokáže se připojit do WIFI sítě. Ale snesu i RJ45 konektor.
2) Mohou se k ní připojit bluetooth a bluetooth low energy (BLE) zařízení. A BLE má co největší dosah.
3) Podporuje ZigBee. Sice žádné ZigBee zařízení zatím nemám, ale to se asi brzy změní.
4) Podporuje zařízení od různých výrobců.
5) Nabízí nějaké rozumné API - je mi jedno, jestli půjde o REST API nebo o nějaké C/C++ SDK.
Můj původní záměr, že budu pořizovat zařízení jen od jednoho výrobce, vzal už dávno za své. Nedávno jsem si pořídil několik bluetooth teploměrů od XIAOMI (na AliExpressu jsou ještě levnější). Vím, XIAOMI byste doma nechtěli, ale nemusíte se bát, komunikaci teploměrů jsem prozkoumal fakt důkladně, doma nás nešpehují, nic důvěrného nikam neposílají a i když s gustem proklínáte (nejen čínské) komunisty, tak se žádné pekelné cenzorské moduly neaktivují. :) Tyhle teploměry za pár desetikorun (viz odkaz v komentářích) mají v sobě i bluetooth LE.
Sice se mi daří na Raspberry PI 4 odchytávat bluetooth komunikaci mezi dvěma patry (sleduju jen 'advertisements', nepřipojuju se k teploměru, abych nevybíjel baterii), ale spousta paketů se asi na cestě ztratí. Pakety jsou kryptované přes AES CCM, ale stačilo odchytit "bind key", přes který komunikuje aplikace od XIAOMI, podívat se, co XIAOMI aplikace dělá a klíč pro AES CCM byl na světě - pro fajnšmekry dodávám, že auth tag jsou 4 poslední bajty v paketu, AAD je poněkud lamerská fixní hodnota 0x11 a je třeba sestavit nonce.
Prototyp funguje dobře, nepotvrdilo se, že RPI 4 komunikuje s BT se zařízením do maximální vzdálenosti jednoho metru, ale stejně bych raději měl nějakou spolehlivější gateway.
A nějaká "relay" zařízení (ESP32) umístěná blízko teploměru, ve kterých odchytím BT pakety a přes LAN je přepošlu do své aplikace, bych bral jako poslední možnost. Máte někdo třeba XIAOMI BT gateway (3) a mohli byste napsat, jaký je jeji skutečný dosah přes BT?
Tady je vidět, že pakety chytám a můj BT sniffer na RPI 4 funguje.
Veškeré nápady, tipy, triky, zkušenosti jsou vítány. Díky.
Friday, 22 October 2021 11:27:14 (Central Europe Standard Time, UTC+01:00)
Monday, 04 October 2021
Tip na knihu: Crafting Interpreters od Roberta Nystroma
Kniha Crafting Interpreters od Roberta Nystroma, kterou jsem o víkendu dočetl, je dílem, které by se mohlo stát klasikou.
Pro koho kniha je? Chtěli jste někdy vytvořit svůj vlastní programovací jazyk, nebo mít jednoduchý "embedovaný" skriptovací jazyk v aplikaci ? Moc ambiciózní a vy jste spokojeni se stávajícími jazyky? Hráli jste si třeba s C# Roslyn SDK, nebo jste použili C# generators a zhrozili jste se, jak amatérsky a nevzhledně vypadá generátor kódu? Samozřejmě ne ten váš generátor, ale generátor kolegy? Tedy generátor zní pořád až příliš vznešeně, co jsem tak různě viděl, spíš spojování stringů na steroidech, u pokročilejších s využitím StringBuilderu?
V knize Crafting Intepreters Robert Nystrom navrhne jazyk Lox. Lox je taková mini-Java (mini-C#, prostě jazyk s C like syntaxí), ale i přes nehezké přízvisko mini, které jsem použil v předchozí větě, LOX podporuje i OOP nebo closures - funkce, které zachytí proměnné ve svém okolí.
V první části knihy autor nejprve napíše jednoduchý parser, lexer a interpreter Loxu v Javě.
V druhé a pro mě zajímavější části autor napíše pro LOX (stack based) virtuální stroj v jazyce C včetně jednoduchého, ale plně funkčního garbage collectoru (jednovláknový, nekonkurenční, "stop the world"). A vytvoříte všechny instrukce pro virtuální stroj včetně vlastního disassembleru. A když když máte VM v C, portování Loxu na další HW platformy je hračka.
Je poněkud tragické vidět vývojáře, kteří třeba intermediate language (IL) a VM v .NET považují za černé skříňky, kterým nemusejí vůbec rozumět. Do určité míry je to pravda, ale u každé netriviální aplikace potřebujete znát trochu více než syntaxi zvoleného programovacího jazyka a pár knihoven. A někdy ani nestačí, že jako firemní vývojářské eso rozpoznáte, kde je vyhledávací pole na StackOverflow, kam posléze vložíte své zoufalé a bezradné skřeky.
Na knize je skvělé, že obsahuje kompletní zdrojový kód. Ne útržky, ne odkazy na github. Veškerý výklad je prokládán kódem a je docela úleva číst knihu, ve které nejsou jen neoptimalizované fragmenty kódu, ale autor si dá práci, aby před vámi neskrýval žádné kroky, svůj kód před vámi vyladil a upozornil na typické chyby, kterých se dopustí asi každý, pokud píše třeba parser poprvé.
Zvláštní cenu autor dostává za to, že nepoužívá trapné věty typu "tuto funkci už psát nebudeme, ponecháme ji jako cvičení pro bystré čtenáře." Moudří vědí, že jako cvičení pro čtenáře se často nechávají úlohy, které autor knihy nezvládne. Tento otravný a trapný trik asi autoři knih převzali od přednášejících mdlého ducha, kteří mají času dost, ale stejně ve stanoveném čase nestihnou vykoktat penzum znalostí, které si sami čerstvě osvojili den před svou přednáškou na konferenci, a s chutí přehazují povinnosti na posluchače.
Také oceňuji, že kniha pro Kindle má všechny výpisy kódu čitelné. Pořád nejde o samozřejmost. Sami jste asi také narazili na odbornou eknihu, která byla formátována tak, že zdrojový kód nebo tabulky nebylo možné přečíst bez opičích chvatů (podržením prstu zvětším grafický objekt a skroluji tam a zpátky).
Za tuhle knihu si autor zaslouží zaplatit, ale kdybyste byli i po mé nadšené anotaci na vážkách, nebo máte zrovna hluboko do kapsy, kniha je na webu zdarma.
Monday, 04 October 2021 18:08:50 (Central Europe Standard Time, UTC+01:00)
Wednesday, 01 September 2021
Friday, 23 April 2021
Život (a blogposty o něm) jsou už jinde…
Jak asi sami víte a vidíte, tento blog je technicky zaostalá zombie a neměl jsem zatím čas ani chuť přenést příspěvky na moderní blog engine s https.
Nedávno se ke mně od jednoho starého fanouška donesla stížnost, že na blogu se objevovalo nejen více technických příspěvků, ale také články s jinými tématy.
Kdyby moje výplody “de profundis” a z ještě temnějších míst chyběly i někomu dalšímu, kdo sem ještě zabloudí, vězte, že:
Už někdy v roce 2010 jsem netechnické články přenesl na blogovací platformu Posterous. Psal jsem o Posterous API i tady, dokonce jsem si prozřetelně s využitím Posterous API napsal nástroj, který mi zazálohoval všechny příspěvky na Posterous blogu. Asi jsem měl nějaké tušení, jak nablýskaný Posterous dopadne. Posterous totiž po krátké a těžké nemoci zesnul, budiž mu digitální země lehká. Pokračovatelem mého blogu na Posterous se stal blog “Život po Posterous” (nemusím vysvětlovat proč) s podtitulem “Parerga a paralipomena – apage vemena” (nechci vysvělovat proč, laskavý čtenář pochopí).
https://renesteinposterous.wordpress.com/
RSS: https://renesteinposterous.wordpress.com/feed/
Na blog někdy přidávám delší příspěvky z FB.
https://www.facebook.com/renestein/
Twitter cca od roku 2015 nepoužívám. To, že v panelu vpravo na tomto blogu můžete vidět vloženou timeline z Twitteru, je jen důkaz, jak dlouho se mi už nechce tento blog po technické stránce upravovat. Mea culpa, mea maxima culpa, pravidelně si trhám šat a sypu popel na hlavu, ale co se dá dělat, ani tyhle bohulibé aktivity nepomáhají a jsou zajímavější činnosti než úklid bordelu na starém DasBlogu.
P. S. Jsem také na Goodreads.
https://www.goodreads.com/user/show/4224377-rene-stein
Friday, 23 April 2021 10:21:46 (Central Europe Standard Time, UTC+01:00)
Ostatní