Nejlepší investiční mejdan

Monday, August 16th, 2010

Před lety jsem pracoval na hře Fish Fillets 2. Během této doby se jiné místní firmě, po letech úporného přežívání, podařilo nalézt investora, který zaplatí vývoj jejich hry.

Sláva to pro ně byla veliká a tak uspořádali okázalou akci, kam sezvali všechny místní vývojáře a hromadu novinářů. Na pódiu probíhaly proslovy majitelů i investorů o všemožných synergiích a velkolepých plánech. Na stolech bylo možné nalézt letáčky s dlouhou nabídkou pracovních příležitostí a ve vedlejší místnosti se konal velkolepý raut s hromadou chlastu i jiných pochutin. K tomu všemu pak hrála kapela a okolo se motaly krásné hostesky.

Za dva týdny čtu na nějakém webu, že si to investor rozmyslel a firma ukončila svůj provoz.

Go Highlighter pro PSPad

Sunday, August 1st, 2010

V posledních pár dnech jsem si začal hrát s jazykem Go a tak jsem si vytvořil syntax highlighter pro editor PSPad. Soubor je možný stáhnout zde a stačí nakopírovat do adresáře “syntax”.

Dělení je následující: keywords1 jsou všechny standartní keywordy jazyka, keywords2 pak datové typy a keywords3 jsou hodnoty true, false a nil.

Haskell Tutorial

Wednesday, July 21st, 2010

Před rokem a půl jsem se tady rozplýval nad parádním tutorialem k Ruby, který člověka během několika málo minut provede základy jazyka. Každý tak má možnost ozkoušet si jazyk na nečisto a poznat jak na něj působí, což je, až příliš, opomíjená vlastnost.

Dneska jsem nalezl stejný typ tutorialu pro jazyk Haskell. Tento jazyk je opředen spoustou různých legend a programátoři z něj mají, vcelku opodstatněný, respekt. Tento respekt je navíc znásoben výukou funkcionálního programování v prvních ročnících studia informatiky na vysokých školách.

Právě lidi s tímto handikapem ocení tutorial nejvíce a snad jim to pomůže poznat, že tento jazyk je vlastně strašně krásný a dá se používat i bez všech těch functorů a dalších šileností, které vyžadují PhD vzdělání. Kromě letitých programátorů je Haskell vhodný i pro nováčky, kteří navíc mají obrovskou výhodu v neznalosti imperativního programování.

Tutorial naleznete naleznete na tryhaskell.org.

Data driven approach

Thursday, July 15th, 2010

Jedním z nejtypičtějších přístupů jak zvýšit “inteligenci” systému strojového učení, či umělé inteligence obecně, představuje dodání větší sofistikaci modelu, například přidáním expertních znalostí či nalezením lepšího algoritmu.

Naprosto opačným a opomíjeným způsobem je naopak zapomenout na jakoukoliv sofistikaci a vyjít pouze z velkého množství nezpracovaných dat, které nám ve vysledku dají lepší výsledky samy od sebe. Jedním z hlavních představitelů tohoto směru je Peter Norvig, šéf výzkumu ve společnosti Google a autor nejklasičtější knihy o umělé inteligenci. Před nějakým časem měl přednášku s názvem Models and Theories na kterou navazuje novější “Innovation in search and artificial intelligence”.  Tato přednáška nepřináší zase tolik nového, takže pokud jste Models and Theories viděli a nejste velcí fandové tak ji můžete s klidným srdcem vynechat.

Všem ostatním vřele doporučuju. Navíc není příliš odborná (relativně) a můžete se dozvědět jakým kouzlem fungují některé produkty od Google: překladač, Google sets, vyhledávání obrázků či korekce překlepů. To šílené praskání mikrofonu na začátku videa přestane jakmile začne mluvit sám Norvig.

Alternativní metody rozhodovacích stromů

Wednesday, July 14th, 2010

Pár měsíců zpátky jsem v Laboratoři dobývání znalostí na FI MUNI hovořil o méně známých metodách rozhodovacích stromů. Po delší době jsem se konečně dostal k upravení těchto slajdů a jejich zveřejnění.

Berte to jako takový přehled toho co existuje + náhled na datové proudy a Very fast decission trees. Právě poslední zmíněná metoda zaslouží vaši pozornost, pokud potřebujete škálovat učící algoritmy v rozsahu desítek miliónů příkladů. Nevím o žádné jiné metodě, která by tohle uměla sama od sebe.

Slidy z ostatních přednášek najdete na mém slideshare, případně přes odkaz v horní části blogu.

Revoluce vs. evoluce systému

Tuesday, July 13th, 2010

Poslední rok se vcelku intenzivně věnuju vývoji inteligentního softwaru na zpracovávání životopisů. Vývoj takového systému se od klasického vývoje velmi liší v několika aspektech a důraz na revoluční změny je asi nejmarkantnějsí. V klasickém vývoji napíšete jednoduchý modul, který v průběhu života různě rozšiřujete a optimalizujete. Největší zásah do existujících modulů spočívá maximálně v rozdělení na několik menších tříd. Modul se tedy v průběhu života mění evolučně.

U inteligentních systému probíhá vývoj jinak. Na začátku máte ucelenou představu o jeho funkčnosti. Napsaný modul pak slouží po určitý, většinou velmi krátký, čas a na konci jeho životního cyklu je celý kód zahozen a nahrazen jinou verzí, která funguje na naprosto jiných základech. Jednou napsaný modul se už většinou příliš nemění.

Jako takový příklad bych mohl uvést detekci duplicitních životopisů v mém systému. V první verzi jsem za duplicitní považoval pouze ty životopisy, které mají stejné URL. Jednoduchá myšlenka, která vystačila na prvních pár týdnů provozu. Naivní řešení nevydrželo dlouho a tak jsem ho jednoduše zahodil. K detekci jsem pak začal používat MD5 hashe obsahu životopisů, což odstranilo naprosto stejné kusy. V součastné době i tahle varianta přestává stačit a tak experimentuju s pokročilejší metodou na bázi podobnosti n-gramů dokumentu.

Poučení je následující: vývoj je dobré vést tak, že vytvoříte základní workflow samostatných modulů, přičemž nezáleží na tom jak dobře jednotlivé moduly fungují. Během vývoje se pak zaměřujete na jednotlivé části, kdy nevyhovující modul zahodíte a nahradíte novým, fungujícím na jiném principu. Nesnažte se tvořit chytrá řešení hned od rýsovacího prkna, protože reálný provoz vám překazí všechny počáteční doměnky. Já jsem takhle skoro dva měsíce tvořil modul fungující na bázi konečných automatů s vlastním skriptovacím jazykem, s vidinou, že se to přece bude muset hodit. Nehodilo.

Knihy na prodej

Sunday, July 11th, 2010

Během několika dní se stěhuju a tak jsem se rozhodl trochu probrat svou knihovnu a zbavit se knih, které zrovna dvakrát nepotřebuju. Jednotná cena 100 kč za kus, preferuju osobní převzetí v Brně.

  • Java: kuchařka programátora
  • Vývoj her v jazyce Java
  • Mistrovství v MySQL 5
  • Aleš Kubík: Inteligentní agenty
  • Dont Make Me Think! (originál v angličtině)
  • Bruce Eckel: myslíme v jazyce C++
  • Programujeme ve Visual C++
  • Mistrovství v Windows Server 2003
  • Petr Paleta: Co programátory ve škole neučí
  • Steve McConnell: Odhadování softwarových projektů
  • Gunderloy: Z kodéra vývojářem (hodně o .Net, ale hodí se obecně)
  • Morville: Ambient Findability (anglicky)
  • Systém AS/400 zevnitř (přihodím k nějakým knihám, když budete chtít)
  • Kent Beck: Programování řízené testy
  • Pecinovský: Návrhové vzory
  • Naučte se ADO.NET za 21 dní
  • Herout: Učebnice jazyka C 1+2 díl
  • Kačmář: Programujeme .NET aplikace  (tuším .NET framework 1,00)
  • VRML97
  • Kadlec: Agilní programování
  • Wroclawski: Algoritmy, datové struktury a programovací techniky
  • Kosek: PHP tvorba interaktivních internetových aplikací
  • Virius: Java (celkem dobrá kniha pro úplné začátečníky)
  • Kadlec: učíme se programovat v Delphi (trochu více jetá)
  • Vise: The Google Story (anglický originál)
  • iKona (životopis Steva Jobse)
  • What I wish I knew when I was 20 (anglicky)
  • Walsch: Micro-ISV from vision to reality (anglicky, doporučuju)
  • Nikola Tesla a jeho tajné vynálezy

A ještě trochu scifi:

  • Aldiss: White Mars
  • Hickam: Hvězdné Requiem
  • Kolodyiejczak: Barvy praporů
  • Pratchett: Podivný Regiment
  • Pratchett: Noční Hlídka

Pak tady mám pár kravin: úvod do CSS, tak 10 let stará knížečka, alchymie internetového úspěchu, nějaký krátký životopis Freuda a spisek o Číně a snad ještě něco. Přihodím, když si o to řeknete. Pište na davidfilip@gmail.com

Update: červeně označené knihy jsou už pryč.

Co vlastně děláš?

Sunday, July 11th, 2010

Touto triviální otázkou začíná spousta nových setkávání, ale pokud ji pronese člověk mimo náš průmysl, tak vlastně pořádně nevím co odpovědět.

Rád bych použil slovo programátor, ale dotyčná osoba hned začne říkat, že její bratr/přítel/křeček taky umí HTML.  Dále jsem zkoušel používat označení informatik, ale to si zase lidi asociují s opravováním počítačů, takže opět vedle a navíc vám budou volat při sebemenším problému s jejich počítačem.

A tak teď všem říkám, že jsem matematik a zabývám se aplikovanou matematikou na pomezí statistiky a umělé inteligence. Ne že by jim to něco řeklo, ale alespoň  mají hrubou představu o tom, že jde o něco složitého a nechtějí vědět více. Jediná nevýhoda je pak automatické zaškatulkování mezi možné blázny.

Další zajímavé komentáře

Tuesday, June 22nd, 2010

Zdrojové kódy mohou být studnicí znalostí předávaných z jedné generace programátorů na další. Častěji však jde o pouze o nevyčerpatelné studnice WTF momentů. O jednom typu komentářů jsem už psal, ale protože můj předchůdce byl po všech stránkách kreativní tak se můžu dělit o další perly dál.

Tak například komentář uprostřed definice funkce:

1
  procedure foo(parametr: string {20. 1. 1998});

Správně: datum přidání, či snad změny, parametru, navíc uprostřed definice je vždy fajn a budoucím generacím pak přinese spoustu užitku. Podobnou kreaci lze pak vykouzlit v pokročilých obměnách, kdy je těch parametrů třeba 10 a každý druhý obsahuje jiné datum.

Druhý oblíbený typ komentáře využijete pokud chcete šetřit klávesnici:

1
2
3
4
5
  procedure foo;
  var
    p{arametr}, pa{rametr2}, d{an}, s{uma}: double;
  begin
    ...

Hned po definici pak následovalo asi 800 řádků kódu, který zhusta prováděl různé, nepříliš průhledné, výpočty s těmito proměnými.

Nejhorší možný komentář

Wednesday, June 16th, 2010

Občas přemýšlím o tom, jaký typ komentáře mě dokáže spolehlivě naštvat, a po dnešní práci na 15 let vyvíjeném prodkut jsem našel vítěze:

// Warning: see line 7851 !!!

Probůh, co k tomu ty lidi neustále vede?