Tady je Glutexovo.

Doupě nerudného jazykozpytce.


Zkoušení ze slovíček
na’vi, charmeleon, avatar, na'vi
glutexo
Kdysi dávno, je tomu již mnoho let, jsem si napsal program na zkoušení ze slovíček. Klasická metoda tzv. flashcards, neboli dvou kapes. O něco později, ale stále před mnoha lety, jsem tento program přepsal, aby aspoň využíval databázi a umožňoval rozdělení lekcí podle jazyků. V této podobě ho používám dodnes.

Hloupé je, že tento prográmek je napsaný na dnešní poměry dost strašně. Ještě jsem tehdy spoustu věcí nevěděl a neznal. Sáhl jsem tehdy po PHP bez jakéhokoliv frameworku. Proto kdybych chtěl přidávat nějaké další vlastnosti, nerad bych se hrabal ve stávajícím kódu, to bych to spíše celé přepsal. Nabízejí se Rails. Než k tomu ale dojde, chtěl jsem ho aspoň dovést do stavu, kdy je možné ho někam nahrát, ať se každý zasměje.

Poslední vlastnosi, jež jsem tedy do této zrůdnosti přidal, byla možnost lokalizace (přepnout jazyk lze v konfiguračním souboru) a podpora PostgreSQL databáze (původně fungovalo jen s MySQL). To druhé kvůli hostingu, abych mohl použít Heroku.

Na GitHub to dám zase někdy příště, třeba s krátkým návodem, jak to rozběhnout, kdyby se nedej Eywo našel někdo, kdo by o něco takového stál. Nicméně podívat se je možná na následující adrese:

http://zzsng.herokuapp.com/

Prográmek umožňuje spravovat slovíčka z cizích jazyků. Ta je možné seskupovat do lekcí a lekce třídit podle jazyka. Ke každému slovíčku je možné kromě překladu zadat ještě doplňující informace (např. vzor, rod, množné číslo, valence…) a komentář určený pro delší povídání, např. k příkladu, frázi apod.

Zkoušení pak probíhá tak, že program zobrazí slovíčko a študák si v duchu řekne nebo třeba napíše na papír vše, co o slovíčku ví: Překlad, rod a tak. Pak si klepne na „Odhalit“ a dozví se tak, zda věděl nebo ne. Toto sdělí programu a dostane další slovíčko. Potom, co se takto objeví všechna slovíčka z lekce (nebo výběru lekcí), přijdou na přetřes znova ta slovíčka, která zkoušený nevěděl. Tato procedura se opakuje, dokud nebudou všechna slovíčka označena jako věděná, načež se dozvíme stručnou statistiku úspěšnosti.

Slovíčka z lekce jsou představována buď v náhodném pořadí (dobré pro slovíčka), nebo v pořadí, v jakém byla zadána. To je naopak dobré, pokud jako slovíčka zadáme např. celé věty ze cvičení, které na sebe mají nějakou návaznost. Fantazii se meze nekladou a zkoušet je tak možné se úplně z čehokoliv.

Žel prográmek neumí ani tak elementární věci jako měnit pořadí slovíček v lekci nebo filtrovat lekce podle názvu. Nicméně ve stavu, v jakém teď je, ho používám již hrozně dlouho, a to jak na zkoušení, tak na prosté ukládání slovíček do databáze, se kterou třeba budu moci ještě dále pracovat nejen tímto nástrojem.

Zdrojový kód se brzy (za několik dní) objeví na GitHubu. Dnes už to nechci ani vidět.

Aktualizace 11. srpna 2013:
Aplikace je k dispozici na GitHubu: http://github.com/Glutexo/zzsng

iCloud (pošta, kalendář, úkoly) v Thunderbirdu či jiném programu
na’vi, charmeleon, avatar, na'vi
glutexo
Objevila se potřeba mít v Thunderbirdu k dispozici stejnou poštu a kalendář i s úkoly, jakou mám i na iPadu. Jinými slovy, ve svém iCloud účtu. V Mac OS X je to jednoduché, tam stačí zadat jméno a heslo v Systémových předvolbách a vše se synchronizuje samo. Pod Windows to nejspíše též bude snadné, díky ovládacímu panelu iCloud přímo od Applu, ale věřím, že jen s Outlookem a možná ani to ne, nevím. S linuxem, nebo obecně s programy, které nejsou ten největší mejnstrým, je situace často složitější. Naštěstí tato situace má řešení a není příliš komplikované. A příjemné je, že by mělo fungovat na libovolném systému a s libovolným programem.

Nejprve nastavíme poštu. To je snadné, je to IMAP účet jako každý jiný. Apple nabízí článek s nastavením: http://support.apple.com/kb/HT4864?viewlocale=cs_CZ, v němž se píše:


  • Název serveru: imap.mail.me.com

  • Je vyžadováno SSL: Ano

  • Port: 993

  • Uživatelské jméno: priklad@me.com (použijte svou vlastní adresu @me.com ze svého účtu iCloudu)

  • Heslo: Vaše heslo k iCloudu



Osobně jsem jako uživatelské jméno použil jen tu část adresy před @me.com, nikoliv celou adresu, tedy glutexo a funguje to. S SMTP je to stejné:


  • Název serveru: smtp.mail.me.com

  • Je vyžadováno SSL: Ano

  • Port: 587

  • Požadováno ověření SMTP: Ano

  • Uživatelské jméno: priklad@me.com (použijte svou vlastní adresu @me.com ze svého účtu iCloudu)

  • Heslo: Vaše heslo k iCloudu



S kalendářem je situace trochu horší, neboť žádný článek v applí KB neexistuje. Ale protože vše je standardní CalDAV, nic není ztraceno. Stačí jen zjistit adresu kalendáře: Na toto existuje software, který ovšem řeší jen půl problému. http://icloud.niftyside.com/ Na výběr je z PHP skriptu nebo javové aplikace, PHP verze mi žel nefungovala, javová bez problémů. Tento prográmek zjistí adresy všech kalendářů dostupných pro daný účet. Nevýhodou je jednak, že aplikaci musíme věřit, protože se do ní zadává jméno i heslo k iCloud účtu, a jednak je potřeba znát server. No a když už jdeme zjistit server, rovnou máme možnost vykoumat i celou adresu kalendáře.

Když se na http://www.icloud.com/ přihlásíme do webového rozhraní a otevřeme si třeba poštu, stačí se podívat, kam všude z prohlížeče odcházejí požadavky. Chrome/Safari na to má nástroj pro vývojáře (v Chrome stačí zmáčknout F12), Firefox na to má např. rozšíření Firebug. A když se podíváme do karty Síť, někde tam bude pár řádků na adresu p01-pushws.icloud.com, nebo -contactws.icloud.com atp., všechny se stejným číslem za prvním p, tedy p01, p02, p06 apod.

Firebug1

Nyní již máme dostatek indicií na použití zmiňovaného prográmku z http://icloud.niftyside.com/. Ten totiž vyžaduje kromě jména a hesla ještě zvolení serveru, který odpovídá zjištěnému pXX číslu. Aplikace nám zjistí adresy všech dostupných kalendářů pro daný účet a tyto je pak možné použít v libovolné aplikaci podporující protokol WebDAV. Události v hlavním kaledáři jsou dostupné na adrese končící na /home/, úkoly pak v tom končícím na /tasks/. (Pozn. v javové verzi zmiňovaného nástroje lze adresu zkopírovat klepnutím na buňku v tabulce a následným stiskem Ctrl+C, ač to vypadá, že se nic nestane.) Až se kalendářová aplikace (např. Thunderbird) zeptá na heslo, stačí zadat přihlašovací údaje k iCloud účtu. Mně to fungovalo s přihlašováním celou e-mailovou adresou (končí mi na @gmail.com, ačkoli k tomuto iCloud účtu mám přiřazenou i applí poštovní schránku končící na @me.com, resp. @icloud.com). Prostě by to mělo fungovat, když se tam zadají stejné přihlašovací údaje, jako do políček na jméno a heslo při přihlašování do webového rozhraní iCloudu.

Nicméně celá tato opičárna s PHP/javovou aplikací není nutná: Ve zmíněných vývojářských nástrojích v prohlížeči je totiž možné zahlédnout i parametr dsid, který je součástí adres webových služeb, na něž se applí webové služby dotazují. A toto dsid je jediná zbývající součástka pro sestavení platné adresy webdavového přístupu k iCloud kalendáři. Formát je tedy následující:

https://p[XX]-caldav.icloud.com/[DSID]/calendars/home/

[XX] je číslo serveru, např. 02.
[DSID] je zjištěné id, např. 1234567890.

Výsledná adresa by tedy vypadala např.:

https://p02-caldav.icloud.com/1234567890/calendars/home/
pro hlavní kalendář, resp.
https://p02-caldav.icloud.com/1234567890/calendars/tasks/
pro úkoly.


Firebug2


V případě, že je potřeba synchronizovat více kalendářů a více úkolníků, je situace složitější, ale v tom právě může pomoct ona odkazovaná aplikace. Smutné je, že přinejmenším její javová podoba nechápe, že názvy kalendářů jsou v UTF-8, takže zobrazuje bordel místo textu, základní použitelnosti to ale naštěstí příliš neubírá.

Aktualizace 11. května 2013:

Úkolníček služby iCloud umožňuje ukládat položky do různých seznamů. Tj. kromě základního seznamu s úkoly je možné mít i další, např. rozdělené podle kontextů (doma, práce…). Tyto seznamy je možné v nativních aplikacích (vč. webové) kdykoliv bez problémů vytvářet, přejmenovávat a mazat. Toho sice v aplikacích třetích stran (např. Thunderbirdu) nedosáhneme, můžeme ale aspoň spravovat a synchronizovat obsah těchto úkolníčků.

Pokud jsme použili výše a dříve zmiňovanou javovou (resp. PHP) aplikaci, dostali jsme seznam kalendářů a úkolníků (ač nejspíše s rozbitými nabodeníčky). Z tohoto seznamu si můžeme rovnou zkopírovat adresu a použít ji v kalendářové aplikaci dle libosti. K tomuto nám však stačí i pouhý prohlížeč a nemusíme nic instalovat nebo stahovat.

Stačí se přihlásit do iCloudu a přejít do úkolníčku maje přitom otevřený nástroj pro monitorování síťových přenosů (viz výše): https://www.icloud.com/#reminders
A v seznamu požadavků nás zajímá ten směřující na adresu pXX-remindersws.icloud.com/changeSet?… A ten v POST datech obsahuje pole s identifikátory jednotlivých úkolníčků. Kontrétně nás zajímá hodnota atributu guid. Základní seznam úkolů má GUID tasks, uživatelsky vytvořené pak již nějaké normálnější, sestávající se ze skvadry čísel, písmen a pomlček, např. ABCD0123-CD01-EF23-456A-1234ABCDE789.

Firebug3

Z tohoto GUIDu pak vytvoříme adresu kalendáře: Stejně jako jsme měli pro základní úkolníček adresu
https://p[XX]-caldav.icloud.com/[DSID]/calendars/tasks/
pro další seznamy to bude:
https://p[XX]-caldav.icloud.com/[DSID]/calendars/[GUID]/
tedy např..
https://p02-caldav.icloud.com/1234567890/calendars/ABCD0123-CD01-EF23-456A-1234ABCDE789/

Pravda, nezjistíme tak, který je který, protože vidíme jen GUID, ale snad není příliš naivní myslet si, že v tom poli Collections budou ve stejném pořadí jako v seznamu, který vidíme na webové stránce.

Otázka do pléna na závěr? Je běžné, že Thunderbird s dvěma IMAP účty a pár kalendáři po spuštění sebere prakticky veškerou paměť, hrabe na disk jak zběsilý a zasekne tím celý počítač? Lze toto nějak řešit? Děkuji.

Jak vytvořit ISO obraz z CD/DVD v Linuxu
na’vi, charmeleon, avatar, na'vi
glutexo

Každý pravidelný uživatel Linuxu to ví a já na to pořád zapomínám: A to, že vytvořit ISO obraz datového CD/DVD v mechanice je otázka nasátí surových dat ze zařízení a jejich vyplivnutí do souboru tak, jak leží a běží. Máme na to dd, na který také neustále zapomínám. Tak sem ten kouzelný příkaz napíšeme, ať tím trochu zrecyklujeme vědění veškerenstva a ať ho tu najdu, až si vzpomenu, že jsem zase zapomněl.

dd if=/dev/cdrom of=~/obraz.iso


Aktualizace pro BSD/Mac OS X:


Na /dev/cdrom lze zapomenout. Bude to /dev/disk2 nebo něco podobného.


V Krušných horách je krušně
na’vi, charmeleon, avatar, na'vi
glutexo

Po půl roce jsme se zase podívali do Německa. V saském Steinbachu jsme si všimli podezřelé hvězdičky na nokiáckých mapách a dozvěděli se, že je tu nádražíčku jakési jen málo používané železnice a že se tu zrovna dnes konají jízdy parním vláčkem. Měli jsme tedy možnost se pokochat jednak tím a jednak i historickým Omnibusem.

Zároveň mne toto zastavení na maličkém festiválku zaujalo tím, jak byli místní milí a ochotní: Obchodníci nebyli nevrlí, naopak se snažili dělat obchod jak mohli, všichni přáli veselé Velikonoce, slečna v osternhäschením fursuitu rozdávala čokoládičky. O to to bylo pozoruhodnější, že byla zima jak v ruskym filmu a lidé byli přesto stále rudní. Jiný kraj, jiný mrav.

Zajímalo by mě ale jak je to možné, že kdykoli jedu do Krušných hor, začne sněžit, mrznout a obecně začne být naprosto nežitelno. Se železno pravidelností se tak děje již mnoho let pokaždé bez ohledu na roční dobu.

Tags:

Som obnovil.
na’vi, charmeleon, avatar, na'vi
glutexo
Obnovil jsem svou kešku Ayska'ayu kifkeyä.

Přesunul jsem ji na o něco bezpečnější a klidnější místo, kde má větší šance vydržet bez úhony, ale zároveň k ní lovec musí stále tou správnou cestou a pokochá se vším, čím se pokochat má. Je sice škoda, že už to není ten původní ammo-box, ale jen plastová krabička, na druhou stranu už dlouhou dobu (ač s přestávkami) funguje a jednou za uherský salám ji i někdo najde. Poslední nálezce mi dokonce udělil tu novou vymoženost, tedy bod oblíbenosti.

Ne, že bych byl nějak nadšen z těch všudypřítomných mysterek, stále mám potřebu tu svou obhajovat: Obtížnost je sice 4,5 z pěti, ale na luštění není nic štvacího, jak to u pětkových mysterek často bývá. Přijít na to, o co jde, je otázka jednoho dvou dotazů do vyhledávače, s pomocí nápovědy musí být jasno hned. A pak už jen píle a trpělivost. Leč od počátku luštění až po nalezení finálky není, kde tápat, co tipovat a proč věštit. Vyluštění není otázka čekání na spásný nápad a obvolávání kolegů: Stačí chtít a věnovat tomu trochu času.

Ani má druhá mysterka (Koi koi!) není nikterak záludná: Vše, co je potřeba k vyluštění, je přímo v listingu. A kdo je důvtipný a mrkne se na mapu nebo zná okolí nejspíše ani nebude muset nic luštit a může to zkusit dát hrubou silou s velkou nadějí, že uspěje.

Tedy prosím, dělejte mysterky takto: Třeba obtížné a náročné, ale jasné a datelné. Díky!

Killer sudoku na steroidech
na’vi, charmeleon, avatar, na'vi
glutexo

Narazil jsem na drsné a vytůněné Sudoku: Podobá se klasickému killer sudoku: V začátku neznáme žádná čísla, pouze máme ohraničené spojité oblasti, u kterých vždy víme součet čísel v nich, a také víme, že kromě řádků, sloupců a čtverců se ani v těchto ohraničených oblastech číslice neopakují.

Řešení takového sudoku však nejspíše není unikátní (nakrmil jsem jím řešítko, které jsem si našel), ale výsledek nebyl takový, jaký jsem chtěl: Chtěl jsem jiné možné řešení, ne libovolné. A nejspíše právě proto je zadání obohaceno ještě o informace o některých dvojicích sousedících políček, že na jedné straně je číslo větší než to na druhé.

Zajímalo mě, zda na to lze jít metodou hrubé síly, tedy projít si všech 981 kombinací a porovnat je proti zadání. Nešlo: Za deset minut běhu program prokombinoval jen třikrát prvních osm pozic. Takže než by prošel všechny, uplynula by přibližně věčnost. Takže na to budeme muset jít jinak. Jak?

Pár možností mě napadá: Např. zjistit si pro každou ohraničenou oblast všechny možné kombinace čísel v rozsahu 1-9, které dají při daném počtu polí daný součet a následně do oblastí dosazovat tato čísla ve všech možných kombinacích. Pak už by stačilo jen pro každé vyplnění plochy jen zvalidovat, zda platí základní pricipy sudoku a zda platí ona pravidla o tom, které ze sousedních polí má obsahovat větší číslo. Ale nedostanu se tím opět do astronomické množství kombinací a tak času? Uvidíme, ale jindy.

Nebo máte někdo nějaký nápad, nebo dokonce víte a jste ochotni mi řešení představit a vysvětlit? Rád se přiučím.

A pokud by někoho zajímalo zadání, tak se jedná o kešku Loki's mystery (GCZE5N).


Lokalizace data a času v Rails
na’vi, charmeleon, avatar, na'vi
glutexo

Jsa v Ruby vč. Rails naprostý nováček, i jednoduchá záležitost jako naformátovat datum a čas podle jazykového nastavení pro mě byl oříšek. Máme k dispozici funkci localize (s aliasem l), leč zpočátku mi způsobila více starostí než užitku: Její zavolání na datumový objekt totiž hezky fungovalo v angličtině (locale :en), ale při nastavení jiného locale (:cs) to již neprošlo.

Výsledkem hledání byl gem delocalize, který umožňuje nadefinovat si v lokalizačním souboru (cs.yml) pravidla pro formátování data a času. Žel jsem nedokázal najít žádný už připravený pro češtinu, tak jsem si vyrobil svůj (https://gist.github.com/Glutexo/4971259), ačkoli možná vynalézám kolo. Je to první pokus a asi nebude vše dobře, je možné, že jsem si spletl separator a delimiter, nebo že mám špatně některý z formátů, ale zatím to vypadá, že to funguje. Měsíce jsou v genitivu, aby se v dlouhém datu (1. března 2013) zobrazovaly hezky; při samotném vypsání názvu měsíce to ale hezké nebude vůbec.


Kdo máte zkušenosti s Ruby on Rails, dá se nějak zařídit, abych dostal nějakou rozumnější chybovou hlášku než jen 500 Internal Server Error? Aplikace mi běží v development módu, když mám chybu např. v controlleru, tak se dozvím jak v logu, tak výstupu, vše co je třeba, ale jakmile udělám nějakou botu jako např. zavolání localize na datum bez nainstalovaného delocalize, dostanu jen nicneříkající chybu (Něco se pokazilo.) na výstupu a v logu stejně vágní pětistovku.

Tags: ,

坊主
na’vi, charmeleon, avatar, na'vi
glutexo

Na to, jak dlouho se již věnuji Hanafudě, jsem se až dnes při pročítání (a překládání) pravidel Hačihačihany dozvěděl, že slovem 坊主 (bózu) se v karetním slengu označuje srpnová karta s velkým bílým měsícem, asi nejcharakterističtější karta pro celý balíček. Na to, že toto slovo mimo karetní svět znamená buddhistického mniha, případně přeneseně chlapíka či chlapce, jsem byl tímto zjištěním zaskočen: V celých pravidlech totiž není nikde vysvětleno, která karta že to ten bózu je. Prozradil mi to až slovník, konkrétně Kódžien, který u hesla 坊主 uvádí jako devátý význam: „Hanafudová karta s měsícem za dvacet bodů.“

Proč tomu tak je, je mi záhadou. Máte-li nějaký tip, nebo to dokonce víte, podělte se. Pravda, nepátral jsem.