Zápisník

// Odesílání denních přehledů ze služby Wunderlist emailem

Nějakou dobu používám jako úkolovníček službu Wunderlist (yup, taky jedu na GTD vlně). V některých aspektech předčí svého největšího konkurenta, Todoist (minimálně má notifikace v tarifu zadarmo a trošku přehlednější design). Jedinou věcí, která mi opravdu chybí, je automaticky zasílaný denní přehled (což prý Todoist má).

Naštěstí před nějakou dobou Wunderlist uvolnil API, které umožňuje aplikacím třetích stran přístupovat a spravovat obsah uživatelského profilu.

Napsal jsem si jednoduchý skript, který ze služby stáhne nedokončené úkoly a pošle email s denním přehledem. Nazval jsem jej Wudd. Nenabízím jej jako online službu (zatím?), každý si jej musí rozchodit na svém stroji (viz soubor README).

Hlavní vlastnosti:

  • 3 sekce: Dnešní úkoly, nezatříděné úkoly v inboxu bez data splnění, úkoly s datem splnění v příštích 7 dnech. Generická struktura s lambda podmínkami dovoluje snadno definovat další sekce.
  • HTML i plaintextová verze emailu.
  • Stručný souhrn v předmětu zprávy.
  • V současnosti je výpis v češtině. I18n zatím není podporováno.
  • Odešle email přes lokální SMTP server (autorizace & SSL zatím není podporováno).

Pro stažení navštivte moje Bitbucket repo. Na stejném místě lze hlásit chyby. Enjoy!

// Nový vzhled

Celkem dlouho jsem odolával bezpečnostním hláškám ohledně aktualizací DokuWiki, na které provozuji zdejší stránku. Updaty jsem odkládal hlavně kvůli množství zásahů, které jsem do kódu za účelem různých vylepšení udělal. Mergování těchto změn se stalo se zvyšujícím počtem změn v distribuci DokuWiki dost obtížné.

Před 2 týdny jsem si řekl dost a rozhodl se s tím něco dělat. Všechny úpravy jsem zahodil a stránky přenesl do nové instalace DokuWiki a postupně doplnil nezbytné pluginy. Blogovací plugin jsem nahradil za schopnější BlogTNG, jako šablonu jsem použil mnml-blog. Časem třeba dojde i na vlastní design.

Samozřejmě jsem neodolal, a několik úprav do kódu pluginu a templaty udělal (hlavně podporu pro dvojjazyčný web). Ale od minule jsem trochu zestárl a zmoudřel a kód DokuWiki je zatím netknutý, takže to nebrání hladkým updatům :-). Navíc jsem zúročil své nabyté zkušenosti s „lepšími“ verzovacími systémy a úpravy si vedu v paralelní branchi k updatům z oficiálních zdrojů. Postupně to tu dolaďuji, hlavně doplňuji chybějící české lokalizace v pluginech a templatě.

A až tohle všechno dodělám, dojde i na responzivní layout :-).

// Nový hosting, už zase!

Když jsem si u nově zřízené domény registroval freehosting u pipni.cz, tušil jsem, že to nebude na dlouho. Na free variantu jsem slyšel ne příliš lichotivé reference. Ty se mi opravdu během dvou měsíců potvrdily. Jeden server pro všechny free hostingy je zřejmě málo, dobou odezvy DokuWiki se mohl rovnat s Webzdarma. Navíc, během července se potýkal s velmi častými výpadky.

Oproti tomu na placené programy pipni.cz jsem slyšel i pozitivní názor. Jenže cena za placený hosting se mi zdála pro můj pidiweb příliš, navíc zdejší konfigurace PHP příliš nesedla DokuWiki. Takže jsem spíš uvažoval o jiném hostingu.

Marek mi minulý čtvtek večer předhodil hosting klenot.cz. Prý mají dobré reference a jsou levní. 30 Kč měsíčně mě dost rychle rozhoupalo a po zkontrolování php nastavení jsem si ještě téhož dne hosting objednal. 350 Kč ročně už mi přišlo málo natolik, abych to mohl risknout. Zhruba za 10 minut přišel potvrzovací mail a účet byl vytvořen. Podle obsahu a hlavičky emailu bylo poznat, že byl odeslán ručně. Za registraci v půl desáté večer mají provozovatelé bod. V noci ze čtvrtka na pátek jsem pak přesouval celý web, zprovoznil wiki (narozdíl od pipni až na detail funguje úplně) a přepsal DNS záznamy. Druhého dne probublaly změny přes cache DNS serverů a bylo přesunuto.

Jediné, čím se nemůže nový hosting pipni rovnat, je administrační rozhraní. To je u klenot.cz omezeno jen na editaci emailových účtů a změnu hesel. Dále chybí různé vychytávky jako Subversion nebo WebDAV, jenže to jsou věci, které momentálně nemám důvod používat. Absence administračního rozhraní zatím nevadí, provozovatelé reagují rychle. Mojí žádosti na zrušení přesměrování z non-www URL na www bylo vyhověno ve velmi krátkém intervalu a tak i URL zůstalo při starém.

Nyní běží tento web na novém hostingu celý týden. Za tuto dobu neměl jediný výpadek, což na starém bylo téměř nemožné. Jen čas ukáže, zda-li to byl dobrý tip, nebo jen vyhozené peníze.

// Můj první plugin pro DokuWiki

Před několika měsíci jsem kompletně updatoval svoji website. Vybral jsem si DokuWiki jako velmi flexibilni engine rozšiřitelný spoustou pluginů.

Též jsem použil Blog plugin a další k vytvoření svého občasníku. Ale chyběla mi jedna vlastnost. Tou bylo zobrazení data vytvoření a autora na stránce příspěvku podobně, jako to vkládá Include plugin v seznamu. Ano, DokuWiki standardně tiskne zápatí, ale pokud je použit Discussion plugin, vloží se až pod všechny komentáře hodně hodně dolů.

Takže jsem spáchal jednoduchý plugin, který informace vkládá těsně pod příspěvek, nad komentáře. Stačí se podívat například na stránce tohoto příspěvku dolů. Musel jsem ale hrábnout do proměnných event handleru (které by v jiném jazyce velmi pravděpodobně byly privátní), abych plugin udělal prvním listenerem události TPL_ACT_RENDER_AFTER, tj. ještě před Discussion pluginem. Důsledkem toho je vždy text před komentáři. Nutno přiznat, že tento trik mi naťuknul Vity. Plugin lze stáhnout na stránce DokuWiki goodies.

// Photobase, nová verze, další featury

Po nějaké době jsem se dokopal k dalším inovacím na mojí fotogalerii. Stalo se tak vlastně až na základě okolností a potřeby nahrát do galerie cca 50 fotografií. Původní způsob jsem ihned zavrhl, protože bych se zřejmě uklikal k smrti. Světlo světa tak spatřil primitivní upload souborů přes FTP. K tomu jsem již dříve pracoval na systému pro lokalizaci, takže nyní mohu psát PhotoBase v angličtině a zachovat i českou verzi. Nemluvě o možnosti jednoduchého překladu do téměř jakéhokoli jazyka.

Lokalizace

PhotoBase

Abych si lokalizaci co nejvíce usnadnil, použil jsem jednoduše asociativního pole. Jednotlivá hesla k překladu jsou klíči pole a přeložená hesla pak obsahem jednotlivých položek. Tvorba nové lokalizace pak spočívá v založení nového souboru v podadresáři /inc/lang podle již existujícího exempláře a následného přeložení hodnot v poli. Jedinou nevýhodou je nutnost zachování korektní PHP syntaxe.

V kódu pak volám pro vložení hesla příslušnou funkci, která zajistí překlad, případně nahlásí debugovací komponentě neexistenci překladu a použije původní text. Pro složitější konstrukce s proměnlivými položkami existuje funkce, která po překladu provede nahrazení výrazů %1, %2 apod. hodnotami uvedenými jako parametry funkce. Tento fígl je použit snad ve všech aplikacích, které znám.

FTP upload

FTP upload

FTP upload

Jak bylo již řečeno, důvodem pro uspíšení vytvoření této funkce byla hromada fotek, které ulpěly na paměťové kartě mého mobilu po dovolené na Vysočině. Upload přes FTP není úplně to, co bych si představoval, pro někoho může být postup příliš složitý nebo nepohodlný, ale je to asi nejjednodušší řešení, kterého jsem byl schopen dosáhnout.

Jak to zhruba funguje … Administrátor musí každému uživateli, který chce nahrávat fotky přes FTP, vytvořit adresář pro uploady nesoucí jeho přihlašovací jméno a příslušný účet, pomocí kterého může uživatel do adresáře fotky nahrát. Tento požadavek je asi ze všeho nejvíc „zdržující“ a navíc je nutno při vytváření účtu dát pozor na přístupová práva, aby nebyla ohrožena bezpečnost aplikace (přístup do jiného než adresáře pro upload). Uživatel potom adresář naplní fotkami, které chce přidat. Pomocí příslušného odkazu přejde k hromadnému vkládání. Skript načte všechny soubory a zkontroluje jejich mime-typy, případně upozorní na neobrázkové soubory, které je nutno před nahráním z adresáře odstranit. Uživatel vybere galerii, do které chce fotografie nahrát a potvrdí.

V tuto chvíli nastává další z problémů tohoto řešení. Skript by měl správně soubory přesunout do adresáře pro fotografie. Ale důsledkem toho, že má FTP uživatel většinou jiná práva než webserver, je fakt, že skript soubory z adresáře pro upload odstranit nemůže. Proto je pouze zkopíruje a na tuto „chybu“ upozorní a varuje před možným opětovným nahráním v případě ponechání oněch souborů.

V budoucnu bych chtěl tuto nepohodlnou funkci nahradit mnohem sofistikovanější. Jako nejhezčí řešení se jeví Java applet. Bohužel v tuto dobu jednoduše prostě netuším, jak to přesně funguje. Například Facebook má velmi povedený. Asi začnu o této alternativě zjišťovat víc. Další možností je uploadovat fotografie v jednom souboru, například jako ZIP nebo TAR. Jenže to naráží na omezení v podobě maximální velikosti dat odesílaných metodou POST, takže se to jeví jako slepá ulička.

Nicméně ...

nové funkce jsou na světě. A to ještě před půl rokem to vypadalo, že tento mini-projekt bude jako spousta jiných zapomenut pod záplavou ostatních věcí a povinností. Takže pro zájemce odkazuji na stránky projektu PhotoBase. Pokud byste se přeci jen rozhodli galerii vyzkoušet, přivítám Vaše odezvy a případné hlášení chyb. Enjoy!