Prskavčí blog

Jen další blog o všem možné, teď od Prskavců.

Webexpo 2010 - Na co půjdu na konferenci

Webexpo 2010 je před námi a já se s vámi podělím na které přednášky chci jít.

Čtvrtek 23.9. Workshopy

Program je velmi nabitý a jasno je jen na workshopy, tam jsem si zamluvil hned dva.

Těším se na Symfony2 s kterým si celkem hraju, ale chci se naučit něco více a od koho lépe než hlavního vývojáře Symfony. Doctrine používám již nějaký rok v předchozí verzi 1.2 a sleduji Honzův seriál o Doctrine2 na zdrojáku.

Moc se těším na warp-up v Comu, to je moje oblíbená restaurace.

23.9. workshopy
09:30-13:30 Symfony2 - Fabien Potencier [ CEO, Sensio ]
14:00-17:00 Doctrine2 - Jan Tichý [ Medio Interactive ]
18:00 Warm-up party v Como

Pátek 24.9.

V pátek je to hned složitější jak si na začátek vybrat. V bloku od 10 do 11:30 je mnoho kvalitních přednášek.

Na Karla Minaříka bych rád šel, jeho přednášky jsou vždy super a zábavné. Ale CouchDb jsem prozkoumal a vyzkoušel v pár drobných aplikací, případně se podiskutuji s Karlem osobně. Po přečtení knihy “Back to Napkin” mě zajímá přednáška Visual Note Taking / Sketchnotes. Potom je tu PHP Room, kde mě zajímá hlavně přednáška Roberta Lemke.

V dalším bloku budu pokračovat v Agile room, kde chci vidět jak se na vývojový proces koukají jiný, to je věc, kterou řeším v práci každý den. Rozhodně bych si chtěl promluvit s Petrem Ferschmann o Flexibee, které také sám používám. Jak znám Martina Hujera, bude zajímavá i jeho přednáška o Windows Azure.

V dalším bloku ještě zůstanu v agilní sekci na přednášku Soft Skill Essentials for Software Craftsmen. Jak vývojář PHP bych určitě šel na přednášky vývojářů z firmy Skype. Už jsem je viděl na Poslední sobotě a Openmeetingu tak můžu doporučit.

Další blok absolvuji v PHP Room, Dericka znám z jiných konferencí a doufám, že ukáže něco víc než dneska umím s Xdebugem nějaké skryté know-how a nazorů na TDD není nikdy moc, uvidíme s čím se předvede Filip Šubr.

Nakonec půjdu do Development Hall, kde David předvede novinky v Nette Framework 1.0 a potom následuje Digit s Petrem Márou a Honzou Březinou, hostem bude konečně i David Grudl.

24.9.
10:00-11:30 Visual Note Taking / Sketchnotes - Eva-Lotta Lamm
Creating Clean Code with Aspect-Oriented Programming - Robert Lemke
11:45-13:00 Software Development = Learning - Maria Diaconu, Alex Bolboaca
14:30-16:00 Soft Skill Essentials for Software Craftsmen - Pierluigi Pugliese
16:15-17:30 Debugging with Xdebug - Derick Rethans
Vývoj v PHP řízený testy - Filip Šubr
17:45-19:00 Nette 1.0
Digit s Davidem Grudlem

Sobota 25.9.

Sobota na Webexpu je velmi plná, v prvním bloku se přesunu do Agile Room, kde jsem zvědavý na Scrum ve Seznamu a o tom jak prosadit ve firmě. U nás ve firmě Scrum ukončil před 2 lety a to jsem tam ještě nebyl. Zajímavé přednášky jsou Development Hall, přednáška Aleše Roubíčka bude jistě zajímavá a další přednáška o node.js a uplatnění Javascriptu na serveru jistě také zaujme.

Od 11:45 určitě zajdu na přednášku Vaška Vančury, protože jeho přístup ke flashi se mi velmi líbí a byl bych rád, kdyby se to více rozšířilo a nepáchali všechno v Adobe Flash Builderu.

Nejsem si jistý, zda nevynechám Symfony2 po tom co absolvuji workshop ve čtvrtek, ale uvidím. Potom se půjdu podívat na přednášku jak prodat agilní vývoj to se může hodit.

Nakonec Ryan Singer a jeho přednáška Designing from start to finish bude skvělé zakončení konference.

25.9.
10:00-11:30 A Year with Scrum in Seznam.cz - Tomáš Pergler
Scrum for Executives - Six Secrets for Success with Scrum - Boris Gloger
11:45-13:00 Příprava dat pro rychlé a malé aplikace ve Flashi - Vašek Vančura
14:30-16:00 Symfony2 - Fabien Potencier
16:15-17:30 Selling Agile - Paul Klipp
17:45-19:00 Designing from start to finish - Ryan Singer

Závěr

Myslím, že Vašek Stoupa se svým týmem udělal obrovský kus práce a doufám, že budu moci psát stejně pozitivní zážitky i po konferenci jako mám dojem před konferencí.

Upgrade Androidu na T-mobile G1 z 1.6 na 2.2 (aktualizováno 22.3.2011)

Mám G1 koupenou u T-mobille. Mám ji sotva rok a ve světě Androidu je celkem už skoro nepoužitelný telefon. Nikdy jsem nepřišel na chuť nahrávat si tam nové romky apod. Ale když vydal Google nový Android 2.2 Froyo s JIT tak jsem si říkal, že tohle přesně G1 potřebuje. Bohužel T-mobile i HTC se vykašlali na uživatele a jediné co chtějí aby jste si koupili nový telefon. Protože svoji G1 mám celkem rád a nechtěl jsem ji poslat do věčných lovišť tak jsem přistoupil na upgrade CyanogenMod 6.

Nečekejte nějaký úplný návod, rady apod. Pokud se chcete ptát využijte Android forum. Já jsem ale použil postup, který je ve wiki.

Postupoval jsem asi takto:

  1. Získal jsem root pomocí universal root
  2. Z marketu jsem nainstaloval ROM Manager
  3. Pomocí něj jsem nainstalo recovery rom RA 1.7
  4. Přes recovery jsem nainstaloval poslední radio, restartoval a ověřil ještě jednou, že je tam opravdu ta poslední verze, pokud to neuděláte a nainstalujete Danger SPL riskujete brick
  5. Potom pomocí recovery rozdělil SD kartu (nevím zda bylo nutné, měl jsem 2GB)
  6. Na SD kartu jsem uložil Rom a Google Apps Mini (full neobsahovala market)
  7. Na SD kartu jsem nahrál Danger SPL a nainstaloval a restartoval, potom jsem pomocí (Camera + tl. Vypnutí tel. najel do režimu, kde jsou vidět tančící androidi místo pruhů  a ověřil, že je vše ok, vypnete pomocí Přijmutí hovoru + Menu + Vypnutí tel.)
  8. Nastartoval jsem do Recovery (při bootu držet Home nebo z aplikace ROM manager) a dal jsem wipe a CyanogenMod 6 rom
  9. Stejným postupem jsem (bez wipe) jsem aplikoval Google Apps mini a provedl konečný restart
  10. První nabíhání trvalo trochu déle a jinak to jede ok.

Každopádně všem, kteří to chtějí se svojí G1 zkusit přeji štěstí a ať se jim zdaří upgrade jako mě a netrvá jim to tak dlouho. Já jsem se zasekl hlavně na tom, že jsem stáhl poškozený zip romky a než jsem na to přišel tak to chvíli trvalo a už jsem se bál, že mám z toho brick, ale recovery mě zachránila. Kontrolujte MD5 všech stažených souborů!

Nakonec pár obrázků z mojí webové kamery:

 

Aktualizace 22.3.2011

  • Aktualizace radia a kernelu, přidá vám 14MB RAM a umožňuje lepší chod nových ROMS 2.2.X
  • Poslední romku, kterou zkouším je Official AOSP 2.2 OTA, který nemá podporu češtiny, ale zatím mi to přijde jako nejlepší 2.2 romka, kterou jsem měl. Ještě případně poreferuji, zatím to vypadá dobře, předchozí pokusy mě přivedli až k tomu, že telefon byl tak pomalý až nepoužitelný po cca měsíci používaní. Obzvláště poslední CM pro G1.

Zend Framework a NoSQL pro ukládání logů ve webových aplikací, díl prvnío CouchDb

Použití databáze pro ukládání logů se používá často pro analýzu logů. Technicky napojit databázi RBMS (MySQL) pomocí Zend_Log_Writer_Db není žádný problém. Ale vidím tu nevýhodu v tom, že musíte mít schema podle toho co ukládáte za logy. Pokud se rozhodnete použít NOSQL databázi (CouchDb, MongoDb) nemusíte se o schema starat.

V tomto článku si napsat vlastní Zend_Log_Writer pro CouchDb a jak si potom lehce zobrazíme příslušné logy. Napíšeme si také jednoduchou map funkci pro view v CouchDb, kterou v aplikaci použijeme.

Nejprve si projedeme jak se používá Zend_Log_Writer_Db, syntaxi najdete v manuálu. Tabulka v db musí mít pevně dané schéma, která namapujete v konfiguraci writeru.

Implementaci vlastního App_Log_Writer_CouchDb provedeme třeba takto:

class App_Log_Writer_CouchDb extends Zend_Log_Writer_Abstract
{
    /**
     * Db
     * @var Phly_Couch
     */
    private $_db;
    /**
     * CouchDb host localhost default
     * @var string
     */
    private $_host;
    /**
     * Couchdb port 3184 default
     * @var int
     */
    private $_port;
    /**
     *
     * @param array $params
     * @return void
     */
    public function __construct($dbname, $options = null)
    {
        if (is_null($options)) {
            $options['host'] = "localhost";
            $options['port'] = "5984";
            $options['db'] = $dbname;
        }
        $this->_db = new Phly_Couch($options);
    }

    static public function factory($config)
    {
        $config = self::_parseConfig($config);
        return $config;
    }
    /**
     * @param array $event
     * @return void
     */
    protected function _write($event)
    {
        // action body
        $doc = new Phly_Couch_Document($event);
        $result = $this->_db->docSave($doc);
        // return array ok, id, rev
        $info = $result->getInfo();
        if (!$info['ok']) {
            throw new Zend_Log_Exception("Error in save to CouchDb");
        }
    }

}

Není na tom jak vidíte nic složitého, implementuje funkce _constructor, factory a write funkci a je to.

Samozřejmě je to kus Zend Frameworku, který potrebuje konfiguraci.

autoloaderNamespaces.phly = "Phly_"
autoloaderNamespaces.app = "App_"
; Options for CouchDb
couchdb.host = prskavec.couchone.com
couchdb.port = 80
couchdb.db = "test-log"

Pro správu CouchDb jsem použil vestavěný Futon.

Vytvořil jsem testovací db “test-log” a v ní pohled, který v kódu potom používám. Vytvoříte temporary_view, které potom při ukládání ložíte do příslušného designu a view. U mě to bylo použité logger/log_by_prior.

  function(doc) {
    if (doc.priority) {
       emit(doc.priority, [doc.priorityName, doc.timestamp, doc.message, doc.module, doc.controller]);
    }
  }

Toto view potom volá controller, který načítá data pro zobrazení dat z databáze.

class IndexController extends Zend_Controller_Action
{
    protected $_config;

    public function preDispatch()
    {
            $this->_config = new Zend_Config_Ini('../application/configs/'.
                    'application.ini', APPLICATION_ENV);
    }

    public function indexAction()
    {
         $db = new Phly_Couch($this->_config->couchdb);

         $this->view->form = $form = new App_Form_Filter();
         if ($this->getRequest()->isPost()) {
             $formData = $this->getRequest()->getPost();
             if ($form->isValid($formData)) {
                 $filterValue = $form->getValue('filter');
                 Zend_Debug::dump($filterValue);
                 if (empty($filterValue) && $filterValue===0) $filterValue = null;
                 $result = $db->view('logger','log_by_prior', $filterValue, array("db"=>$this->_config->couchdb->db));
             } else {
             $form->populate($formData);
             }
         } else {
            $result = $db->view('logger','log_by_prior', null, array("db"=>$this->_config->couchdb->db));
         }
         $this->view->docs = $result->toArray();
         $this->view->messages = $this->_helper->flashMessenger->getMessages();

         $logger = new Zend_Log();
         $r = new ReflectionClass($logger);
         $this->view->priorities = array_flip($r->getConstants());

    }

    public function logAction()
    {
          $id = $this->_request->getParam('id', 0);  

          $logger = new Zend_Log();
          $format = '%timestamp% %priorityName% (%priority%): '.
            '[%module%] [%controller%] %message%';
          $formatter = new Zend_Log_Formatter_Simple($format);

          $writer = new App_Log_Writer_CouchDb($this->_config->couchdb->db, $this->_config->couchdb);
          $writer->setFormatter($formatter);

          $logger->addWriter($writer);
          $logger->setEventItem('module', $this->getRequest()->getModuleName());
          $logger->setEventItem('controller', $this->getRequest()->getControllerName());
          $logger->log("Testovani chyba", $id);
          $this->_helper->flashMessenger->addMessage('Log item saved');
          $this->_helper->redirector('index');
    }

}

Controller obsahuje dvě akce a to vlastní zobrazení v indexAction a metodu, která záznamy vytváří logAction. V logAction je vidět výhoda neexistence schématu, protože jsem si přidal další informace bez potřeby měnit schéma databáze.

PHP a CouchDb

Použil jsem knihovnu Phly_Couch pro práci s CouchDb, jen jsem musel funkci lehce aktualizovat pro současnou verzi CouchDb 1.0.1, kterou jsem použil.

Aktualizovanou verzi Phly_CouchDb najdete v mém forku na githubu, celou ukázkovou aplikaci php_couchdb_logger také.

Pro přístup ke CouchDb můžete použít i jiné knihovny, například PHPillow, která vypadá celkem aktualizovaně. Já jsem použil knihovnu, kterou napsal Matthew Weier O’Phinney hlavně proto, že je psaná přímo pro Zend Framework. Má přehledný a dobře napsaný kód, kde jsem si upravil jen to co jsem se potřeboval.

CouchDb

Na Mac OS X si můžete nainstalovat CouchDb jako na linuxu ze zdrojáků nebo použít balík, který mi přijde ideální. Podrobné informace o instalaci jsou ve wiki, případně se podívejte tam.

Závěr

Myslím, že to je jednoduchý příklad jak například použít CouchDb, který se pro začátek práce s CouchDb může hodit. Pokud chcete dělat náročnějši vyhledavání na logy, je potřeba použit CouchDb Lucene. Pokud se chcete dozvědět více o CouchDb tak doporučuji jít na přednášku Karla Minaříka na letošním Webexpu.

V dalším pokračování si ukážeme jak by se to dělalo v MongoDb.

Jak jsem si koupil Amazon Kindle

Čtečka knih Amazon kindle byla nedávno s nástupem iPadu zlevněna tak jsem se rozhodl zakoupit ji pro své používání, protože již touto dobu používám kindle v telefonu s Androidem a na počítači.

Objednal jsem 8.7.2010 a doporučeno bylo 13.7.2010 pomocí UPS. Cena $187 (s pouzdrem a zálohou na clo $287) - cca 6000 Kč.

Kindle byl aktivovaný na můj účet na Amazonu. Firmware 2.3, provedl jsem upgrade na poslední verzi 2.5.2, která přidá možnost zaheslování, zoom v PDF, podporu facebook, twitter a další.

Dostat do Kindlu obsah není žádný problém, stačí ho připojit přes USB (microusb) a přenést přes mass storage. Pokud je PDF, Mobi čtečka se si s tím bezproblémů poradí. Pokud máte ePub, html je potřeba to převést. Můžete použít službu Amazonu, která vám za malý poplatek převede a pošle dokument. Toto řešení jsem nevyzkoušel, protože se mi nechtělo za to platit. Stáhnul jsem si kindlegen, pomocí kterého si to můžete převést sami. Převedl jsem HTML manuál PHP (40MB) do formátu mobi (16MB). Převod trval 1h, ale úspěšně se to provedl. V Kindlu pokud chcete vyhledávat chvíli trvá než si ho zaindexuje.

Pokud chcete nějaké české tituly tak kromě PDF (napr. knihy.nic.cz) dopočuji i palmknihy.cz, kde sice Kindle není přímo zmíněn, ale formát Mobi Unicode funguje bez problémů. Jako další dobrý zdroj se dá použít Elektronická knihovna Root.cz, kde se najdou volné tituly ke stažení anglicky i česky.

Samozřejmě máte v angličtině k dispozici 620 000 titulů přímo na Amazonu. Nejsou to jen knihy, ale i časopisy a noviny. Z čech tam najdete jenom Prague Post . Kdybu měli Mladou frontu, tak si ji hned předplatím.

Pokud máte zajímavé typy pro Kindle tak se námi podělte v komentářích, pokud nic o elektronických čtečkách nevíte doporučuji článek Martina Hassmana a postřehy Marka Prokopa.

Xdebug 2.1 instalace ze zdrojových kódů

Včera vyšela nová verze Xdebug 2.1. Z hlavních novinek bych zdůraznil podporu pro PHP 5.3 a další můžete vyčíst z Derickova oznámení.

Xdebug jsem instaloval na Mac OS X 10.6.4 a Ubuntu 9.10 a bez problémů jsem to zkompiloval ze zdrojových kódů.

V Ubuntu i na Macu je potřeba mít podporu pro kompilaci ze zdrojových kódů. V ubuntu je to balíček build-essential a autoconf a na Macovi Xcode s příslušenstvím, případně si přes Port doinstalujete co potřebujete.

  • Stáhnout zdrojové kódy xdebugu, rozbalit a dat kompilovat.
    wget http://www.xdebug.org/files/xdebug-2.1.0.tgz
    tar -xzf xdebug-2.1.0.tgz
    cd xdebug-2.1.0/
    phpize
    ./configure --enable-xdebug
    make
  • Knihovnu najdete v xdebug-2.1.0/modules/xdebug.so
  • Knihovnu nakopirujte k ostatním knihovnám, případně kam chcete
  • Přidejte nakonec do php.ini řádek
    zend_extension=/cesta-k-modulum/xdebug.so
  • Nezapomeňte restartovat server

Pokud máte nějaké potíže s kompilací nebo s Xdebugem, klidně se ozvěte ve komentářích.

P.S.: Pokud instalujete xdebug poprvé nezapomeňte zkontrolovat zda máte správně konfiguraci pro debugging pro IDE (např. NetBeans)

xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/tmp/xdebug"

Adblock není vražda, ale zkuste si ho nechat zapnutý!

Po přečtení článku z minulého týdne jsem si myslel, že brzo začne někdo uživatele adblocku blokovat. Dnes jsem narazil na první a určitě ne jediny z nich.

Při hledání češtiny do Wordpresu 3.0 jsem narazil na stránku kde vyskočí zajímavé okno, která mě přesměruje na stránku upozorňující na to, že mám zapnutý adblock (Firefox 3.6.4, Ubuntu 9.10).

Chápu CPALead, že jim to kazí obchody, ale nechápu provozovatele stránek, kteří se takto připravují o návštěvníky. Protože vám nedají jinou šanci než odejít nebo adblock vypnout. Příjemnější by bylo na stránce upozornění a ne přesměrování někam, kde nemám šanci ani zjistit, co s tím má přechozí stránka společného.

Tak tedy ne!

Subversion post-commit pro více projektů v jednom repository

Pokud máte strukturu repository podobnou této:

/repository/project1/trunk
/repository/project1/branches
/repository/project1/tags
/repository/project2/trunk
/repository/project2/branches
/repository/project2/tags

a chtěli jste dělat nějakou akci pro jednotlivé projekty nebo jen pro některé je potřeba si trochu pohrát s post-commitem. Zde uvádím příklad na posílání mailu jen pro projekty, které začínají “php_”.

#!/bin/sh
# POST-COMMIT HOOK
REPOS="$1"
REV="$2"
REPNAME="${1##*/}"
SVNLOOK="/usr/bin/svnlook"
AWK="/usr/bin/awk"
GREP="/bin/egrep"
ERR="/tmp/errors"  

TEST=1

CHANGED=`$SVNLOOK changed  -r "$REV" "$REPOS" | $AWK '{print $2}' | $GREP ^php_`
for FILE in $CHANGED 
do
    # echo $FILE >> $ERR 
    TEST=0
done 

if [ $TEST = 0 ]; then
    /srv/svn/tools/commit-email.pl "$REPOS" "$REV" adresat@email.com -h svn.hostname.cz -s "SVN: $REPNAME" > /tmp/postcommit-log 2>&1
    # echo "Send mail" >> $ERR
    exit 0
fi

Post commit je upraven tak, že pomocí svnlook si zjistí provedené změny a podle nich se zachová, tak se dá řídit celá logika akce, kterou chcete vykonat.

Subversion dnes a zítra

Já osobně jsem začal pracovat s někde kolem roku 2000 se systémem CVS z kterého jsem nebyl vůbec nadšený, hned jak jsem se pokusil něco přejmenovat. Později jsem přešel na Subversion, který mě v té době nadechl a to mi celkem vydrželo po dlouhou dobu než jsem před několika lety začal koketovat s distribuovanými systémy a teď asi rok už aktivně používám Git a pře ním jsem si hrál s Bazaar a Mercurialem. Na Subversion jsem, ale nijak nezanevřel a stále ho používáme ve firmě jako jediný verzovací systém v poměrně slušném nasazení (asi 100 repositářů, několik desítek GB místa). Znám limity Subversion a podle toho s ním zacházím.

Verzovací systémy jsou tu už 38 let, první verzovací systém SCCS vznikal v Bellových laboratořích v roce 1972. Dodnes existuje na mnoha unixových systémech v GNU variantě.

Protože SCCS to byl proprietární verzovací systém, vytvořil na Walter F. Tichy  na Pordue University open source variantu tohoto software pojmenovanou RCS. RCS se dodnes používá například v Twiki pro uchovávání historie stránek.

Následovali další jako CVS, PRCS (Project Revision Control systém). CVS byla původně jen nadstavba na RCS, sada skriptů, které používali příkazy RCS. Většinu vlastností CVS má poděděnou od RCS.

Subversion vznikl nový verzovací systém, který odstraní chyby co lidem vadili v CVS a byl napsán úplně znova i když filozoficky se hodně držel původního CVS, ale byl tree oriented, což přineslo některé výhody, ale i nevýhody.

Protože řada vývojářů nebyla s CVS spokojená vznikali další systémy a za některými stál i Microsoft, který přišel se svým verzovacím systémem Delta v roce 1994. Tento systém dlouho nevydržel, protože MS udělal výhodou akvizici a koupil firmu SourceSafe a další rok už vydal nový verzovací systém VSS. Tento systém měl mnoho nevýhod a pokud někdo s ním pracoval určitě mi dá za pravdu, že to nebylo jednoduché. Problémy se zamykáním souborů, přenos přes sdílené disky apod. V roce 2005 naštěstí MS představil moderní centralizovaný systém, který je součásti TFS, který jako datové úložiště používá MS SQL.

Larry McVoy je klíčová osobnost návrhu verzovacích systémů. Stál u vývoje verzovacího systému  Sun TeamWare, který vedl Evan Adams a potom na základě těchto zkušeností vytvořil BitKeeper. To jsou první distribuované verzovací systémy. TeamWare byl postavený na základech SCCS, přesto přinesl spoustu nových věcí, které dali později vzniknou dnešním systémům. Implementace TeamWare začala v roce 1991, to můžeme považovat za datum vzniku distribuovaných systémů.

TeamWare to začal, ale BitKeeper může za vznik Gitu a Mercurialu, kteří patří dnes mezi nejznámější distribuované verzovací systémy. Společnost BitKeeper se na základě událostí v roce 2005 rozhodla odebrat (reverse enginnering na linux konferenci pomoci telnetu) volné použití linuxové komunitě, která BitKeeper používala k vývoji jádra.

To vedlo ke vzniku Gitu (Linus Torvald) a Mercurial (Matt Mackall) v roce 2005. Git je inspirován BitKeeperem a Monotone (sha1 hash), také velkou část práce na něm udělal Petr Baudiš, který stojí například za frontendem Cogito  a příklad git-filter-branch.

Výhody Gitu vidím v těchto vlastnostech:

  • pružnost (moderní různá worklow)
  • lokální větve
  • jednoduchý a rychlý merge
  • rychlost a offline commit
  • vysoký failover, díky lokálním kompletním kopiím

Tak proč všichni nepoužívají Git, ale Subversion? Je proto několik důvodů.

  1. ne všichni považují tyto výhody za důležité, priority mají jinde
  2. pro SVN mluví vysoká rozšířenost, snadná dostupnost v mnoha IDE
  3. vynikající TortoiseSVN, který pomáhá více než by se na první pohled mohlo zdát
  4. dostupný placený support včetně tvoření balíků pro linux, windows (CollabNet)
  5. http, apache pro snadné začlenění do každé sítě
  6. napojeni ldap, active diretory nastavení práv až na úrověň každého adresáře
  7. znalost

Proto více než 80% firem dnes používá Subversion.

Dnes je důležité používat určitě aktuální verzi Subversion, vůbec nedoporučuji pracovat s verzemi 1.4 a nižší, které nepodporovali mergeinfo. Subversion má desetileté výročí. Ale stále je to malé dítě, které potřebuje dospět. Už jsou pryč dětské nemoci, ale některé problémy přetrvávají.

Subversion byl začleněn pod Apache Foudation do toho doufám, že se trochu akceleruje vývoj Subversion k následujícím verzím. Tým kolem SVN si je dobře vědom věcí, které SVN scházejí a dobře vědí, že to není jednoduché je odstranit. Proto existuje tato roadmapa.

Je to roadmapa přibližně na 4 roky dopředu, klíčový bude letošek a uvidíme jak se podaří vývoj verze 1.7 o které budu teď. K ostatním verzím se vrátím později.

Verze 1.7 by měla obsahovat tyto novinky

  • httpv2
  • wc-ng
  • svn patch

Nová verze HTTPv2 by měla přinést větší rychlost při zachování všech výhod http protokolu.

Pracovní kopie nové generace je důležitá součást nutná pro další následné změny, které odstraní dnešní problémy (tree conflict, rename tracking). Bude to sqlite databáze v jednom adresáři .svn, kde budou všechny potřebná metadata o repository.

Svn patch jen umožní to co umí příkaz patch v linux, drobnost, která v svn chyběla.

Ve verzi 1.8, která by měla být za rok bychom se snad díky nové WC-NG mohli již dočkat sledování přejmenovaných souborů napříč historii. Nastavení pro jednotlivé repository ne jen globálně a vylepšení problémů s tree conflicty.

Co bude v dalších verzích uvidíme, autoři slibují nový FS, nový editor a další vylepšení. Uvidíme zda se do budoucna dočkáme třeba i offline commitů.

Na závěr bych chtěl shrnout co by jste si měli odnést těchto 4 věci:

  • pokud máte subversion, ujistěte se že používáte poslední verze
  • pokud chcete přejít na DVCS mějte pro to dobré zdůvodnění nedělejte to je kvůli módě
  • na subversion se stále pracuje
  • existují distribuované verzovací systémy a přinášejí něco nového

Tento článek je přepis mojí přednášky na Teched 2010.

5 alternativních systémů jak tvořit slidy

Pokud občas nebo více přednášíte, určitě jste zkusili nějaký tento program na tvorbu slidů. Já žádný z nich nepovažuji za ideální, hlavně pokud potřebujete mít ve slidech zdrojové kódy. Pokud máte slidy v html nebo xml můžete je verzovat pomocí například Gitu nebo SVN, to vám půjde s binárními formáty také, ale neuvidíte ty diffy, které jsou užitečné.

Určitě jich bude ještě více. Pokud pracujete s HTML a XML máte další možnosti, ať jsou to Docbook slides nebo některá varianta založená na HTML nebo markupu (Markdown, Textile, Texy).

Dnes tu představím 5 systémů, které generují HTML nebo se slidy v HTML přímo píšou.

  1. S5
  2. Swinger
  3. Slidedown
  4. W3C (Slidy, B5, slidemaker)
  5. JUSH slides

1. S5 Klasické slidy v HTML dole je vidět jak vypadá jednoduchý předpis.



<em>[slide show title]</em>








[slide title]

Demo je k dispozici na http://meyerweb.com/eric/tools/s5/s5-intro.html

2. Swinger

Toto řešení je zajímavé, že máte k dispozici celý editor markupu a všechny data jsou uloženy v CouchDb. Aplikace i prohlížení slidů je jen HTML a Javascript.

Online verze http://swinger.quirkey.com/

3. Slidedown Řešení založené na Ruby, které podle předpisu v markdownu vygeneruje html prezentaci včetně zvýraznění ruby syntaxe i šablon.

!SLIDE

# This is my talk

!SLIDE

## I hope you enjoy it

!SLIDE code

    def foo
      :bar
    end

!SLIDE

Google is [here](http://google.com)

!SLIDE

# Questions?

Zvýraznění syntaxe se dělá takto, například pro javascript.

@@@ js
    function foo() {
      return 'bar';
    }
@@@

Demo je dostupné zde http://nakajima.github.com/slidedown/

4. W3C Talks Tools (Slidy, B5, Slidemaker/slideme)

Struktura je velmi jednoduchá, základní část je tvořena tagem

a jsou přidané třídy pro speciální chování.

Analysts - "Open standards programming will become mainstream, focused around VoiceXML"

projected growth of VoiceXML
VoiceXML will dominate the voice environment, due to its flexibility and eventual multimodal capabilities

Source Data Monitor, March 2004

Slidy demo

5. JUSH Slides

Poslední je moje vlastní řešení je založené na W3C Slidy a je doplněné o JUSH zvýrazňovač, který pomůže v tom co já nejvíce potřebuji.

Kromě zvýraznění přidá JUSH linky na dokumentaci u klíčových slov pro html, javascript, php a další. To udělá ze slidů dobrý studijní materiál.

Za další výhodu vidím jednoduchý předpis v html, jen používání xmp tagu není ideální.

Filter Input

Red Blue
// c_type extension
$clean = array();
if (c_type_aplha($_POST['username']) {
    $clean['username'] = $_POST['username'];
}
// filter
$args = array('username' => FILTER_SANITIZE_STRING, ...);
$myinputs = filter_input_array(INPUT_POST, $args);

Pokud máte nějaké další zajímavé řešení podělte se s námi v komentářích.Pokud občas nebo více přednášíte, určitě jste zkusili nějaký tento program na tvorbu slidů. Já žádný z nich nepovažuji za ideální, hlavně pokud potřebujete mít ve slidech zdrojové kódy. Pokud máte slidy v html nebo xml můžete je verzovat pomocí například Gitu nebo SVN, to vám půjde s binárními formáty také, ale neuvidíte ty diffy, které jsou užitečné.

Určitě jich bude ještě více. Pokud pracujete s HTML a XML máte další možnosti, ať jsou to Docbook slides nebo některá varianta založená na HTML nebo markupu (Markdown, Textile, Texy).

Dnes tu představím 5 systémů, které generují HTML nebo se slidy v HTML přímo píšou.

  1. S5
  2. Swinger
  3. Slidedown
  4. W3C (Slidy, B5, slidemaker)
  5. JUSH slides

1. S5

Klasické slidy v HTML dole je vidět jak vypadá jednoduchý předpis.



<em>[slide show title]</em>








[slide title]

Demo je k dispozici na http://meyerweb.com/eric/tools/s5/s5-intro.html

2. Swinger

Toto řešení je zajímavé, že máte k dispozici celý editor markupu a všechny data jsou uloženy v CouchDb. Aplikace i prohlížení slidů je jen HTML a Javascript.

Online verze http://swinger.quirkey.com/

3. Slidedown

Řešení založené na Ruby, které podle předpisu v markdownu vygeneruje html prezentaci včetně zvýraznění ruby syntaxe i šablon.

!SLIDE

# This is my talk

!SLIDE

## I hope you enjoy it

!SLIDE code

    def foo
      :bar
    end

!SLIDE

Google is [here](http://google.com)

!SLIDE

# Questions?

Zvýraznění syntaxe se dělá takto, například pro javascript.

@@@ js
    function foo() {
      return 'bar';
    }
@@@

Demo je dostupné zde http://nakajima.github.com/slidedown/

4. W3C Talks Tools (Slidy, B5, Slidemaker/slideme)

Struktura je velmi jednoduchá, základní část je tvořena tagem

a jsou přidané třídy pro speciální chování.

Analysts - "Open standards programming will become mainstream, focused around VoiceXML"

projected growth of VoiceXML
VoiceXML will dominate the voice environment, due to its flexibility and eventual multimodal capabilities

Source Data Monitor, March 2004

Slidy demo

5. JUSH Slides

Poslední je moje vlastní řešení je založené na W3C Slidy a je doplněné o JUSH zvýrazňovač, který pomůže v tom co já nejvíce potřebuji.

Kromě zvýraznění přidá JUSH linky na dokumentaci u klíčových slov pro html, javascript, php a další. To udělá ze slidů dobrý studijní materiál.

Za další výhodu vidím jednoduchý předpis v html, jen používání xmp tagu není ideální.

Filter Input

Red Blue
// c_type extension
$clean = array();
if (c_type_aplha($_POST['username']) {
    $clean['username'] = $_POST['username'];
}
// filter
$args = array('username' => FILTER_SANITIZE_STRING, ...);
$myinputs = filter_input_array(INPUT_POST, $args);

Pokud máte nějaké další zajímavé řešení podělte se s námi v komentářích.

Internet Developer Forum 2010

Dnes 7.4.2010 se koná v NTK v Praze, Dejvicích konference pro vývojáře webových aplikaci, kterou pořádá Iinfo.cz

V průběhu dne tu na blogu budu aktualizovat reportáž z konference a postřehy.

9:01 Konference stále nazačala, ale sedím v sále a mám wifi připojení a přes NTK-SIMPLE, pro jistotu jsem si rychle zřídil na svoji OpenCard členství v knihovně NTK.

9:03 Petr Krčmář oznamuje, že se start protáhne, snad to nebude platit o celé konferenci.

9:15 Petr Krčmář zahajuje konferenci

Pro koho děláme web - Adam Fendrych

Klasická přednáška o přístupnosti, fakta dobrá, trochu chybí tempo a vtip. Celkem ze začátku nic zajímavého.

Zaujali mě základní údaje pro návrh UI

  • věk
  • pohlaví
  • sociální skupina, zázemí
  • vzdělání
  • zkušenosti s počítačem
  • znalost tématu
  • základní potřeby

Prý si máme vybudovat vztah se svými personami pro testování. Konstra persony je celkem detailní, obsahuje jméno, věk, pohlaví a specifikace potřeb a jak na něj váš web odpoví. Prostě use case s pěknou fotkou ;-) Person bychom měli více, mít i negativní pro kterou web neděláme. Musí vycházet z výzkumu a měli by je přijmou všichni kdo se podílí na webu.

Segmentace webu podle cílových skupin nutí uživatele se rozhodnout a pokud se nedokáže zařadit jednoznačně a bez přemýšlení. To není vždy jednoduché.

Kritice podléhá web ČVUT. To je celkem zajímavé, hlavně že to je moje dílko i když poněkud starší. Naštěstí přednášející opravdu nebyl nikdy cílová skupina.

Proč testovat?

  • Dokonalý design nikdo nenavrhne
  • Ověřit funkčnost řešení s uživateli
  • Odhady chování uživatelů jsou ze 75% chybné!

Já si myslím, že dokonalý design prostě neexistuje. Ale testovat je určitě potřeba.

dále přednáška pokračuje testování wireframů, papírových wireframů.

Kdo to všechno udělá? Investor, Manažer, Textař (copywriter), Grafik, Kodér, Programátor, Marketér

Doufejte, že nikdo z nich.

U nás často dělá všechno jediný člověk UX Designer.

24.3. UXCamp.cz

10:40 Po přestávce pokračuje Daniel Steigerwald - Třídy, dědičnost a OOP v javascriptu

Daniel má pěkný styl, dobře se poslouchá a nenudí. Navazuje na svůj seriál na zdrojáku. Pěkná přednáška, hlavně doporučení, že dobrá kniha o JS neexistuje. Hlavně ne Croforda.

11:30 David Grudl přišel včas, ale ne dříve a pokračuje s NETTE, RIA, UX, AJAXE to rýmuje

David je stálice konferencí a jeho přednáška zatím vypadá podobně jako na WebExpu.

Kdy používat RIA, nejlépe nikdy! To se mi líbí. Použít jen pro to když máte skutečně pádný důvod. Celá živá ukázka byla o autocomplete v Nette.

Oběd, no nic moc. Mohli by se pro příště polepšit. Moderování přebral Petr Koubský.

13:30 Honza Král a NOSQL Databáze

Naposledy jsem Honzu viděl ve Fractal baru, kde předváděl Redis v akci při implementaci twitteru v Pythonu, článek o NOSQL najdete i tady na blogu.

Pro masivní datové úložiště, které je potřeba škálovat Honza doporučuje Cassandru.

Nasazení NOSQL v Čechách? Analýza logů pomocí ukládání přímo do MongoDb.

14:30 Jiří Knesl - Základní chyby vývojářů a Agile jako řešení

  • prototypování pomocí Blueprint a HTML, CSS s použitím verzovacího systému (ukázka pomocí Mercurialu)
  • testovat (unittesty, testy seleniem) - na radu Honzy Krále zkuste Selenium nahradit pomocí Twill
  • řízení- agilní řízení, funguje na bázi procesů a je do jisté míry samořídící
    • čas
    • priority
    • komunikace
    • produktivita
    • zábava
    • peníze

Celkově mi přijde, že to není moc přínosné v reálném nasazení pokud je firma řízená procesy jako třeba ta naše. Je to škoda, že ne všechno je testovatelné na úrovni unittestů a naše silně heterogenní systémy PHP, PHP CMS a JAVA v jednom se nedají na úrovni kódu testovat na úrovni, která by stačila. Řešení pomocí TestComplete (nebo Selenium) není úplně spasitelné.

v 15:50 bude konference zakončena panelovou diskuzí.