Zápisky z fronty: Volby, část softwarová
November 12, 2013 / Redakční kodéřiKvůli volbám jsme si naprogramovali řadu užitečných utilit. Spousta se jich zase čtyři roky nebude hodit, ale pár kousků je přeci jen univerzálnějších. Nyní konečně bylo trochu času projít repozitáře, dopsat readme a dát je k dispozici světu (nadpisy vedou na příslušné repozitáře).
Volební moduly
Kolekce skriptů pro stažení volebních výsledků ze serveru ČSÚ, výpočet rozdělení mandátů stranám a rozdělení stranických mandátů kandidátům (včetně preferenčních hlasů). Jako bonus také indikuje nejslabší mandát - takový, který může strana nejsnáze ztratit. To je vždy poslední mandát v každém kraji - kandidát jej může ztratit pokud ho překoná další v pořadí ze stejného kraje, pokud o mandát přijde celý kraj (při přepočítání rozdělení) nebo když nějaká strana nově překoná 5% kvórum.
Vizualizace výsledků
Generátor SVG, který byl podkladem pro naše volební mapy. Pokud vás zajímá, jestli někde volili Pravý Blok nebo kde Okamura porazil Babiše, určitě se mrkněte.
Kromě vizualizace vás ještě může zaujmout složka data. Jsou v ní v jednotném formátu výsledky všech parlamentních voleb od roku 1996 (pro popis formátu viz readme repozitáře) a TopoJSON obcí ČR s jejich ID dle Struktury území ČSÚ v různých úrovních zjednodušení.
SVG Mapper
Převodník SVG obrázku na mapové podklady použitelné jako vrstva v Leafletu nebo Google Maps. Díky němu jsme převedli vizualizaci výsledků (což bylo 9MB velké SVG, jehož vykreslení trvá i na výkonném PC 5-10 vteřin) na stovky mapových dlaždic různé úrovně přiblížení, které jdou zobrazit za pár stovek milisekund a kilobajtů. Protože nám přišel jako užitečný pro komunitu i za hranicemi naší republiky, je k němu zpracován poměrně podrobný manuál v angličtině.
Package & Response
Minule jsem psal o zátěži, kterou naše servery ustály. Kromě extrémně rychlé architektury Node na tom nesla svůj podíl naše in-memory cache, Package. Využili jsme specifika zpravodajského webu, totiž že drtivá většina požadovaného obsahu (daleko přes 99%) je představuje pouze pár kilobajtů dat a tak jsme si tato data vždy připravili, gzipovali a až do jejich invalidace je servírovali všem, kdo si o ně řekli. Jak vypadala naše již druhá implementace této metody (první byla u Hatecloudu) se můžete podívat v Gistu. Zároveň tam najdete i třídu zastřešující pár convenience metod pro HTTP request, se kterou Package spolupracuje.
Marcel Šulek
Kategorie: Obecne