foglcz's posterous

 

Unittesting? Fieldtesting!

Ty nové celonízkopodlažní autobusy v praze musel navrhovat nějaký exot orangutan s unit testy. Fungují perfektně, designově vypadají skvěle, ale to ux pánové..

Unittesting bych přirovnal k testování, jestli všechno funguje - asi to bude mít nějakou centrální jednotku, která bude kontrolovat stav motoru, oleje, stk, whatever. Věřím i tomu, že když ten autobus někdo vymejšlel, tak se málem připosral z toho, jak nádherně vypadá, jak tam dal nové luxusní polstrované sedačky, jak je tam ten LCD displej s tím nejlepším-ever designem, který ukazuje příští zastávky. Jak je tam kamera v té harmonice až dozadu, aby řidič nezavíral dveře před nosem nebo batoh do dvěří lidem, kteří s ním cestují (což byla dříve oblíbená činnost řidičů, že.)

Věřím, že autobus byl vyvinut v rámci test-driven development, tedy že se nejdřív napsali všechny testy (které končili testovacími jízdami ftw!) a pak se postupně odstraňovali nefunkční testy.

Věřím, že poslední UX testing probíhal zevrubně v té fabrice.

Třeba na hladce vybetonovaném povrchu.

A pak to někdo pustil do prahy. A nikdo se nezamyslel nad tím, jestli se to nebude kejvat. Jestli tam stojící lidi nebudou lítat z jedné strany na druhou. Jestli ten autobus nemá pružiny ale tak neskutečně napiču, že si každý bude chtít sedat, protože je to jediný způsob cestování, který v daném stroji vzdáleně připomíná pohodlnost. Dopravní podnik FTW!

Což mi připomíná praxi, kterou máme v našem oboru. Devops používají Test-driven development, interně si aplikují scrum (a na venek waterfall), firma za ně účtuje 2k protože jsou nejlepší-ve-svém-oboru a těší se všeobecné oblibě.

Jejich devops jsou navíc tak dokonalí, že nemohou participovat na mítinzích, kde se produkt vymejšlel. Ne - od toho je tu architekt! Třeba takový architekt, který nikdy neprovede field test. Takový architekt, který vyrobí vajrfrejmy na obrázcích, narve to do stopadesáti stránkového pédéefka a všechno si s klientem odsouhlasí. A pak se developere snaž. A ať je to 1:1 wtz!

Pak se v tom klient projede, zatímco sedí v pohodlné židli v zasedačce za sto táců. A nahovno pružiny nemusí pružit protože se jede v rámci prezentace na betonovém podkladě a klient je spokojen. Zaplatí faktury, dostane produkt, vyhodí mega z okna a pak zjistí, že to kurva nepruží v zatáčkách. Firmo? Co to kurva je? Sprav to!

A zjistí se, že na tyhle děravé silnice v praze, je potřeba krapet jinej autobus. A kdo za to může? Devops se na cigáru uchechtává, v kanclu nasraně přepisuje svoji práci, přestože to říkal od samého začátku. Grafik překresluje, i když na začátku říkal, že ten koncept je prostě, sorry, napiču. A všechno jenom kvůli tomu, že nikdo nepustil klienta přímo k těm, kteří se v našem oboru pohybují.

Aby klient mluvil přímo s devops / grafikem na nějnižsí pozici? No to by přece nešlo žeano, od toho tu pro tebe, kliente, máme Project Directora ®. Vivat nejlepší klient servis EVAH!


Někdo ten projekt řídit musí. Proč ale není přístup pro klienta přímo k těm, kteří se v oboru skutečně vyznají, nevím.

Vyrábíme wireframy. A u mediálek si běžně objednáváme subdodávky (třeba designu.) Proč? Protože přece jenom zaměstnávají opravdu dobré lidi. Wireframy ale ze zásady děláme sami. Děláme je klikatelné, děláme je použitelné, děláme je tak, aby bylo vidět všechno přímo na obrazovce kompu. Zkrátka, děláme prototypy.

  Jenom kvůli tomu, aby klient viděl, jak reálně aplikace bude fungovat. Aby se udělal field test - ne unit test.

Unit testy jsou pak příjemný doplněk zjednodušující dlouhodobý support. Nic víc, nic míň.

A celé je to jenom kvůli tomu, že v mediálkách agenturách firmách sedí lidé, kteří se bojí rozhodnout aby náhodou neudělali chybu a nepřišli o místo (a.k.a. přizdisráč.) Vedení si jede své mocenské choutky a hry. Projkťáci se bojí, aby je nikdo nevyhodil. Kdo udělá chybu, letí. Drž hubu a krok!

Protože kdo neudělá rozhodnutí, ten neudělá chybu.

Čest vyjímkám!

Comments [0]

FIAL fast. And often.

Kdysi jsme chtěli rozesílat mailing, tak jsme si vytvořili vlastní systém tak, aby nám vyhovoval. Pak přišel první klient, který chtěl to samé 1:1, tedy víceméně bez administrace, tak jsme mu systém poskytli.

Read the rest of this post »

Comments [0]

Není to chyba v rails. Je to tam takhle schválně.

Přece vás takhle navečer nemůžu ochudit o mailový komentář ke článku na zdrojáku:

Read the rest of this post »

Comments [1]

Learning from hacked Github

Comments [2]

Poučení z hackutého githubu

Tak nám hackli github. A je to problém vývojářů. Jedná se ve stručnosti o to, že při použití ORM v Rails je standartně aplikována non-restrictive politika, která hackerovi umožní upravovat data v rámci cílového webu. Děsivé je, že tenhle způsob hacku je velmi jednoduchý a budou mu vystaveny nejen rails aplikace.

Co je děsivější je, že Rails dev tým se k vynucení bezpečné politiky postavil stylem fuck it, je to problém programátora.

To nejlepší? V railsech je tenhle problém od 09/2008 05/2007.

Pojďme si popovídat o PHP. Mnoho lidí používá nějaký formát ORM - může to být doctrine, dibi, NotORM či Zend_Database. A mnoho z nás si píše svá projektová ORM nad dibi - to je věc, kterou dělám já.

Předpokládejme, že máme něco podobného:

class Clanek {
     public function ulozit() {
         $data = array();
         foreach($this as $key => $val) {
             $data[$key] = $val;
         }
         if(!empty($this->id)) {
             dibi::update('clanky', $data)->where('[id] = %i', $this->id)->execute();
         }
         else {
             dibi::insert('clanky', $data)->execute();
             $this->id = dibi::insertId();
         }
     }
 }
 

Samo o sobě se jedná o elegantní (= efektivní a rychlé) řešení. S článkem potom můžeme pracovat jako s objektem a přitom nejsme omezeni žádným ORM (to si totiž postavíme sami.) Problém je, když ve stránce (controlleru / presenteru), kde ukládáme článek, uděláme následující:

$clanek = new Clanek($_POST['id']);
foreach($_POST as $key => $val) {
    $clanek->$key = $val;
}
$clanek->save();
 

Jediné, co nám potom stačí, je v code-inspektoru Google Chrome přidat např.

<input type="hidden" name="autor" value="1" />

A tímto vytvoříme článek, který "napsal" někdo jiný. Proč jsou Railsy tak náchylné? K práci s databází mají generátory - stejně jako Doctrine. Znamená to tedy, že díky Rails (resp. Active Record) nemusíte svůj "class clanek" psát - railsy vám ho vygenerují sami. Poté většinou v kódu děláte už jenom:

$clanky->get($_POST['id'])->setData($_POST)->save();
 

Railsy totiž mají implementovanou bezpečnostní politiku, která znemožní útok na webech vykonat. Ale také ji standartně mají vypnutou.

Tohle je velký problém, který je mj. i na Posterous a mnoho, mnoho jiných Ruby on Rails webech. Jedná se o přehlédnutí programátora, ale takové, na které framework neupozorní. A je to něco, o čem v PHP píšeme již dlouho a dlouho.

Správný postup je, ať už v Rails nebo PHP, nastavovat jednotlivá data (tedy ty, která editujeme) manuálně - hodnotu po hodnotě. Druhou možností je použít Nette Formuláře:

$clanek->setData($form->getValues())->save();
 

Nette formuláře totiž ze své logiky mají ochranu proti přidávání fields zabudovanou. A překvapuje mne, že Rails jsou tak děravé.

P.S.: V těhle chvílích jsem rád, že máme diktátora Davida, který se nebojí udělat BC-break -- změna politiky v Rails totiž bude implementována až v Rails 4, pro aktuální verzí bude k dispozici volitelný patch.

Update 5. 3. 7:46am CET: Rails dev tým promptně pushnul patch, který chování mění na standartně zakázané. Je možnost to globálně vypnout v konfiguraci projektu, push je přímo do master branche. Nějak zapomněli do commitu udat "BC break" - asi se na to u nich nehraje. A už vidím, jak po upgradu rails na webhostinzích všichni nadšeně opravují aplikace.

Tohle byl ostatně základní problém, proč to dev tým nechtěl do branche narvat. Že by to rozbilo většinu aplikací (což de-facto znamená, že většina aplikací je tímto způsobem děravá.) Nicméně lepší takhle než jinak, imho tenhle bug bude kolem ještě dlouho...

Comments [0]

Taková pragmatická konference

Včera jsem byl na milé grilovačce u El, s jejím přítelem a milou blondýnkou. El pracuje jako account v rámci Digital sekce jedné reklamky, zatímco její přítel se živí reklamou "postaru" - tedy reklamní spoty, citylighty atp. V rámci jedné z diskuzí jsme narazili na to, že vlastně nemáme konferenci, ocenění, které by nás jako výrobce skutečně zajímalo.

Read the rest of this post »

Comments [0]

imho je život o přístupu

So this week was a blast.

Tak tahle věta asi nejlépe vystihuje týden, který jsem právě měl. Nadupaný, krátký, produktivní a všeobecně skvělý.

Read the rest of this post »

Comments [0]

Trochu o UX RegioJetu

Tak jsem se dneska rozhodl, že pojedu na Nette Brain Cloud Beta.. Jakožto starý vlakový cestovatel jsem se rozhodl, že vyzkouším regiojet. A vyplynula z toho velmi zajímavá tapeta na twittru.

Read the rest of this post »

Comments [0]

Ze života - odmítáme klienty, máme 195 dní po splatnosti faktury a užíváme si života. Kein stress!

Málokdy říkám ne. Ale říct NE je umění, které vede ke spokojenému životu. Nemůžete fungovat jako slibotechna - resp. můžete, ale buď si poserete reputaci, nebo se z toho poserete sami. Jak by řekla moje srí lanská máma: Been there, done that.

Read the rest of this post »

Comments [0]

Jedeme k úspěchu / Mindshift IV / Neběhej jako slepice bez hlavy

Seriál jedeme k úspěchu je psaný z osobních zkušeností - situace zde popsané jsem buď zažil nebo prožívám, a při jejich řešení používám metody, na které jsem dostal doporučení od bohatších a úspěšnějších kolegů.

Read the rest of this post »

Comments [0]