V obchodě Google Play Store je k dispozici nová aplikace Bez Holdingu. Navazuje na již dříve vydanou appku Bez Andreje, která má sice výrazně přes sto tisíc stažení, není ale aktualizovaná. Bez Holdingu plní stejnou úlohu – pomocí chytrého telefonu lze naskenovat čárový kód potravin a zjistit tak, zda dané zboží spadá pod některou ze společností Agrofertu.
Za aplikací Bez Andreje stojí Martin Vytrhlík. Autor nové alternativy Bez Holdingu jméno nezveřejňuje. Vystupuje pod přezdívkou Midnight Code. Jako důvod zmiňuje, že jde svým způsobem o kontroverzní program a že jeho kolegovi aplikace Bez Andreje přinesla pár problémů.
Midnight Code každopádně pro Lupu sepsal základní technické pozadí celého projektu Bez Holdingu. Přečíst si ho lze níže.
Bez Holdingu jsem napsal sám, čili jde o klasické one man show. Důvod byl ten, že mě čím dál víc prudilo, že aplikace Bez Andreje dává špatné výsledky a pořád jsem měl pocit, že vytvořit něco podobného musí být práce maximálně na pár dní.
Jsem softwarový vývojář, věnuji se kromě jiného i Javě, takže k návrhu podobných aplikací nemám daleko. Jednou večer, letos v létě, jsem si sednul, začal psát a k ránu jsem měl hotový funkční základ appky, zatím ovšem pouze s elementární datovou strukturou.
Další dny jsem se ve volném čase zabýval zkoumáním logiky čárových kódů v obchodech. A tam se situace zkomplikovala. Ukázalo se, že existují dva základní druhy kódů – kratší EAN8 a delší EAN13. Každý se výrobcům a prodejcům přiděluje trochu jinak – EAN8 celý kód, z EAN13 jenom prefix a výrobce si sám doplňuje zbývající číslice unikátně pro každý výrobek.
Jenže k tomu přichází ještě další komplikace, a sice privátní značky obchodních řetězců. Každý řetězec používá trochu jiný systém. Někdo má EAN8 začínající číslem 2, který je pro tyto účely určený, jiné řetězce mají vlastní EAN13 a výrobci jim tisknou na zboží jejich kód. Jinde zase nepoužívají na privátních značkách vlastní kódy, ale kódy výrobců a bohužel některé řetězce vzájemně kombinují víc těchto způsobů najednou.
U některých kódů (typicky EAN8 začínající číslovkou 2) se dokonce může stát, že ten stejný čárový kód použije více řetězců pro různé zboží. K tomu jsou kusové a váhové EAN13, také začínající dvojkou a několik dalších, úplně nestandardních kódů. Vymýšlení vhodné datové struktury zabralo dobře dva měsíce a několikrát jsem ji musel úplně předělat. Celý vývoj první veřejné verze trval nakonec tedy dva měsíce a ten jeden, první, den.
Architektura je vcelku jednoduchá. Aplikace je napsaná v Javě, při aktualizaci dat se připojuje na server npoint.io, kde jsou v JSON formátu uložena data, a to zvlášť pro EAN8, EAN13 a pro každý obchodní řetězec. Tato data si víceméně jedna k jedné stáhne, uloží do svých datových seznamů a ty potom při načtení kódu podle optimalizovaného algoritmu prohledává.
Jedním z cílů, které jsem si během vývoje dal, bylo, aby se aplikace dala spravovat i beze mě – kdybych v ní nemohl, ať už z jakéhokoliv důvodu, pokračovat. Oddělil jsem proto pořizování dat, ta sbírají a spravují mí přátelé, kteří si pro to založili na Facebooku skupinu Sorry Yako (technické informace pro vývojáře). Do ní může kdokoliv napsat chybu nebo poslat nově objevený kód. Data jsou volně přístupná všem vývojářům a kdyby chtěl někdo napsat konkurenční aplikaci, může se k npoint serveru připojit a data využívat.
Zdrojové kódy vývojové verze aplikace jsem nahrál na GitHub, takže pokud by Bez Holdingu příliš zastarala, může si je kdokoliv stáhnout, upravit, zkompilovat a vytvořit tak snadno úplně novou appku.
Bez Holdingu je k dispozici pouze pro Android, verzi pro iOS nechystám. A to z jednoduchého důvodu – programuji v Javě a psát aplikaci v prostředí, které neznám by mi zabralo příliš mnoho času. Kromě toho se mi zdá, že Bez Andreje v Apple verzi funguje docela dobře. Kdyby se ale našel někdo, kdo by chtěl a uměl udělat iOS klon, jsou mu k dispozici data, stávající zdrojové soubory i moje podpora.