Archive for ‘Unassigned’ category

* Introducing the English version of the blog

13. March 2016, Jakub Horák. Categorized as Unassigned.


Hello dear visitor and welcome to the English version of my blog. The main purpose of this blog is to store memories of projects I did or experiences I had. You can find here mainly scripts, code samples and solutions to problems. Because of that, do not expect me to write posts every day, week or month. The point is to have a central and public location for my documentation.

The older articles are available only in Czech. Feel free to browse through them too!

.



* Simulátor agentů v Lispu

21. June 2013, Jakub Horák. Categorized as Unassigned.


V rámci mé bakalářské práce jsem implementoval engine na simulaci agentů.  Agenti mohou hrát hry na schovávanou, honěnou nebo slepou bábu. Prostředí je reprezentováno pomocí šestiúhelné mřížky. Konkrétní vlastnosti jsou dokumentované přímo v souborech projektu, který je k dispozici na Githubu.

Jedná se o můj první projekt v jazyku Common Lisp a musím říct, že se mi Lisp hodně zalíbil. Dovedu si představit jeho využití v situacích, kdy chce člověk vytvořit algoritmus, ale neví ještě, co ten algoritmus bude přesně dělat a jaké bude používat datové struktury. Díky dynamickému typování a principu “všechno je funkce” se kód refaktoruje výjimečně snadno. Člověk tak získá výsledný algoritmus postupnou evolucí původní myšlenky.

V síle Lispu ale zároveň spočívá i jeho slabina. Volání funkce musí být obalené závorkami. Málokdy se mi podařilo trefit ukončující závorky tak, aby program fungoval napoprvé. S přibývajícími zkušenostmi se to naštěstí zlepšilo. Když si člověk zvolí nějaký konkrétní styl odřádkování a psaní závorek,  lze tento typ chyby omezit. Hodně pomáhá barevné zvýraznění jednotlivých úrovní závorek, jako to umí např. Vim plugin Rainbow Parentheses.

Více o Lispu se můžete dozvědět online v knize Practical Common Lisp.

Tags: , , .



* Posílání chybových hlášek na mail

22. April 2012, Jakub Horák. Categorized as Unassigned.


Včera jsem zjistil, že mám poškozený filesystém na zálohovacím disku. Oprava byla jednoduchá, stačilo pustit fsck, ale nepříjemné bylo, že jsem se o problému dozvěděl úplně náhodou, až při ručním spustění zálohy před velkou aktualizací systému. Aby se již podobná situace neopakovala, nastavil jsem démona syslog-ng, aby mi posílal chybové hlášky na mail. Když se vyskytne problém, může se ale zalogovat mnoho chyb najednou, a tak mi zanedlouho přišlo cca 300 mailů. Abych podobnému zahlcení do budoucna zabránil, napsal jsem následující skript, který pošle nejvýše jeden mail každých pět minut.

#!/bin/bash
#
# ./bin/syslog-mail.sh
# Posilat nejvyse jednu hlasku za pet minut
#
TO='xy@xy.cz'
FROM=$TO
 
last=`cat /var/tmp/syslog-mail-last-sent 2>/dev/null`
let last=last+300
now=`date +%s`
if [ "$last" -lt "$now" ]; then
	read logline
	logline=${logline/+([0-9<>])}
	if [ "$logline" == "" ]; then
		exit 0
	fi
	/usr/sbin/sendmail -t <<EOT
To: $TO
From: $FROM
Subject: Log Alert: $logline
 
$logline
`while read logline; do
	logline=${logline/+([0-9<>])}
	echo $logline
done`
 
--
This is an automatically generated message from $HOSTNAME
EOT
 
	echo "$now" > /var/tmp/syslog-mail-last-sent
fi

Do /etc/syslog-ng/syslog-ng.conf jsem přidal tato pravidla:

destination mail-alert {
	program("/home/kuba/bin/syslog-mail");
};
filter f_error {
	not facility (mail) and level(err,crit,emerg);
};
log {
	source(src);
	filter(f_error);
	destination(mail-alert);
};

.



* Bloog.cz 2.0 – odhalení designu

20. October 2010, Jakub Horák. Categorized as Unassigned.


Už delší dobu chystám novou verzi blogportálu a teď se konečně schyluje k jejímu ostrému nasazení. Momentálně vychytávám poslední bugy, čili aktualizaci webu můžete očekávat přibližně za týden. Již nyní si ale můžete prohlédnout nový webdesign.

Základní princip návrhu architektury procesoru říká: “Jednoduchosti \Leftrightarrow pravidelnost”. Návrh procesoru sice zdánlivě nemá nic společného s webdesignem, faktem ale zůstává, že se mi líbí jednoduché elegantní tvary. Zatímco design první verze působil nesourodě a zmateně, nový návrh je přehledný a pravidelný. Bezpochyby lépe vypadá horní část stránky, do které se mi povedlo zakomponovat Matesovo logo.

Však posuďte sami:

Blogportál Bloog.cz verze 1.0alfa

Verze 1.0alfa (2006)

Verze 2.0

Verze 2.0 (2010)

.



* Ještě k Tele3

20. October 2009, Jakub Horák. Categorized as Unassigned.


Ukázalo se, že pánové z tele3 .cz nejsou ohledně databází tak oškliví, jak jsem popisoval v příšpěvku Trable s hostingem. Osobně mě kontaktovali a nabídli freehosting databáze. Za to jim děkuji.

Tags: .



* Trable s hostingem

2. September 2009, Jakub Horák. Categorized as Unassigned.


Posledních pár dnů byl web mimo provoz kvůli problémům s freehostingovou společností AgilityHoster, u které jsem dosud hostoval. AgilityHoster mě naštval, protože po aktualizaci na novější verzi WordPressu mi neustále házel chybu `500: script failure` a nešlo se jí zbavit.

Hledal jsem tedy nový freehosting a našel jsem tele3.cz. Souběžně s tím jsem se hrabal v doméně bloog.cz, a tak se stalo, že jsem omylem převedl doménu zee.cz pod hosting banan.cz. Když už tam byla, prodloužil jsem ji o rok a následně převedl pod tele3.cz. Všechno se zdálo být v pořádku, až jsem si najednou uvědomil, že tele3 nemá zadarmo MySQL. Dokonce ani SQLite na tele3 není dostupné. Sakra!

Situaci jsem vyřešil velice jednoduše. Zařídil jsem si účet a databázi na freemysql.net. Nakonec mám rychlý, i když ořezaný webhosting s moooc pomalou databází. Oproti předchozímu hostingu by měla být delší doba přístupu ke stránce, ale po získání HTML už by se stránka měla načíst rychle.

Při příležitosti funkčního hostingu jsem napsal malý widget na zobrazování TODO listu. Seznam je uložen v textovém souboru, který lze upravovat přes FTP. TODO list můžu elegantně editovat z konzole a změny se ihned zobrazí zde na webu.

Tags: .



* Popup upozornění na změnu písničky v MPD

8. June 2009, Jakub Horák. Categorized as Unassigned.


Zkouškové je období, kdy se má student učit. Bohužel zjišťuji, že se o zkouškovém učím ještě míň než v průběhu semestru. Moje nechuť dělat cokoliv do školy tak dala vzniknout další utilitě pro MPD.

Zachtělo se mi vědět, jaké písničky moje MPD právě přehrává. Po chvilce hledání jsem našel skript, který používá Galago notification-daemona. Přišlo mi ale zbytečné používat dalšího daemona, když už mám standardně puštěného knotify4 kvůli aplikacím KDE. Napsal jsem si tedy vlastní KDE aplikaci, která zobrazuje pěkné popupy včetně album arts.

Screenshot

Screenshot

Další info na http://mpd.wikia.com/wiki/Client:MpdKNotifier

UPDATE:  xaizek vylepšil můj MpdKNotifier a zveřejnil kód na GitHubu. Doporučuji použít tuto verzi.

Tags: , .



* Catching up

2. December 2008, Jakub Horák. Categorized as Unassigned.


Od publikování posledního příspěvku už uběhly 2 měsíce, což je docela dlouhá doba. Bohužel s nástupem do školy se radikálně změnil můj časový plán a ubylo chvil na programování pro zábavu. Dneska se ve škole konal Den otevřených dveří, díky němuž nám náhodou odpadla odpolední přednáška. Rozpadla se nám i úterní pivní seance, a tak jsem si vzpomněl na svůj blog 😉 Škola sice žere ohromnou porci času, na druhou stranu ale s postupujícím studiem teorie programování cítím, že kvalita mnou psaných algoritmů roste, a to mě skutečně těší. Tento přímý důsledek studia mi dodává motivaci k překonání všech ostatních šílených předmětů, ze kterých budu muset v lednu skládat zkoušku.

A cože to dělám, když zrovna nepracuji nebo nejsem ve škole? Kromě občasných prací na novém Bloogu píšu PHP třídu pro posílání zpráv přes XMPP. Musím říct, že možnosti tohoto protokolu mě značně překvapily. Doteď mi není zcela jasné, proč se tenhle stavový protokol používá ve větší míře pouze pro kecálky. Místo toho, abych brouzal webem, kdykoli chci zjistit nové informace, by mi stačilo použít malého a efektivního speciálního klienta. Kámen úrazu takového přístupu spočívá zřejmě v tom, jak donutit uživatele, aby si stáhnul, nainstaloval a používal klienta, když na webu může cokoliv snadno ovládat pomocí okna prohlížeče.

Tu třídu na posílání zpráv (momentálně ve stavu \alpha verze) chci použít k usnadnění administrace Bloogu - nechám si totiž pravidelně posílat na Jabber zprávy o přírůstcích do databáze. Díky tomu budu moci administrovat portál pouze v případě potřeby. Zároveň se zrychlí odezva mých administračních kroků, která je nyní kvůli mé lenosti vcelku bídná.

Dále se chystám na jeden zvláštní projekt, který potřebuji do školy - zápočtový program. Zadání už jsem si vybral. Budu programovat úlohu

Pretty printer

zdrojový text v Pascalu převede do HTML s tím, že
- zvýrazní klíčová slova
- rozdělí do řádek
- odsadí vnořené příkazy

Výběr jazyků máme omezený na Pascal a C#, což je snad nejhorší výběr, jaký jsem si mohl přát. O víkendu jsem měl tu čest se seznámit s MS Visual Studiem a musím podotknout, že se mi v C# a .NETu pracovalo vskutku příjemně. C# přebírá to, co je dobré z Javy, C++ i Pascalu. .NET pak doplňuje knihovny pro usnadnění práce. Škoda jen, že kvůli “skvělé” politice jeho tvůrce, Microsoftu, není .NET nativně podporován jinde než na XPčkách a ve Vistě. Můj odpor k prehistorickému Pascalu ale překoná i nepohodlí plynoucí z občasného nabootování Windows.

Ačkoliv se jedná o projekt menších rozměrů, věřím, že má smysl. Vstup bude sice v Pascalu, ale nebude velký problém změnit pár podmínek a umožnit vstup v rozumnějším jazyce.

.



* \LaTeX, WordPress a freehosting

4. October 2008, Jakub Horák. Categorized as Unassigned.


Pokud jste se s LaTeXem ještě nesetkali, tak vězte, že LaTeX je značkovací jazyk umožňující sázet dokumenty ve vysoké kvalitě. Kvalita a krása vysázených dokumentů (např. v porovnání s Wordem), prakticky neomezená kontrola nad vším, co se objeví na papíře, stejně jako jednoduchost zápisu symbolů a matematických výrazů činí z tohoto jazyku neocenitelnou pomůcku. Pro psaní v TeXu stačí umět pár příkazů a vědět, kam je napsat, aby se kód přeložil.  Největší výhodou LaTeXu je pro mě jednoduché psaní zápisků ve škole. Víc info o \TeXu najdete v tomhle článku.

Při psaní blogu muselo dříve či později dojít k situaci, kdy jsem chtěl zapsat TeXovský symbol. Teď se sice jedná jenom o malou šipku vpravo, myslím ale, že čisté řešení je nalézt/naprogramovat algoritmus, který se postará o vyhledání příkazů LaTeXu a nahradí je správně vysázeným výrazem. Pro WordPress, což je blog software, na kterém běží tenhle web, existují 2 pluginy, které se snaží tento problémem řešit. Bohužel, první vyžaduje na serveru nainstalovanou hromadu TeXových knihoven, které na mém freehostingu nejsou, a druhý stahuje obrázek LaTeXového výrazu z veřejných služeb (jedna běží shodou okolností na serveru wordpress.com) do cache a z té ho poté zobrazuje. Ukázalo se ale, že na mém freehostingu se nelze připojovat z PHP k vzdáleným serverům, takže plugin nemůže fungovat. Musel jsem tedy naprogramovat něco vlastního.

Rozhodl jsem se zachovat funkci cache obrázků, protože nechci svým malým blogem ohromně zvýšit zátěž na generování obrázků na veřejné službě. Problém jsem vyřešil tak, že jsem na svém normálním hostingu na Bloogu umístil skript, který se stará o mirroring. Využil jsem plugin Latex for WordPess a upravil jsem kód tak, že pouze nahrazuje TeXovský zápis obrázky, které jsou v prohlížeči uživatele požadovány z mé mirror služby na Bloogu. Mirror služba pak funguje tak, že se podívá na disk, jestli už daný výraz někdy generovala a pokud již obrázek existuje, pouze ho vrátí. Když obrázek neexistuje, tak ho stáhne z generovací služby na wordpress.com.

Tohle řešení mi taky umožňuje používání TeXu na jiných stránkách a fórech, které LaTeX defaultně nepodporují. Stačí mi vložit obrázek, jehož zdroj se skládá z http://tex.beta.bloog.cz/? a požadovaného výrazu. Výsledek pak vypadá třeba takto: \frac{1}{\pi} \cdot \frac{5}{2}

Jestli jste narazili na stejný problém, kód si můžete stáhnout zde.

Tags: .



* Nově ZEE.cz™

23. September 2008, Jakub Horák. Categorized as Unassigned.


Pravidelně jednou za rok, vždycky ke konci na přelomu srpna a září, dostávám zálusk na novou doménu. Při výběru koukám na to, aby doménové jméno mělo určitý potenciál značky. Předloni jsem zaregistroval bloog.cz. Už si nepamatuji, jestli to bylo před nápadem naprogramovat RSS agregátor nebo po něm, ale doména “bloog” byla pro ten účel dle mého názoru ideální. Loni jsem za pomoci důmyslného programu objevil pár domén, které se mi zdály cenné. Kritéria byla jasná – hledal jsem cosi krátkého a srozumitelného, aby se to rychle psalo do řádku s adresou a také aby se to dobře pamatovalo. Moje chytrá utilitka mi přes noc vyplivla seznam pěkných domén, z nichž jsem uvažoval o koupi domén dyne.cz a/nebo kul.cz. Nakonec jsem se k jejich registraci neodhodlal. Dneska jsou už obě registrované, na dyne.cz je jakýsi inzertní server a kul.cz je na prodej s redirectem na eshop se zbožím z Nepálu.

Letos se situace změnila mimo jiné tím, že registrace české domény stojí místo 450 zhruba 270 korun. Také jsem si založil tenhle blog a začalo mi vadit, že vždy, když mám do profilu vyplnit web, rozhoduji se mezi bloog.cz, což ovšem není můj osobní web, nebo horec.bloog.cz, což je zase adresa, která nevypadá příliš profesionálně. Hledal jsem tedy doménu, která by splňovala moje nároky jak z hlediska eventuální prodejnosti, tak s tím, že ji využiji k vlastní prezentaci. Bohužel, letos už jsou WHOIS servery vybavené omezeními, které můj prográmek blokují. Musel jsem tedy testovat napůl ručně. Napůl proto, že jsem si napsal jiný prográmek, který mi přednášel nápady na domény a já z nich testoval ty, které jsem uznal za vhodné.

Kromě evidentního úlovku zee.cz jsem přemýšlel nad yay.cz. Yay je sice lepší v tom, že je to slovo, má nepochybně i lepší statistiky hledanosti, ale vadí mi na něm jeho význam citoslovce. Jako perličku jsem objevil taky to, že “yay” je v USA výraz pro kokain. Schválně, jestli si doménu někdo do příštího roku koupí 🙂

.