Jak na Twitteru sledovat stovky účtů a nezbláznit se z toho

Ačkoliv Facebook poslední dobou přitahuje čím dál víc technických informací a konverzací, stále jednoznačně nejlepším zdrojem různých novinek, odkazů i zajímavostí zůstává Twitter. Na Twitteru jsem jako @borekb, a pokud se podíváte, kolik lidí followuju, bude to aktuálně nepěkné číslo kolem pěti set účtů:

twitter-borekb

Říkáte si, jak se to dá zvládnout? Existuje na to docela jednoduchý trik. Klíčem jsou privátní Twitter listy (nebo i veřejné, pokud vám nevadí, že kdokoliv vaši kategorizaci uvidí). Moje listy vypadají následovně:

twitter-borekb-listy

Důležité jsou dva privátní listy mt a mtt, ve kterých je vždy nějaká podmnožina všech “followings”, dohromady s hlavní timelajnou mám tedy tři skupiny lidí:

  • Hlavní časová osa neboli všichni (zhruba 500 lidí, nový tweet každou chvíli) – tam mám všechny sledované účty, z nichž některé jsou například vývojáři zevnitř Microsoftu (insiderské informace), účty zajímavých produktů, zábavné účty atd. Čtu, když mám dostatek času nebo když jsem na projektu, kde kompilace trvá příliš dlouho.
  • List mt (100 až 150 lidí, aktualizace několikrát za hodinu) – zde jsou většinou české účty a jen pár mimořádných zahraničních osobností. Čtením tohoto listu mi neunikne nic podstatného z ČR a má pro mě nejlepší poměr “cena / výkon”, takže ho používám zdaleka nejvíc.
  • List mtt (cca 20 lidí, aktualizace v řádu desítek tweetů denně) – kamarádi nebo výjimečně přínosné účty, u kterých nechci propásnout žádný tweet.

Samozřejmě platí, že lidé v listu mtt jsou také v listu mt:

twitter-lists-schema

Toto rozdělení má hned několik výhod, např.:

  • Čtu jen tolik informací, na kolik mám právě čas. V mém primárně používaném listu mt přečtu 24 hodin informací za přibližně půl hodiny, ale nebyl by problém udělat si např. další list, pokud bych chtěl víc informací a chtěl tomu věnovat víc času, nebo naopak.
  • Twitter standardně pouští “jen” několik set tweetů do historie. Pokud jste správný Twitter závislák jako já a nechcete přijít o žádné informace od určitých lidí, jsou úzké listy možností, jak se dostat i mnoho dnů až týdnů do historie, např. po dovolené (moje hlavní timelajna končí zhruba den, dva zpátky, což je někdy nedostačující).
  • Někoho odfollowovat musím jen zcela výjimečně, většinou stačí přesun do jiného listu.
  • Přestal jsem řešit, jestli někoho jen kvůli DM (přímým zprávám) followovat nebo ne. S privátními listy followování nebolí.

Má to i své drobné nevýhody, např. kategorizací je potřeba strávit určitý čas (ale jak to je jednou hotové, udržování je pohoda) nebo třeba v Android klientu nejsou listy podporovány tak dobře jako hlavní timeline, takže např. čtete list, odpovíte na tweet, místo zpátky na list vás to hodí na záložku Home a když se přepnete zpět do listu, jste úplně nahoře a ne tam, kde jste skončili minule.

Jsou to však jen drobné otravnosti ve srovnání se zásadními výhodami, které mi listy přinášejí. Upřímně, nedokázal bych si bez nich už efektivní využívání Twitteru představit.

Pokud sledujete hodně účtů, máte nějaký podobný systém nebo další tipy?

Tisíc pohledů na TDD

TDD (Test-Driven Development) je hype. Každý opravdový vývojář dneska dělá “TDD”, a kdo ho nedělá, je začátečník nebo naopak patří do starého železa, to je snad nad slunce jasné. Jenže co je vlastně TDD? Je to něco přesně definovaného nebo se tímto pojmem vývojáři ohání jen proto, že je dneska cool?

hype

Texy.js

K zamyšlení v tomto článku mě přivedl projekt Texy.js, reimplementace Texy! v JavaScriptu od Aleše Roubíčka, který podle Alešových slov TDD používá. Byl jsem nadšený, když jsem se o projektu dozvěděl, protože jednak stojím o Texy.js samotné, a pak jsem taky chtěl konečně vidět, jak bude TDD vypadat na projektu, který je pro testování jak stvořený, a od vývojáře, který TDD dlouhodobě praktikuje a propaguje. Kód je navíc (zatím) jednoduchý a relativně přímočarý, takže se jedná o skutečně skvělý studijní materiál.

Jak jsem začal koukat na zdrojové kódy Texy.js, něco mě zarazilo (kromě neznámých obratů v JavaScriptu, detailů zpracování textu atd.). Takhle nějak vypadala naše GTalk konverzace s Alešem pár minut poté:

BB: Ty Texy.js neděláš pomocí TDD, viď?
AR: Samozřejmě že dělám, proč myslíš, že ne?

Proč jsem myslel, že ne? Protože v commitu 4dbb4e4 se objevilo jakési UTF-8 kódování a dekódování a tato změna přitom nebyla diktována žádným testem. Podle Alešových slov byl tento commit přidán omylem a měl jít ruku v ruce s commitem následujícím (7b496fc), který si údajně kódování UTF-8 vynucuje, ale zaprvé si to nemyslím (test lze uspokojit jednodušším způsobem než zavedením UTF-8 knihovny) a zadruhé mám spíš pocit, že ten pozdější commit 7b496fc jen fixuje test, který byl předtím napsaný špatně a po změně produkčního kódu padal (stringy v JavaScriptu jsou UTF-16 a test na zalamovací pomlčku ji z nějakého důvodu zapisoval v UTF-8). Až později Aleš na svém blogu vysvětlil, jaká byla motivace k některým obratům, a tam jsem si právě uvědomil, že každý pod TDD možná vidíme něco jiného.

Můj pohled na TDD

Například můj pohled je ten, že odlišujícím faktorem TDD a “prostého” test-first development je právě ten, že testy by v TDD měly posouvat produkční kód kupředu, měly by být jeho řídícím faktorem, hnací silou. Testy v TDD by IMO měly dávat tvar produkčnímu kódu a proto se taky TDD někdy (podle mého názoru správně) označuje za technika agilního designu.

Možná si ale různí lidé pod TDD představují různé věci nebo je to také o tom, že hodně záleží na konkrétním projektu. Pokud se vrátíme k Texy.js, tak veřejné API této knihovny je tak primitivní (jedna metoda process() se stringem na vstupu a jiným na výstupu), že tady o nějakém přínosu TDD na úrovni designu těžko může být řeč. (Naopak bychom mohli diskutovat o tom, co pro API znamená, že se kvůli testování musela zpřístupnit jinak interní metoda normalize(), ale zaprvé je to IMO OK a zadruhé by to bylo na jinou debatu.)

Jindy se zase paušálně říká, že TDD vede k “čistšímu kódu” (správnější je říkat k “čistému návrhu”, ale zůstaňme na okamžik u tohoto zjednodušení). Znovu na příkladu Texy.js, podle mého názoru jsou v kódu jak věci hezké, např. použití funkcí map / reduce pro aplikování filtrů, tak věci trochu kontroverzní, např. interní kódování do UTF-8 nebo použití regulárních výrazů na zpracování neregulárního jazyka. Souvisí nějak tyto věci s tím, jestli se kód psal stylem test-first, test-after, TDD, BDD nebo jakýmkoliv jiným? Podle mě ne.

Pragmatický přístup k vývoji

Jestli mě léta strávená s Flexem něco naučila, tak to, že se nikdy nic nedá hodnotit paušálně, a zatímco např. testy nepokrytý kód v .NETu znamená v agilních kruzích téměř smrtelný hřích, GUI ve Flexu se automatizovanými testy nepokrývá téměř nikdy a obecně se to považuje za racionálnější přístup, než se o to pokoušet. K řadě věcí tak přistupuji s otevřeným hledím a snažím se koukat, jaký konkrétní přístup by se hodil pro daný konkrétní problém.

Jak bych k vývoji Texy.js přistoupoval já?

  1. Rozhodně bych kód intenzivně testoval, jako Aleš. Dokážu si představit jen málo typů projektů, kde by se testy hodily víc než u konvertovátka textu nebo obecně čehokoliv.
  2. Patrně bych tomu neříkal TDD a dost možná bych se TDD ani nesnažil přiblížit.
  3. Ohledně interní implementace bych před samotným psaním produkčního kódu strávil dost času výzkumem. Zpracování gramatik je matematický problém, nepochybně důkladně prozkoumaný a “vyřešený”. Doufat, že přijdu s implementací blížící se té “optimální”, mi připadá nerealistické. Tak trochu NIH, mohu-li si popíchnout :)

Jak jsem už mnohokrát naznačil, nejde mi o nějakou polemiku s Texy.js. Aleš může mít různé motivace k psaní Texy.js způsobem, jakým to dělá, a lidi s jiným pohledem na TDD navíc můžou stoprocentně souhlasit. Je to ale IMO krásný příklad toho, že TDD pro jednoho nemusí vždy znamenat TDD pro druhého.

Nutné P.S. na závěr: Pohledů na TDD samozřejmě není tisíc, ale zní to líp než osm :)

Not Invented Here

Cestou do práce jsem tuhle poslouchal díl Hanselminutes, který se věnuje provařeným “anti-patternům” jako Copy Paste Programming, Iceberg Class, Copy Folder Versioning atd. – v podstatě je celý díl komentářem k tomuto motivačnímu kalendáři.

Jedním z probíraných antipatternů je i Reinventing the Wheel, který úzce souvisí se syndromem NIH, Not Invented Here. Ten je zhruba o tom, že některé týmy a priori odmítají cizí software s tím, že “nebyl vynalezen zde” a přinesl by víc potíží než užitku. Takové uvažování je zvlášť v agilní komunitě považováno za špatné, za “anti-pattern” a nálepka NIH má náležitě pejorativní nádech. Ale víte co? Čím jsem starší, tím víc NIH chápu.

Software se totiž dělí do dvou skupin – ten z první skupiny funguje dobře a ten z druhé ne. Hranice mezi těmito skupinami je bohužel tenká a často subjektivní a problémem cizího software je, že málokdy lze dopředu odhadnout, do které vlastně patří. Už se mi tak mnohokrát stalo, že jsem si řekl “nebudu programovat nic vlastního, prostě použiju nějaké stávající řešení”, a pak následovalo zhruba tohle:

  • Vygooglil jsem si několik řešení pro můj problém
  • Zkontroloval licence
  • Strávil čas hledáním ohlasů na jednotlivá řešení, abych vyloučil outsidery nebo naopak objevil “hvězdy”
  • Zkontroloval další metriky, které mě obvykle zajímají, např. jaká je komunita okolo projektu, jestli je aktivně vyvíjen, jestli se fixují bugy apod.

Nakonec jsem nějaké řešení vybral, nasadil a… a byl zklamán, protože software aplikován na můj konkrétní případ s mými konkrétními požadavky měl nějaký problém. Takže znovu – zkusit dalšího kandidáta, strávit s ním další čas, zjistit, jestli vyhovuje atd. Někdy navíc ani není možné během krátké zkušební doby zjistit, jestli software 100% vyhovuje, což pak může vést ke scénáři, který bych nikomu nepřál, ale který jste patrně všichni někdy zažili. Ke scénáři zvanému noční můra.

Noční můra je, když se ze začátku cizí software tváří schopně, a až časem, velmi postupně, zjišťujete, že řešení vlastně moc nevyhovuje. Ne, nevyhovuje je slabé slovo, po čase zjistíte, že původní řešení z duše nenávidíte. Stalo se mi to u několika zásadních věcí, jako je třeba zvolené CMS pro web, zvolený mikro-framework pro zákaznickou aplikaci, jeden interní systém apod. Ve všech těchto případech nastalo řekněme po roce používání nepříjemné dilema – trpět dál s cizím systémem, zkoušet ho upravit, pokud to vůbec jde, nebo s relativně vysokými náklady migrovat někam jinam? Ale kam? Na “NIH” nebo “IH” řešení?

Čím víc podobných zkušeností jsem udělal, tím víc NIH chápu. Ano, jsou věci, kde NIH považuji za jasný syndrom, např. bych v .NETu rozhodně nezvažoval psát vlastní unit testing framework, ale ani u těchto věcí nikdy neříkej nikdy – třeba Jakub Vrána teď napsal “yet another” minifikátor JavaScriptu, a přesto k tomu měl dobré důvody:

  • JSMin měl problematickou licenci
  • Dal si tu práci, vyzkoušel několik stávajících řešení, a řada z nich kupodivu obsahovala chyby (viz článek a komentáře)

Ostatně, zkušenost s cizím SW popisuje Jakub takto:

Přiznám se, že cizí knihovny nepoužívám moc ochotně. Nejdřív strávím spoustu času hledáním té, která by mi vyhovovala. Pak často zjistím, že mi stejně něčím nevyhovuje. Když to opravím, pošlu změnu autorovi a on ji přijme, tak čekám na vydání nové verze. Když vyjde, tak musím otestovat, jestli se neporouchalo něco jiného. Cizí knihovny taky často mají závislosti (např. na Javě), které já vyžadovat nechci.

Takže asi tak. Osobně se stále snažím hledat existující software, který by můj problém řešil, a často je to pragmatické – přeci jen třeba naprogramovat celé CMS je tak velká práce, že je výhodnější se občas zavztekat nad WordPressem. Přesto jsem během posledních let svůj vztah k NIH přehodnotil – docela tento syndrom chápu. Software is hard.

Čeština vs. angličtina v commit zprávách

Ve svém okolí už naštěstí nevím o nikom, kdo by psal kód v češtině, a to je jedině dobře. Při vývoji se ale člověk nesetkává jen s kódem a “bohužel” toho čte nebo píše daleko víc, například:

  • Commit message do VCS
  • Komentáře na GitHubu, BitBucketu nebo jiném code review toolu
  • Tickety v bug tracking systému
  • User stories / lístečky na tabuli
  • Doc commenty, generovaná dokumentace
  • Specifikace
  • Wiki atd.

Každá z těchto věcí jde potenciálně psát v češtině nebo v angličtině, a pokud jste čistě lokální tým bez větších šancí na brzkou mezinárodní expanzi, má čeština své výhody a je potřeba se rozhodnout, kde udělat ten nepříjemný přechod.

Zatím na všech místních projektech, co jsem byl, se zhruba dodržovalo následující:

  • Kód v angličtině
  • Komentáře a případná dokumentace v angličtině
  • Commit message v angličtině
  • Všechno ostatní v češtině

Ono to má svou logiku – vše, co je blízko kódu, je anglicky, a “nedůležité” věci okolo se kvůli snadnější srozumitelnosti a řadě dalších důvodů píší česky. Trochu nepříjemné ale je, že se tyto věci prolínají – např. bug tracking systém v češtině zobrazuje commit message v angličtině, diskuze pod anglicky psaný commitem probíhá v češtině apod.

Protože jsou častým účastníkem oněch “třecích ploch” právě commity, přemýšlel jsem, jestli nezačít psát commit zprávy česky a anglicky nechat jen kód. Opravdu, jaký má smysl psát popisy commitů v angličtině, když veškerá další komunikace okolo projektu probíhá v češtině? Není naopak vynucovaná angličtina určitým klackem pod nohy vývojářům? Přeci jen, dávat dohromady anglické věty už je něco jiného než psát v angličtině kód.

Zatím jsem se k psaní commit zpráv česky neodhodlal, stále mi to připadá svým způsobem divné, ale trochu to ve mně hlodá pokaždé, když někde vidím mix češtiny a angličtiny.

Kde děláte čáru mezi češtinou a angličtinou vy?

Snadné přepínání skrytých souborů ve Windows

Na správu souborů používám Průzkumníka Windows, což má své výhody (je všude a je jednoduchý) i nevýhody (má méně funkcionality než správci typu Total Commander). Jedna z věcí, která se nedělá v průzkumníku moc snadno, je zobrazování nebo naopak schovávání skrytých souborů, což se může hodit např. při práci s Gitem (TortoiseGit nastavuje složce .git atribut hidden). Defaultně se musí poměrně hluboko do nastavení a to je otravné.

hidden-files

Koukal jsem proto, jak přepínání zjednodušit. Všechny metody pracují s úpravou registrů, jen se liší tím, jak příjemně ji zpřístupňují navenek. Dá se tak najít např. Windows desktop gadget (už bohužel oficiálně přes web Microsoftu nedostupný), přidaná položka v kontextovém menu průzkumníka nebo, a to se mi líbí nejvíc, malá aplikace ToggleHiddenFiles, která funkcionalitu zpřístupní přes Win+H.

Tato poslední utilitka pochází ze serveru howtogeek.com a zprovoznění je skutečně jednoduché:

  1. Stáhněte si ToggleHiddenFiles.zip a někam ho rozbalte (link je z tohoto článku).
  2. Odkaz na EXE umístěte do složky Startup (Po spuštění), aby tato funkcionalita byla dostupná i po restartu počítače, a EXE spusťte.

Tím je hotovo, aplikace běží na pozadí, reaguje na Win+H, a pokud se jí chcete zbavit, ukončete v task manažeru proces ToggleHiddenFiles.exe. Jednoduché a funkční.

Všechny detaily v článku na howtogeek.com.

WordPress v roce 2012

DevBlog pohání WordPress. Ještě než vše zapomenu, sepíšu, proč jsem se pro něj rozhodl a jaké slasti a strasti mi to přineslo.

Když jsem vybíral CMS pro tenhle web (který zatím vypadá jen jako triviální blog, ale časem budou potřeba zajímavější vlastnosti), vycházel jsem ze dvou zásadních faktů:

  1. Nebudu mít čas psát si vlastní redakční systém
  2. Všechna hotová CMS dneška stojí za houby

S druhým bodem nemusíte souhlasit, ale moje zkušenost je zkrátka taková – na každém CMS mi něco zásadního vadí, neboli redakční systém, do kterého bych se zamiloval, jsem ještě nepotkal. Napsat si vlastní, mě dlouhodobě láká, ale zaprvé je to hodně práce a zadruhé si ani nejsem jistý, že ve všech důležitých věcech vím, jak na to (bylo by to na delší vyprávění).

Takže bylo potřeba vybrat nějaký stávající “špatný” systém. Ve světě .NETu nevzniklo nic, co by mě lákalo, u menších systémů typu Octopress (mimochodem hezký “programátorský” design) se dříve nebo později narazí na něco, co chybí, a z ostatních velkých CMSek, což jsou zhruba WordPress, Drupal a Joomla, padla volba na WordPress hlavně proto, že jsem si s Drupalem dostatečně užil na svém předchozím blogu a Joomla je principiálně podobná.

Poznámka: Hostovaná řešení typu Blogger, Posterous nebo wordpress.com jsem zvažoval, ale tam člověk narazí na limity customizace ještě dříve než u instalovaných řešení.

Takže WordPress. Používal jsem ho už někdy v roce 2005 a od doby, co jsem přešel na Drupal, jsem další vývoj moc nesledoval. Tehdy platilo, že WordPress je jednoduchý a populární systém, uvnitř ovšem kovbojsky napsaný. Myslel jsem, že se to za těch 7 let muselo změnit, ale ne, platí to pořád.

image

WordPress je bastl, ale velmi úspěšný bastl. To má své výhody, např.:

  • Na skoro cokoliv seženete plugin (je jich snad až moc)
  • Existuje nepřeberně témat vzhledu
  • Pro WordPress existují komerční hostingy, Android aplikace, importéry / exportéry do jiných systémů, prvotřídní podpora v Live Writeru atd. atd.

Celkově je příslib takový, že s WordPressem i jako neodborník postavíte skoro jakýkoliv web, a ono to docela platí.

Pak ale začnete narážet na realitu, která úzce souvisí s tím, že WordPress je uvnitř jeden velký bordel. Například:

  • WordPress by měl jít nainstalovat na MS SQL a skutečně tam funguje prakticky všechno, až na jednu maličkost – v současné verzi SQL dotaz nevrací příspěvky. Db abstrakce je totiž ve WordPressu spíš hack než systémové řešení.
  • WordPress neřeší testovací prostředí. Tím, že je něco v souborech a něco v databázi, je sync mezi testovacím a živým prostředím komplikovaný a žádný pohodlný postup nebo plugin na to není.
  • Pluginy jsou v různé kvalitě a různě kompatibilní i se setinkovými verzemi.
  • Každé “téma vzhledu” je prakticky další ohromný plugin do WordPressu, obsahuje nejen šablony, ale i PHP funkce, přidává unikátní funkčnost atd. a spíše než o WordPressu by se tak mělo mluvit o WP + konkrétním vzhledu. Nepříjemným praktickým dopadem je, že některé postupy přestanou fungovat s přepnutím na jiné téma vzhledu, vůbec samotné přepnutí může způsobit řadu komplikací atd. atd.

Navzdory tomu všemu, navenek je WordPress docela hezký a příjemně použitelný software. Webová administrace je pěkná, integrace do Live Writeru špičková, skin, který vidíte, je jen trochu upravený výchozí, během pár minut jsem do WordPressu díky pluginům dostal kupu funkčnosti (Google Analytics, zálohy, antispam, Feedburner, kalendář future-postů apod.) a i do budoucna věřím, že se s dalšími customizacemi půjde poprat, i když mi asi občas budou skřípat zuby.

WordPress je zkrátka docela rozumný základ webu, ačkoliv si pořád někde vzadu říkám – to vážně v roce 2012 neexistuje pořádný CMS?

Spouštím DevBlog

Vítejte na novém blogu pro české vývojáře, nebo, možná by bylo správnější říct, v testovacím provozu něčeho, co si časem bude říkat DevBlog. Zatím budu tento web používat jako pokračovatele svého původního blogu borber.com, ale vize je jiná, poněkud ambicióznější, jen je potřeba ji (v duchu agilního přístupu, že) realizovat postupně.

Toto je tedy první krůček. V současném stavu nejsem s mnoha věcmi spokojený, ať už se jedná o různé estetické detaily nebo i o samotný princip fungování (hint: anonymní komentáře zde dlouho nebudou), ale nějak se začít musí a ladit budu věci postupně. Mimochodem, pokud je mezi vámi nějaký expert na WordPress, dejte vědět, pár otázek bych měl :)

dalsi-blog

Možná si říkáte, že je blbost dělat v roce 2012 další blog, ale tak nějak to ve mně uzrálo a už mě nebaví jen štěkání ve 140 znacích. Doba, kdy blogosféra byla v podstatě jedinou sociální sítí pro lidi z našeho oboru, měla své kouzlo a na psaní se po delší době, věřte nevěřte, docela těším.

Jaká témata se budou na DevBlogu objevovat?

  • Vývojářské zázemí, infrastruktura – podceňovaná oblast, o které se moc nepíše, ale věci jako správa verzí, issue tracking a další infrastrukturní záležitosti jsou pro každý projekt veledůležité.
  • Programátorská témata – pochopitelně nemůžou chybět články o architektuře, návrhu ani implementačních detailech.
  • Nástroje – každý programátor má svůj “toolbox” a já budu postupně ukazovat, co k vývoji osobně používám a jak mi ty nástroje pomáhají.
  • UX – osobně mě hodně zajímá nejen technická stránka věci, ale i jak výsledky vnímají uživatelé. Jsem v tomto oboru laik, ale na věci mám své názory a nebojím se podělit :)
  • Ze života startupu – děláme teď s Jirkou Pénzešem na jednom projektu a je to po mnoha stránkách zajímavá zkušenost, takže občas něco utrousím i o tom.

Budu se snažit, aby články na tomto blogu vycházely s určitou pravidelností a byly rozumně krátké, takže je čas ukončit tento zápisek č. 1. Přeji DevBlogu, ať se mu daří, a případně dejte v komentářích vědět, jaká témata by vás zajímala.

Update: víc o dlouhodobější vizi DevBlogu jsem sepsal na borber.com.