Zápisník

// Nová doména a hosting

Dnes jsem definitivně přestěhoval svůj webík na novou doménu a tím i na nový hosting. Prozatím jsem zvolil free variantu hostingu na pipni.cz a až na menší výhrady jsem zatím spokojen. V souvislosti s přesunem jsem zároveň updatoval DokuWiki na novější verzi a doplnil několik drobných featur. Některá specifická nastavení hostingu mě však stála nějaký ten čas na doladění.

Safe mód a DokuWiki

Kvůli specifikům PHP safe módu na hostingu nefunguje DokuWiki korektně. Příčinou je nemožnost vytvářet v PHP ve filesystému adresáře a následně do nich vkládat soubory (problém je popsán zde). Existuje sice jakýsi safe mode hack, který vytváření provádí přes FTP a tak umožní zápis do dotyčných adresářů, ale ještě jsem jej nezkoušel. Prozatím jsem se spokojil s omezenou funkčností, kdy nelze vytvářet nové namespacy (tedy podadresáře) prostřednictvím systému, ale jen ručně z FTP klienta. Výraznější problém to způsobilo s cache, která používá adresáře. Naštěstí existuje google a výše citovaná stránka. Stačilo dané podadresáře cache 1 2 3 4 5 6 7 8 9 a b c d e f vytvořit a povolit do nich zápis.

URL v fopen() funkci

Pro některé miniskriptíky jsem využíval funkci fopen pro stahování vzdálených souborů přes HTTP. Na pipni.cz je ovšem featura allow_url_fopen zakázaná a nelze povolit tak, jako v případě předchozího ic.cz. Naštěstí existuje ještě několik dalších způsobů, jak soubory stahovat (curl, sockety), takže tento problém jsem lehce vyřešil pomocí třídy pro HTTP klienta, která je v DokuWiki přibalena.

Další dojmy

Hned včera po aktivaci účtu jsem sem překopíroval stávající instalaci z ic.cz a zkoušel přenést databázi z mojí fotogalerie. V tu chvíli jsem naštvaně zíral na minutu načítající se PHPMyAdmin a vztekle nadával na rychlost (ale co byste chtěli zadarmo). Naštěstí se mi databázi povedlo nahrát a zdá se, že rychlost je spíš jen problém u PHPMyAdmina, moje galerie (pravda, max. 4 dotazy na stránku) se hýbe docela svižně. Jinak prozatím (2 dny …) jsem se nesetkal s výpadkem.

Taky se začínám prohrabávat spoustou konfiguračních možností hostingu a dolaďovat jej podle mých představ. Uvidíme, zda budu s novým freehostingem spokojen do té míry, že se nebudu poohlížet po alternativě.

// 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í … :-)

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