DŮLEŽITÉ UPOZORNĚNÍ!
Policie České republiky a šéfcensor Ústavu pro studium totalitních režimů Jaroslav Čvančara varují: citovat jakékoli texty z tohoto blogu způsobuje vážné nebezpečí trestního stíhání! Četba na vlastní nebezpečí!

14. 9. 2015

Thinking outside the box

Předpokládám, že úlohu, jež dala původ nadepsanému rčení, znáte: úkolem je spojit devět bodů uspořádaných do matice 3 x 3 souvislou čarou složenou z nejvýše čtyř úseček. Je řešitelná pouze tak, že úsečky leží mimo pravoúhelník vymezený danými body, ale najít řešení je pro většinu lidí obtížné, neboť intuitivně předpokládají, že úsečky musejí ležet pouze uvnitř pravoúhelníku – ačkoli zadání o tom ničeho nepravilo.

Stereotypy a automatismy v myšlení jsou zrádné, o čemž jsem se přesvědčil naposledy během uplynulého week-endu. Pojal jsem totiž úmysl, že pro svůj (na třetím blogu traktovaný) emulátor doplním emulaci mikroprocesoru Zilog Z80. To je, myslím, jediná elektronická součástka, kterou jsem v životě opravdu miloval, a i když jsem měl původně v úmyslu omezit se na tři emulované historické stroje – PMI-80, PMD 85 a IQ 151 – mít Z80 by mi umožnilo pojmout do emulátoru i počítač Ondra, který byl hardwarově velmi zdařilým dílem a jeho většímu rozšíření zabránila pouze pro praktické používání nevhodná, příliš ořezaná klávesnice.

Domníval jsem se, že maje naemulovaný Intel8080A, nezabere mi doplnit instrukce Z80 než jeden, nejvýš dva dny. Jenže celý jeden den a spoustu nervů mi zabralo hledání chyby, kterou jsem nemusel udělat, kdybych nebyl myslel – v krabici.

Posuďte sami. Pro emulátory používám instruction exerciser (více o něm zde), který jsem si rovněž přepsal do Javy, abych mohl rychleji najít chyby implementace jednotlivých instrukcí. Pro 8080 žádný problém, ale u Z80 jsem narazil na chybu, kterou jsem nemohl a nemohl najít. Až poté, co jsem si zprovoznil emulátor CP/M, v něm druhdy slavný debugger DDT, a propadaje střídavě amoku a stavům chorobné skleslosti, jsem na to, co je problémem, nakonec přišel. A protože je to problém věru bizarní, dělím se o něj se svými milými čtenáři i zde.

Když si prohlédneme zdrojový soubor Franka D. Cringla z r. 1994, vidíme, že jádrem exerciseru jsou test cases, jejichž dlouhá řada jest popsána v makrech na ř. 194–728. Povšimněme si parametrů těchto maker: vyjma triviálních hodnot 0 a –1 jsou všechny konstanty (literály) zapsány hexadecimálně.

Až na dvě výjimky, na ř. 277 a 285, kde se stkví neobvyklý zápis 010. Když jsem ho přepisoval do Javy, automaticky jsem napsal 0x08, domnívaje se, že Frank Cringle udělal chybu a mínil zapsat 0x10 a protože si neuvědomil, že assembler takto zapsanou konstantu vyhodnotí oktalově, vyšlo mu něco, co nechtěl, ale co je s ohledem na neměnnou hodnotu CRC nutno respektovat. Pro tuto hypothesu hovořilo i to, že je v závorce za voláním makra uvedeno (1024 cycles), což odpovídá počtu jedniček v řádku – tedy deseti.

Dlouhé hodiny jsem se pak vrtal ve svém kodu a pátral, co mám špatně, protože CRC ne a ne vyjít, jak mělo. Řešení bylo arci zcela triviální, ale tak outside the box, že mě stálo dobrých deset hodin času: Protože Cringle programoval v r. 1994 a assembloval v CP/M, předvěšená nula pro assembler neznamenala, že má konstantu interpretovat jako oktalovou: tehdejší softwarové nástroje to ještě nedělaly. Assembler proto vyhodnotil jeho zápis 010 jako 10 (dekadických); vedlejším důsledkem bylo, že ve skutečnosti se neprovádí 1024, nýbrž 2048 cyklů.

Jak se to celé stalo, bych mohli zjistit asi jen od Cringla, kdybychom mu napsali a pokud si to ještě pamatuje. Moje (upgradovaná) hypothesa zní, že původně měl 0x10, ale protože si uvědomil (nebo laděním zjistil), že by instrukce CPI/CPIR vyšla (o jeden byte) mimo rozsah testovacího pole, opravil hodnotu na deset, ale zapomněl smazat nulu a nenaznal, že se mu tím změnil i počet cyklů.

Já vím, chybami se člověk učí, jen by jich, pokud bych směl prosit, mohlo být o něco méně.

24. 8. 2015

Velká písmena

Tak nám prý opět zjednoduší pravopis. Odhlédna od toho, jak dopadlo několik posledních zjednodušení, obavami mne naplňuje zejména zápal, s nímž jazykoví teroristé sdružující se ve zločinné organisaci slovoucí Ústav pro jazyk český (Akademie věd ČR, v. v. i., přičemž k posledně uváděné zkratce bych uměl sestrojit mnoho věru přiléhavých interpretací) ke svému sociálně-inženýrskému úkolu přistupují.

Nikoli, že by arci nebylo co a proč zjednodušovat. Patalie s velkými písmeny vznikla v době kulminujícího národního poblouznění (aka obrození), kdy čeština ve snaze vzdálit se od němčiny, po vzoru ruštiny a polštiny, zvolila francouzský model psaní velkých písmen, leč neučinila tak dostatečně důsledně, zachovavši nesystémově kapitalisaci u (některých) jedinečných entit.

Vzdělaný Francouz tak nemá problém a nenapadne ho napsat cokoli jiného než gare de Nord nebo aéroport de Paris-Charles-de-Gaulle, ale také mont Blanc, neboť ví, že velká písmena se píší pouze na začátku vlastních jmen. Čechu jest tápat: jak připomenuto ve shora citovém článku, máme nádraží Praha-Smíchov, ale Letiště Praha-Ruzyně (pro Pravdu a Lásku: Letiště Václava Havla), přestože nádraží i letiště jsou entity nejedinečné nejen celosvětově, ale i v rámci této zdravým rozumem opuštěné země. Naopak u ulic a náměstí se čeština přidržuje francouzského vzoru a máme proto náměstí Míru nebo třídu 5. května. Výsledkem je takový chaos, že má-li vzdělaný Čech napsat, že podání učinil na Hlavní/hlavní poště, to si snad raději zřídí datovou schránku.

Rozumný systém kapitalisace má angličtina, kde se mi snad nikdy nestalo, abych musel nad velkým písmenem přemýšlet. Němčina s francouzštinou (a také např. ruština, která se francouzského vzoru drží konsistentně) jsou na tom jen o málo hůř, protože pravidla jsou jednoduchá a jasná a sporných případů minimum.

Odstrašujícím případem je naopak slovenština, která vyrazila cestou úplné chaotisace pravopisu a začala psát s velkými písmeny např. i zákony, např. Občianský zákonník. Cosi mi napovídá, že úsilím českých jazykoborců můžeme být v brzké době o něco východněji i my.

31. 7. 2015

Screencast

Po několikaměsíčním odložení k ledu jsem se opět pustil do svého retro emulátoru, o kterém jinak píši na svém třetím blogu, a ve snaze vyrobit screencast zjistil několik důležitých skutečností:

1. Po 15 letech nepoužívání se molitanový protivětrový návlek na mikrofon rozpadne na těžko odstranitelné, vlezlé částice.

2. Po 15 letech nepoužívání se i zaručeně neroztekutelná AAA baterie v mikrofonu rozteče, zvlášť není-li značková, ale původní nekvalitní, kterou k zařízení, ušetřivši tak několik promile jeho ceny, dodalo české zastoupení Sony.

3. Zvláštní odporou hmotu, která z baterie vytekla a krystalisovala, a kterou se z úcty ke svým čtenářům zdráhám pojmenovat chemickým názvoslovím, lze přesto částečně odškrabat, částečně rozpustit v isopropanolu, a cca po hodině práce je mikrofon opět plně funkční.

4. Když to uděláte, záhy zjistíte, že váš notebook má stejně společný jack pro mikrofon a sluchátka a konvertor nemáte, proto musíte použít vestavěné mikrofony, relativně kvalitní, ale přesto rušené větrákem.

5. Vyrobit screencast, u kterého by divák neusnul, není žádná legrace.

6. Generálský efekt se vždy dostaví; tentokrát vznikl někde mezi knihovnami OpenGL a driverem grafické karty v notebooku.

Výsledek je zde:

18. 7. 2015

A opět Java

Uplynulo půldruha roku od chvíle, co jsem se, tak trochu proti své vůli, začal učit Javu, a mám-li vyjádřit své rozpoložení lapidárně, rozpaky nepolevují, ba místy přecházejí do stavu tichého zoufalství. Stále mám pocit, že je to spíš náboženství než programovací jazyk, a zklámání se svou četností rozhodně vyrovnají příjemným překvapením.

30. 6. 2015

Poslední sbohem

Sony Vaio Pro 13
Muselo to přijít: po dvou letech cohabitation froide jsem se včera v pozdních večerních hodinách rozloučil s operačním systémem Windows 8, který mi jako své kukaččí vejce zanechal Microsoft na notebooku a který jsem nedobrovolně zaplatil v jeho ceně.

Stalo se to náhle. Nejprve se windowsy s rostoucí vehemencí dotazovaly, zda si přeji upgradovat na versi 8.1. Pokusil jsem se o to, avšak byl jsem upozorněn, že nejprve musím odřadit šifrovací nástroj BitLocker, do čehož se mi nechtělo, proto jsem upgrade odložil. Microsoft však byl neodbytný, a když jsem asi třikrát odpověděl, že si opravdu nepřeji tento upgrade provést (Windows jsou na můj vkus dost špatné už v osmičkách, tak k čemu upgrade?), pokusil se o něj sám, bez mého souhlasu a vědomí, zcela v duchu tradiční microsoftské filosofie, že uživatel je tím posledním, kdo by měl rozhodovat o tom, co se s jeho počítačem bude dít.

Upgrade se evidentně nezdařil – ovšemže, kvůli šifrování –, což mi systém s obvyklou vřelostí intimoval, avšak když jsem se poté pokusil znovu počítač spustit, BitLocker mne požádal o jakýsi zvláštní kod, odlišný od hesla, neboť se prý změnila konfigurace počítače (což je v chápání oné zlořečené korporace nejhorší zločin: považte, ten darebák si obměnil svůj počítač, a nám za to nic nezaplatil!). Což se přirozeně nestalo, ale v danou chvíli jsem měl Microsoftu právě dost a odmítl s jeho produktem další komunikaci. Číše mé nespokojenosti se naplnila a přetekla.

Protože jsem na počítači neměl žádná cenná a/nebo nezálohovaná data, bylo řešení jednoduché a přímočaré: na disk putovala Fedora 22. Byl bych tam Linux instaloval už v době, kdy byl stroj nový, avšak tehdejší Fedora neuměla v nativní konfiguraci pracovat s daným wi-fi, a nutnost problém řešit mne vedl k rozhodnutí nějakou dobu je na stroji, který mám hardwarově za skutečně zdařilý kousek (hmotnost 1,0 kg, výkon více než dostatečný), tolerovat. Tato doba však skončila.

Instalace byla blesková, a s potěšením jsem seznal, že wifi už jede sama od sebe, takže, budete-li mne potkávat usměvavého a spokojeného, obtížena pomenší šedou kabelou, důvodem bude právě dovršený shora popsaný rozchod.

16. 6. 2015

Kam s ním?

Ten problém patrně nemá dobré řešení. Když jsem před třemi lety dokončil webový program právnických výpočtů, řešil jsem ho prvně. Jde o to, jakým způsobem vložit zdrojový soubor do souboru PDF, v případě právnických výpočtů tedy příkladmo do přehledu o vývoji peněžité pohledávky.

Problém je to velice praktický, protože vyplníte-li webový formulář spoustou dat, potřebujete mít možnost nějak si tato data uložit, abyste v případě změny nemuseli vyplňovat vše znovu. K tomu se hodí soubor XML, který aplikace umí ukládat i načítat (zde), avšak přemýšlel jsem, zda by nebylo praktičtější data uložit přímo do souboru PDF.

První, naivní přístup, bylo vytvoření PDF streamu, který, pokud není filtrovaný, způsobí, že XML parser dokáže soubor PDF zpracovat, jako by to byl soubor XML. Tak to fungovalo k mé plné spokojenosti více než rok, než se vyskytl jeden soubor, u kterého parsování selhalo – nevím, zda vinou novější verse některé knihovny nebo nahodilého datového obsahu.

V další iteraci jsem se rozhodl uložit data do položky /Metadata, která má tu výhodu, že na ni vede odkaz z katalogu a lze ji proto vždy najít a extrahovat. Tak to fungovalo cca další dva roky. Než jsem se rozhodl uplatnit tentýž postup i pro jiné soubory vytvářené z TeXu. Tam sice zdroják vždy ukládám, ale může se stát, že ho v mezidobí změním a chtěl bych mít možnost podívat se, z jakého přesně kodu byl ten-který PDF výstup generován.

Když jsem takový soubor opatřil elektronickým podpisem (což přirozeně nedělám v produktu Adobe, ale vlastní utilitou v Javě), ukázalo se, že javová knihovna při ukládání metadat – s XML obalem a v sekci CDATA – tato vymaže a nahradí vlastním obsahem. Důvodem je, že pro metadata by se měl používat formát XMP a moje data v něm nejsou.

Nyní jsem měl na vybranou z různých možností. Rozumným by se jevilo přizpůsobit se XMP a obalit zdroják do některé vlastnosti. Jenže jsou zdrojové soubory podání skutečně metadata? To je poměrně hluboká filosofická otázka, na niž jsem si po několika dnech kontemplace odpověděl záporně. To také znamená, že bych neměl data do položky metadat ukládat vůbec (problém s podepisováním jsem technicky dokázal překonat a knihovnu donutit metadata ponechat, byť za cenu dvojího subclassování a nutnosti použít reflexi, neboť použít vlastní methodu pro zápis metadat knihovna zakazuje).

Další možností bylo připojit soubor jako řádný /EmbeddedFile. Tím se všechny předchozí problémy odstraňují, avšak tato příloha se stává veřejnou a mohlo by se stát, že ji na podatelně např. u soudu vytisknou a přiloží k podání. To nechci. Proto jsem se rozhodl vrátit ke kořenům a ponechat zdrojová data v obyčejném streamu, jen jsem ho připojil jako zvláštní odkaz do katalogu.

Norma PDF je v tomto smyslu nepříliš velkorysá, dovoluje sice do katalogu, resp. do každého slovníku, přidávat libovolné položky, ale jejich PDF název musí být registrován; podobná omezení platí i pro pole /Type a /Subtype. Myšlenka registrace arci zůstala na papíře, Adobe žádné názvy nezaregistrovala, tudíž by zbývala volně používaná jména s prefixem XX.

To mi přišlo mého softwaru nedůstojné, proto jsem místo toho sáhl po logických popisných klíčích /Source a /Data, a těmi své PDF soubory vybavil. Uvidíme, zda toto řešení konečně vydrží, případně zda čtenáři přijdou s nějakým jiným nápadem.

13. 5. 2015

Čepice

Maturity jsou letos velkým thematem. O tom, že by člověk na prahu dospělosti (maturitatis) měl vědět o existenci postavy Jidáše Iškariotského, nehodlám polemisovat, leč zaujala mne jiná úloha, jíž examinantům uloženo vypočítat spotřebu papíru na čepici, jež má tvar rotačního kužele a středový řez tvaru rovnostranného trojúhelníka o straně zvící 16 cm. Nemíním teď řešit otázku, že takto zadaná úloha dosti nelogicky předpokládá, že papírová čepice měla dno, ale to, že od studenta se očekává, že si pamatuje vzoreček pro výpočet plochy rotačního kužele, kterýž aplikuje a vyjde mu správný výsledek.

Vzorečku již desítky let neznám a musel bych se medle prohlásit za kanonicky nezpůsobilého maturitní otázku řádně, tedy dle něj, vyřešit. Což samozřejmě neznamená, že bych odpověď nedokázal podat. Plochu pláště bych si rozdělil na nekonečný počet trojúhelníků o základně dx a výšce L (tzn. 16 cm), a protože každý z nich má obsah 1/2 L dx, vyšlo by mi pro plochu pláště 1/2 L π L = 1/2 π L2, k tomu plocha základny π (L/2)2, celkem nějakých 3/4 π L2 = 192 π cm2. Anebo bych si plášť v duchu rozvinul a řekl si, že celý kruh by měl obsah π L2, ale my z něj máme pouze 2 π (L/2) lomeno 2 π L, tedy polovinu, plocha pláště je tedy 1/2 π L2, no a dál je to stejné.

Mozek by se ani v jednom případě zvláště nenamohl, ba spíše ani nezahřál, avšak neuměje vzoreček, asi bych neprošel. Protože podstatou vzdělání, aspoň toho českého, postkomunistického, není dokázat řešit problémy, ale biflovat, nabiflované odříkat a zapomenout. Což je ostatně velmi patrno i na mnoha z těch, kteří s úspěchem prošli školstvím vysokým.

4. 2. 2015

Upomínka

Upomínka je, když… V normálním světě, tedy, je upomínka písemné nebo ústní upozornění na neuhrazený závazek po splatnosti. Což arci nestačí Pražské plynárenské, která mi dnes poslala upomínku předběžnou, pomocí SMS a v tomto znění:
F:upominky@ppas.cz S:Avizo pred splatnosti-Vazeny zakazniku, pripominame, ze splatnost vyuctovani za odber zemniho plynu ve vysi 16 740,00 Kc se blizi. Uhradte prosim pod VS 1737509851 na ucet uvedeny na fakture. Na tuto zpravu, prosim, neodpovidejte. Dekujeme. Vase Prazska plynarenska, a.s.
Věru dojemná péče o zákazníka: náklady minimální a spolehlivé naštvání klientely garantováno.

22. 1. 2015

Svéráz národního podnikání

Street View. Užitečná služba Google, doplněná o možnost virtuálně se projít interierem obchodu, restaurace, kina nebo divadla apod. V této službě jsou i zvláštní místa, kupř. urychlovač v CERNu u Ženevy, Demänovská ľadová jaskyňa na Slovensku nebo vnitřní prostory Airbusu A-380. I Česká republika má v tomto směru svou zvláštnost, kterou jsem doposud nikde jinde nezaregistroval. Komora, kde jsou uloženy korunovační klenoty? Jeviště Národního divadla? Někdejší Gottwaldovo mausoleum? Kryt, kde byly uskladněny ruské jaderné zbraně? Ach nikoli: bordel. Nevěříte-li, přesvědčte se sami. Netypické, ale jaksi – authenticky národní a upřímné.