Vojta Svoboda Blog http://blog.vojtasvoboda.cz www.vojtasvoboda.cz posterous.com Fri, 23 Dec 2011 15:25:00 -0800 Vyhledávání obrázků přes Flickr API v PHP http://blog.vojtasvoboda.cz/vyhledavani-obrazku-pres-flickr-api-v-php http://blog.vojtasvoboda.cz/vyhledavani-obrazku-pres-flickr-api-v-php

V tomto článku bych rád popsal napojení na Flickr API pomocí jazyka PHP. Nad obrázky, které pak získáme lze dělat jakákoliv magie, použité aplikační rozhraní nám však poskytne i filtrování, které využijeme. V této konkrétní implementaci budu provádět akorát načítání obrázků, jejich filtrování a třídění dle barvy (což není součástí API).

Výsledná aplikace běží na adrese: http://flickr.vojtasvoboda.cz/

Zdrojové kódy jsou umístěny: https://github.com/vojtasvoboda/VMW-FlickrSearch

Co je nutné před vlastní implementací:

  • Vytvořit si Flickr účet a vygenerovat si KEY, se kterým budeme přistupovat přes API
  • Zajistit, aby požadavky na API byly pouze v UTF-8 kódování
  • Podle toho, jestli budeme ukládat dočasné soubory na disk, nebo do databáze, je potřeba zajistit povolený fopen() na hostingu, nebo zřízenou databázi

Vlastní implementace:

Vzhledem k tomu, že klientskou část implementujeme v jazyku PHP, budeme využívat třídu phpFlickr., která je ke stažení na http://code.google.com/p/phpflickr/.

Tato třída poskytuje abstraktní vrstvu nad API, takže voláme přímo metody API, dále pak několik pomocných funkcí. phpFlickr se nám postará o sestavení korektního XML dotazu a zpracování odpovědi. Takto lze volat všechny metody API, my však využijeme pouze některé z nich:

  • enableCache - touto funkcí si nastavíme lokální cache, abychom při řazení nemuseli fotky opakovaně načítat
  • photos_search() - volá službu flickr.photos.search - tato funkce nám vrátí kolekci fotek dle zadaného klíčového slova
  • buildPhotoURL() - tato funkce nám zjistí korektní URL adresu obrázku
  • getErrorMsg() - zajistí nám chybovou hlášku v případě nějaké chyby
  • photos_getInfo() - funkce vrátí informace o obrázku dle zadaného id

Flickrsearch

Postup zpracování načtených obrázků

Pomocí funkcí photos_search() a photos_getInfo() získáme kolekci obrázků a informace k nim. Počet načtených obrázků jsem omezil na 24 s tím, že další obrázky jsou dostupně pomocí stránkování, které nám poskytuje přímo API Flickru. Dále musíme obrázky seřadit, což provedeme pomocí PHP funkce usort, která má dva parametry. Jedním je pole obrázků, které chceme seřadit, druhý parametr je porovnávací funkce, která nám vrátí, jestli je jeden prvek menší, nebo větší než druhý. Tuto porovnávací funkci musíme implementovat samostatně, ale vzhledem k tomu, že vždy porovnáváme řetězce, nebo čísla vystačíme si se základními funkcemi PHP.

Filtrování pomocí barvy

Pro filtrování pomocí barvy nejdříve potřebujeme získat barevné spektrum z obrázku. Na to použijeme funkci z tohoto zdroje:

http://www.brandnoo.com/2007/06/26/image-color-analysis-php-code/

Tato funkce nám umožňuje rozdělit obrázek do pomyslné matice, např. 3x3 a pro každý prvek matice vypočte průměrnou barvu, jako trojici čísel R (Red), G (Green), B (Blue).

Nyní je potřeba vymyslet algoritmus, který projde všechny obrázky a určí, který vyhovuje vyhledávané barvě nebo nikoli.
Pokud nastavím výše uvedenou funkci tak, aby vrátila pouze jeden bod (tj. nastavení matice 1x1) dostanu pouze jednu trojici RGB a již můžu pomocí jednoduché funkce určit, jestli obrázek vyhovuje, nebo ne. Například pro červenou:

if ( ($red > $green) & ($red > $blue) ) {
   return true;
}

Po trošce experimentování jsem algoritmus ještě mírně upravil, aby hledaná barvy opravdu převažovala:

if ( ($red > (1.3 * $green)) & ($red > (1.3 * $blue)) ) {
   return true;
}

Takto algoritmus již vrací celkem přijatelné výsledky a nejlépe funguje u obrázků, kde hledaná barva převažuje po celé ploše, např. vyhledávání fráze one color.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1499034/49214_625564307_8950_q.jpg http://posterous.com/users/4wejB0AQZZjX Vojta Svoboda vojtasvoboda Vojta Svoboda
Sun, 04 Dec 2011 12:58:47 -0800 Vize sémantického webu http://blog.vojtasvoboda.cz/semanticky-web http://blog.vojtasvoboda.cz/semanticky-web

Stávající lidstvo, nacházející se v době informačního věku, si nejspíš ani neuvědomuje, že uplynulo již deset let od okamžiku, co se autor stávajícího webu – Tim Barners-Lee poprvé podělil o svojí ideji sémantického webu, která se snaží dnešní neuspořádanou množinu webových stránek proměnit, do propojeného systému zdrojů, neboli Linked Data. Cílem by bylo nejenom poskytovat dokumenty, které budou čitelné pro člověka, ale také data ve strojově snadno zpracovatelném formátu, obohaceném o příslušné vztahy mezi těmito daty.

Linked-data

Sběr a práce s daty dnes

Na světě ještě pořád existuje tolik informací, která nejsou volně dostupná ke zpracování a volnému využití komukoli, kdo by měl nápad, nebo potřebu dát tyto data dohromady a vyřešil tak určitý problém.

"We must keep an open interface platform.
The important thing is that the standards are royalty-free."
- Tim Barners-Lee

Prvním problémem je, že málokterá data jsou veřejně dostupná. Další překážkou je fakt, že pokud chceme propojit více datových zdrojů, tak mohou být ve formátu, který dokáže číst a zpracovat člověk, ale počítač již ne. Pokud jsou data poskytována i ve strojově zpracovatelném formátu, většinou je to realizováno pomocí aplikačních rozhraní (API), takže sice jsou přenášena v unifikovaném formátu (XML), ale data nenesou žádnou sémantickou informaci. Systém, který data zpracovává, musí dostat rovněž popis rozhraní, aby věděl na jaké adrese a s jakými parametry může o data žádat.
Určité snahy o obohacení dat sémantickou informací tu již jsou - mikroformáty, mikrodata, RDF, RDFa a nebo HTML5 s novými sémantickými tagy. Pro více informací o konkrétní implementaci je vhodné vyhledat právě tyto klíčová slova.

Projekty sběru a publikace dat dnes

Projekty, které se zabývají sběrem a publikace dat, můžeme rozdělit na otevřené a uzavřené. Uzavřené projekty nejsou pro nás zajímavé, protože jejich výstupy nemůžeme nijak legálně využít a tak se jimi nebudu ani zabývat. Na okraj akorát zmíním, že sběr dat probíhá i v případech, kdy si to běžný člověk ani neuvědomuje. Například mýtné brány, platební karty, věrnostní programy. Obrovské množství dat, nad nimiž lze provádět např. prediktivní analýzu, jak se o to již snaží policisté v New Yorku, nebo americká pojišťovna na svých klientech.

Otevřené projekty

O tom, jaká je síla dat, když jsou správně použita, svědčí například projekt Ushahidi, který dokázal využít možnosti crowdsourcingu ke sběru důležitých dat např. při zemětřesení v Japonsku a poskytnout je lidem přímo v terénu. Možnost zjistit informaci o tom, za které veřejné zakázky se utrácí kolik peněz a jaká firma dostala zakázku přidělenou? Ideální bič na korupci, který je již částečně realitou. Zveřejnění dat o četnosti jmen a příjmení v České republice, ačkoli jsou poskytována pouze ve formátu CSV, je možostí jak nad nimi postavit uživatelsky přívětivý výstup. Nakonec bych rád zmínil projekt OpenStreetMap, svobodná editovatelná mapa, kde každý může přidat svojí část.

Ushahidi_alpha

Vize sémantického webu

Moje idea sémantického webu je prostředí, které poskytuje lidstvu vysokou informační hodnotu a technologie tak mohou pracovat pro lidskou potřebu. Dokonalé propojení všech soukromých i veřejných datových zdrojů by tak poskytovalo „osobního asistenta“ každému, kdo by o tyto služby měl zájem.

Pokud bych měl ideu postavit na technologiích, které jsou dnes k dispozici, oním softwarovým agentem by měl být buď webový prohlížeč, který by nám pomáhal zadávat složité sémantické dotazy, komunikovat s jednotlivými zdroji anebo přímo nějaký program, ať již na stolním, nebo mobilním zařízení, který by dokázal zpracovat naše požadavky. Některé případy užití, které demonstrují využití sémantiky dat:

#1 - Školní rozvrh

Z pozice studenta, který zároveň pracuje, by mi velice pomohlo, kdyby se na začátku semestru můj školní rozvrh automaticky přenesl do osobního rozvrhu a já si tak lépe mohl plánovat svůj čas. Zároveň by se do kalendáře přenesli důležité termíny odevzdávání semestrálních prací, které by se načetly ze školního systému. Do tohoto systému by sice úkoly musel zadávat učitel sám, což je ale pořád méně pracné, než když to musí dělat každý student individuálně.

#2 - Pracovní schůzky

Další část mého „osobního agenta“ by zajišťovala správu mých pracovních zakázek. Ještě před domluvením schůzky s klientem bych si o něm zjistil nejaktuálnější informace včetně výpisu z rejstříku trestů. Těsně před schůzkou bych si na svém mobilním zařízení přečetl poznámky na schůzku, které bych měl automaticky přiřazeny k události v mém osobním kalendáři. Při cestě na schůzku by automobil zjistil nejvhodnější trasu na místo schůzky, které by zjistil z mého kalendáře.

Při schůzce s klientem bychom si elektronicky vyměnili unikátní identifikátor, který by reprezentoval každého z nás jako osobu, nebo firmu. Z těchto údajů by se mi v adresáři vytvořil nový kontakt a zároveň by se v systému pro správu zakázek vytvořila nová zakázka pro daného klienta. K této zakázce bych přiřadil zápisky pořízené během schůzky. Po skončení zakázky by se všechna data zarchivovala a na osobní webové stránky by se publikovala nová reference v sémantickém formátu tak, aby budoucí klient mohl tuto informaci snadno získat. Stejně snadno by se pak řešila fakturace, která by se automaticky provedla třeba na konci měsíce, vše plně automaticky s využitím volně dostupných dat, jako např. fakturační informace klienta z obchodního rejstříku.

Každý rok ke konci měsíce března by se mi automaticky vypracovalo daňové přiznání a v bance by se mi upravila výše trvalého příkazu k úhradě pro sociální a zdravotní pojištění vypočtena z výše příjmů za minulý rok.

#3 - Veřejné průzkumy

Vzhledem k tomu, že již nyní nejsou uživatelé na internetu pouhými konzumenty obsahu, ale i producenti, sémantické propojení informací by nám dalo velice silné nástroje pro získávání veřejných průzkumů. Odpadla by úplně nutnost dělat ankety a různé průzkumy. Již nemusíme chodit za lidmi pro jejich názor, ale můžeme si názor získat samostatně.

Výhody a nevýhody

Jak každá technologie, tak i sémantický web má určité výhody, nevýhody a věci na které si dávat pozor.

Výhodou poskytování dat veřejně je především možnost kýmkoli tyto data zpracovat. Každý tak může data vzít, propojit je s jinými daty a vytvořit tak službu, nebo určitý výstup, který bude něco vizualizovat, nebo na něco upozorňovat. Například propojení dat o počasí a vizualizace na mapě. Tato propojení může vést rovněž k automatizaci a usnadnění některých rutinních úkolů.

Nevýhodou je, že data bude potřeba distribuovat pomocí strojově čitelných formátů. Vznikne tak požadavek, aby se výstup určitého webového zdroje (například webové stránky) generoval dvojím způsobem. Jednou pro člověka v HTML a jednou pro počítač například v RDF. O složitosti implementace také napovídá fakt, že se dnes využívá možnosti vkládání sémantické informace především těmi nejjednoduššími cestami – mikroformáty apod.

Největší důraz se musí dbát na zajištění ochrany soukromých údajů. Bude se muset vyřešit bezpečnostní politika, tak aby žádající strana dostala pouze ty informace na které má nárok. Stejně jako se nyní provádí ověření žadatele u aplikačních rozhraní většiny služeb. Další otázkou je, zdali je na to člověk vůbec připraven a kolik toho o sobě bude chtít dát vědět. Jak se zachováme, pokud přijdeme do obchodu a budeme osloveni našim jménem a bude nám doporučeno zboží na základě minulého nákupu. Informace o nás, jako například fotografie, podle které nás počítač u vchodu rozpozná, by se získala z veřejně dostupného zdroje – například nějaké sociální sítě, kde již dnes většina uživatelů o sobě poskytuje někdy až příliš mnoho informací.

Rozšíření sémantických technlogií

Pokud je již technologie vytvořená, nebo se vytváří, musí jít její vývoj ruku v ruce s marketingem. Pokud máme vytvořenou velice kvalitní technologii, ale není patřičně propagována, nemá šanci na úspěch. Ať již jsou to články na oborových serverech, nebo propagace na konferencích.

V neposlední řadě musí pro technologii také existovat kvalitní nástroje a zázemí. Nástroje, které co nejvíce pomůžou s implementací, laděním chyb. Dále třeba generátory kódu, validátory atd.

Nejdůležitější věci u každé technologie je ukázat lidem její výhody, že je jednoduché jí použít a co všechno jim to přinese. Zároveň je potřeba, aby lidé, kteří technologii vytváří, byli zodpovědní a nezapomínali na dodržování soukromí a zamysleli se nad otázkami etiky. U sémantického webu je to ještě běh na dlouhou trať, ale již nyní je vidět, že vývoj webu takto směřuje a hlavními propagátory budou patrně veliké technologické firmy jako je Google a Facebook, které začnou poskytovat nástroje pro využití prvků sémantického webu.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1499034/49214_625564307_8950_q.jpg http://posterous.com/users/4wejB0AQZZjX Vojta Svoboda vojtasvoboda Vojta Svoboda
Sat, 03 Dec 2011 10:42:54 -0800 Nielsen’s Heuristic Evaluation http://blog.vojtasvoboda.cz/nielsens-heuristic-evaluation http://blog.vojtasvoboda.cz/nielsens-heuristic-evaluation

Při návrhu uživatelského rozhraní aplikace, ať již webové, nebo desktopové, je vždy vhodné nejdříve vytvořit prototyp uživatelského rozhraní (UI). Výhoda prototypování spočívá hlavně v rychlejším zpracování, které je jednodušší a levnější, než provádění změn přímo v grafickém návrhu. Prototyp (neboli wireframe/mockup) lze zpracovat buď elektronicky pomocí některého z prototypovacích nástrojů (Balsamiq Mockup), nebo i pomocí tužky a papíru.

Balsamiq_mockup
Po vytvoření návrhu rozhraní je potřeba ověřit, že uživatelé budou schopni systém používat. Práce v systému musí být intuitivní a co nejjednodušší. Splnění těchto předpokladů je možno ověřit uživatelským testováním, které lze provádět buď za pomocí uživatelů, nebo i bez nich. Výstupy analýzy je pak potřeba zpracovat a návrh rozhraní dle toho přizpůsobit. Poté může následuje tvorba grafického návrhu.

Jednou z možnosti jak testovat aplikaci bez využití uživatelů je heuristická analýza, která vychází z poznatků, které byly získány dlouhodobým pozorováním. Jedná se o soubor zkušeností, jak jsou uživatelé zvyklý se systémem pracovat a co od něho očekávají. Jednou z heuristických analýz je Nielsenova heuristická analýza [en], která se skládá z deseti základních pravidel, které je nutno zkontrolovat, aby byla zajištěna odpovídající použitelnost a intuitivní ovládání aplikace. Tyto pravidla je dobré mít na paměti již při vytváření návrhu UI.

1) Visibility of system status

Stav systému musí být vždy viditelný. Uživatel musí vždy vidět, v jakém stavu se aplikace nachází, jestli čeká na nějaký vstup, nebo provádí určitou operaci, například pomocí ikonky přesýpacích hodin, nebo rotujícího kolečka.

2) Match between system and the real Word

Systém „mluví uživatelským jazykem“ a je co nejvíce přizpůsoben tak, aby práce s ním připomínala práci v reálném světě. Toto pravidlo se vztahuje převážně k vizualizaci informací. Například ikona koše opravdu vypadá jako koš a přetažení souborů na tuto ikonu způsobí přesunutí souborů do koše, stejně tak jako v reálném světě vyhazujeme papírové soubory.

3) User control and freedom

Systém musí poskytovat uživateli možnost vrátit ze z určitého stavu zpět, nebo zrušit zvolenou akci. Nejčastěji se to řeší pomocí tlačítek, nebo odkazů s nápisem Zpět, Undo, Storno.

4) Consistency and standards

Systém by měl být konzistentní jak vzhledově, tak i co se týče ovládání. Popisky stejných akcí by měli mít stejný název, nemělo by se střídat např. uložit/upravit. Stejně tak by se měl používat výchozí vzhled, dle použitého systému a standardní ovládací prvky. Např. nepoužívat vzhled prvků z platformy Mac pro program, který poběží na platformě Windows.

5) Error prevention

Systém by měl předcházet chybovým stavům, např. pomocí potvrzovacích dialogů a varování. Je vhodné upozornit uživatele, pokud zapomene vyplnit povinné položky formuláře, stejně tak jako zeptat se, že si opravdu přeje smazat vybraný adresář i přesto, že není prázdný.

6) Recognition rather than recall

Uživatel by měl být při používání systému co nejméně kognitivně zatížen. To zajistíme tím, že bude systém nabízet pouze volby, které lze vybrat a ostatní skryje, nebo vizuálně zneplatní. Dále je vhodné použití drobečkové navigace, stránkování, nebo zvýraznění pozice ve stromové struktuře, aby uživatel ihned viděl jeho aktuální pozici v systému.

7) Flexibility and efficiency of use

Systém musí být efektivní a jednoduchý pro použítí. Zároveň však musí poskytovat i dostatečný počet voleb, které využijí hlavně pokročilí uživatelé. V rámci možností je také vhodné poskytovat uživatelům klávesové zkratky anebo funkce automatického doplňování vstupních polí.

8) Aesthetic and minimalist design

Systém by měl zobrazovat co nejméně informací a voleb, tak aby práce v něm byla co nejrychlejší, přehledná, a uživatel musel co nejméně přemýšlet. Položky a volby, které nejsou často využívány, není vhodné umísťovat přímo na běžně používané obrazovky.

9) Help users recognize, diagnose, and recover from errors

Systém by měl uživateli poskytovat srozumitelné chybové zprávy tak, aby měl uživatel možnost chyby obratem opravit a věděl, co po něm systém vyžaduje. Zprávy by měli být v běžném jazyce a musí zároveň informovat o možném řešení problému.

10) Help and documentation

Systém musí poskytovat nápovědu přesně tam, kde jí uživatel očekává a v situacích, kdy je nejvíce potřeba. Například vyplňování formulářů, zakládaní nových projektů apod. Nápověda by měla být buď kontextová (přímo u daného prvku), nebo globální s možností vyhledávání.

Dodržováním těchto pravidel nám pomůže vytvořit systém, který bude jednoduchý a efektivní na práci, proto bychom na tato pravidla neměli zapomínat, nebo si je alespoň rychle projít předtím, než začneme prototypovat, nebo navrhovat grafický návrh.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1499034/49214_625564307_8950_q.jpg http://posterous.com/users/4wejB0AQZZjX Vojta Svoboda vojtasvoboda Vojta Svoboda
Sun, 20 Nov 2011 11:16:00 -0800 Základní šablona webu http://blog.vojtasvoboda.cz/zakladni-sablona-webu http://blog.vojtasvoboda.cz/zakladni-sablona-webu

Pokud vytváříte webové stránky, jistě víte, že základem každých stránek je HTML šablona webu, ve které je výsledný web zobrazen. Tato šablona vychází strukturou z analýzy webu a vzhledově z grafického návrhu.

Při vytváření šablon ale postupem času zjistíte, že některé části šablony zůstávají stejné, nebo hodně podobné. Začíná tak mít smysl připravit si nějakou základní šablonu, ze které vždy vycházíme a ušetříme si tak spousty času její přípravou. Zároveň se nám nestane, že bychom na něco zapomněli, nebo museli něco připravovat opakovaně.

V základní HTML šabloně tak můžeme mít připravenu hlavičku <head>, která se ve většině projektů až tak moc nemění. Správně si nastavíme znakovou sadu a připojíme základní stylopis včetně separátního stylu pro tisk. Dále je dobré připravit si základní strukturu stránek, to znamená nějakou obálku stránek, hlavičku <header>, obsah <content>, postranní sloupec <aside>, hlavní menu a patičku. To jsou prvky, které jsou prakticky na každých stránkách a určitě je jednodušší daný prvek smazat, než ho tam pracně dopisovat. Dobrým zvykem je naplnit si stránky základním obsahem. Bývá to hlavní nadpis <h1>, pár odstavců <p>, nějaký ten odrážkový seznam <ul>, kontaktní formulář a jednoduchá fotogalerie o pár fotkách. Donutí nás to k tomu, že všechny tyto prvky rovnou nastylujeme a nemusí se tak dodělávat při nasazování šablony do vytvářené aplikace, což následně ušetří mnoho času.

Cssm1

Tímto máme připravenou základní HTML šablonu. U kaskádového stylu je základem, aby zahrnoval správný CSS reset prvků, který nám srovná vzhled všech prvků přes všechny možné prohlížeče. Pokud nejsme schopni si toto vytvořit samostatně, je vhodné použít kód od některého z odborníků, např. od Erica Mayera. Dále si zapíšeme prvky které využijeme prakticky vždy, od základního stylu pro formulářové popisky, chybové hlášky a nebo třeba vyjížděcí menu, které smažeme, pokud není potřeba.

Pokud se Vám nechce takovou šablonu vytvářet, je možné převzít hotové šablony, např. HTML5 Boilerplate, které jsou opravdu komplexní, zahrnující CSS reset, připojení knihovny Modernizr pro podporu HTML5 u starších prohlížečů, opravu PNG u IE6 a mnoho dalších vychytávek.

Při využívání takových šablon je však důlažité myslet na to, aby v šabloně nezůstalo nic, co by na výsledných stránkách být nemělo. Jedná se například o odkazy na neexistující, nebo prázdné stylopisy pro IE, favicony anebo další knihovny, které nakonec ve výsledných stránkách nebyly použity.

Pro osobní použití jsem si připravil základní šablonu, která sice není tak robustní, ale jako základ pro jednoduché weby poslouží dobře. Níže je možno najít odkazy pro stažení, lze tak využít šablonu pro tvorbu svojí vlastní, nebo jako inspirace pro doplnění stávající šablony.

Šablony pro XHTML a pro HTML5 jsou nyní dostupné na GitHub jako BasicHtmlTemplates. Pro případné návrhy na vylepšení, nebo opravy lze využít Issues, přímo na GitHubu.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1499034/49214_625564307_8950_q.jpg http://posterous.com/users/4wejB0AQZZjX Vojta Svoboda vojtasvoboda Vojta Svoboda
Fri, 18 Nov 2011 10:02:00 -0800 Konference Svoboda na živo http://blog.vojtasvoboda.cz/konference-svoboda-na-zivo http://blog.vojtasvoboda.cz/konference-svoboda-na-zivo

Zhruba v polovině listopadu jsem se zůčastnil konference o svobodě v práci s příznačným názvem Svoboda na živo. Konference byla jednodenní a konala se v prostorách kina Vzlet, které se nachází v pražských Vršovicích. Ani jedno místo nezůstalo prázdné, zůčastilo se přes 350 lidí, kteří se chtěli dozvědět něco o tom jak dělat práci co je baví anebo potkat budoucí kolegy, smýšlející na stejné vlně. Hlavním programem byly přednášky, kterých bylo 15. Rozděleny byly do třech velkých tématických bloků - Design, Kultura a Leadership. Nejdříve jsem nevěděl co od takové akce očekávat. Přecijenom se jednalo o první konferenci svého druhu. Nakonec jsem ale odcházel s hlavou plnou různých nápadů a motivace. Ještě teď, týden po skončení mám o čem přemýšlet.

Místo a organizace

Leadership

Po příchodu na místo jsem dostal visačky a program celé akce, který byl graficky moc pěkně zpracován. Prostory kina nejsou moc velké, ale přednáškový sál, kde probíhaly všechny přednášky byl opravdu obrovský. V prostorech kina bylo mimo hlavního sálu možno najít ještě prostor, kde probíhal prodej knih s tématikou svobody v práci, osobního rozvoje, timemanagementu. Autoři některých z knih byli rovněž přednášející, takže mi možnost koupě knížky přišla jako skvělý nápad. Ten koho přednášející zajímal, měl možnost koupit si přímo jeho knížku.

Dalším prostorem byl catering, kde probíhal prodej občerstvení. To, že veškeré jídlo a pití bylo placeno mi moc nevadilo, naopak si myslím, že to má něco do sebe. Co mě jako studenta moc nepotěšilo byly ceny, ačkoli byly prezentovány jako nákladové. Přeci jenom toustový chléb se šunkou za 40,- Kč může být pro někoho příliš. Výběr byl pro svačinky mezi přednáškami dostatečný, ale na oběd to nestačilo, takže bylo nutno vyhledat nejbližší restauraci, což bylo ideální možností nadýchat se čerstvého vzduchu. Celkově mě přišla organizace na jedničku.

Přednášky

6330819793_9c5bcedc19_z

První blok přednášek s názvem Design se zabývál přímo tím, jak to nastavit tak, abychom mohli dělat práci, která nás baví. Nejzajímavější byly přednášky od Tomáše Sedláčeka a Roberta Peňažky. Tomáš krásně popsal, že touhu po nových věcech, které si kupujeme, nelze naplnit, ale pouze znásobit. Trávíme nespočet hodit tím, že děláme práci, která nás nebaví, abychom si mohli kupovat věci, které nepotřebujeme. Robert zase popsal, že pokud chceme vybudovat svobodnou společnost, nebo firmu, musíme začít v prvé řadě u sebe samých, protože svoboda staví podstatnou částí na důvěře. Na oplátku pak budeme obklopeni maximálně motivovanými lidmi.

Druhý blok měl název Kultura a cílem bylo ozřejmit kulturu svobodné organizace, ať se již jedná o firmu, nebo týmu pár lidí. Zajímavou přednášku měla Taťána le Moigne, která ozřejmila, jak to funguje v Google, že je to vlastně takový velký kruhový objezd, kde platí jenom jedno pravidlo a to stačí pro to, aby se celý systém nerozpadl. Tak jako na objezdu je to pravidlo přednosti z prava, v Google je to pravidlo "Users first". Druhou zajímavou přednášku měl Martin Černohorský, který poukázal na to, že práce z domova vyžaduje důvěru a neměl by to být benefit pro zaměstnance (jako stravenky), ale jako svobodná volba. Dále o tom, jak je důležitý selský rozum a že i bez školy to jde daleko dotáhnout, pokud máme ten správný pohled na věc.

V posledním bloku pojmenovaným jako Leadership, měl nejzajímavější přednášku Ján Košturiak, která byla rovněž nejlepší přednáškou celé konference, byla úplně neuvěřitelně energická a sklidila největší potlesk. Povídal hlavně o tom, že slušnost, poctivost, rozvoj talentu je daleko důležitější než výše zisku. O tom, že je důležité se umět zastavit a umět se na vše podívat z výšky a soustředit se na podstatu věci. Ke konci nám Petr Mára ukázal způsob, jak poznat sám sebe, svoje silné a slabé stránky, což by měl být první krok k cestě za svobodou.

Určitě sem nezmínil všechny přednášky, což ani nebylo cílem. Vybral jsem ty nejzajímavější a ty, které mi do teď zůstali v hlavě.

Závěr

6330749049_511b89a345_z

Mezi jedny z nejdůležitějších věcí, které jsem si z konference odnesl bylo, že aby svobodná firma fungovala, je potřeba mít důvěru mezi členy týmu a všichni musí táhnout za jeden provaz. Proto si také myslím, že tohoto je možno dosáhnout snadněji v malé a flexibilní firmě, ale i ve velké firmě je to možné, jak jsem měl možnost vidět u přednášky z prostředí Google. Pokud se tohle povede, každý má možnost dělat co ho opravdu baví a spolupracovat v tom smyslu, že ostatním pomáhá a nesnaží se jenom někde zašít, aby náhodou nedostal nějakou práci navíc.

Někteří lidé, kteří nejsou spokojení ve velké nesvobodné firmě volí cestu freelancingu, ale záhy pochopí, že to také není ta správná cesta, protože najednou jsou pouze oni sami a časem jim začne chybět tým lidí kolem nich. Je proto dobré se spojit s ostatními freelancery, zakládat svobodné týmy a spolupracovat.

Celkově mi toto svobodomyslné poslání přijde jako návrat k něčemu co bylo kdysy úplně normální. Něco jako dnešní boom "bio" produktů. Bylo by fajn, když by se lidstvo vrátilo zpět na cestu svobody, důvěry a dávalo přednost vyšším hodnotám, než jen zisku a počtu prodaných výrobků.

Fotky a přednáškové slide je možno najít na stránkách konference a v oficiálním článku.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1499034/49214_625564307_8950_q.jpg http://posterous.com/users/4wejB0AQZZjX Vojta Svoboda vojtasvoboda Vojta Svoboda
Mon, 24 Oct 2011 08:01:00 -0700 Komunikace s Twitter API pomocí Google App Engine http://blog.vojtasvoboda.cz/komunikace-s-twitter-api-pomoci-google-app-en http://blog.vojtasvoboda.cz/komunikace-s-twitter-api-pomoci-google-app-en

V tomto článku popíšu způsob implementace stahování tweetů (zpráv) z populární sociální sítě Twitter na platformě Google App Engine. Implementace je prováděna v Javě.

Výsledná aplikace běží na adrese fit-w20-ss11-101-2.appspot.com

Zdrojové kódy: https://github.com/vojtasvoboda/W20-TwitterFeeds

Struktura analyzovaných dat

Stahovaná data určené k následné analýze budeme uchovávat jako úplný graf, z čehož plyne, že musíme definovat co je uzlem a co hranou.

  • Uzly grafu - uživatelé, kteří píší zprávy s definovaným hashtagem
  • Hrany grafu - vztahy mezi uživateli. Vzhledem k tomu, že na Twitteru neexistuje oboustranný vztah typu „přátelství“, vztah je pouze jednostranný, musí být hrany grafu orientované.
  • Orientace hran - určuje, jestli osoba A sleduje osobu B, nebo jestli je osoba A sledována osobou B.

Připojení na Twitter API

Snapshoty pořizuji pomocí poskytované webové služby Twitter API. Pro přístup k API je nutno využít OAuth, což je metoda pro autentizaci přístupu k API. Pro přístup k Twitter API pomocí OAuth využíváme knihovnu Twitter4j určenou přímo pro GAE.

Pro napojení se na Twitter API postupujeme zhruba takto:

  1. Stáhneme knihovnu Twitter4j a naimportujeme do našeho projektu
  2. Je potřeba se zaregistrovat na https://dev.twitter.com/apps/new, kde se vloží naše aplikace a získáme přihlašovací klíče pro OAuth.
  3. Přihlašovací klíče je nutno zadat do souboru WEB-INF/twitter4j.properties
  4. Pro testování API pomocí webového prohlížeče můžeme využívat Twitter API Developer Console

Tvorba snapshotů

Využívané REST API zdroje

Twitter API Resource Twitter4j metoda Popis
search search(query) vyhledávání tweetů dle zadané otázky (keyword, hashtag, …)
friends/ids getFriendsIDs() vrací seznam ID uživatelů, které zadaný uživatel sleduje
followers/ids getFollowersIDs() vrací seznam ID uživatelů, kteří sledují zadaného uživatele
friendships/show showFriendship(sourceId, targetId) vrací informace o vztahu dvou uživatelů
users/show showUser(userId) získá jméno uživatele na základě id

Zdroj search má jako parametr objekt typu Query, který umožňuje specifikaci jazyka dle ISO_639-1 a dále nastavení počtu vrácených tweetů (max. 100).

Struktura tříd v programu

  • /persistence/Edge/ - reprezentuje hranu grafu, tzn. vztah dvou uživatelů. Obsahuje id hrany, ID uživatele ze kterého hrana vystupuje, ID uživatele kam hrana míří.
  • /persistence/User/ - reprezentuje uživatele tweetu - obsahuje id autora, jméno autora (nickname).
  • /persistence/Snapshot/ - reprezentuje jeden snapshot v jednom okamžiku. Obsahuje List uživatelů a List hran. Dále datum vytvoření, počet uzlů a hran.
  • /metadata/Snapshots/ - třída pro generování seznamu snapshotů v XML pro REST API.
  • /servlets/GetTweets/ - třída pro opakovaný sběr tweetů. Spouští se jednou za 24hod pomocí GAE CRONu.
  • /services/GoogleChart/ - třída pro generování URL grafu, který reprezentuje vývoj snapshotů v čase.

Některé třídy jako třeba User, nebo Snapshot mají i svůj DAO pro manipulaci. Stejně jako v první úloze tyto třídy převedeme pomocí JAXB (mapování POJO na XML pomocí anotací) na XML, které poskytujeme webovou službou.

Postup pro sběr snapshotů

  • Jednou za 24hod. (vždy ve 03:00 AM) spustíme pomocí GAE CRONu soubor servlets/GetTweets.java dostupný na base_url/GetTweets
  • Tímto dojde k načtení 10ti tweetů, kde z každého tweetů získáme autora tweetu
  • Ke každému autorovi načteme prvních 5 Friends (lidí, které uživatel sleduje) a 5 Followers (lidí, kterými je sledován)
  • To nám ve výsledků dává cca 150 uzlů a 150 hran. REST API Twitteru bohužel omezuje počet dotazů na 150 za hodinu.
  • Takto vytvoříme Snapshot - orientovaný graf, který je vždy sestavován celý znova, při každém Snapshotu, tzn. complete.

Poskytované webové služby

Seznam všech snapshotů

Tento zdroj vrací seznam všech uložených snapshotů.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<snapshots>
  <snapshot edge="0" node="0" created="2011-04-10T18:48:02.836Z"/>
  <snapshot edge="0" node="1" created="2011-04-10T20:44:26.977Z"/>
</snapshots>
  • HTTP status kódy:
    • 200 OK - úspěšné vrácení metadat
    • 404 Not Found - špatná URL požadavku
    • 500 Server Error - chyba na straně serveru

Grafické znázornění všech snapshotů

Tento zdroj vrací obrázek ve formátu png generovaný službou Google Chart.

Grafické znázornění všech snapshotů

Tento zdroj také vrací obrázek ve formátu png generovaný službou Google Chart. Udělal jsem testovací resource, pokud je problém simulovat Content-Type: image/png.

  • HTTP metoda: GET
  • Produces: image/png
  • data: PNG image
  • HTTP status kódy:
    • 200 OK - úspěšné vrácení metadat
    • 404 Not Found - špatná URL požadavku
    • 500 Server Error - chyba na straně serveru

Adresa grafu

Tento zdroj vrací URL adresu generovaného grafu, opět pro testovací účel.

Seznam všech uživatelů

Tento zdroj vrací seznam všech uložených uživatelů.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<snapshots>
  <snapshot edge="0" node="0" created="2011-04-10T18:48:02.836Z"/>
  <snapshot edge="0" node="1" created="2011-04-10T20:44:26.977Z"/>
</snapshots>
  • HTTP status kódy:
    • 200 OK - úspěšné vrácení metadat
    • 404 Not Found - špatná URL požadavku
    • 500 Server Error - chyba na straně serveru

Nejdůležitější odkazy

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1499034/49214_625564307_8950_q.jpg http://posterous.com/users/4wejB0AQZZjX Vojta Svoboda vojtasvoboda Vojta Svoboda
Mon, 24 Oct 2011 07:53:00 -0700 Konfigurace NetBeans pro Google App Engine http://blog.vojtasvoboda.cz/konfigurace-netbeans-pro-google-app-engine http://blog.vojtasvoboda.cz/konfigurace-netbeans-pro-google-app-engine

V tomto článku krok za krokem popíšu, jak co nejrychleji nainstalovat NetBeans tak, aby fungovalo propojení na Google App Engine a verzovací systém.

Instalace NetBeans

Pro instalace NetBeans je potřeba:

  • Stáhnout a nainstalovat NetBeans 6.9.1 pro Javu ze stránek http://netbeans.org/downloads/index.html
  • Spustíme NetBeans a v Tools - Plugin - Settings přidat odkaz http://kenai.com/downloads/nbappengine/NetBeans69/updates.xml a pojmenovat jako Google App Engine
  • V Tools - Plugin - Available Plugins vybrat všechny pluginy začínající Google Web App a nainstalovat je, čímž dojde k nastavení NetBeans pro Google App Engine
  • Dále musím stáhnout Google App Engine SDK pro Javu z odkazu http://code.google.com/intl/cs/appengine/downloads.html a rozbalit někde na počátači
  • Kliknout na záložku Services (vedle Projects a Files) a tam rozkliknout Servers a pravým tlačítkem vybrat Add Server
  • Vybrat Google App Engine a v dalším kroku vybrat cestu, tam kam jsme rozbalili Google App Engine SDK. Tímto dojde k nastavení lokálního Google App Engine serveru pro spouštění.
  • Je potřeba zkontrolovat jestli máme v $PATH nastavenou cestu pro JDK a JRE.
  • Tímto je NetBeans připraven pro tvorbu a spuštění GAE projektů na localhostu.

Vytvoření a spuštění projektu na localhostu

  • Vytvoříme nový projekt typu Web Application pomocí New - Project.
  • Pravým kliknutím na projekt zvolíme "Set as main project", aby byl projekt hlavním a spustíme ho pomocí Run, nebo F6.
  • Tímto by mělo dojít i k nastartování Google App Engine serveru, ale pokud se tak nestane, tak v kartě Servers klikneme pravým na Google App Engine a zvolíme Start, čímž se nám nastartuje server.
  • Nyní by měla aplikace běžet na adrese http://localhost:8080/
  • Dále na http://localhost:8080/_ah/admin se nachází administrační konzole Google App Engine Serveru, kde je i přístup k lokálnímu úložišti dat.

Nastavení NetBeans pro verzování se SVN

  • V NetBeans klikneme v menu na Team - Subversion - Checkout
  • Zadáme adresu našeho repozitáře a dále jméno a heslo.
  • Mělo by dojít ke stažení poslední verze projektu co je v repozitáři.
  • Změny nahrajeme do repozitáře tak, že klikneme na projekt a zvolíme Subversion - Update
  • Hlavní verzi získáme opět kliknutím na Subversion a dále na Commit.

Užitečné tutoriály

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1499034/49214_625564307_8950_q.jpg http://posterous.com/users/4wejB0AQZZjX Vojta Svoboda vojtasvoboda Vojta Svoboda
Mon, 24 Oct 2011 06:39:40 -0700 Schůzky http://blog.vojtasvoboda.cz/schuzky http://blog.vojtasvoboda.cz/schuzky

Meeting

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1499034/49214_625564307_8950_q.jpg http://posterous.com/users/4wejB0AQZZjX Vojta Svoboda vojtasvoboda Vojta Svoboda