Google Developer Day 2011

Chtěl jsem zblognout celkový průběh akce, ale už to určitě dělají desítky dalších a mnohem lépe (+fotky a videa na Google blogu), takže asi jen pár postřehů a vysvětlení důvodů, proč jsem byl z celé akce poměrně nesvůj (pěkně po sokratovsku – budu tu pochybovat, kritizovat a klást otázky, snad kvůli nim nebudu do budoucna odepsán … Pokračovat ve čtení „Google Developer Day 2011“

Chtěl jsem zblognout celkový průběh akce, ale už to určitě dělají desítky dalších a mnohem lépe (+fotky a videa na Google blogu), takže asi jen pár postřehů a vysvětlení důvodů, proč jsem byl z celé akce poměrně nesvůj (pěkně po sokratovsku – budu tu pochybovat, kritizovat a klást otázky, snad kvůli nim nebudu do budoucna odepsán z dalších akcí).

GDD Prague 2011
GDD Prague 2011

Začal bych onou divnou pachutí v ústech – pokud to má být akce pro vývojáře a lidi znalé, proč byl z tolika míst slyšet údiv nad „novinkami“? Proč bylo tolik lidí paf z věcí, jako je google checkout, tolik lidí dělalo wow při předvádění dem postavených na html5, když všechno tohle je tu už nějakou dobu? Nebo študákům v bláznění ze všech těch „startup buzzs“ šibe, že sledují jenom @startupreport a blog davida grudla (promiň, že si tě beru tak často do huby, ale ten Nette je všudypřítomný :-))?
Nadšení je pěkná věc, ale když v rámci občerstvovacích pauz člověk neslyší nic jiného, než že „to rozjedeme“ a pak slyší tisíckrát omílanej nápad (ideálně nějaký další klon grouponu), slyší, jak se dotyčný údajně bavil s tím a s tím známým, který dělá investora a že stačí jen tohle a tohle a je za vodou, tak už se nedá jenom tak nasmívat. Uhrovatí mladíci skrytí za monitory by se měli probrat do reality – nikdo jim nedá peníze jen za to, že mají nápad a k realizaci daleko, protože přece musí ještě dělat tu školu a večer už něco mají. Ale ok, taky jsem byl mladý a potřeboval peníze :-D.

Teď něco k akcím – jak jsem se už zmínil, novinky veškeré žádné. Škoda, že akce proběhla den před zveřejněním ICS, možná by to potom mohlo být o něco zajímavější, ale dojem recyklace přednášek z minulého roku byl určitě na místě. Neříkám, že témata nebyla zajímavá, ale v dnešním světě, kdy má člověk možnost sledovat vývoj novinek prakticky v reálném světě jsem měl z celé akce dojem, jako z návštěvy Invexu těsně před jeho smrtí…

Excellence in the android user experience

Omílání nezajímavých a všeobecně známých věcí, které si vývojechtivý jedinec může dohledat ve výborné dokumentaci na developer.android.com, případně na některém z mnoha blogů zabývajících se vývojem. Celkový dojem – snažte se sjednotit UI, aby to ladilo s dalšími aplikacemi. Kdyby na konci přednášející nezmínil pár konkrétních případů a tipů, byla by to čtverka jak vyšitá, takhle hodnotím cca za tři.

Integrating with google apps: new apis, new features and best practices

Zaujaly mě následující věci: api console, explorer, discovery service a UI builder. API console je jakési analytics pro jednotlivá api, navíc s možností jednoduché správy daných služeb. API explorer mi připadla jako jakási devconsole, kterou ma Facebook – umožňuje postupně vytvářet požadavek a sledovat, jak se mění výstup na něj. Discovery service je založeno na stejném principu, jako Webscripty Alfresca – každý webscript má descriptor, ve kterém jsou veškeré informace o daném skriptu a tyto soubory prochází služba, která z nich vytváří „dokumentaci“ – praktické a pěkné. Perličkou je, že i discovery service takto popisuje sama sebe :-). No a UI builder, jestli jsem dobře pochopil, umožňuje tvořit UI stylem drag and drop nad Google Apps Script, což jsou „makra“ v tabulkach Google Docs – tady jsem si vzpomněl, jak jsme na střední škole „kódovali“ v Microsoft Accessu (když k tomu všemu přidám ještě možnost běhu nativního kódu v prohlížeči pomocí NaCl, tak mě začíná pomalu ale jistě mrazit).

How to build kick ass games in the cloud

Začátek přednášky se nesl v duchu prezentace nějaké logické hříčky uváděné tak, jako by dotyčný chtěl dětem ve školce vysvětlit princip pexesa. Wtf? My jsme vývojáři, nás zajímá, jak se co dělá, a ne jak se má co hrát. Tady jsem dost váhal navštívit OAuth and OpenID for Data acces and identity in web apps, ale na té jsem byl loni (a bláhově si myslel, že se tam dovím něco nového) a tak jsem ji opominul, musím mrknout na video, jestli za něco stála. Každopádně mě tu zaujaly následující projekty (frameworky?): Box2d, což je simulátor fyziky a byl mimo jiné použit třeba při vývoji Angry Birds, či Crayon Physics, resp odpovídající port tohoto frameworku, takže nám byl předveden GWTbox2D. Dalším frameworkem, který mi utkvěl v poznámkách, je PlayN, což by měla být multiplatformní (Java, HTML5, Android, Flash) knihovna pro psaní her (taky byla použita u Angry Birds).

VC Panel: Enterpreteurship, Incubation and Venture Capital

Odpočinková panelovka, ze které jsem měl dojem, že vítek vrba konečně dospěl a trochu zmoudřel (nebo mu pomohl Centralway :-D). V sále moc lidí nebylo, všichni mlaďoši asi už mají jasno (teď je ovšem na místě dotaz, proč jsem tam byl já?) Don Dodge zmínil, že jsou dneska in aplikace sociální, mobilní, geolokační a hry. Protože geoNesting splňuje všechna tato kritéria, pokusím se urychlit rozdělané projekty a soustředím se pouze na tento asi :-).

(Na Bleeding edge HTML5 jsem asi usnul, nějak si nemůžu na nic vzpomenout. Nebo ty webintents byli na této přednášce? Jestli jo, tak se mi to velice líbilo.)

DevTools Tips and Tricks

Představení developer toolboxu z chromu. Utkvělo mi v mysli především reformátování javascriptu, což je věc více než praktická a v poznámkách odkaz na Apiary.io. Dotazy z publika ve stylu „takže to je firebug“ apod. Srsly, wtf? Proč ten matoucí název? Těšil jsem se na nějaké obecné tipy a triky a místo toho byla vysvětlována práce s nástrojem, se kterým by dokázala poslepu pracovat i moje babička. Zvedám se a prchám pryč na

Ignite, a series of Lightning talks

a dobře dělám, asi největší pecka z celého GDD. Jednotlivé „talks“ mě nabíjejí pozitivní energií a dávají chuť se pustit do dlouho opomíjených projektů :-). Takovouhle celodenní akci bych si dal líbit – dopoledne pár hodin takovéhodle povzbuzování a potom 48h hackaton a bylo by vymalováno :-).

Nojo, aktivista v první řade :-)
Nojo, aktivista v první řade 🙂

Celkový dojem? Dojem, že google umí dělat bombastické akce, ale vypadá to skoro až, že je neumí naplnit bombastickým obsahem. Možná kdybych byl megaFanGoogler, tak bych zažil pár orgasmů i mimo obžérstvení. Možná, že až budu rok zalezlý v Kanadě ve srubu a pak přijedu, spadne mi čelist. Možná, kdybych zůstal doma, udělám líp a ještě stihnu nějakou práci – přednášky jsem si mohl sjet na U2B. Možná, možná. Jedinou výhodou asi byla možnost střetout se se známými a především neznámými, se kterými jsme si zanadávali na kvalitu akce (s pocitem nenávistných pohledů študáků u stejných stolů, kteří se o 106 ládovali hamburgerama a byli ze všeho dění okolo celí paf :-). Ale aspoň jsem vyhrál knížku… (jejich výběr taky moc nechápu – vše „for beginners“ – teda ne, že bych byl nějaký profesionál, ale knížky „začínáme s bashem, androidem, html…“ imho moc dobrým výběrem nejsou. Příjemnější by byla třeba možnost získat nějaký procesorový čas na GAE, případně možnost telefonické či osobní konzultace některé z mnoha google technologií, přece jen by to bylo praktičtější jak pro výherce, tak pro google a šíření jeho produktů. V této souvislosti bych si na závěr ještě dovolil jednu citaci, když jsem něčím takovým tento blogpost začal, tentokrát Rousseau: „dobro i zlo proudí z téhož pramene“. Možná je na čase otevřít oči a přestat Googlu všechno tak slepě baštit.

Adding columns to custom browse.jsp

Last week I had to change browse.jsp view in alfresco and I need to add custom columns – attributes from my own data model. It’s pretty simple and I’ll explain that in this blogpost. I tried to do is as much simple as possible, so I removed all other view types but details and in … Pokračovat ve čtení „Adding columns to custom browse.jsp“

Last week I had to change browse.jsp view in alfresco and I need to add custom columns – attributes from my own data model. It’s pretty simple and I’ll explain that in this blogpost.

I tried to do is as much simple as possible, so I removed all other view types but details and in this view I added some boolean properties, which have own action handler – so are clickable and after click change their state. Result of this changes is on following screenshot.

How does it look like
How does it look like

You can see I added two boolean properties (in Czech – Ano = true, Ne = false) among others (Type). To do that I needed to override BrowseBean and create own NodePropertyResolver. Now from the begining:

  • I created custom document model,
  • wrote custom browse.jsp (just copied and edited original one),
  • overrode outcomes to new view,
  • overwrote BrowseBean and wrote custom NodePropertyResolver.

Creating custom document model is well described everywhere else (at least in alfresco wiki), so I’m not going to describe it here, also overriding views. Lets start with altering browse.jsp.

Items in list are created by RichList component, in which we are interested in just some attributes: viewMode and value. ViewMode is a String value (details, icons, list) with default view mode. When I tried to change ViewMode value to details, it doesn’t work correctly, so I had to override getBrowseViewMode() to return „details“.

[code language=“java“]
public class BrowseTeletextBean extends BrowseBean {
. . .
private NodePropertyResolver pageExpiredResolver = new BooleanNodePropertyResolver(TxtModel.txtExpired, getNodeService());
. . .
@Override
public String getBrowseViewMode(){
return „details“;
}

@Override
public List<Node> getContent() {
List<Node> list = super.getContent();

for(Node node : list){
node.addPropertyResolver(„pageExpired“, pageExpiredResolver);
. . .
}

return list;
}
. . .
[/code]

Value should return list of Node type, in which I wanted to add custom fields, so I needed to override it too. I put there some propertyResolvers – I did my own BooleanPropertyResolver:

[code language=“java“]
public class BooleanNodePropertyResolver implements NodePropertyResolver {
private NodeService nodeService;
private QName qName;

public BooleanNodePropertyResolver(QName qName, NodeService nodeService){
this.qName = qName;
this.nodeService = nodeService;
}

@Override
public Object get(Node node) {
boolean expired = NodeUtils.getBoolProperty(node.getNodeRef(), qName, nodeService);
return (expired ? „Ano“ : „Ne“);
}
}
[/code]

Now it’s possible to build a list in view like this:

[code language=“xml“]
<a:richList id=“contentRichList“ binding=“#{BrowseTeletextBean.contentRichList}“ viewMode=“#{BrowseTeletextBean.browseViewMode}“ pageSize=“#{BrowseTeletextBean.pageSizeContent}“ styleClass=“recordSet“ headerStyleClass=“recordSetHeader“ rowStyleClass=“recordSetRow“ altRowStyleClass=“recordSetRowAlt“ width=“100%“ value=“#{BrowseTeletextBean.content}“ refreshOnBind=“true“ var=“r“>
. . .
<a:column id=“col14″ style=“text-align:left“>
<f:facet name=“header“>
<a:sortLink id=“col14-sort“ label=“Expired“ value=“expired“ styleClass=“header“/>
</f:facet>
<a:actionLink id=“col14-act1″ value=“#{r.pageExpired}“ actionListener=“#{BrowseTeletextBean.clickPageExpired}“>
<f:param name=“id“ value=“#{r.id}“ id=“param14-1″ />
</a:actionLink>
</a:column>
. . .
[/code]

Here you can see actionLink with value defined by custom NodePropertyResolver (r.pageExpired), which renders either „Ano“ or „Ne“ based on value in TxtModel.txtExpired (QName) property in model.

[code language=“java“]public static final QName txtExpired = QName.createQName(„http://www.alfresco.org/model/txt/1.0“, „expired“);[/code]

ActionLink has an action handler – actionListener parameter – this handler just change value of the expired property and is as simple as this:

[code language=“java“]
public void clickPageExpired(ActionEvent event){
NodeRef nodeRef = getNodeRefFromParams(event);
if(nodeRef != null) {
boolean status = NodeUtils.getBoolProperty(nodeRef, TxtModel.txtExpired, getNodeService());
getNodeService().setProperty(nodeRef, qName, !status);
UIContextService.getInstance(FacesContext.getCurrentInstance()).notifyBeans();
}
}
[/code]

Note that UIContext…notifyBeans() is needed to notify beans, that some change had been done and we need to refresh view. For this refresh also refreshOnBind parameter on richList is needed to be true.

It was easy to put it together, but like everything in Alfresco – badly documented. So I hope this post help someone. Feel free to ask questions, if something is not clear enough ;-).

Eurotrip 2011 – Newcastle (den 6 a 7)

Poslední dva dny se zcvrknuly do jednoho, protože o nezáživné procházce po asfaltu po periferiích velkoměsta se moc psát nedá, navíc se to nedalo ani pořádně vnímat – mozek stále zpracovával krásy předchozích dní a jen těžko se mohl vyrovnat s tak prudkou změnou. Trasa na Everytrail Probral jsem se na mezi pár mil západně … Pokračovat ve čtení „Eurotrip 2011 – Newcastle (den 6 a 7)“

Poslední dva dny se zcvrknuly do jednoho, protože o nezáživné procházce po asfaltu po periferiích velkoměsta se moc psát nedá, navíc se to nedalo ani pořádně vnímat – mozek stále zpracovával krásy předchozích dní a jen těžko se mohl vyrovnat s tak prudkou změnou.

Trasa na Everytrail

Probral jsem se na mezi pár mil západně od Heddon-on-the-wall, sbalil si svých pár švestek a vyrazil. Z ranního skládání se už stala pouhá rutina a docela těžce jsem nesl, že tohle venkovní skládání je zřejmě poslední v rámci tohoto výletu. Plán na Skotsko ani Irsko ještě sice nebyl úplně jistý, ale tušil jsem, že se budu poflakovat už jenom po hostelích.

Těsně před Heddon-on-the-wall jsem přecházel po mostě dálnici a na něm stál děda s malinkým vnoučkem a mávali dolů na auta. Když jsem procházel kolem nich, jeden tirák zatroubil a radost toho dítěte mě dostala. Jak málo stačí k tomu udělat někoho šťastným, taková drobnost, jako pohnout rukou směrem k ovládání klaxonu a capart z toho bude mít zážitek na celý den. Řekl jsem si, že to zkusím taky – každý den nějakou malou drobnost…

Přede mnou Newcastle upon Tyne, "konečně"
Přede mnou Newcastle upon Tyne, "konečně"

Ve vsi jsem poobědval sendwich s kouskem krávy a spláchnul to konví čaje a vyrazil dál. Prodejna byla čistě lokální – místní produkty (od potravin až po mýdla), velké chladicí boxy plné surovin, ze kterých majitelka vytvářela na počkání různé druhy sendwičů a balíčků. Cesta dál vedla k řece (Tyne), ze které byl mnohem větší macek, než který jsem překračoval několik dní nazpět. Bohužel zmizela stezka, na kterou jsem byl zvyklý a objevila se kombinace zpevněných štěrkových cest a vyasfaltovaných cyklostezek, navíc hodně frekventovaných, takže klid a pohoda byly ty tam.

Čím blíže centru Newcastle jsem byl, tím více bylo lidí, únava stoupala (jednotvárné okolí, tvrdý povrch), hladina řeky klesala (odliv)… Takže jsem byl velmi rád, že jsem se dostal na hostel, rozložil stan na usušení (a zablokoval tak nouzový východ), dal si sprchu a sehnal fish and chips, které jsem zdlábl přímo na pryčně. Od sympatické Mexiko-slovensko-rakušanky jsem dostal kastl zbylých piv a od majitele pozvánku do hospody, ale než nastal večer, tak jsem vytuhl jako nemluvně :-).

Tyne při odlivu
Tyne při odlivu

Poslední den v Anglii jsem chtěl dokončit to, co jsem začal – procházku podél Hadrianovy zdi. Nechal jsem batoh za nekřesťanský peníze v úschovně na nádraží a vyrazil na východ podél řeky.

Trasa na Everytrail

Ve městě se dalo najít pár zajímavých míst, ale dál to stálo za těžké nic. Nejzajímavější byl asi překlápěcí most, na který jsem koukal z nejvyššího patra tam stojící galerie moderního umění, jejíž expozice mi ovšem mnoho neřekla.

The Sage Gateshead and Gateshead Millennium Bridge
The Sage Gateshead and Gateshead Millennium Bridge

Stavby, zbořeniště, průmyslové oblasti… a když jsem se po několika mílích dostal až k opravdovému konci Hadrianovy zdi, tak jsem to vůbec nepostřehl a prostě jsem ten „úžasný bod“ přešel. Potvrdil jsem si tak, že „cesta je cíl“ a opravdu mi nejde o to někam dojít, ale prostě jít. Příště přímo v rámci putování poslední den neplánovaně zruším a věřím, že o nic nepřijdu. Nebo půjdu pořád dál a dál…a nebo si půjčím kolo. Teď už ale vzhůru do kraje palíren a kostkovaných kiltů!

Východní konec Hadrianovy zdi - kde nic tu nic za velké vstupné
Východní konec Hadrianovy zdi - kde nic tu nic za velké vstupné