* 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!

.



* Aktualizace WordPressu podruhé

22. November 2014, Jakub Horák. Categorized as Scripts.


V létě 2011 jsem na tomto blogu popisoval, jak vzdáleně aktualizovat WordPress. O tři roky později znovu řeším stejný problém, situace se však změnila. Dříve jsem měl na server přístup pouze přes FTP, nyní mám SSH.

Myšlenka nového skriptu spočívá v tom, že udržuje zdrojový kód WordPressu i jeho pluginů v SVN pracovních kopiích. Jak se to dělá pro samotný WordPress je popsáno zde. Poprvé je nutno provést SVN checkout nejnovějších tagů jádra WordPressu a jeho pluginů z repozitářů na http://core.svn.wordpress.org resp. http://plugins.svn.wordpress.org. Pro kompletní aktualizaci pak už vždy stačí spustit skript. Sám si zjistí tagy odpovídající nejnovějším verzím a pracovní kopie do nich přepne.

Skript si můžete prohlédnout:

#!/bin/bash
##
## Updates Wordpress in this directory to maximum release version.
##
 
LCYAN="\033[1;35m"
NOCOL="\033[0m"
 
update() {
  svninfo=`svn info 2>/dev/null`
  # check that directory is a working copy
  if [ "$?" -ne 0 ]; then
    echo -e "$LCYAN$(readlink -f .)$NOCOL is not a working copy."
    return
  fi
 
  oldurl=`echo "$svninfo" | grep '^URL:'`
  oldurl=${oldurl##* }
  oldversion=${oldurl##*/}
  tagurl=${oldurl%/*}
  newversion=`svn ls "$tagurl" | sed -e 's/\/$//' | sort --version-sort | tail -n 1`
 
  if [ "$oldversion" == "$newversion" ]; then
    echo "$(readlink -f .) is up to date with version $newversion."
  else
    echo -e "Update $LCYAN`readlink -f .`$NOCOL from version '$LCYAN$oldversion$NOCOL' to '$LCYAN$newversion$NOCOL'?"
    select prompt in "Yes" "No but continue" "Abort"; do
      case $prompt in
        Yes ) break;;
        "No but continue" ) return;;
        Abort ) exit;;
      esac
    done
 
    echo ---
    svn switch "$tagurl/$newversion"
    echo ---
  fi
}
 
if [ "$#" -ne 0 ]; then
  echo "Usage: $0"
  exit
fi
 
# main
update
 
# plugins
pushd wp-content/plugins/ >/dev/null
for plugindir in *; do
  if [ -d "$plugindir" ]; then
    pushd "$plugindir" >/dev/null
    update
    popd >/dev/null
  fi
done
popd >/dev/null

Také si skript můžete stáhnout.

Tags: .



* Plugin do Vimu na odstranění diakritiky

24. September 2014, Jakub Horák. Categorized as Vim.


Při kopírování textu se mi občas stává, že potřebuji z původního textu odstranit českou diakritiku. Jako textový editor používám Vim, rozhodl jsem se tedy napsat do něj plugin, který mi takovou funkcionalitu poskytne. Zasvětil jsem se do tajů Vimscriptu. V mnohém jsem se inspiroval skvělou knížkou Learn Vimscript the Hard Way od Steva Loshe.

Plugin včetně dokumentace je k dispozici na GitHubu.

Hurá, už žádné ruční přepisování písmen z české abecedy do latinky!

Tags: , , .



* Jaro v Luganu

12. May 2014, Jakub Horák. Categorized as Erasmus.


Lugano, kde jsem momentálně na Erasmu, nabízí spoustu możností, kam se vydat na výlet.

Na začátku dubna jsme s přítelkyní Annou navštívili největší město Švýcarska: Curych.Dům metropol v Curychu Curych lze popsat jedním slovem a tím slovem je šedivý. Fasády i střechy jsou šedivé, mělká řeka i obrovské jezero jsou taktéž šedivé. Sem tam má některá fasáda barevný odstín, ale ten není nikdy výrazný. Oproti Luganu, což je velmi malé městečko s cca 60 000 obyvateli, je Curych velkoměsto. Co do počtu obyvatel ho lze srovnávat s Prahou.

Zatímco v Luganu se člověk potýká s nedostatkem kulturního vyžití, Curych v sobotu večer, kdy jsme v něm byli, opravdu žil. Lidé byli v noci v ulicích a ne schovaní doma jako v Luganu. Z architektury mě nejvíce zaujaly barokní domy a zámky (viz obrázek vpravo, Haus Metropol).

O Velikonočních prázdninách jsme se vydaliCentrum Neapole italského městečka Nola, odkud Anna pochází. Nola je moc pěkné malé městečko poblíž Neapole. Jak Nola, tak Neapol leží na v bezprostřední blízkosti Vesuvu, jediné činné sopky v Evropě.

Neapol je třetí největší město Itálie co do počtu obyvatel a navštívili jsme ho na jeden celý den. Město má velmi vysokou hustotu obyvatel na kilometr čtvereční a je typické svými uzoučkými a temnými uličkami. Neapol je rodiště pizzy, tak asi uhodnete, co jsme měli k obědu. Zvláštní je, že většina domů v Neapoli je opravované ledabyle nebo není opravovaná vůbec. Vytváří to vskutku jedinečnou atmosféru.

Noční NeapolNavštívili jsme podzemí Neapole, které bylo v antických dobách využíváno pro těžení kamene a později jako akvadukt. V 19. století do podzemí házeli odpad a během druhé světové války sloužilo jako protiletecký kryt. Díky své strategické poloze se v Neapoli nachází několik hradů. Navštívili jsme Castel Nuovo. Vpravo se můžete pokochat nočním pohledem na Neapol. Pantheon

Další den jsme se vydali na výlet do Říma. Všude bylo spoustu turistů, protože následující víkend proběhlo svatořečení dvou papežů. Řím mě zaujal svou antickou historií, necítil jsem v něm ale takovou atmosféru živého města jako v Neapoli. Přišlo mi spíš jako město pro turisty. Na obrázku vlevo se tyčí nejvýznamnější památka v Římě, Pantheon.

Duomo v MiláněJako poslední zastávku na naší velikonoční tůře jsme navštívili Milán, z kterého to pak domů trvá už jen hodinu vlakem. Na fotce vpravo můžete vidět Milánskou katedrálu, která se stavěla necelých šest století. Mentalita  seveřanů se liší od jižanů. Na vzhledu města se to velmi podepsalo. Milán je bohatým městem se spoustou luxusních obchodů. V roce 2015 hostí Miláno Světovou výstavu Expo. Postrádá ale přátelskost, otevřenost a živost jihu.

Jezero ComoMinulou neděli jsme se vydali k jezeru Como, což jezero ledovcového původu stejně jako Luganské jezero. Zatímco Luganské jezero sahá do Švýcarska, jezero Como leží výhradně v Itálii. Na rozdíl od Lugánského jezera jsou zde vesničky takřka všude podél pobřeží. Kopce se totiž nesvažují do jezera tak prudce a umožňují tak osídlení poblíž vody. Za slunečného počasí je tam vskutku nádherně. Viz obrázek vpravo.

Toť prozatím vše. Do konce Erasmu zbývá již jen měsíc a půl :/

 

.



* Konec zimy, začátek jara v Luganu

30. March 2014, Jakub Horák. Categorized as Unassigned.


SplügenV návaznosti na předchozí příspěvek jsem se vydal ještě dvakrát na snowboard. Zavítal jsem opět do Splügenu, tentokrát jsem však nejezdil na sáňkách, ale na snowboardu na vedlejší sjezdovce. Tento areál považuji za nejlepší z těch, které jsem letos navštívil. Ze spodku sjezdovky jsem vždy jezdil kabinovou lanovkou zpět nahoru.

OvronnazPoslední letošní výjezd za zimními radovánkami byl zároveň tím nejdelším. Účastnil jsem se víkendové akce pořádané spolkem Erasmus Student Network Switzerland, která se konala v Ovronnazu. Na celý víkend se na jedno místo sjelo několik studentů z nejrůznějších měst z celého Švýcarska, aby se setkali a zalyžovali/zasnowboardovali si spolu. Oba dva dny sice sněžilo, ale aspoň jsme tak v neděli měli výborný čerstvý sníh. Zajistil jsem si kurzy snowboardu a tak jsem se konečně naučil snowboardovat pořádně.

Ovronnaz je ve francouzsky mluvící části Švýcarska a pro nás z Lugana je to tak relativně daleko. Protože v cestě jsou Alpy, museli jsme vlakem jet přes Curych, čtyřikrát přestupovat a celkem jsme cestovali 8 hodin.

San SalvatoreTím jsem tedy završil kapitolu zimních sportů a nastupuje jaro. Již zde rozkvétají třešně a květiny v zahradách. Poslední fotku, co zde prezentuji, jsem pořídil na sobotním odpoledním výletu na kopec San Salvatore. Na fotce je vidět kopec Monte Brè, na kterém jsem již také byl. Dle fotky na jezeře zatím nejsou žádné lodě, ale od té doby se situace změnila a tento týden již na jezeře lodě jsou. S jarem se také otevírá možnost pořádání pikniků. Lugano ožívá 🙂

.



* Zimní sporty v Luganu

24. February 2014, Jakub Horák. Categorized as Erasmus.


Vzhledem k blízkosti Alp je Lugano ideální základnou pro provozování zimních sportů. Zatím jsem podniknul dva výlety.

První výlet byl organizován naší univerzitou pro studenty programu Erasmus a jednalo se o noční sáňkování, což je tradiční švýcarský sport. Protože v Luganu není přímo sportovní areál, konala se akce v lyžařském areálu Splügen, který se nachází 95km od Lugana (přes hodinu jízdy busem). Dvě hodiny jsme jezdili ve dvojicích na sáňkách po speciální osvětlené trase vedle sjezdovky. Nahoru jsme se vždy vyvezli kabinkovou lanovkou. V rámci výletu jsme pak byli pohoštěni tradičním švýcarským pokrmem: fondue.

airolo

Airolo, Pesciüm

Včera jsme se pak s kamarády vydali na celodenní lyžařsko-snowboardový výlet do střediska Airolo vzdáleného 85km (cca 1 hodina jízdy busem). Počasí bylo nádherné a moc jsem si to užil. Osvěžil jsem si jízdu na snowboardu. Byla neděle a tudíž v areálu lyžovalo hodně lidí. Ve Švýcarsku se nic jiného v neděli dělat nedá, protože všechny obchody jsou zavřené. Areál je nicméně obrovský a na sjezdovce, kde snowboardoval já, příliš dlouhé fronty u vleku nebyly. Výbavu jsem měl zapůjčenou od univerzity a dopravu jsme měli zajištěnou také až přímo domů.

.



* První poznatky z Lugana

11. February 2014, Jakub Horák. Categorized as Erasmus.


Odjel jsem na Erasmus do švýcarského městečka Lugano. Jedná se o malé městečko o cca 60 tisících obyvatel, stísněné mezi hory a jezero zvané taktéž Lugano. Mluví se zde italsky a do Milána se dá dostat za hodinu vlakem. Město žije především z turismu a finančnictví.

Kolej, na které jsem ubytovanLuganoý, vypadá jako hotel. Asi to bude tím, že v prvním patře trojpatrové budovy skutečně hotel je. Má tři hvězdičky a jmenuje se Ceresio. Kolej sdílím s hrstkou dalších zahraničních studentů nejrůznějších národností: je tu několik Španělů, němců, singaporek, Švédka, Finka, Slovinka, Slováci a mnoho Čechů. Doufal jsem, že tu nebude mnoho Čechů a bohužel jich je tu spoustu. Naštěstí budu ale budu mít na pokoji itala, takže aspoň neuslyším češtinu pořád. Mohl jsem skončit na pokoji s Čechem a to by bylo horší.

BréProstředí je tu krásné. Vše na dosah ruky. Snad jen je zvláštní to, že v neděli mají všechny obchody, kromě jednoho na nádraží zavřeno. Naštěstí nádraží je vzdálené jen 15 minut chůze. Švýcaři totiž rozhodli v referendu (wiki), že chtějí nechat obchody zavřené. Lidé v neděli odpočívají. Stejně tak se tu nenajde obchod otevřený po osmé hodině. Přijde mi to jako pražákovi nezvyklé, vzhledem k tomu, že v Praze má každá vietnamská večerka otevřeno nejméně do 9 hodin.

Celý minulý týden pršelo, hezky bylo pouze ve čtvrtek a v neděli. Ve čtvrtek jsme měli tour po městě a mohl jsem vyfotit první fotku města a jezera Lugana. V neděli jsme pak vyrazili na Monte Bré, místní kopec tyčící se nad jezerem Lugano. Z něj pak pochází druhá fotka.

.



* Populární trendy na Twitteru

24. August 2013, Jakub Horák. Categorized as Twitter.


Spustil jsem aplikaci zobrazující grafy populárních trendů na Twitteru.

Začalo to vymýšlením tématu semestrální práce na předmět Enterprise Java, kdy jsem potřeboval napsat aplikaci, která by splňovala technologické podmínky vyučujícího a zároveň dělala něco zajímavého. Zrodil se nápad a v rámci předmětu byl úspěšně dotažen do konce, nebo to tak alespoň vypadalo 🙂 Bohužel, to co fungovalo při předvádění na testovacích datech nefungovalo na o několik řádů mohutnějších reálných datech. Nicméně jsem se poučil, překopal architekturu aplikace a odstranil funkčnosti, které jsem implementoval pro pobavení vyučujícího. Voilà a dnes je z toho prima hračka.

Rozhodl jsem se implementovat pouze denní a týdenní grafy, protože kvůli proměnlivosti trendů nedává pro tento typ grafu větší časový rozsah smysl. Trendy většinou trvají jen několik hodin, maximálně několik dní. Pro větší rozsahy by se dala udělat statistika např. nejvíce používaných trendů, ale vyžadovalo by to jiný způsob zobrazení. Vidím to zatím jen jako nápad na rozšíření.

Co se týče dat, zajímavý je např. včerejší denní graf, kde lze vidět, jak se na Twitteru vzedmula vlna odporu proti účinkování Bena Afflecka v roli Batmana v nadcházejícím filmu Batman vs. Superman (viz #BetterBatmanThanBenAffleck). Z historických dat lze pozorovat např. vývoj trendů při dubnovém útoku v Bostonu (viz #PrayForBoston) nebo při květnovém tornádu Moore v Oklahomě (viz #PrayForOklahoma).

Prohlížejte a sdílejte zde: mrtweety.zee.cz

Tags: , , , .



* 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);
};

.