3. června 2011 ↴

Jak jsem naprogramoval TMZNS

Často přepočítávám časy v různých časových zónách. Někdy je to kvůli plánování dálkových konferencí, telefonátů, apod. — v tom pomáhá Google Calendar, který vše přepočítává automaticky. Častěji jde ale o mnohem primitivnější záležitosti:

  • Když mí kolegové v New Yorku něco vypustí v 9 ráno, kolik bude u nás?
  • Má teď cenu volat (nebo spěchat s emailem) do Indie? Do Japonska?
  • Když bude živý přenos z konference v Austrálii, kolik budou mít tou dobou v San Franciscu? A u nás?

Tady je Google Calendar krátký — nebo lépe řečeno “dlouhý”, protože byť v něm takové věci můžu zjistit, je to poměrně na dlouho. Jaké jsou další možnosti? Když hledáte v Googlu třeba time in tokyo, distanete odpověď, ale pouze o aktuálním času. Nejblíž k tomu, co potřebuji, je timeanddate.com, ale tam mě neskutečně nasírá jejich uživatelské rozhraní. Za drop-down menu s tři sta šedesáti šesti (!!!) položkami bych střílel. (Později jsem našel ještě mnohem použitelnější WorldtimeBuddy a EasyClock, ale i tady bych se dostával k požadované informaci zbytečně složitě a úplně nestandardním rozhraním.)

Osobně věřím, že pro textový vstup je pořád ještě nejlepší volbou — světe div se — klávesnice. Ideálně s auto-complete. Chtěl jsem rozhraní, kde bych mohl zadat: “9” → tab → “h” → enter → tab tab → “new y” → enter — a měl bych hotovo. 10 vteřin max. Místo toho jsem dostával samé klik → scroll scroll scroll scroll → klik → klik → scroll scroll → klik … a teď zadáme čas … klik → klik … oops, vedle … klik … → klik. Hotovo uff! Teď už jen kliknout na Convert time a počkat až se načte stránka. Co když chci změnit zadání? No přece zmáčknout link “Make changes to the current search” a klikat a klikat… Co když nedej bože potřebuji upravit druhý čas a zjistit, jak se to projeví na prvním? Vše znova.

Uznávám, že můj přístup je možná trochu specifický. Spousta lidí raději kliká. Ale napadlo mě, že by snad nebylo tak těžké něco takového naprogramovat a uveřejnit to na internetu. Krom toho jsem měl zrovna absťák z programování a hořel jsem touhou vyzkoušet Traceur. A taky Chrome Web Store.

A tak po večerech vznikl TMZNS. Začal jsem cestou na Google IO (7. květen) a první verzi “uveřejnil” 1. června.

Bylo to (samozřejmě!) víc práce, než jsem čekal. (Klasický příklad uvažování typu “tohle by přece mělo být jednoduché!”) V časových zónách je nicméně bordel: rozhodně nejsou jen po hodinách, nejsou rozloženy lineárně, ani po státech, každý si přehazuje letní čas, kdy chce, někteří víc než dvakrát ročně, atd. atp. Více info na Wikipedii.

Tvorba web aplikace mi trvala déle mj. proto, že jsem si toho chtěl co nejvíc vyzkoušet. Slibný Traceur jsem po chvíli vzdal, ještě v něm totiž není implementována žádná UI knihovna. Programování v Pythonu na AppEnginu jsem začal, ale velmi brzy jsem se vydal cestou “vše u klienta” — tedy JavaScript. AppEngine využívám, ale funguje jako bezplatný, velmi rychlý a nezničitelný webhosting (s tím, že je tam prostor na nějaké jednoduché API nebo aspoň statické URL typu tmzns.com/london/newyork do budoucna).

Následoval výběr JavaScriptové knihovny. Nejprve jsem automaticky sáhnul po jQuery, ale pak jsem se zamiloval do Closure Library. O výhodách i úskalích Closure a kompilovaného JavaScriptu se chci rozepsat na českém Google Blogu, takže si tady nechci vystřílet střelivo.

Po tom, co stránka začala jakž takž fungovat, jsem nasadil stylovací nástroj CSSEdit. Podle mě nejlepší způsob, jak “malovat” stránku v CSS. (CSSEdit jsem použil i při designu tohoto blogu.)

Protože je TMZNS open source projekt (zdrojáky tady), seznámil jsem se také blíže s Google Project Hosting a s Mercurialem (rozhodně doporučuji nad SVN, alespoň pro projekt tohoto typu).

TMZNS je web aplikace (která navíc využívá CSS3 a nejlépe vypadá v moderních prohlížečích), dávalo proto velký smysl ji dát na Chrome Web Store jako “aplikaci”. S nástrojem AppMator od kolegy Paula Kinlana to byla záležitost pár minut — i když to znamená, že v tuto chvíli “aplikace” není nic jiného, než bookmark k www.tmzns.com. Aplikace i s daty má totiž přes 7MB — a takové monstrum s tak jednoduchou funkcionalitou se fakt zdráhám někomu nahrávat na harddisk. Třeba se jednou dostanu k tomu tu velikost radikálně sesekat (“mělo by to být jednoduché”).

Aplikace mi už zdárně slouží a zdá se, že se líbí i ostatním. Na Project Hostingu už jsem (doufám zdárně) uzavřel svůj první, byť kosmetický issue. (Mimochodem, je neuvěřitelné, jak rozdílné je zobrazování barev na různých monitorech — původní “subtle” zvýraznění na některých monitorech vůbec nebylo vidět.).

Mám radost z vlastní tvorby i z naučených technologií. Takové projektíky si budu dávat častěji.

0 komentářů:

Okomentovat