Měl jsem teď příležitost věnovat pár večerů testování a zkoumání v čem může Google Wave pomoci mému startupu. Článek bude trochu více technický, ale alespoň se v něm dozvíte, co to ta wave vlastně je a možná vás napadne jak může pomoci vášemu startupu. Mnoho lidí je zmatených, protože pojmem “wave” je označováno příliš mnoho různých věcí najednou. Představte si, kdyby se emailová zpráva, emailová příloha, emailový klient, SMTP protokol a emailový server všechno označovalo pojmem “email”. Rozumná diskuse by byla těžko možná.
Pokud jste si nenašli čas shlédnout hodinu dlouhé prezentační video, můžete možná věnovat 10 minut jeho sestřihu.
Google Wave byla chytře marketingově označena jako “email killer”. Srovnání s emailem bych se chtěl ale obloukem vyhnout, protože technicky se jedná o něco jiného. Google Wave je vylepšený Google Docs. A to vylepšený ve třech základních směrech:
- otevřený formát dokumentu
- realtime kolaborace
- federace
Otevřený formát dokumentu
Wave dokument je XML soubor neboli strukturovaný dokument. Hodí se na spoustu věcí. Můžete do něj ukložit rich text, můžete do něj uložit diskusní fórum, můžete do něj uložit databázovou tabulku, můžete … do něj uložit cokoliv, třeba i binarní data, pokud je vhodně zakódujete do textu. Stačí když si v dokumentu vytvoříte vlastní uzel, který patřičně označíte vaší značkou. Ve skutečnosti wave dokument neobsahuje jen jeden XML soubor, ale seznam takových souborů a tyto soubory mohou mít ještě externí anotace. Má to své důvody, ale to není důležité.
Důležité je, že může existovat mnoho klientů, kteří jsou schopni rozumět wave dokumentům určitých formátů a nebo alespoň jejich částem. Google v tuto chvíli implementuje svého wave klienta, který umí googlovské rich-text dokumenty, do kterých mohou být vkládány stromečkové diskuse a jiné balíčky dat (pro gadgety).
Realtime kolaborace
Franta ve svém wave klientu označil text v rozpracovaném wave dokumentu a změnil barvu na červenou. Takto provedl změnu v dokumentu, které se v OT hantýrce říká mutace. OT je Operational Transformation teorie od pánů akademiků, na které wave idea realtime kolaborace staví.
V případě wave dokumentu mutace popisuje inkrementální změnu XML souboru A na jeho novou verzi B, mutace je takový balíček s diferencí B-A nebo chcete-li patch. Pokud je Franta na serveru sám, tak je situace jednoduchá. Při každé změně jeho klient pošle mutaci na server a počká dokud mu server nepotvrdí její zdárné zapsání do dokumentu.
Google chce samozřejmě svým uživatelům dát co nejhladší uživatelský prožitek, takže ve svém wave klientu implementoval optimistické UI. Zatímco mutace letí na server, klient zobrazí změny a nechá Frantu dál editovat wave dokument a očekává, že se proud mutací bude na serveru zdárně zapisovat bez zádrhelů. Franta má opravdu hladký prožitek, ale jen do té doby než se k wave dokumentu nepřipojí Pepa a nezačne zběsile editovat stejný řádek.
Co se stane, když oba označí stejný řádek a jeden ho podbarví zeleně a druhý žlutě? Jejich klienti zobrazí každému jinou barvu mezitím co jejich mutace putují na server. V zájmu zachování duševního zdraví platí na serveru jednoduché pravidlo “poslední vyhrává”. Řekněme, že Franta byl na serveru první a Pepa druhý. Pepa tedy na serveru přepsal Frantovu změnu. Server pak pošle na oba klienty mutace v tom pořadí v jakém nastaly na serveru. Klienti si pak tyto mutace zpětně přehrají na svých dokumentech. V našem případě Pepa nic nepozná, ale Frantovi přeblikne barva. Žádná velká tragédie, změny jsou malé a pravděpodobnost kolizí většinou nízká. Editování obecných XML dokumentu je samozřejmě složitější a nastává tam mnoho zajímavých situací.
Google pro wave mutace zavedl jistá zjednodušení, aby se realtime editace byla opravdu robustní i pro případ tisíců Frantíků a Pepíků najednou připojených do diskuse Mac versus PC.
Federace
Wave dokumenty jsou uloženy na serveru. Pokud by takový server byl jedinný na světě, pak by mohl majitel takového serveru zpychnout. A pozor, nejde tady jen o to kdo drží dokumenty, ale zejména o to, kdo obhospodařuje wave uživatele. O uživatele se bude bojovat předevěším, protože poskytování wave služeb se dá spojit s poskytováním emailu a dalších (placených) služeb.
Google gentlemansky zavádí už od počátku možnost decentralizace. Celé je to postavené nad XMPP protokolem, takže kdo zná jabber, tak mu to bude povědomé. Tedy vězte, že nemusí existovat jen jeden wave server. Uživatelé mají mít možnost vybrat si svého wave poskytovatele stejně jako si dnes mají možnost vybrat poskytovatele emailové schránky.
Wave servery by se měly mezi sebout umět domluvit pomocí federativního protokolu, též označovaného jako server-server protokol. Pokud se budou kamarádit, tak si mohou vzájemně vyměňovat mutace nad svými wave dokumenty, kdy každý poskytovatel si updatuje kopii svého dokumentu.
Každopádně uživatel vždy uvidí svět wave očima svého poskytovatele, dost možná při používání obrandovaného wave klienta. V tomto je srovnání s webmailama určitě na místě. A hádejte, kam se dají vkládat reklamy…
Jak může malý statupista pomoci Googlu?
Může v tuto chvíli dělat tři věci:
- psát roboty
- psát gadgety
- embedovat wave dokumenty
Roboti jsou skripty běžící na wave serveru. Robot je umělý participant na wave dokumentu. Může dělat zejména dvě věci: sledovat a modifikovat obsah dokumentu + obhospodařovat seznam účastníků. Wave robot je zkrátka obdoba IRC bota.
Gadgety jsou kusy UI, kterými můžete rozšířit Google Wave klienta o nové funkce. Je to něco podobného jako extenze do Firefoxu. Typický případ použití je gadget, který je vložen do wave dokumentu a umožňuje nějakou novou funkcionalitu v dokumentu. Například umí prezentovat link na google mapu jako embedovanou mapu. Nebo když někdo vpastuje popis šachové partie, tak gadget zobrazí grafickou verzi šachovnice. Gadget může i sbírat vstupy od uživatele, takže je možné vytvořit jakousi mini-aplikaci, která používá wave dokument jako perzistentní úložiště.
Embedování je klasika. Můžete si vyžádat embed kód a pak ho vložit do svých stránek. Příjemné je, že vložený wave dokument je plně interaktivní. Nevýhoda je, že hostující stránka v tuto chvíli nemá žádnou možnost s embedovaným wave dokumentem intereagovat (například sledovat nové události ve wave dokumentu).
Nutno dodat, že Google pomoc s rozšiřováním wave zdá se nyní potřebuje a do kampaně na konverzi nadšenců investuje mnoho usilí.
Jak může Google pomoci malému startupistovi?
Google Wave je skvělá technologie, která přináší možnost realtime kolaborace nad perzistetním dokumentem. S tím je spojen vyřešený systém uživatelů a jejich práv k dokumentu. Decentralizace je taková třešnička na dortu. Navíc zdá se Google zatím dělá všechno správně. Nezamknul server-side u sebe. Umožňuje psaní alternativních klientů, slibuje open-sourcing svého klienta i serveru, umožňuje rozšiřování svého klienta pomocí gadgetů apod.
Pokud vyvíjíte document-oriented webový projekt, kde počítáte s realtime kolaborací uživatelů, měli byste zbystřit. V tuto chvíli máte nejspíš stav dokumetu uložený ve vaší MySQL databázi, případně v něčem jako BigTable. Používáte OpenID nebo si držíte klasický seznam jmen uživatelů s jejich hesly. Co takhle přejít na wave systém a postavit se na ramena Googlu?
Vytvoříte alternativního wave klienta, wave dokument použijete jako uložiště stavu vašeho dokumentu a systém uživatelů postavíte nad systémem wave uživatelů. Na wave server se teď můžeme dívat jako na velmi specializovanou databázi XML dokumentů. Můžete nasadit vlastní wave server a nebo si celé server-side řešení od někoho pronajmout v cloudu (stejně jako to dnes funguje s databázema).
Psát nového wave klienta a případně wave server zní ale jako hodně práce. Zvlášť pro malého českého startupistu. Napadla mě jiná myšlenka. Google bude mít wave server, wave klienta, rozšiřitelný formát dokumentu (díky podpoře gadgetů). Co tak napsat vlastního wave klienta, který bude kompatibilní se současným Google serverem? Neboli bude mluvit stejnou řečí jako současný Google klient. Výhoda by byla ve využití existující Google infrastruktury. Stejně už dnes pro svůj projekt používám Google Accounty a Google App Engine. Stav dokumentů bych neukládal do BigTable, ale do waves uložených někde jinde u Googlu (pravděpodobně budou na jiném místě BigTable).
Jak ale napsat wave klienta, který bude kompatibilní s Google serverem? Tady se ukázal zásadní háček. Tzv. klient-server protokol je nedokumentovaný. Navíc je to v tuto chvíli těžko čitelný stojově generovaný protokol z GWT. Ale pozor! Je tu naděje. Embedovatelná verze wave dokumentu implementaci tohoto protokolu obsahuje už dnes. Bohužel API na interakci je ukryto za iframem a není vystrčeno k dispozici hostující stránce. Stačilo by jednoduché API ve stylu pošliMutaci a callback pro přijetí příchozích mutací. Pak by bylo možné embedovanou wave v dokumentu skrýt a výužít toto API pro implementaci vlastní prezentace wave dokumentu. Naopak na straně oficiálního Google Wave klienta by se dal implementovat gadget, který by nějak rozumně zobrazoval můj dokument alespoň v read-only režimu (pro lidi co se na moje wave dokumenty kouknou z Google Wave klienta).
Bohužel Google na takovou “pomoc” v otevření své infrastruktury v tuto chvíli není připravený a pravděpodobně ani zvědavý. Já osobně budu Google Wave pozorně sledovat a čekat až někdo poskytne jednoduchý systém pro hostování dokumentů s podporou realtime kolaborace pro můj startup. S příchodem Google Wave cítím, že už to je na spadnutí.

Pěkně, srozumitelně popsáno, díky.
Taky dávám palec nahoru! Díky!
“Roboti jsou skripty běžící na wave serveru.”. Omyl. Roboti neběží na wave serveru, ale běží zcela mimo. Zatím mohou běžet na App Engine, ale později Google povolí jejich běh, kdekoliv. Princip je takový, že to roboti běží mimo a jsou přidávány do wave jako účastnici wave. Jakmile nastane nějaká změna, tak Google Wave kontaktuje stránku, kde bot je a pošle mu co se stalo a čeká na reakci a tu si následně vezme.
Srovnávat Google Wave s Google Docs či jakoukoliv formou dokumentu mi přijde zcela mimo. Doopravdy si nedokáží představit jak by Google Wave mohl být použit pro tvorbu dokumentu. Realtime kolaborace už je součástí Google Docs. Google Wave nemá žádný ucelený koncept, který by mohl být použít pro dokumenty. V případě, že by wave byla pouze jedna odpověď, tak se lze bavit o tom, že to nějak použít jde, ale Google Wave je celá série reakcí, což je více podobné mailing diskuzi či diskuznímu fóru a to mi rozhodně jako dokument nepřijde.
moc pěkný čtení!