Vanitygen a import adresy do Bitcoin-QT na MacOS

Dlouho jsem nic nenapsal a protože jsem si právě vygeneroval novou krásnou (1SHM12iG4KPRs54CxjLsCwbvnMJp4bMh5) Bitcoinovou adresu (jo, mohlo to být lepší, ale není na to výkon) na Mackovi za pomocí Vanitygenu, poznamenám si tu postup. Zdrojáky Vanitygenu je možné stáhnout z GitHubu, kde by měl být i Makefile pro Macka. Problém je v tom, že Macek … Pokračovat ve čtení „Vanitygen a import adresy do Bitcoin-QT na MacOS“

Dlouho jsem nic nenapsal a protože jsem si právě vygeneroval novou krásnou (1SHM12iG4KPRs54CxjLsCwbvnMJp4bMh5) Bitcoinovou adresu (jo, mohlo to být lepší, ale není na to výkon) na Mackovi za pomocí Vanitygenu, poznamenám si tu postup.

Zdrojáky Vanitygenu je možné stáhnout z GitHubu, kde by měl být i Makefile pro Macka. Problém je v tom, že Macek má staré verze OpenSSL knihoven (na mém 10.7.5 je OpenSSL 0.9.8x 10 May 2012), takže je nutné použít ty z Homebrew. No a protože není dobrý nápad natvrdo zadávat cestu ke knihovnám a po změně kompilovat znovu, proč si pohodlně netapnout repozitář s Vanitigenem rovnou? Takže i s instalací OpenSSL a Vanitigenu následovně:

[code]bash-3.2$ brew install openssl && brew tap WyseNynja/bitcoin && brew install vanitygen[/code]

Teď už je možné si nechat vygenerovat adresu a privátní klíč:

[code]bash-3.2$vanitygen 1SHM1[/code]

Závěrečným krokem je import privátního klíče do peněženky – používám Bitcoin-QT 0.8.2. Takový nástřel je na bitcoin wiki, kterou doporučuju před akcí projít. Akce samotná sestává z následujících kroků:

  • spuštění Bitcoin-QT v režimu serveru (kdy naslouchá RPC na portu 8332),
  • odemknutí peněženky na dobu nezbytně nutnou k provedení importu,
  • provedení importu soukromého klíče,
  • …,
  • profit.

Aby bylo možné spustit Bitcoin-QT v režimu serveru, je nutné nastavit heslo pro uživatele rpcuser. Provede se to přidáním dvou řádků do konfiguračního souboru ~/Library/Application Support/Bitcoin/bitcoin.conf.

[code]rpcuser=bitcoinrpc

rpcpassword=***************[/code]

Bitcoin-QT je nutné spustit v režimu serveru – provede se tak v konzoli pomocí příkazu

[code]bash-3.2$ open Bitcoin-Qt.app –args -server[/code]

Jakmile naběhne, je možné posílat příkazy na port 8332 – např. pomocí curl. Protože se však takto budou zapisovat hesla a privátní klíče přímo do konzole, je vhodné zapisované příkazy potlačit v historii – před příkaz se do konzole přidá mezera. Sled příkazů je následující:

[code]bash-3.2$ curl –user bitcoinrpc –data-binary ‚{"method": "walletpassphrase", "params": ["heslo_do_penezenky", 120] }‘ http://127.0.0.1:8332/
Enter host password for user ‚bitcoinrpc‘:
{"result":null,"error":null,"id":null}
bash-3.2$ curl –user bitcoinrpc –data-binary ‚{"method": "importprivkey", "params": ["5_privatni_klic_pr_nove_vytvorenou_adresu_pomoci_vanitigenu", "popisek adresy"] }‘ http://127.0.0.1:8332/
Enter host password for user ‚bitcoinrpc‘:
{"result":null,"error":null,"id":null}
[/code]

První příkaz odemkne peněženku na 120s, což by mělo pro provedení druhého příkazu postačovat – stačí jen jeho iniciace, rescan blockchainu může probíhat až po opětovném (automatickém) locknutí.

V tento okamžik (až doběhne import) se nová adresa objeví v adresáři, ne mezi adresami pro příjem. Tomu napomůže ukončení Bitcoin-QT a opětovné spuštění, tentokrát už jako „obyčejné“ aplikace.

Jak si (zase) nabíjím hubu

Už jsem psal o tom, co jsem udělal špatně u minulého projektu a protože mám rozjetý další, tak vidím, že je spousta věcí, které opět tak nějak dělám špatně. No a protože chybama se člověk učí, tak se (aspoň s těma nejzásadnějšíma) pochlubím a budu doufat, že třeba pomůžou i někomu dalšímu, aby se jich … Pokračovat ve čtení „Jak si (zase) nabíjím hubu“

Už jsem psal o tom, co jsem udělal špatně u minulého projektu a protože mám rozjetý další, tak vidím, že je spousta věcí, které opět tak nějak dělám špatně. No a protože chybama se člověk učí, tak se (aspoň s těma nejzásadnějšíma) pochlubím a budu doufat, že třeba pomůžou i někomu dalšímu, aby se jich vyvaroval. Ale známe to – každý si musí nejprve nabít hubu… 🙂 Jedná se o Androidí aplikaci Zasaď strom, ale myslím, že to jsou docela obecné věci, které se dají promítnout kamkoliv jinam. Nuže, pojďme na ně!

 

Drbání se s detaily

Aplikace je celá postavená na geolokaci, takže jsem si řekl, že když už, tak to udělám pořádně. Takže jsem několik dnů vytvářel a testoval sofistikovaný systém, který nežere moc baterku a snaží se co nejpřesnějším možným způsobem zjistit polohu uživatele. Pak jsem to pustil ven a zjistil, že je to celé úplně na ho*no – polovině uživatelů to blbne a ta druhá polovina nechápe, proč se to chová tak divně. Takže opět další čas zabitý měněním parametrů, dalším laděním… STOP! Všechno jsem vyházel a použil naprosto základní možnost zjištění polohy nabízený systémem – přece jenom to baterku zase tak nežere a já přece nebudu zabíjet veškerý čas laděním něčeho, o čem si ani nejsem jistý, jestli vůbec bude v takové složitosti potřeba – to ukáže až čas a způsob používání!

 

Neudržení se v rámci hranic nejmenší možné verze produktu (MVP)

Sice jsem si definoval, jak bude vypadat Minimum Viable Product, ale přesto jsem se neudržel a ještě než je hotový, pořád mi tam prosakují plánované gamifikační featury (ovšem z mnohem vyššího levelu – ne ty základní – a to jenom proto, že „teď by to bylo jednoduché implementovat“). Důsledkem je, že věci, které by měly být, stále nejsou, pořád v tom něco blbne a uživatelé (a často i já) jsou zmatení z nekompletních funkcí. STOP! Doladím základní plánovanou funkcionalitu a potom začnu postupně přidávat další věci – od těch nejjednodušších – časem se uvidí, jestli si uživatelé sami o něco neřeknou!

 

Snaha stále udržet zpětnou kompatibilitu

Spoustu času jsem věnoval hackování zpětné kompatibility. ActionBar je v Androidu od jisté verze a výš, Fragmenty taky existují od určité verze nahoru… Takže (dle obecných doporučení milovaného Gogolu) jsem ošetřoval, aby vše běželo i na prehistorických verzích systému. STOP! Na to se už příště můžu…!! Když jsem aplikaci zveřejnil, tak ty prastaré verze nemá jediný uživatel! A i kdyby – prostě vyvíjím aplikaci a mám nějaké minimální požadavky pro její běh – vždyť je to přece naprosto normální! Jednoduše to napíšu, jak je dneska v módě (jako prase) a až pokud zjistím, že je nemalé procento uživatelů nějaké starší verze systému a mají o aplikaci taky zájem, tak začnu přemýšlet o zpětné kompatibilitě.

Proč a jak zalívat strom?

Protože se čas do spuštění počítá už jenom na hodiny, ne-li na minuty, pojďme si ještě něco říct o tom, jak funguje zalívání stromů a proč v aplikaci vůbec je. Každý strom je možné zalít – pomocí ikonky s konvičkou v profilu stromu. Teda pokud má uživatel vodu na zalití – jednou denně se mu … Pokračovat ve čtení „Proč a jak zalívat strom?“

Protože se čas do spuštění počítá už jenom na hodiny, ne-li na minuty, pojďme si ještě něco říct o tom, jak funguje zalívání stromů a proč v aplikaci vůbec je.

Každý strom je možné zalít – pomocí ikonky s konvičkou v profilu stromu. Teda pokud má uživatel vodu na zalití – jednou denně se mu automaticky doplní. A pokud je voda a uživatel je alespoň nějakých 25m daleko od stromu, tak jej může zalít – konvička je modrá :). K čemu to? Jednak se navýší počítadlo zalití – to je ten modrý teploměr na obrazovce se stromem, nebo též to procentuální vyjádření na pravé straně seznamu stromů. Když je počítadlo zalití  plné, je strom zralý – obsype se ovocem a může být sklizen – pomocí ikonky se zahradnickými nůžkami též v profilu stromu.

Seznam stromů v okolí
Seznam stromů v okolí

Voda se doplňuje automaticky, vždy po 24 hodinách od posledního zalití. Pokud je tedy strom zalit v 15:00 v úterý, tak ve středu v 14:59 je ještě konvička šedá. V 15:00 a v dostatečné blízkosti ke stromu (výše zmíněných 25m) by měla zmodrat a zalití opět zafunguje.

Druhý důvod zalívání stromů je, že se tak měří zájem uživatelů právě o ten jeden konkrétní strom. Každý zalívající uživatel je připočítán k počítadlu zalití, ovšem pouze jednou. Počítadlo tak ukazuje, kolik lidí daný strom kdy zalilo (na následujícím obrázku je to číslo 1 nad popiskem „Lidí“).

Jediný zralý strom v širokém dalekém okolí
Jediný zralý strom v širokém dalekém okolí

Vezměme v příklad dvě následující situace:

  • Strom zasazený na frekventovaném místě, který navštíví a zaleje 10 různých lidí – počítadlo zalití je tudíž plné a poslední člověk může navíc strom sklidit. Potom bude vypadat počítadlo lidí/zalití jako 10/1.
  • Strom zasazený potají daleko od civilizace, ke kterému nikdo nechodí, kromě jediného poctivce – po deseti dnech jej může sklidit, protože provedl 10 zalití, ale protože tam chodí sám, odrazí se to na celkovém skóre – počítadlo lidí/zalití bude vypadat 1/1.

Sklízení funguje jako jistá forma motivace – každé sklizení se započítá a zobrazí v uživatelově profilu (do budoucna jsou v plánu barevné odměny za poctivé zalívání), stejně tak může sloužit jako jakési hodnocení místa – čím vyšší počet sklizní, o to více zajímavější místo se s nějvětší pravděpodobností bude jednat – a zaslouží si návštěvu (a zalití :)).

Čerstvě vysetý a nezalitý strom
Čerstvě vysetý a nezalitý strom

Počítadla zalití/sklizení jsou zobrazena i na porovnávacím „stupínku vítězů“ umístěným nad mapou. Jsou v něm srovnávány tři nejpodobnější stromy v okolí (okruh 10km) – vprostřed je strom aktuální (je vidět, že čísla korespondují s čísly v profilu stromu) – vlevo je strom bodově „lepší“ a vpravo bodově „horší“. Klepnutí na daný strom v tomto řádku otevře profil stromu. Pokud v okolí neexistuje žádný jiný strom než aktuální, jsou políčka se sousedy prázdná, jak je vidět na předchozím screenshotu s profilem stromu.

Do budoucnu mám v plánu přidat do mapy reálně existující studánky, u kterých by bylo možné nabírat vodu, takže by se dalo zalívat i častěji, než jenom jednou denně. V každém případě jsem ale otevřen dalším nápadům a návrhům, tak směle komentujte na Twitteru @SazimeStromy, nebo zde v diskuzi.

Jak zasadit strom?

Protože jsem před několika dny pozdržel publikování slíbeného screenshotu, připadá mi fér jich sem teď dát trochu více a především nastínit způsob fungování aplikace konkrétním popisem akce nejdůležitější – zasazení stromu. Strom je možné zasadit ve výchozí obrazovce aplikace – v seznamu nejbližších stromů v okolí – pomocí ikonky s lopatičkou vpravo nahoře. Tato ikonka … Pokračovat ve čtení „Jak zasadit strom?“

Protože jsem před několika dny pozdržel publikování slíbeného screenshotu, připadá mi fér jich sem teď dát trochu více a především nastínit způsob fungování aplikace konkrétním popisem akce nejdůležitější – zasazení stromu.

Strom je možné zasadit ve výchozí obrazovce aplikace – v seznamu nejbližších stromů v okolí – pomocí ikonky s lopatičkou vpravo nahoře. Tato ikonka může a nemusí být aktivní: pokud už poblíž je zasazený nějaký strom, tak není možné zasadit na tomto místě nový a tudíž ikonka je zešedlá a klepnutí na ni nevede k žádné akci. Stejně tak je ikonka neaktivní bezprostředně po spuštění – do doby, než je telefon lokalizován pomocí GPS.

Seznam stromů v okolí
Seznam stromů v okolí

Pokud ikonka není aktivní, tak to s největší pravděpodobností znamená, že v daném čtverci už existuje nějaký jiný strom. V tom případě je na místě procházka k tomuto stávajícímu stromu a jeho zalití a případná následná diskuse se sázejícím a zalívači o vhodnosti daného umístění.

Také je možné pomocí mapy v prohlížeči najít nejbližší možný volný čtverec pro zasetí a provést virtuální výsev po přesunutí se na nové místo. Pro ilustraci je v následující mapě vidět rozdělení Brna na čtverce, ve kterých je zasazených 5 stromů – v Bystrci, na Lesné, v centru, v Černých Polích a v Komárově. V daných čtvercích tudíž není možné vysadit další virtuální strom. Je ale možné sázet v celém čtverci v Králově Poli, Kohoutovicích, v Lískovci či Bohunicích.

Stromomapa Brna
Stromomapa Brna

Po přesunu na vhodné místo je tedy ikonka s lopatičkou pěkně barevná a po klepnutím na ni dojde k vysazení stromu na aktuální pozici a aplikace rovnou zobrazí profil s čerstvě vysazeným stromem, který čeká na svoje první zalití. Ale o tom a informacích na této obrazovce zase až příště!

Informace o čerstvě zasazeném stromě
Informace o čerstvě zasazeném stromě

Představa základní funkčnosti aplikace Zasaď strom

Jak píšu přímo na stránce aplikace, v rámci vandru mě napadlo, že jsem minul několik skvělých míst, kde by bylo pěkné zasadit strom. Samozřejmě není jenom tak – píchnout do země proutek a zmizet odtud (papírování, vlastník, údržba…), tak jsem přemýšlel, že by byla fajn platforma, pomocí které by se daly sázet virtuální stromy a … Pokračovat ve čtení „Představa základní funkčnosti aplikace Zasaď strom“

Jak píšu přímo na stránce aplikace, v rámci vandru mě napadlo, že jsem minul několik skvělých míst, kde by bylo pěkné zasadit strom. Samozřejmě není jenom tak – píchnout do země proutek a zmizet odtud (papírování, vlastník, údržba…), tak jsem přemýšlel, že by byla fajn platforma, pomocí které by se daly sázet virtuální stromy a spolu s dalšími zájemci pro jejich vysazení hlasovat. Celé by to mohlo zaštiťovat občanské sdružení, které by členskými příspěvky, dary či formou sponzoringu nejoblíbenější virtuální stromy zasadilo fyzicky. Samozřejmě by se mohl ozvat sponzor, že chce realizovat ten či ten konkrétní strom, řazení dle oblíbenosti je především ze soutěžních důvodů.

Bude tedy existovat čtverec v mapě (řekněme 5x5km), v rámci kterého bude možné vysadit jeden jediný strom. A vedle ve čtverci jiný a tak dále a tak dále. Každý uživatel bude mít možnost zasadit strom kdekoliv, kde ještě zasazen není (čtverec je prázdný). Každý den bude mít uživatel možnost provést jedno zalití (to aby neběhal ze čtverce do čtverce a nezalíval všechno, ale rozmyslel si, co chce opravdu podpořit), kdy musí dojít na pozici stromu (+- pár metrů) a v aplikaci kliknout na zalít.

Příklad mapy se čtverci a vsazenými stromy
Příklad mapy se čtverci a vsazenými stromy

Po určitém množství zalití na stromě uzraje ovoce a uživatel jej může sklidit. Za sklízení bude uživatel dostávat “zkušenostní” body a po překonání určité hranice dostane virtuální ocenění (odznáček – badge), či mu může přibýt možnost další denní zálivky…nějaké další návrhy?

Pro podporu soutěživosti budou v seznamu zobrazeny okolní stromy a porovnán počet jejich zalití, aby se uživatelé hecovali v zalívání svého vytouženého stromu (poznámka: není to uživatel proti uživateli, ale kooperativa – kdokoliv může zalít jakýkoliv strom, pokud má vodu). Jednoduše řečeno – neexpí uživatelé, ale stromy.

Detaily o stromu
Detaily o stromu

Pokud dojde k reálnému vysazení stromu v daném čtverci, daný strom se uzamče a provede jeho fotodokumentace. Následně bude daný čtverec rozdělen na menší části, kde (kromě již osazené) bude možné provést nový virtuální výsev. Takhle bude možné pokračovat i s každou další realizací v menších čtvercích. Samozřejmě bude možné strom přesunout, pokud se většina v „pečovací skupině“ na přesunutí shodne.

Toliko prvotní informace – potřeboval jsem je dát rychle dohromady, abych mohl aplikaci nominovat do soutěže Mobilní aplikace roku, kategorie „Aplikace pro lepší svět“. Budu rád, když se „Zasaď strom“ soutěže zúčastní a budu ještě radši, když se zaregistruješ pro získání přístupu do veřejné betaverze (která bude v půlce dubna) a pozveš i své známé. Udělejme společně svět zelenější!

Verzování a testování Android aplikací

Vrátil jsem se nedávno k jedné odložené aplikaci a začínám ji křísit s novými nápady a s trochu změněným konceptem (s detaily přijdu v brzké budoucnosti) a protože jsem se dostal k potřebě aplikaci testovat ve více lidech, kdy někteří mají ne zrovna aktuální verzi buildu a přesto reportují chyby, začal jsem používat systém číslování … Pokračovat ve čtení „Verzování a testování Android aplikací“

Vrátil jsem se nedávno k jedné odložené aplikaci a začínám ji křísit s novými nápady a s trochu změněným konceptem (s detaily přijdu v brzké budoucnosti) a protože jsem se dostal k potřebě aplikaci testovat ve více lidech, kdy někteří mají ne zrovna aktuální verzi buildu a přesto reportují chyby, začal jsem používat systém číslování verzí, který bych chtěl tímto postem popsat.

Problém je následující: vypustím testovací verzi mezi testery a mezitím vývoj nezamrznu, ale pokračuju v opravách, úpravách a (přiznám se k tomu) někdy i nových featurách. Často se stane, že tester pošle stacktrace starší verze, nebo přijde aktuální verze, jenomže po úpravách už nesedí čísla řádků, či díky refactoru je daný fragment někde úplně jinde a podobně. Jak teda zkontrolovat, jestli už chyba byla odstraněna, nebo tam je pořád? Poměrně jednoduše, stačí pár nástrojů.

Celý řetězec sestává z IDE Eclipse, Pivotal Trackeru, PT-mylyn connectoru a nějakého systému zprávy verzí (používám Git na Bitbucketu). Základem je si navyknout odklepávat aktivní tasky zadané pomocí Pivotal Trackeru v Mylynu, měnit odpovídající čísla patchů v Manifestu a commity provádět s daným identifikátorem (ideálně do vlastního branche, který se po release zmerguje, ale kdo by se s tím sr…l, žejo :)). Pojďme ale postupně, ukážu to na konkrétním příkladě – tasku. (Pozn. používaná skladba číslování verzí vychází z následujícího schématu, uvedeného např. na wikipedii).

Schéma číslování verzí
Schéma číslování verzí

Veškeré změny, požadavky a bugy zadávám pouze skrze Pivotal Tracker (nebudu tu rozebírat nástroj samotný, ani jak iteruju – to je každého věc :)). Důležité je, že každá story má jednoznačný identifikátor, jak je vidět na následujícím screenshotu.

Identifikátor story v Pivotal trackeru
Identifikátor story v Pivotal trackeru

V Eclipse mám PT napojený skrze mylyn-connector (návod jak na to je přímo na stránkách projektu) na Task list, kdy pracuju na aktuální vybrané úloze. Na následujícím screenshotu už je story finishnutá, takže je přeškrtnutá.

Zobrazení story v Task listu
Zobrazení story v Task listu

Když potom dané změny commitnu, nechávám jako title dané změny identifikátor a popisek, který je v PT – při commitu jsou už automaticky předvyplněné. V přehledu verzovadla je potom jednak vidět interní identifikátor daného commitu, ale v rámci popisku i identifikátor z PT.

Hotový commitnutý task v přehledu na bitbucketu
Hotový commitnutý task v přehledu na bitbucketu

A teď ono celkové propojení: když aktivuju task v IDE, změním daným identifikátorem z PT i build verzi v manifestu, společně s versionCode.

Čísla verzí v AndroidManifest.xml
Čísla verzí v AndroidManifest.xml

Když tedy následně distribuuju danou verzi testerům, tak je možné v rámci vlastností aplikace přehledně zkontrolovat verzi, kterou testují.

Zobrazení čísla verze ve vlastnostech aplikace
Zobrazení čísla verze ve vlastnostech aplikace

A pokud někdo nahlásí chybu, o které si nejsem jistý, zda byla opravená, jednoduše se vrátím ke konkrétní verzi z repozitáře a můžu zkontrolovat, o co vlastně šlo a případně si zadat novou story (bug by mohl být zadán číslem revize a build verze se neměnit).

Je mi jasné, že asi znovuobjevuju kolo, ale připadlo mi to celé tak geniálně jednoduché a praktické, že mi nedalo se o to nepodělit. Také mi nedá se nepodělit o očekávání testovacího frameworku Testflight pro Android. Věřím, že předchozí tipy skvěle doplní a posune na ještě vyšší level!

Sbohem a šáteček!

Končím s ubytovníčkem, konec, šlus, adie! V lean kanvasu jsem měl zaznačený zisk jediný – zkušenost. A té jsem dosáhl – udělal jsem špatný úkrok stranou, takže pryč s tím, soustředit se na jiné věci. Ještě bych ale tímto posledním postem rád shrnul věci, o kterých jsem chtěl původně psát (resp. když jsem na nich … Pokračovat ve čtení „Sbohem a šáteček!“

Končím s ubytovníčkem, konec, šlus, adie! V lean kanvasu jsem měl zaznačený zisk jediný – zkušenost. A té jsem dosáhl – udělal jsem špatný úkrok stranou, takže pryč s tím, soustředit se na jiné věci. Ještě bych ale tímto posledním postem rád shrnul věci, o kterých jsem chtěl původně psát (resp. když jsem na nich dělal, připadalo mi dobré o nich průběžně psát na blog, protože by mohly přitáhnout pozornost). Jenže jsem o nich nepsal. Teda psal, ale hrozně pomalu. Plán byl – jeden týden, jeden blogpost. A kdy že se objevil první? Pche! Proč dělat tisíc věci na 1/1000? Navíc některé „jakodělat“? To je radši zrušit úplně!

Chyba číslo jedna: myslet ti, že to mám ověřený. Chybělo něco jako „move your fucking ass out of the building.“ Nedávno jsem vytáhl nápad ubytovníčku a lidé na mě koukali jako na blázna: „Jak jako spát s někým v pokoji? My si s drahou polovičkou bereme dvoulůžko!“ Následovalo přemýšlení nad pivotem – udělat rezervační systém pro ubytovací zařízení. Nojo, ale proč? Copak mám nějaké ubytovací zařízení? A i kdyby!

Ubytovníček
Ubytovníček

Chyba číslo dva: myslet si, že mám pěkně rozvrhnutý projekt. Neměl jsem konkrétní cíl, neměl jsem konkrétní čas, kdy bych ho měl dosáhnout, neměl jsem vlastně spoustu věcí, hlavně, že jsem měl doménu :).

Konkrétní čas
Konkrétní čas

Chyba číslo tři: technologie? Ta ne, za její volbou si stojím. Jen bych příště nešel cestou RADu ve formě Roo. Ovšem i zde je namístě otázka – je to tím, že za tu předlouhou dobu, co jsem na tenhle projekt nemákl, jsem se všechno, co Roo nabízelo, naučil sám a zautomatizoval? Že jsem se naučil psát testy, že už si připadám Spring intermediate a výš, že si radši model vytvořím sám a bez aspektů, že i ty query si napíšu radši ručně a lépe… Zase na druhou stranu – podíval jsem se hlouběji na webflow, tiles a dojo. Aspoň na chvíli jsem se cítil být frontenďákem :).

Grafické znázornění webflow
Grafické znázornění webflow

Chyba číslo čtyři: chtěl jsem psát všechno a obsáhle na blog. Chtěl. Jenomže než jsem se k tomu vždycky dokopal, tak se mi to, co jsem chtěl popisovat, vykouřilo z hlavy. A cucat si to z prstu se mi prostě nechce, stejně tak to celé dělat znovu jenom kvůli popisu. Takže základem je – napsat to hned! A napsat to stručně. Pokud někdo má zájem o bližší informace, ozve se a může se případně navázat dalším dílem. Proč sepisovat něco, co vlastně ani nikoho nezajímá a nikdo to nejspíš ani nečte? Zbytečná ztráta času! Samozřejmě je také nutné uvažovat cílové publikum – proč jsem sakra na blog související s ubytováním psal věci ohledně vývoje? Copak to je blog s tématem „jak rozjet (nemám to slovo rád – ) startup?“ Příště striktně oddělit témata a takovéhle posty nepsat vůbec, nebo je psát do tech části.

Jaké je cílové publikum blogu?
Jaké je cílové publikum blogu?

Chyba číslo pět: „i cesta může být cíl“ – rozdělat projekt a učit se na něm. Jenomže když to učení nakonec převažuje nad cílem jako takovým, tak to nebude to pravé ořechové a zůstanu trčet ve vzduchoprázdnu. Vlastně to souvisí s předchozím bodem – příliš jsem se soustředil na to, co napíšu, jak to napíšu a jak to ještě rozvedu, aby to vydalo na víc, než pár řádků. Takže jsem chystal sáhodlouhej článek o propojení Pivotal Trackeru s „mojí pružnou metodikou“ (teď nově vydáno s menší obměnou a imho mnohem praktičtější)…nehledě na to, že mezitím u Good Data přestalo fungovat reportovadlo/analýza pro Pivotal Tracker. Mu!

V nekonečnu přímka však se Vždycky ve kruh schoulí
V nekonečnu přímka však se Vždycky ve kruh schoulí

Sečteno a podtrženo: příště si definuju nejenom konkrétní cíl (konkrétně specifikovaný MVP), ale i nějaký náznak představy o čase, kdy ho chci dosáhnout. A díky známému „každý úkol zabere přesně přesně tolik času, na kolik ho odhadneme,“ budu odhady zaokrouhlovat dolů – budu mít hotovo dřív! 🙂 Brzkého nákupu domény nelituju, i tu příští koupím velmi brzo – přece jenom to není nijak extra vysoká částka a když ji využiju pro landing page (použil jsem Launchrock) se základními informacemi a možností registrace zájemců (jako tomu bylo teď) a na subdoménu vrznu opět nějaký blog, snad Posterous úplně neumře, jak je teď slibováno. A především – budu se věnovat něčemu, čemu se opravdu chci věnovat a v čem vidím smysl. Nebudu násilně vymýšlet blbovinu, o které se někdo zmínil v hospodě u píva, že by mohla být fajn. Takže nashle příště u dalšího začátku!

PS pokud má někdo zájem o doménu ubytovnicek.cz, twitter účet stejného jména a fb fanstránku, tak se mi ozvěte s nástinem plánu. Tomu, co mě nejvíce zaujme to všechno milerád (zdarma) přenechám!

(Repost z blog.ubytovnicek.cz)

Pozadí ubytovníčku: platforma

Konečně se dostáváme do trochu techničtější fáze, o které měl původně tento seriál celý být. Ovšem pro některé souvislosti a nasměrování i na trochu potřebné teorie byla odbočka směrem k Running lean nezbytná. Tato fáze vychází z některých polí v Lean canvasu a sice pole cena a pole zisk. Nejsem si jistý, zda tento způsob … Pokračovat ve čtení „Pozadí ubytovníčku: platforma“

Konečně se dostáváme do trochu techničtější fáze, o které měl původně tento seriál celý být. Ovšem pro některé souvislosti a nasměrování i na trochu potřebné teorie byla odbočka směrem k Running lean nezbytná. Tato fáze vychází z některých polí v Lean canvasu a sice pole cena a pole zisk. Nejsem si jistý, zda tento způsob zadání je možné považovat za korektní vyplnění těchto polí, ale popravdě – je mi to docela jedno.

V poli cena mám pouze dvě položky – platba za doménu a čas. Od toho se bude odvíjet veškerý návrh technické části. Všimněte si, že nikde není uvedena cena za hosting či virtuál, ceny za licence na ten který použitý software, cena za grafiku a další. Opravdu jedinou investicí by měl být můj čas.

Lean canvas
Lean canvas

Jaké technické řešení teda zvolit, když má být zdarma? Mohl bych si vybrat nějaký free hosting s podporou třeba php, ale vzhledem k mému odporu k tomuto jazyku to nehrozí. Jsem Javista a přestože mám v plánu pustit se do učení se nějakého dalšího nového jazyka, nemyslím si, že tohle je vhodná příležitost, takže zůstanu u té Javy. Možností běhu javy zdarma (alespoň několika instancí) na serverech je dneska už taky poměrně velké množství (Amazon Elastic Computing Cloud, Google App Engine, Heroku, Cloudbees, CloudFoundry a další), zkušenost mám pouze s Google App Enginem a Cloud Foundry, takže budu volit z nich. Volba je poměrně jasná, protože GAE je uzavřený (nejenom, svého času mě pěkně vytočil, když jsem se snažil udělat abstrakty pro persistentní objekty), navíc mi neumožní zdarma běh většího množství instancí a (jako bonus) můj odpor vůči této společnosti v poslední době docela stoupá, začínám na ni koukat jako na „evil one“.

O Cloud Foundry jsem mluvil už už minulý rok v Ostravě na Dev Skillz. A protože už o tomto řešení bylo napsáno více než dost kdekoliv jinde, tak se čtenář bude muset spokojit se základní informací, že se jedná o  PaaS řešení zaštítěné VmWare, které běží na jejich infrastruktuře, infrastrukturách jiných (AppFog, Uhuru), případně je možné sáhnout po komunity forku tohoto projektu a rozjet si jej na vlastních serverech. Spíše než o jazycích je vhodnější mluvit spíše o podporovaných frameworcích, kterýchž škála je poměrně pestrá: Spring, Grails, Lift, Play, Node.JS, Rails a Sinatra, persistence je zajištěna databázemi relačními (MySQL, vFabric Postgres) i NoSQL (Redis, MongoDB) a pro komunikační mezivrstvu je možné použít RabbitMQ.

Zásadní výhoda je tedy následující: s CloudFoundry mám možnost běhu aplikace zdarma, pokud bych vyžadoval více instancí, větší dostupnost nebo nějaké perličky, můžu si připlatit, nebo přímo přesunout aplikaci na EC2, či na vlastní infrastrukturu!

Jak jsem zmínil, Cloud Foundry přímo umožňuje využití některého z množství oblíbených frameworků, což rozhodně využiju, protože jsem člověk líný, abych začínal od píky. A jsem líný tak, že využiju nějaký RAD, v mém případě Spring ROO, protože nově podporovaný Play v době návrhu ubytovníčku ještě CF nebyl nabízen.

Roo nabízí využití některého ze dvou frameworků pro tvorbu view – Google Web Toolkit a Apache Tiles, takže sahám po Tiles v kombinaci s  jQuery a čistými JSP. Opět nepůjdu do detailů, zájemce odkážu na některý z mnoha tutoriálů na ovládání roo.

V poli zisk mám nejzásadnější položku – zkušenost. V praxi rád testuju různé nápady na lidech, jak se co ujme, jestli to vyhovuje…na malých částech, dalo by se to nazvat uživatelský prototyping. Nejinak tomu je i u tohoto projektu. Chci zkusit, jaký bude poměr registrovaným uživatelům ku uživatelům pouze využívajícím službu (jsem zastáncem možnosti anonymního využívání aplikací na webu, jako tomu bývalo odjakživa – před všemožnými facebooky a unifikovanými loginy v podobě openId a dalších) a prozkoumat zájem potencionálních zákazníků (provozovatelů ubytování), jak se budou stavět k nabídce využívání tohoto systému – vyzkoušet svoje „social skills“, totiž jak s „nepočítačovníky“ správně a slušně komunikovat.

Dalším pokusem (ziskem v podobě informace) bude sestavit vůbec funkční aplikaci nad Cloud Foundry – předchozí byly jenom pokusy v podobě helloworld a drobností pro zábavu – a získat pro ni nějaké reálné uživatele, na kterých se budu moci učit – ať už komunikovat jakožto „já projekt“, nebo ladit přivětivost systému, „zážitek“ z použití služby a další.

V neposlední řadě taky aplikaci zařadím do kategorie svých „pet projektů“, ke kterým se můžu uchýlit k odreagování se, když mě všechno ostatní točí a rád bych se jednorázově alespoň na chvíli věnoval něčemu jinému.

PS Jako side-project vznikl Air Cargo Forwarder, což je aplikace pro Android pro monitorování a ovládání aplikací běžících na platformě Cloud Foundry.

(Repost z ubytovnicek.cz)

Jak jsem šplhal na Etnu

Protože jsem do Catanie přijel především za účelem výstupu na Etnu, je jasné, že jsem se nemohl dočkat dne, až se tomu tak stane. A nijak tomu nepomohly toulky po rozpáleném (propršeném) městě, práce jdoucí od ruky, či stejky z mečouna. Takže jsem se prostě jednoho rána (odjezd už v 8:20!) sbalil a vyrazil na … Pokračovat ve čtení „Jak jsem šplhal na Etnu“

Protože jsem do Catanie přijel především za účelem výstupu na Etnu, je jasné, že jsem se nemohl dočkat dne, až se tomu tak stane. A nijak tomu nepomohly toulky po rozpáleném (propršeném) městě, práce jdoucí od ruky, či stejky z mečouna. Takže jsem se prostě jednoho rána (odjezd už v 8:20!) sbalil a vyrazil na bus tím směrem.

Approaching Etna
Approaching Etna

Samozřejmě, najít tam takhle po ránu někoho, kdo umí anglicky, je nadlidský výkon, tak jsem byl rád, že jsem si zapamatoval destinaci a s větičkou „Ciao, bus a Rifugio Sapienza?“ jsem chvilku pobíhal kolem, až jsem se ocitl v hloučku, kde byli i Indové, které jsem potkal předchozího večera v hostelu a chápal, že na Etnu nepůjdou. Docela mě znervózňovalo, že mají všichni jízdenky a když bus přijel (s cca 10 minutovým zpožděním) a řidič neměl drobné, tak jsem byl vyslán kamsi na druhou stranu nádraží do báru, kde prý je předprodej. Pokladní se samozřejmě věnoval kafi, takže  zpoždění autobusu se zvětšilo na cca 20 minut, ale konečně jsme vyrazili.

TODO: mapa

Ne však daleko – první zastávka byla na náměstíčku v Nicolosi, kde mají zřejmě autobusáci domluvený kšeft v místní kafárně, takže nás vyhnali z busu na nákup kafe. Indové nervózně běhali kolem s tím, že je právě státní svátek a potřebují sehnat jídlo a pití, protože se bojí zavíračky na Etně. Po další zhruba půlhodince, která se dá připočítat ke zpoždění, jsme pokračovali v cestě – přibrali jsme ještě nějakého místního dědulu, vzezřením bezdomovce, aby jako první v „refugio sapienza“ (1910 m.n.m.) vyskočil z autobusu a vrhl se k (nebo spíše do) nejbližšího kontejneru. Ostatní zatím na sebe postupně oblíkali všechno, co měli po ruce, teplota okolo patnácti stupňů, z třicítek dobrý skok.

Nicolosi
Nicolosi

Chvilku jsem obcházel „basecamp“, ale protože byl plný cetek, turistů a předraženého obžérstvení, mířil jsem směrem nahoru. Minul jsem boudu, kde se Indové snažili usmlouvat cenu za průvodce (nějakých E70) a minul jsem i lanovku (přestože jsem ji chtěl využít, ale vysolit bratru E30 za krátké svezení jsem opravdu nechtěl) a protože jsem si umanul, že se nahoru dostanu, utáhnul jsem pořádně boty, poprvé zanadával a vyrazil vzhůru pěšky – jako jediný. Bohu díky za stažení slepé mapy z OSM (není na ní vůbec nic, ale díky GPS jsem zhruba tušil, na které straně „cesty“ se právě nacházím), protože jsem se rozhodl nejít po „silnici“, ale po v mapě zaznačené turistické „stezce“.

To by člověk neřekl, jaká je takovýchto pár kroků fuška
To by člověk neřekl, jaká je takovýchto pár kroků fuška

Následujících pár hodin je vyplněno pouze focením všeho na všech stranách, sypáním písku z bot každých pár kroků (dementní nápad jít v ultra prodyšných křuskách), pliváním, klením a nadáváním a přemýšlením, jestli na mě nevletí nějaký správce, protože jsem mimo neviditelnou cestu (zajímavé je, že mě jedinkrát nenapadlo se vrátit). Krok, krok, sklouznutí zpět. Na druhou stranu výhledy však byly dechberoucí, stejně tak i vítr, který občas z některé strany zadul. O pár set metrů výš ještě krátký travers a udýchaný, žíznivý jinoch stanul na relativní rovině, kde se už producírovaly skupinky jdoucí od lanovky a jezdily čtyřkolky ještě výše. V tomto bodě mě poprvé napadlo, že dojít až nahoru nestihnu, pokud tu nechci nocovat (v zákazu a na sněhu, navíc bez vybavení, takže je jasno).

Poslední travers!
Poslední travers!

Takže jsem vynechal plánované jídlo, hodil jenom do pusy hrst rozinek a buráků a zapil to banánem a whisky (pití došlo) a serpentinama pokračoval dále. Jeden bus nahoru, dva dolů – už jdu po „silnici“, tak si aspoň s děckama máváme. Rychlost větru stoupá, teplota klesá. Dostávám se k boudě u Torre del Filosofo (2920 m.n.m.) a uvědomuju si, že dál už to nejde a tudíž jsem to vlastníma silama dokázal! Drápu se teda ještě k volně přístupnému kráteru jižně od boudy, abych se nadýchal sirných par a doslova se opřel o vítr na úplném vrcholku (takovou fujavici jsem ještě nezažil!) a volně pokračoval směrem dolů rychlým stylem „Hopsa-Hejsa“.

Torre del Filosofo
Torre del Filosofo

Cesta s kopce byla namáhavější. Drobně přesitý písek v botách tvořil „šmirgl“, který mi rozbrousil některé prsty na nohách, takže došlapování bylo docela bolestivé. Rituály vysypávání písku tak byly o něco častější. Nahoru se drápající rodinky s dotazy „how far is the top“ nalévám optimizmem odpověďmi stylu „co by kamenem dohodil“, dojídám whisky a dopíjím poslední banán.

Jeden z postranních sopouchů
Jeden z postranních sopouchů

U horní stanice lanovky, jsa přesvědčen, že dolů je to už kousek, provádím potřebné chirurgícké zákroky na chodidlech, spolu se zapudrováním a přebalením (stále mluvím o chodidlech). Což jinými slovy znamená, že se konečně za celý den pořádně sedám! Ovšem jenom na pár okamžiků – jsou čtyři hodiny a autobus odjíždí o půl paté (snad – horší varianta je 16:20). Takže se dávám (teď už po „silnici“) serpentinama dolů. Za každou zatáčkou očekávám podobný pohled, jako když jde člověk s tmou v zádech z Jelení studánky na Červenohorské sedlo (to mě v těch okamžicích napadalo). Taky mě napadlo, že pokud v 16:15 neuvidím, jak blízko basecampu jsem, tak se rozeběhnu a taky tak činím.

Cesta dolů (po levici serpentiny na Belvedere)
Cesta dolů (po levici serpentiny na Belvedere)

V protisměru potkávám cyklistu (vzájemně na sebe koukáme jako na kokota) a po pár minutách běhu (pískem a šutry z prudkého kopce a s krosnou na zádech) zase zvolňuju, protože jsem se vnořil do mračna a nevidím vůbec nic. Jestli bus jede 16:20, tak jsem ho právě prošvihl, takže sázím na poslední kartu a sbírám poslední zbytky sil a klusám dál. Už jsem u odbočky, kde jsem ráno sešel, už jsem u lanovky a už přibíhám na zastávku. Rudej, udýchanej, spocenej, spokojenej. Kašlu, nadávám, lidi na mě koukají jako na zjevení a autobus přijíždí. Nastupují Indové, bezdomovskej dědula (ve fungl nové goráčové bundě s utrženým rukávem), já a ještě pár dalších takyturistů. V přetopeným autobuse pomalu popadám dech a začínám se samolibě usmívat. Večer si zasloužím gyros!!

Nashle příště, Etno jedna!
Nashle příště, Etno jedna!

Proč jsem šťastný

Dneska, když vidím venku to sluníčko a čerstvej sníh, tak se radost z toho, že „freelanceřím“ jenom násobí. Když jsem sekl s prací, lidé se rozdělili do několika skupin – někteří byli naštvaní (ex-spolupracovníci), někteří mi fandili a gratulovali k odvaze (přátelé), někteří mi říkali, že jsem udělal chybu (pra-rodina) atd. Já sám si říkám, … Pokračovat ve čtení „Proč jsem šťastný“

Dneska, když vidím venku to sluníčko a čerstvej sníh, tak se radost z toho, že „freelanceřím“ jenom násobí. Když jsem sekl s prací, lidé se rozdělili do několika skupin – někteří byli naštvaní (ex-spolupracovníci), někteří mi fandili a gratulovali k odvaze (přátelé), někteří mi říkali, že jsem udělal chybu (pra-rodina) atd.

Psí závod, ne krysí!!
Psí závod, ne krysí!!

Já sám si říkám, že jsem udělal velmi dobře. Ne tak proto, že mám rád jakousi nejistotu (možná proto, že jsem se na ní stal závislým – z pohledu cestovatele, který se někdy nad ránem vzbudil vyhozen z vlaku někde neznámo kde, nebo si spletl přístaviště…), ale že dnešní zubaté sluníčko mi poodkrylo stav, jak se skutečně má: když jsem chodil poctivě do práce, ráno jsem vstával a hodinu trpěl ve vlaku, prohlížel RSS čtečku a babral se v mejlech. V práci jsem si odkroutil nějakých těch 8, 9, 10… hodin (dle potřeby) a chvátal na vlak, kde jsem pročítal články za ten den nashromážděné v ReadItLater, případně studoval dokumentaci, v tom lepším případě přelouskl nějakou kapitolku v knížce. Doma jsem potom zhltnul večeři (u počítače) a věnoval se věcem, které jsem za den nestihl v práci, nebo soukromým projektům (když bůh dal). Den za dnem, týden za týdnem a rok za rokem stereotypně mizel život.

Dneska ráno vstanu, v klidu posnídám, vyženu ven psa (a posledních pár týdnů vpustím do baráku zedníky) a nějaké dvě hodinky se věnuju práci. Potom si navařím oběd a poobědvám. Na chvíli jdu se psem ven, dokud je pěkně, a pak se dle potřeby opět pouštím do práce. Navečer můžu obejít rodinu a známé a večer jdu klidně na pivko, nebo se podívám na film. Čas běží o hodně pomaleji, vytěsnil jsem spoustu zbytečných věcí (pravidelné procházení Twitteru a RSS čtečky), za těch pár měsíců, co jsem z krysího závodu venku, jsem viděl spoustu lidí, které jsem předtím neviděl několik let a všeobecně z toho mám mnohem lepší pocit.

Pravda, příjem není pravidelný ani vysoký (pokud vůbec je), ale protože jsem – ne odvážný, jak jsem zmiňoval na začátku – ale chytrý, tak vycházím. Proč chytrý? Nemám závazky! Žádné splátky půjček, žádné přemrštěné částky za telefon ani závislost na nakupování. Možná je to spíše o štěstí. Proto doufám, že se mě bude držet i nadále. A komukoliv dalšímu přeju to stejné, stojí to za to, jsem prostě šťastný!! 🙂