31. března 2008

iPhone a PIM synchronizace v linuxu!

Tento text je pokračováním zamyšlení iPhone a PIM synchronizace v linuxu? a zabývá se konkrétními kroky, vedoucími k synchronizaci kontaktů z operačního systému linux do telefonu Apple iPhone. Stejně jako v případě předchozího textu je četba při subjektivní netečnosti k alespoň jednomu ze zmíněných systémů poměrně nezáživným zážitkem...

Pro synchronizaci kontaktů mezi linuxem a iPhone budeme potřebovat celkem tři věci. Software na straně počítače, software na straně iPhone a účet na serveru Funambol. Vezmeme to pěkně od konce, ale napřed jedno upozornění. Netvrdím, že se jedná o jedinou nebo nejlepší cestu, jak synchronizovat kontakty z linuxu do iPhonu. Lze použít ScheduleWorld, naemulovat si iTunes nebo cokoliv dalšího. Ale ve chvíli, kdy jsem potřeboval tuhle činnost provést, tak mi to celé trvalo asi 15 minut (ty dvě hodinu googlení předtím pochopitelně nepočítám) a přišlo mi to jako poměrně bezbolestná metoda. Konec disclaimeru.

Funambol
Domovská stránka, zabývající se implementací služeb Funambolu proti iPhone se nepřekvapivě nalézá na stránkách funambo.com, kam vede i tenhle link. Vede přímo na sekci věnované iPhonu, ale Funambol není orientovaný jen na tenhle mobil, ale i na mraky jiných, stačí klikat. Celkem zajímavé čtení je i blog jejich CEO, Fabrizia Copobianca. Každopádně tím místem, které nás zajímá nejvíc, je my.funambol.com, což je brána do samotného portálu. Touhle dobou už bysme měli mít rozhodnutou klíčovou otázku: je opravdu chytý nápad svěřit naše kontakty "třetí straně"? Protože pokud nemáme, pokračovat tak nějak... nemá smysl. Po registraci je asi vhodné se portálem proklikat, ale nevšiml jsem si tam ničeho zvlášť zajímavého.

iPhone
Aby šla nainstalovat aplikace do samotného iPhone, je třeba ho mít jailbreaknutý. Podrobnosti jailbreakingu jsou daleko za hranicemi tohohle textu, takže snad jen jeden užitečný link. Další nutnost je Installer.app, protože i když asi existují i další cesty, jak klienta pro Funambol nainstalovat, tahle je zdaleka nejjednodušší. Vzhledem k tomu, že obvyklý proces jailbreakingu obsahuje i instalaci právě téhle aplikace, stačí jen dodat, že Funambol se nachází v kategorii Productivity. Při prvním spuštění aplikace vyzve k zalogování do portálu (viz výše) a dál už se neptá, v klidovém stavu pak vypadá takhle.


SyncEvolution
A teď to relativně nejsložitější. Instalace pro různé chuti linuxu se bude v detailech lišit, ale princip zůstává víceméně stejný, takže se budu snažit o co nejobecnější popis.
Nejdřív je nutno nainstalovat si samotný Evolution, z nějaké vhodné repository (anebo instalačního DVD případně jiným vhodným způsobem). Pokud ho už pochopitelně nepoužíváme. Pokud se SyncEvolution taktéž nenachází v nějaké repository, což ke dnešnímu dni na konkrétně OpenSUSE není pravda, bude třeba si ho buď stáhnout jako binárku anebo jako zdroják a překompilovat. Stahovat nejlépe zde. Binárku stačí nakopírovat do vhodného systémového nebo zamýšlenému uživateli dostupného adresáře anebo si k ní nastavit cestu (anebo ji spouštět s cestou, kde se nachází, pochopitelně), nicméně já osobně mám v těchto případech raději překompilování proti konkrétnímu systému, takže se k tomu postavíme čelem. Další potřebné balíky, které se ve standardních repository obvykle nacházejí, jsou evolution-devel a curl-devel a jejich patřičné závislosti. Ostatní chybějící závislosti odhalí samotná kompilace, když to během configure začne hlásit, že tomu něco chybí, je načase buď si jméno patřičného devel balíku tipnout anebo použít chybovou hlášku v Google a nainstalovat to, co z toho vypadne.

Kompilace se provádí třemi standardními příkazy, to jest configure pro přípravu kompilace, během kterého vyjdou najevo potencionální problémy. Po jejich vyřešení make a po jeho (bezchybném) doběhnutí make install, to už pochopitelně jako uživatel root.

Když by se to celé nějak bránilo, vždycky je tu možnost použít předkompilovanou binárku a řešit problémy pouze na úrovni neexistujících knihoven, které to očekává, postup viz výše.

Pokud se tohle povede, je prakticky vyhráno. V domovském adresáři vybraného uživatele teď vytvořte adresář .sync4j/evolution (i s tečkou na začátku) a z adresáře etc, který je v rozbaleném archívu ať už binárky nebo zdrojáků SyncEvolution, do toho nově vytvořeného adresáře překopírujte adresář konfigurace pro Funambol, který tam je. Lze si všimnout, že je tam to samé i pro ScheduleWorld.

Příprava na synchronizaci mezi Evolution a Funambol je zakončena editací souboru ~/.sync4j/evolution/funambol/spds/syncml/config.txt, je třeba nahradit na řádcích username a password přítomné defaultní hodnoty svými údaji pro login na my.funambol.com, paranoici mezi námi si všimnou, že heslo je uloženo v plaintextu a vyvodí z toho patřičné důsledky.

Pokud nepoužíváte Evolution jako svého mailového klienta a máte kontakty uložené jinde (např. v KMailu), je nutno je pochopitelně do Evolutionu naimportovat. Export + import přes formát vCard je poměrně spolehlivý, i když vzhledem k tomu, že zrovna KMail má celkem zvláštní přístup k evidenci mnohočetných záznamů u mailu či telefonního čísla, chce to trochu si s tím pohrát. A nezapomenout dopsat prefix +420 u českých telefonních čísel!

Synchronizujte!
Zapněte si Settings->General->Auto-Lock->Never. Není prima, když se telefon v půlce synchronizace vypne. V tuhle chvíli byste měli mít z konzole dostupnou aplikaci syncevolution, takže stačí zadat syncevolution funambol, software se zamyslí a... nahraje váš addressbook na server Funambolu. Zbývá finální fáze, synchronizace mezi Funambolem a iPhone. Aplikace v iPhonu zatím podporuje právě a jen kontakty, takže je úplně jedno, které z obou dostupných tlačítek (Contacts nebo Sync All) použijeme. Chvíli se budou točit šipečky a nakonec:


Problémy
Pokud synchronizace nedopadne tak, jak by měla, umožní aplikace přistoupit k chybovému logu, který ovšem není příliš užitečný, konkrétně na můj problém "vCard<->Addressbook conversion: parsing contact" mi Google neposkytnul žádné vodítko.


Chvíli jsem si myslel, že to je konečná stanice, ale konkrétně tenhle případ byl způsoben tím, že jsem si k jednomu kontaktu přidal z Camera Roll obrázek a z nějakého důvodu to synchronizaci shazovalo. Což je dost zvláštní, protože jsem ji na webovém portále normálně viděl jako staženou. Každopádně po jejím odstranění proběhla synchronizace bez problémů. V konfiguračním souboru na straně počítače (v tom, kam se zadává uživatelské jméno a heslo) je možnost nastavit tohle:

# The maximum size of each message can be set (maxMsgSize) and the
# server can be told to never sent items larger than a certain
# threshold (maxObjSize). Presumably the server has to truncate or
# skip larger items. Finally the client and server may be given the
# permission to transmit large items in multiple messages (loSupport =
# large object support).
maxMsgSize = 8192
maxObjSize = 500000


...takže je otázka, jestli se tímhle nastavením nedá vzdálenému serveru něco vysvětlit ohledně toho, jak velké můžou být synchronizační soubory. Ono to totiž ty fotografie kontaktů vkládá přímo do toho synchronizačního souboru, jak jsem tak nahlížel do synchronizačního souboru přímo v iPhonu.

A co dál?
Celý tenhle návod se zabýval v podstatě jednorázovou synchronizací (přenosem) kontaktů z počítače vybaveného linuxem do iPhone. Nicméně když si teď něco připíšete do adresáře, můžete to jednoduše synchronizovat na web a následně zpátky do počítače.
Nabízí se pochopitelně otázka, co s touhle službou bude dál. Bude Funambol podporovat iPhone i ve verzi firmware 2.x? Fabrizio Capobianco má na tohle téma poměrně čerstvý komentář, který rozhodně stojí za přečtení. Z pohledu položené otázky je podstatný jeho úplný závěr:
Android is good and open. The iPhone SDK is crap and closed. We'll build on both for now, but Apple needs to get a grip on openness or we will all move to Android. You do not screw up with developers too much. They are easy to get upset and do not like to be pushed around. Apple be warned.

3 komentář(e/ů):

Jan Vaněk jr. řekl(a)...

Já bych všechny tyhlety comment spammery se zvlášť nechutným vnucováním instalace údajných antivirů zakázala...

Radim Kučera řekl(a)...

No to jo, zase zapinat nejaky tyhlety praktiky jako "moderovani komentaru" se mi vubec nechce :-/

Jan Vaněk jr. řekl(a)...

BTW, The feed specified by http://www.blogger.com/feeds/4323402941962212702/comments/default is not enabled taky ne?