Zápisník

// Dal jsem PARy

Už je to tak…

// Špatné načítání hardwarového času v Debian Lenny

Přibližně před více jak rokem jsem updatoval na notebooku na Debian Lenny (současný testing). Bylo to v době, když jsem programoval bakalářku. Kromě menších problémů s KDevelopem se vše povedlo, až na výjimku. Zřejmě kvůli nekompatibilitě mého Compaqu nx6310 se zdejším kernelem se mi začal načítat hardwarový čas při startu systému špatně. Z nějakého důvodu se interpretoval vždy jako UTC (namísto lokálního) a tím se pak ten lokální nastavil o hodinu (v létě o 2) dopředu. Což vadilo dost, protože když jsem čas ručně přeřídil během práce, projekt díky „budoucímu“ času nešel zkompilovat bez „cleanování“ a to zdržovalo. A čas jsem nechtěl nechávat špatně, zkuste si pracovat, když vidíte na hodinách 3:00 :-).

Nejprve jsem se to snažil vyřešit opravováním timezone souborů, parametrem UTC=no ve startovacích skriptech apod. Pak jsem to nechal odležet a nedávno se k tomu vrátil. Při ručním načítání času hwclock vrátil nějakou chybu s /dev/rtc. V man hwclock jsem našel jakýsi parametr, který používá starší způsob načítání. Tím parametrem je --directisa. Ve startovních skriptech /etc/init.d/hwclock.sh a /etc/init.d/hwclockfirst.sh je pro parametry vyhrazena definice proměnné HWCLOCKPARS na začátku souboru. Stačí tedy do ní přidat kýžený parametr, řádek bude vypadat například takto:

HWCLOCKPARS= --directisa

Od té doby načítání času funguje bez problémů. Jaká banalita :-).

// Zkoušky - achjo, už zase

Půlrok se s půlrokem sešel a mně už se zase půlí další studium. Tento semestr je v pořadí druhý z celkových 4 a je výjimečný hned několika věcmi.

Jednak už jsem si vybral zadání diplomové práce. Tím je implementace klient-server protokolu pro připojení k XML/OO native databázovému systému CellStore. Ten je implementován ve Smalltalku a zatím funguje jako standalone knihovna (zjednodušeně něco jako SQLite). Mým úkolem bude navrhnout komunikační protokol, implementovat serverovou část ve Smalltalku a klientskou část minimálně jako knihovnu v C. Mám na to přesně rok včetně odevzdání svázané práce, tak doufám, že se s tím nějak poperu. V tomto stavu se čeká na schválení zadání, nicméně to by mělo +/- zůstat stejné. Dále se po mně chce, aby práce byla napsána v angličtině, ale co víc, taky v LaTeXu. Naštěstí jsem od loňska k LaTeXu trochu přičichl, takže to bude asi nejmenší problém.

Druhým signifikantním znakem 2. semestru na magisterském navazujícím studiu Výpočetní technika je strašák jménem Paralelní systémy a algoritmy. Tento předmět je oblíbenou zkouškou dospělosti všech informatiků na FELu. 7 kreditů, dotace 3+3 a v porovnání s ostatními předměty nízká průchodnost snad hovoří za vše. Na přípravu jsem si vyhradil cca 8 dní 12 dní 10 dní (nakonec jsem si to přehodil, a ještě posunul matiku), tak dlouho jsem se na žádnou zkoušku nikdy nepřipravoval, a pochybuju, že to tak dlouho vydržím. Moje možná první srážka s neúspěchem se koná velmi pravděpodobně 12. 23. června. Nicméně, září to jistí … :-)

// Hokejový svátek

Přesně v 7 hodin večer našeho času započne 17 dní hokejového svátku. V kanadském Quebecu totiž nastoupí naše hokejové mužstvo k úvodnímu zápasu světového šampionátu v ledním hokeji. Letos se hokejová klání vrací do své severoamerické kolébky. Bohužel s tím spojený časový posun si občas vyžádá své, takže na zápas s Itálií si budeme muset počkat (nebo si přivstat) trochu déle, ten bude začínat v 1 hodinu v noci. Podle programu bude i jeden zápas od 2 ráno.

Edit 19.5. - No, dopadli jsme tak, jak jsme dopadli. Rozhodně jsme si v utkání se Švédy neutrhli ostudu.

// MiniMath - pozdě, ale přece

MiniMath jsem začal tvořit již někdy v roce 2006 jakožto semestrální práci na předmět Jazyky a překladače. Shodou okolností jsem tehdy měl i pokročilé C++, takže cvičící si k tomu přimyslel nějake požadavky, včetně GUI, a náplň vánočních prázdnin jsem měl jasnou.

Pozdě, ale přece?

Minimath ikonka

Program byl v podstatě hotov někdy ze začátku ledna 2007, nicméně teprve teď jsem se dostal k tomu, abych jej dostal do podoby, která se hodí k publikaci. Proč až teď? Přesnou odpověd neznám, ale zcela jistě v tom měly prsty školní a jiné povinnosti. Následující semestr byl totiž ve znamení programování bakalářky a jiných semestrálek (mj. PhotoBase vznikla jako práce na předmět Internet a WWW). Také se mi povedlo projekt recyklovat v předmětu Programování v jazyku Java, kde jsem celý kód přepsal do Javy a GUI do Swingu. Červenec jsem strávil (doteď nevím, proč tak dlouho) psaním bakalářky a v srpnu jsem částečně „odpočíval“ a částečně se učil na státnice. Po euforii z 20. září jsem nějakou chvíli neměl chuť nic dělat. Další semestr, už na mgr. studiu, byl ve znamení spousty semestrálek a podivných předmětů (znáte to, prvák je vždycky nejhorší). No a tím jsem se na časové ose přiblížil až k dnešku…

Co že to vlastně je

MiniMath prerelease

Hlavní okno programu

MiniMath je tedy překladač a interpreter příkazů vlastního jazyka matematických výrazů a operací. Umožňuje definovat proměnné a funkce včetně rekurze, kterou lze ovládat jen a pouze pomocí ternárního operátoru (nebo spíš funkce) If, a tak rekurzi zastavit, jako jednoduchý příklad lze uvést definici faktoriálu

fact (x) = if (x>0, x*fact(x-1), 1)

a = fact(6)

Hodnoty proměnných se počítají, až při výstupu na obrazovku, tedy jejich definici nelze založit na předchozí hodnotě (např. a=a+2). V tomto případě překladač pozná „přímou“ rekurzi a definici nepoužije. V případě definice faktoriálu výše ovšem pouze upozorní na možnost zacyklení, protože to lze správnou podmínkou zastavit. Výstup na obrazovku se provádí příkazem

write(promenna, „nebo nějaký text“)

Vypočtené hodnoty proměnných se cachují a platnost cache se nastavuje dynamicky podle změny závislostí a redefinicí závislých proměnných/funkcí. Platné cache hodnoty se v logu dynamicky zvýrazňují. Čtení ze vstupu se provádí zabudouvanou funkcí (z hlediska jazyka spíš klíčového slova) read, např.

a = read(„test výzvy ke vstupu“)

V tomto případě se read zavolá při každém vyhodnocení proměnné a (pokud už není v cache).

GUI je vytvořeno na frameworku Qt 4, opensource verzi, program je tudíž uvolněn pod GNU GPL. Pro formátování výstupu lze použít CSS, vzorový soubor je přiložen. MiniMath lze jednoduše rozšířit o další zabudované funkce, které nelze zadefinovat algebraickými operacemi. Ve zdrojovém kódu existuje příslušná abstraktní třída na zabudované funkce/konstanty. Pro lepší čitelnost doporučuji vygenerovat dokumentaci pomocí nástroje Doxygen.

Doufám, že aspoň někomu se můj prográmek bude líbit. Kompletní distribuci najdete na stránce projektu MiniMath.