Regjistrohu për emërimin e Navalny. Njohja e të dhënave të pasaportës. Çfarë është bërë në versionin e ri të sistemit

Ditët e para pas nisjes së fushatës janë shumë të vështira, shumë të mbushura me detyra aktuale. Dhe megjithëse ne kemi qenë gjithmonë (dhe do të jemi) mbështetës të publicitetit maksimal në punën tonë, nuk duhet të presim raporte super të detajuara tani. Sidoqoftë, më duhet të them disa fjalë.

Çfarë po ndodh tani.
Gjithçka është shumë e thjeshtë: brenda një viti do të na duhet të mbledhim 400-500 mijë nënshkrime në të gjithë vendin (për të zgjedhur 300 mijë prej tyre, me kushtin: të paktën 7500 secila në 40 rajone) brenda dy javësh nga Pushimi i Vitit të Ri. Në mënyrë që të ketë të paktën një shans teorik për ta bërë këtë, tani duhet të rindërtojmë të gjithë infrastrukturën:
- në mënyrë që këta 400-500 mijë njerëz të regjistrohen me ne përmes faqes së internetit, të cilët do të japin të gjitha të dhënat paraprakisht dhe do të premtojnë se do të regjistrohen në ditën D;
- Krijoni seli rajonale, rekrutoni dhe trajnoni njerëz që do të përgatisin fletë nënshkrimi dhe në Ditën D do të jenë në gjendje të mbledhin super-shpejtë nënshkrimet nga 7,500 mbështetësit që janë regjistruar në bazën e të dhënave; - që të ketë para për të gjithë këtë rrjet rajonal, për marrjen me qira të ambienteve dhe pagimin e punonjësve, për avokatët dhe për tërheqjen e mbështetësve të rinj; Vlerësimi i përafërt parashikon një buxhet në rajonin prej 150-200 milion rubla (ne do ta publikojmë buxhetin së shpejti).

Kemi filluar t'i zgjidhim këto probleme pardje. Nga njëra anë, duket se është shumë e suksesshme. Në dy ditët e para - në vetëm 48 orë - ne e regjistruam fushatën në faqen e internetit mbi 22.300 njerëz(kjo është më shumë se 7% e minimumit të kërkuar 300 mijë), dhe tërhoqi donacione në shumë mbi 5 milion rubla(kjo është më shumë se 3% e minimumit të kërkuar prej 150 milion). Duket sikur nëse ekstrapoloni, rezulton se brenda dy muajsh do të arrihen të gjitha qëllimet.

Por ju e kuptoni shumë mirë se nuk mund të ekstrapoloni. Çdo person dhe rubla tjetër do të jetë më e vështirë (dhe kjo është krejtësisht normale); ka shumë punë për të bërë. Pikërisht duke kuptuar këtë, ne nisëm fushatën pikërisht një vit para fillimit të mbledhjes “zyrtare” të nënshkrimeve.

Çfarë po bën tani selia?
Prandaj, selia tani po përgatit një strukturë që do të sigurojë zgjidhjen e detyrave me të cilat përballet fushata jonë. Përgatit përgjigje për një mijë pyetje:
- si do të krijohen shtabet rajonale, ku, me çfarë rendi, kush do t'i udhëheqë ato,
- çfarë materialesh propaganduese do të marrin vullnetarët (dhe tashmë më shumë se 6100 njerëz jo vetëm që i premtuan kandidatit Navalny nënshkrimin e tyre në mbështetje të nominimit, por gjithashtu premtuan të investojnë përpjekjet e tyre vullnetare në fushatë) në mënyrë që të përdorin këto materiale për të nxitur "të pavendosurit".
- si do të sigurojmë sigurinë e selisë, vullnetarëve, mbledhësve dhe vetë nënshkrimeve;
- çfarë ngjarjesh do të mbajmë në Moskë dhe në rajone...
Dhe kështu me radhë. Lista është pothuajse e pafundme. Këtu sapo kemi shkruar një listë të fushave në tabelë - për secilën prej këtyre fushave do të ketë përcaktimin e qëllimeve, njerëz përgjegjës, një strategji dhe një plan për aktivitete specifike - kjo tashmë është e frikshme. Por ne do ta përballojmë, jo për herë të parë.

Çfarë pyetjesh po na bëjnë?
Pyetja më e zakonshme dhe e preferuar është "si të ndihmojmë"?
Është e lehtë të ndihmosh. Shihni listën e golave ​​më lart.
- premtoni të nënshkruani
- dërgoni para
- sigurohuni që të ketë më shumë nënshkrime.

Është kjo e fundit që do të përqendrohemi në të ardhmen e afërt. Në fund të fundit, ne po kërkojmë një nënshkrim në mbështetje të nominimit - as në mbështetje të vetë kandidatit Navalny, por në mbështetje të faktit të pjesëmarrjes së tij në zgjedhje: për t'i bërë zgjedhjet presidenciale konkurruese për herë të parë në 20 vjet. Nuk janë vetëm mbështetësit e Navalny-t ata që mund të binden të nënshkruajnë një nënshkrim të tillë; Ideja se duhet konkurrencë e vërtetë në zgjedhje ndahet nga shumica dërrmuese e rusëve (ne kemi kryer një sondazh për këtë, ne gjithashtu do të publikojmë të dhënat).
Kjo është arsyeja pse ne së shpejti do t'u japim vullnetarëve dhe mbështetësve mjetet për të shkuar te familja/miqtë/kolegët - pa marrë parasysh sa skeptikë - dhe t'i bindim ata se duke nënshkruar për nominimin e Navalny-t ata do të përfitojnë në çdo rast (edhe nëse ata vetë do të votojnë për Putinin).

Epo, ata gjithashtu bëjnë shumë pyetje për programin dhe gjëra të tjera. Vetë kandidati u përgjigjet shkëlqyeshëm të gjitha këtyre pyetjeve, nuk kam asgjë të veçantë për të shtuar këtu.

Daddies, ku ne regjistrojmë mbështetës nga pjesë të ndryshme të Rusisë së gjerë

Për çfarë na shkruajnë njerëzit?
Shumë gjëra. Lexojmë të gjitha letrat; Ne patjetër do t'i përgjigjemi gjithçkaje që kërkon një përgjigje.
Lloji më i këndshëm dhe i ëmbël i letrave janë letrat "Unë, Vasya Ivanov, jam avokat, jetoj në Izhevsk, më njoftoni kur të hapet selia jonë - do të vij të ndihmoj". Ne i pranojmë me mirënjohje të gjitha letrat e tilla dhe i vendosim në dosje të veçanta (shiko foton). Dhe kur të hapim një seli në Izhevsk, do t'i shkruajmë Vasya Ivanov dhe do ta ftojmë të ndihmojë.

Dhe ata gjithashtu shkruajnë: "Unë, Petya Zaitsev, jam programues, kam kaq shumë orë në javë për ju." Dhe ne gjithashtu i vendosim këto letra në dosje të veçanta. Dhe ne gjithashtu do t'i ftojmë të gjithë të ndihmojnë. Shkruani letra, ne lexojmë!

Epo, gjëja e rëndësishme: kini pak durim. Ju keni parë listën e udhëzimeve. Ky elefant do të duhet të hahet pjesë-pjesë. Kemi një vit punë përpara. Nuk mund të hapësh 50 seli rajonale brenda një dite, të krijosh një linjë të tërë materialesh propagandistike, të zhvillosh një hackathon për programuesit dhe të krijosh një qendër thirrjesh propagandistike - megjithëse, sigurisht, vërtet dëshiron t'i bësh të gjitha këto sa më shpejt që të jetë e mundur. Do të ecim hap pas hapi, muaj pas muaji, sipas një plani të mirëmenduar, në kuadër të të cilit gjithçka do të ndodhë në kohën e duhur. Dhe gradualisht të gjithë ata që dolën vullnetarë për të ndihmuar do të kenë një mundësi reale për të ndihmuar dhe kontribuar

Kjo është gjithashtu një histori se si, duke përdorur softuer të lirë dhe komponentë të lirë, u krijua një ekip i vogël sistem kompleks mbledhja e firmave në mbarë vendin. Nuk ka asnjë kompleksitet në projekt zgjidhje teknike, por ka shumë gjëra të vogla të rëndësishme, e cila nuk mund të parashikohet bazuar në përvojën tipike të zhvillimit të IT.

Për lehtësi, materiali është i ndarë në katër postime, të cilat lexohen më së miri në vazhdimësi.

Kjo material teknik, por shumë nga çështjet e diskutuara këtu janë të pakuptueshme pa një njohuri minimale të kontekstit aktual politik, ndaj përshkruhet në masën e nevojshme. Nëse për ndonjë arsye ju tremb fjala "Navalny" (ajo do të shfaqet edhe disa herë) ose përmendja e institucioneve demokratike, thjesht mos e lexoni këtë tekst. Çështjet politike nuk do të diskutohen në komente.

Qëllimi i fushatës

Regjistrimi i Alexei Navalny si kandidat presidencial.

Detyrat e caktuara për departamentin e IT

(në rend kronologjik):

Regjistrimi paraprak i të gjithëve që janë të gatshëm të nënshkruajnë për nominimin e kandidatit tonë;
- Sigurimi i funksionimit të një rrjeti të selive në të gjithë Rusinë;
- Krijimi i një sistemi për mbledhjen e 315 mijë firmave ideale.

Konteksti historik dhe politik

Nëse nuk keni parti parlamentare, atëherë duhet të mblidhni nënshkrime për të marrë pjesë në zgjedhje. Kjo është një procedurë mbrojtëse që përdoret për të parandaluar kandidatët e “pakoordinuar” të marrin pjesë në zgjedhje.

Mundësi të pafundme për refuzimin e regjistrimit janë përcaktuar në nivelin e rregullave të grumbullimit:

  • Mbledhja e nënshkrimeve është rreptësisht e kufizuar në kohë;
  • Sipas ligjit, një përqindje e vogël e numrit të kërkuar të nënshkrimeve ndahet për martesën është e pamundur të dorëzohen nënshkrime me një diferencë të mirë;
  • Është e pamundur të verifikohen nënshkrimet nga ana jonë, pasi të dhënat e votuesve duhet të korrespondojnë me bazën e të dhënave FMS, në të cilën kanë akses vetëm organet qeveritare;
  • Gjatë kontrollit në Komisionin Qendror të Zgjedhjeve, një grafolog mund të refuzojë çdo nënshkrim dhe nuk mban përgjegjësi ligjore në rast gabimi;
  • Vetë skema e verifikimit supozon se do të ketë një përqindje të konsiderueshme të false pozitive (paradoksi i teoremës së Bayes si një pengesë zgjedhore).

Këtë e kemi hasur tashmë në Novosibirsk, kur kemi mbledhur nënshkrime për të marrë pjesë në zgjedhjet për Asamblenë Legjislative.

Për të mbledhur nënshkrime në Novosibirsk, ne krijuam sistemin Reaper, i cili u fokusua në mbledhjen e nënshkrimeve "në terren" dhe në kube, menaxhoi rrugët e mbledhësve, mori parasysh të gjitha listat e nënshkrimeve dhe bëri të mundur renditjen e nënshkrimeve bazuar në rezultatet. të kontrolleve të ndryshme.

Mbledhësit në Novosibirsk sollën më shumë se 16 mijë nënshkrime, nga të cilat ne zgjodhëm dhe dorëzuam 11,722 më të mirët, megjithë përzgjedhjen e rreptë, grupi i punës i komisionit zgjedhor identifikoi shumë "nënshkrime të pavlefshme" dhe komisioni zgjedhor refuzoi të regjistrojë kandidatët. Lexoni më shumë për arsyet absurde për të cilat nënshkrimet janë të pavlefshme.

Sistemi i riështë ndërtuar duke marrë parasysh përvojën e grumbulluar në mbledhjen e nënshkrimeve dhe mbrojtjen e tyre të mëvonshme në komisionin zgjedhor.

Karakteristikat e koleksionit të ri të nënshkrimeve

Janë vendosur kushte edhe më të rrepta për mbledhjen e nënshkrimeve për emërimin e një kandidati presidencial:

Nuk kërkohen më shumë se 315 mijë nënshkrime;
- Të paktën 300 mijë nënshkrime duhet të njihen si të vlefshme;
- Nuk numërohen më shumë se 7500 nënshkrime nga një rajon;
- Periudha e shkurtër e grumbullimit (nga 27 dhjetori deri më 31 janar) përkon me festat e gjata të Vitit të Ri, kur shumë njerëz shkojnë me pushime.

Duke marrë parasysh përvojën e mëparshme dhe kërkesat e reja, ne kemi adoptuar parimet bazë të mëposhtme.

Rrjeti gjithë-rus i selisë

Për shkak të kuotave rajonale, ishte e pamundur të punohej, të themi, në dhjetë qytetet më të mëdha. Mund të mblidheshin 315 mijë nënshkrime nëse do të mbuloheshin të paktën 40 qytete. Në rajonet me popullsi të rrallë, mbledhja e nënshkrimeve është më e vështirë, kështu që në praktikë, për mbledhje të suksesshme ishte e nevojshme të hapeshin selitë në shumicën e rajoneve të vendit.

Parashikimi për numrin e nënshkrimeve në momentin e përfundimit me sukses të grumbullimit tregon se në qytetet e mëdha numri i njerëzve që dëshirojnë të nënshkruajnë do të tejkalonte ndjeshëm kuotat rajonale. Moska (127 mijë) dhe Shën Petersburgu (63 mijë) nuk u përshtatën në ekran.

Mbledhja e firmave vetëm në seli

Do të na duhej të punësonim disa mijëra mbledhës për të mbledhur derë më derë. Kushdo që ka punuar ndonjëherë me koleksionistë me pagesë (ose, për shembull, studentë të sociologjisë) e di se jo të gjithë janë po aq të ndjeshëm ndaj procedurës dhe jo të gjithë e kapërcejnë tundimin për të "tërhequr" një ose dy firma. Mbushja e pakujdesshme çon në një përqindje të madhe defektesh dhe “tërheqja” e nënshkrimeve është një problem kaq i zakonshëm sa Komisioni Qendror i Zgjedhjeve parashikon një kontroll nga një grafolog. Edhe prania e një grafologu në staf dhe ekzekutimi demonstrues i disa deklaratave në polici nuk mund të pastrojë 100% selinë nga “hartistët” (ne kontrolluam). Për më tepër, mbledhësi mund të shtojë nënshkrime jo vetëm për qëllime dashakeqe, por edhe, përkundrazi, për të "ndihmuar selinë".

Ne e dinim se kur mblidhnim "në fushë", patjetër do të njiheshim me "mbledhësit toksikë", siç ishte rasti në Novosibirsk. Mbledhësit toksikë bëjnë gabime qëllimisht në të dhënat e votuesve (për shembull, ata ndryshojnë një shifër në një numër pasaporte). Detyra e tyre është të rrisin numrin e nënshkrimeve të pavlefshme mbi kufirin pas së cilës komisioni zgjedhor refuzon regjistrimin. Novosibirsk shpenzoi shumë përpjekje për të pastruar nënshkrimet toksike. Kjo është e pamundur të bëhet kur grumbullohet në të gjithë vendin.

Vetëm në selitë e palëvizshme ishte e mundur të sigurohet cilësi e mjaftueshme e nënshkrimeve, kushtet për plotësimin e saktë të fletëve të nënshkrimit dhe siguria e tyre.

Verifikimi i nënshkrimit me shumë faza

Nënshkrimet ideale janë një abstraksion matematikor. Mbledhja aktuale e nënshkrimeve është një proces kompleks dhe i vështirë. Edhe montues të ndershëm e të stërvitur gabojnë dhe në kushtet e mungesës së kohës, presionit administrativ dhe provokimeve do të ketë edhe më shumë defekte.

Kemi shumë të dhëna se si ndodhin gabimet. Në përvojën tonë, në fletët e nënshkrimeve të mbledhura në mënyrë krejtësisht të ndershme, do të ketë rreth 10% të nënshkrimeve që komisioni zgjedhor i njeh si të pavlefshme.

Ne duhej të dorëzonim jo thjesht firma të mira, por nënshkrime që komisioni zgjedhor do t'i pranonte. Kjo kërkonte disa faza verifikimi dhe një mekanizëm renditjeje - për të përzgjedhur dhe dorëzuar vetëm ato nënshkrime që kishin më shumë gjasa të kalonin kontrollet e komisionit zgjedhor, sado absurde t'i konsiderojmë.

Skanimi i pasaportës për çdo nënshkrim

Pa një skanim, e gjithë përgjegjësia për cilësinë e nënshkrimit bie mbi koleksionistin. Nëse aksidentalisht apo qëllimisht ka bërë një gabim në numrin e pasaportës, nuk do ta dimë kurrë.

Nga përvoja, ne kemi gjetur se vetëm gabimet në rishkrimin e të dhënave të pasaportës në fletën e nënshkrimit dhe gabimet e futjes së të dhënave shterojnë lehtësisht kufirin e lejuar prej 5%, edhe nëse nënshkrimet mblidhen në kushte komode dhe nga mbledhës të ndërgjegjshëm.

Duke pasur një skanim të dokumentit, ne mund të kryejmë disa faza të pavarura të verifikimit të nënshkrimit dhe të bëjmë korrigjime.

Përveç kësaj, avokatët tanë po përgatiteshin të luftonin për çdo nënshkrim në gjykatë. Herën e kaluar kishte një kategori të madhe nënshkrimesh të refuzuara, të cilat ne e dinim me siguri: nënshkrimi korrespondonte me pasaportën, por ne e kontrolluam atë në një bazë të dhënash të vjetëruar dhe të mbushur me gabime. Një bazë e të dhënave e unifikuar dhe disponueshmëria e skanimeve do t'u mundësonte avokatëve të automatizonin procesin e përgatitjes së ankesave në raste të tilla.

Natyrisht, ishte e mundur të skanohej një pasaportë vetëm në seli, përndryshe do të ishte e pamundur të sigurohej një nivel i mjaftueshëm sigurie për të dhënat personale.

Sinkronizimi me bazën elektronike të të dhënave

Të gjitha operacionet me nënshkrime dhe fletë nënshkrimesh, të gjitha statuset dhe lëvizjet duhej të pasqyroheshin në bazën elektronike të të dhënave. Sistemi i mbledhjes së nënshkrimeve duhej të monitoronte të gjitha fazat e mbledhjes dhe të identifikonte gabimet. Vetëm në këtë mënyrë do të ruanim rendin (dhe qetësi shpirtërore) kur punoni me qindra mijëra objekte fizike.

Çfarë është bërë në versionin e ri të sistemit

  • Në mënyrë që të kemi një vend për të mbledhur nënshkrime, ne kemi vendosur një rrjet të selive rajonale. Infrastruktura IT e selisë përbëhet nga disa serverë fizikë, një numër makinash virtuale, 70 rutera, 230 kamera dhe 189 stacione të plota pune. Më shumë se 250 njerëz e përdorin sistemin në të njëjtën kohë nga brenda.
  • Për të sjellë disa qindra mijëra njerëz në seli në një periudhë të shkurtër grumbullimi, filluam regjistrimin e votuesve paraprakisht në faqen e internetit 20!8, ku ata para-konfirmuan të dhënat e tyre.
  • Për të zvogëluar numrin e gabimeve, ne kemi krijuar një sistem që lejon verifikimin e pavarur të korrektësisë së plotësimit të fletës së abonimit. Sistemi përbëhet nga disa aplikacione ueb dhe një aplikacion celular për dy platforma.
  • Për të ngarkuar të dhënat në sistem, ne montuam (dhe prodhuam pjesërisht) një grup pajisjesh për skanimin e pasaportave, menduam një skemë për transferimin e sigurt të të dhënave personale dhe e zbatuam atë në të gjitha selitë.
  • Për t'u siguruar që formatimi i adresës ishte i saktë nga këndvështrimi i komisionit zgjedhor, ne ngritëm kërkimin në bazën e të dhënave të FIAS dhe së bashku me juristë e ndërtuam seriozisht për të marrë parasysh të gjitha kërkesat e ligjit.
  • Për të siguruar (pjesërisht) selinë tonë dhe për të pasur argumente shtesë në gjykata, ne kemi krijuar një sistem video survejimi dhe regjistrimi 24 orë.
  • Për të testuar infrastrukturën, mekanikën, qartësimin e të dhënave dhe përgatitjen e selisë për grumbullim, ne zhvilluam një procedurë të madhe për verifikimin paraprak të votuesve, përmes së cilës kaluan 81.750 persona.
  • Ne kemi zhvilluar pamjen fletë abonimi, një sistem logjistik fletësh në seli, si dhe një sistem ruajtjeje fizike dhe akses të shpejtë për selinë qendrore.

Teknologjitë kryesore të aplikacioneve tona të internetit

Gjuha kryesore e mbështetjes: Python.
Frontend: JavaScript, jQuery, React, D3.js.
Kornizat: Django (6 copë), aiohttp (1 copë).
Bazat e të dhënave: PostgreSQL, Redis dhe të tjerë.
Kërkimi i tekstit të plotë: Sfinks.
Serveri HTTP: Nginx, Llak.
Testimi: Jenkins, Browserstack, RobotFramework, Locust.
Monitorimi: Zabbix, Elasticsearch, Kibana, Sentry.
Vendosja: Ansible dhe mjete të tjera.
Menaxhimi i konfigurimit të serverit: Shefi i kuzhinës.

Pjesa e parë: Faqja e internetit e Navalny 20!8

Na u desh të sillnim disa qindra mijëra njerëz në seli në një periudhë shumë të kufizuar kohore. Për ta bërë këtë, ne filluam regjistrimin e mbështetësve pikërisht në ditën kur filloi fushata. Rekrutimi dhe regjistrimi i mbështetësve është një nga detyrat kryesore të faqes së internetit Navalny 20!8, kështu që ekziston një formular regjistrimi pothuajse në çdo faqe.

Meqenëse e gjithë kjo është e nevojshme jo vetëm për hir të numrave të bukur, ishte e rëndësishme që ne të dinim se mbështetësit e regjistruar janë njerëz të vërtetë, jo robotë, për të qenë në gjendje të mbajnë kontakte me ta dhe të kuptojmë se në cilin qytet janë regjistruar (në me qëllim parashikimin e përmbushjes së kuotave sipas rajoneve). Prandaj, regjistrimi në sit ishte mjaft i ndërlikuar dhe kërkonte konfirmimin e numrit të telefonit. Për të mos mashtruar veten dhe të tjerët, kemi përfshirë vetëm personat që kanë plotësuar të gjithë formularin dhe kanë konfirmuar numrin e tyre të telefonit si nënshkrues të mundshëm. Prandaj, në faqen kryesore, në vend të më shumë se një milion (numri i përgjithshëm i regjistrimeve), tani kemi vetëm 706,513 “nënshkrime të së ardhmes”.

Nga pikëpamja e ndërtimit të faqes në internet, ky është një produkt mjaft i zakonshëm. Faqja është krijuar në Python + Django + PostgreSQL, duke përdorur një ORM standard dhe një panel standard admin. Gjatë një viti e gjysmë, faqja kaloi nëpër disa përditësime: u shtuan seksione, u ndryshua funksionimi i formularit të regjistrimit, ndryshuan tekstet dhe imazhet në faqe. Ne u përpoqëm të mos e komplikonim dizajnin, në mënyrë që të mund të vendosnim duke përdorur blloqe standarde, falë të cilave disa seksione kaluan nga ideja në fillim në tre ditë.

Rreth gjysma e vizitorëve në çdo faqe interneti moderne vijnë nga pajisje celulare. Ne u përpoqëm ta bënim sitin të përshtatshëm për të gjithë, kështu që paraqitjet u vizatuan dhe u vendosën për shfaqje të saktë në çdo gjerësi ekrani, duke filluar nga 320 pikselë.

Harta e selisë

I vetmi element ndërveprues kompleks që vizitorët shohin është një hartë e Rusisë me selinë e shënuar në të. Kur numri i selisë kaloi 50, u bë e vështirë për të lundruar në hartë për shkak të vendndodhjes së afërt të shënuesve në pjesën evropiane të vendit. Fillimisht, harta ishte menduar të ishte thjesht element dekorativ, por u mbush papritur me funksionalitet, kështu që për ata që tashmë e vlerësuan natyrën federale të fushatës dhe thjesht duan të gjejnë qytetin e tyre, ne krijuam një modalitet liste.

Harta është bërë duke përdorur bibliotekën e mrekullueshme dhe të gjithanshme d3.js. Ne vendosëm të shkruajmë skriptin tonë në vend që të përdorim Google Maps standarde ose Yandex.Maps për shkak të projeksionit të hartës. Ka shumë mënyra për të bërë një zhvillim të elipsoidit të Tokës në një aeroplan. Në projeksionin Mercator, objektet shtrihen shumë gjerësi veriore, dhe ne kemi nevojë për më shumë hapësirë ​​në ato zona ku kryesore qytetet kryesore. Për më tepër, në projeksionin Mercator, Rusia duket mjaft e çuditshme. Ne zgjodhëm projeksionin konik Albers-Siberia, i cili është më i njohur nga tekstet e gjeografisë.


Rusia e një personi të shëndetshëm (projeksioni konik i Albers) dhe Rusia e një duhanpirësi (projeksioni Mercator)

Menaxhimi i përmbajtjes

Seksioni editorial i faqes nuk është shumë interesant. Paneli i zakonshëm i administratorit Django përdoret me personalizim minimal. Me burime të kufizuara zhvillimi, është më fitimprurëse të mësosh disa përdorues administratorë të përdorin një mjet standard sesa të harxhosh kohë duke krijuar një mjet vërtet të përshtatshëm.

Disa zgjidhje që e bëjnë jetën e redaktorit më të lehtë janë marrë nga projekte të tjera. Për shembull, një mjet për tipografinë e teksteve në anën e klientit. Tipografi ynë është i përshtatshëm sepse lidhet lehtësisht me çdo fushë të futjes së tekstit ose vargut. Informacioni në lidhje me gjendjen e autotipografisë (ndezur/çaktivizuar) ruhet si një karakter pa printim në fund të rreshtit dhe nuk varet në asnjë mënyrë nga pjesa e pasme.

Për të punuar me përmbajtje komplekse të postimeve dhe lajmeve, ne përdorim një redaktues blloku, i cili përdoret gjithashtu në shumë projekte të tjera:

Ka lloje të ndryshme blloqesh, secili projekt ka grupin e vet. Çdo bllok përmban përmbajtje dhe mund të përmbajë cilësime. Të dhënat e bllokut ruhen në bazën e të dhënave në formën e json, dhe shënimi brenda bllokut të tekstit ruhet në formatin markdown.

Për shfaqje, blloqet konvertohen në formatin e kërkuar: HTML për një postim, tekst për indeksim, RSS ose XML për Yandex.Zen, JSON për një aplikacion celular, etj. Në këtë mënyrë marrim rezultate të parashikueshme në çdo pajisje me formatim mjaft kompleks të përmbajtjes.

Versioni i parë bazohej në kodin Sir Trevor. Më vonë, kur kodi i spagetit të Sir Trevor u bë i vështirë për t'u ruajtur, redaktori u rishkrua në React.

Analiza

Gjëja më interesante nga pikëpamja teknike ndodh në zonën e administrimit të faqes. Prej aty ndoqëm rrjedhën e regjistrimeve.

Në fillim, analitika ishte mjaft primitive: grafikët e numrit të regjistrimeve lloje të ndryshme kohë pas kohe. Por ne donim të shihnim dinamikën sipas rajoneve dhe të gjurmojmë ndikimin e ngjarjeve të ndryshme në numrin e regjistrimeve. Kështu u shfaq analitika e shumëpritur:


Ky ekran përmban informacion përmbledhës për të gjithë jetën e sitit, një orar për një periudhë të caktuar dhe një listë të ngjarjeve për këtë periudhë. Ju mund të nënvizoni një kulm në tabelë dhe të përpiqeni të kuptoni se çfarë ngjarje e shkaktoi atë. Më shpesh, ky është publikimi i një video tjetër me një hetim në kanalin YouTube të Navalny. Rritja më e madhe e nënshkrimeve erdhi nga videot për makinacionet e zyrtarëve rajonalë.

Grafiku është bërë në d3.js, dhe filtrimi i ngjarjeve sipas kohës dhe selisë zbatohet duke përdorur bibliotekën Crossfilter. Kjo zgjidhje ju lejon të operoni në anën e klientit pa vonesa të ndërfaqes me të dhënat e regjistrimit për një interval prej më shumë se një viti në rritje prej 1 ore. Aktiv për momentin kjo është 12 megabajt të dhëna (1.3 MB në gzip).

Një raport i vogël me tekst me treguesit kryesorë të bazës së regjistrimit dhe sukseseve për një ditë më parë u dërgohej automatikisht çdo ditë të gjithë pjesëmarrësve të projektit.

Qyteti dhe rajoni

Ne gjithashtu kemi një tabelë të madhe ku janë renditur treguesit kryesorë të përgatitjes për mbledhjen e nënshkrimeve për secilin rajon të Rusisë:

Numrat në këtë tabelë në fillim nuk donin të konvergjonin. Totali sipas qyteteve ishte dukshëm më i vogël se numri i regjistrimeve. Doli që kur plotësoni një pyetësor në faqen e internetit, njerëzit papritur shpesh bëjnë gabime në emrin e qytetit të tyre ose përdorin emra jo standardë:

Moskë - 2.5% gabime dhe 579 ndryshime drejtshkrimore;
- Shën Petersburg - 12,6% gabime dhe 767 ndryshime drejtshkrimore;
- Komsomolsk-on-Amur - më shumë se 20% gabime dhe shkurtesa, 75 opsione.

Një vlerësim i gabuar i numrit të mbështetësve mund të çojë në planifikim të gabuar të rrjetit të selisë dhe ngjarjeve të fushatës. Më duhej të mendoja se si ta ktheja hyrjen e përdoruesit të emrit të qytetit në një emër standard rajoni. Për një formë kaq të thjeshtë, nuk doja të përdorja mekanizmat e plotësimit automatik sipas KLADR ose FIAS. Prandaj, ne morëm një listë të 700 qyteteve më të mëdha në Rusi, shtuam një listë të drejtshkrimeve tipike ("spb", "n-sk") dhe bëmë një kërkim të lirë mbi to, duke i renditur ato sipas distancës Levenshtein (kjo është një masë e ndryshimi midis dy grupeve të personazheve).

Ne e klasifikuam çdo qytet në listë në një nga tre kategoritë bazuar në distancën me selinë më të afërt: selia është në qytet, selia është afër (aglomerimi urban), selia është larg. Distanca nga selia është marrë parasysh gjatë vlerësimit të numrit të personave që do të vinin dhe do të firmosnin në kohën e duhur. Në analitikë, ne numëruam veçmas të gjithë nënshkruesit dhe ata "të disponueshëm" (email i konfirmuar, jeton në qytet me seli ose afër).


Ky grafik tregon se si fushata u bë gjithnjë e më rajonale me kalimin e kohës. Pjesa e regjistrimeve të reja nga Moska dhe Shën Petersburg u ul nga 35% në 15%.

SMS dhe postë

Një tjetër vështirësi teknike ishte dërgimi i SMS-ve dhe letrave. Portat nuk dërgojnë shumë mirë mesazhet, veçanërisht në numrat e huaj. Por ne donim bazën më të pastër dhe autentike të mbështetësve, kështu që pjesa e dytë e formularit të regjistrimit kërkonte verifikimin e numrit të telefonit me SMS. Për dërgim të besueshëm, ne rrotulluam tre porta: nëse mesazhi nuk dërgohej, atëherë ai dërgohej përsëri përmes një porte tjetër. Përveç kësaj, portat individuale mund të fiken në rast të dështimeve nga ana e tyre. Normat e dërgimit të kodit SMS janë një nga parametrat e monitoruar:

Grafiku tregon se portat dështuan dy herë. Përqindja e SMS-ve të dërguara ra ndjeshëm në datat 21 shkurt dhe 17-18 prill për shkak të dështimeve në radhën e dërgimit të mesazheve. Dhe më 15 korrik ndryshuam paraqitjen e formularit të regjistrimit, kjo vërehet edhe në grafik.

Ne dërgojmë një numër të madh letrash në një bazë të dhënash me më shumë se 700 mijë adresa emaili. Dikush është i abonuar në lajme, dikush duhet të marrë një njoftim për ngjarjen. Për më tepër, çdo adresë duhet të konfirmohet sipas rregullave të 2-zgjedhjes (kjo është kur letra e parë përmban një lidhje që duhet të klikoni për të konfirmuar abonimin tuaj në buletinin). Në fillim të fushatës, ne përdorëm shërbimin ActiveCampaign, por ishte i shtrenjtë dhe tepër i ngadalshëm. Kur baza e të dhënave tejkaloi 300 mijë kontakte, u bë e pamundur të punohej. Prandaj, ne shkruam shërbimin tonë CRM / postimi, i cili ju lejon të krijoni lista postimesh dhe zinxhirë letrash bazuar në mostrat e kërkuara. Mailgun aktualisht përdoret për të dërguar letra.

Radhët e shtyra të detyrave

Dërgimi i postës ose SMS përmes API-së së shërbimeve të palëve të treta është një operacion që kërkon një kohë të konsiderueshme. Operacione të tilla duhet të kryhen në mënyrë asinkrone në mënyrë që të mos ngadalësohet ndërfaqja e përdoruesit ose të mos ngarkohet i gjithë aplikacioni. Fillimisht, të gjitha detyrat asinkrone funksionuan përmes Selinos me Redis si ndërmjetës. Çdo email ose mesazh SMS krijoi një detyrë në radhën e Selinos, pas së cilës një punëtor i lirë e përpunoi këtë detyrë. Por kjo qasje doli të ishte jo e besueshme dhe shumë intensive me burime.

Pasi morëm më shumë se 10 mijë regjistrime në një orë (jo, nuk u shfaqëm në TV, ishte një fushatë "+1"). 10 Punëtorët e Selinos nuk mund ta përballonin këtë, përdoruesit filluan të vërejnë një vonesë të konsiderueshme në marrjen e SMS dhe postës.

Pas këtij incidenti, ne braktisëm Selinën në favor të një radhe të thjeshtë të bazuar në PostgreSQL. Detyrat nga radha u renditën sipas "daemonëve" në Python, një për çdo kanal të dërgimit të mesazhit. Një herë në çdo 10 sekonda, daemon merrte një grup detyrash nga radha dhe i dërgoi të dhënat në një grup në API-në e postimit. Grupimi i detyrave reduktoi rrënjësisht ngarkesën në server dhe përdorimi i një radhe shtëpie e bëri korrigjimin dhe monitorimin jashtëzakonisht të thjeshtë.

Selino doli të jetë gjithashtu instrument kompleks për detyrën tonë. Kërkon konfigurim dhe monitorim të kujdesshëm përmes shërbimeve të jashtme si Flower, i cili vetë konsumon shumë burime. Në projekte të tjera ne përpiqemi të përdorim një zgjidhje më të thjeshtë - RQ + Redis.


Krahasimi i kompleksitetit të RQ dhe Selinos nga një artikull për punën me detyra asinkrone.

Procesi i zhvillimit

Si funksionon procesi i krijimit të faqes së internetit Navalny 20!8 nga këndvështrimi i zhvilluesve? Ne nuk i përmbahemi asnjë metodologjie, por përdorim qasje nga sisteme të ndryshme. Për shembull, menaxherët vendosin detyra në Trello me një strukturë të ngjashme me një bord Kanban dhe zhvilluesit përdorin praktika individuale të Programimit Ekstrem.

Përafërsisht gjysma e ekipit është e vendosur në zyrën e Moskës, dhe pjesa tjetër punon nga distanca. Punonjësit e Moskës mund të marrin pjesë në takimet e fushatës në mënyrë që të mos punojnë për të kuptuar më mirë pamjen e përgjithshme, por ne diskutojmë veçmas detyrat e departamentit të IT. Thirrjet e rregullta i lejojnë të gjithë të sinkronizohen dhe të kuptojnë drejtimin kryesor të punës në çdo moment.

Shumica e pjesëmarrësve të projektit punojnë në të me kohë të plotë, por disa detyra u kryen nga zhvillues të sjellë përkohësisht nga projekte të tjera, apo edhe nga vullnetarë. Për shembull, vullnetari Ilya krijoi pothuajse plotësisht një hartë të selisë për faqen kryesore.

Kodi burimor ruhet në një depo git në platformën Bitbucket. Një degë e veçantë krijohet për çdo detyrë të re kryesore. Ne nuk krijojmë një server për çdo degë; Pas testimit, zhvilluesi përgjegjës për detyrën i bën masterit një kërkesë tërheqjeje. Udhëheqësi i ekipit shikon kodin dhe, nëse gjithçka është mirë, fillon vendosjen. Për detyra të mëdha, zhvilluesit bëjnë përshkrime të hollësishmeçfarë duhet të kontrollohet dhe çfarë mund të shkojë keq gjatë vendosjes.


Vendosja është organizuar shumë thjeshtë. Ne kemi një mjet që i përgjigjet një uebhook nga Bitbucket (ose një butoni nga ndërfaqja e tij), merr kodin nga dega e dëshiruar, e kopjon atë në server dhe ekzekuton skriptin e përditësimit atje. Skripti është i formatuar në një Makefile.

Kur ekzekutoni "make update", varësitë përditësohen, migrimet kryhen, skedarët statikë përpunohen pas dhe, nëse gjithçka shkoi mirë, serveri uwsgi riniset. Ne përpiqemi të bëjmë migrime që të mos prishen kod i vjetër, kështu që në rast të gabimeve të vendosjes gjithçka vazhdon të funksionojë.

Zhvillimi filloi më 18 shtator 2016. Që atëherë, ka pasur 1228 angazhime, 200 kërkesa për tërheqje, vendosja është shtyrë në prodhim mbi 600 herë, dhe ka pasur 67 degë në depo (shumica prej tyre tani janë mbyllur).

Rreth dizajnit

Në ekipin e projektit, vetëm dy persona punonin vazhdimisht në dizajn (një drejtor arti me funksion produkti dhe një dizajner), ndërsa të dy ishin të përfshirë në mënyrë aktive në projekte të tjera të fushatës. Prandaj, qasja ndaj dizajnit ishte jashtëzakonisht utilitare.

Në hartimin e produkteve të IT-së, ne udhëhiqemi gjithmonë nga dy parime bazë:

1) Informacioni për përdoruesit më "dembel" dhe të papërfshirë duhet të jetë në vendin më të dukshëm (kështu, për shembull, përcaktuam vendet fillestare të blloqeve dhe seksioneve në faqe);

2) Çfarë më pak njerëz do të përdorim produktin përfundimtar, aq më pak përpiqemi ta dekorojmë atë (kursejmë burimet e zhvillimit) dhe aq më shumë përpjekje të dhënash mund të lejojmë për secilin përdorues (shpesh është më efektive të trajnohen disa njerëz sesa të humbim kohë për zbatimin e veçorive të reja që do kurseni përpjekjet e përdoruesit ose parandaloni gabimet).

Prandaj, përdoruesi ynë i ulët sistemet e brendshme përpiquni të dukeni si një kornizë teli të animuar* dhe gjithçka që has një mbështetës i fushatës është pjesë e komunikimit të përgjithshëm vizual, rreptësisht i nënshtruar stilit të korporatës dhe sensit të përbashkët.

Një sistem IT për mbledhjen e nënshkrimeve është një projekt shumë kompleks, me shumë komponentë me burime të kufizuara, kështu që pjesa më e madhe e punës së projektuesve është bërë në letër, në takime dhe në Google Docs, dhe jo në një redaktues grafik (në rastin tonë, Skicë).

Ka shumë në projekt qarqe komplekse, të cilin thjesht duam ta vizatojmë dhe nuk na përshtateshin të gjitha mjetet elektronike që gjetëm aty për aty për vizatimin e diagrameve. Ndonjëherë përdornim draw.io, por më shpesh vizatonim drejtpërdrejt në letër. Diagramet më të rëndësishme të varura në tabelën e projektit. Aty ishin bashkangjitur edhe “bileta” në letër me pyetje për diskutim në takime.

Nga ato të rënë dakord me avokatët diagrame letre dhe skriptet, kemi mbledhur prototipe në marvelapp.com për të kontrolluar edhe një herë logjikën dhe për t'u siguruar që asgjë nuk është harruar. Vetëm pas kësaj paraqitjet u transferuan në zhvillim.

Në varësi të detyrës, kemi përdorur metoda të ndryshme hulumtim dhe dizajn. Pra, përpara se të bënim analizën e shumëpritur, ne zhvilluam një sërë intervistash me të gjithë përdoruesit e mundshëm të sistemit (nga shefi i stafit deri tek personi që dërgonte postimet) dhe, bazuar në dëshirat e tyre, arritëm të mbledhim një ndërfaqe që për një kohë të gjatë shërbeu si një panel kontrolli për fushatën.

Në një faqe ne pamë fluksin e regjistrimeve, mund të shihnim ngjarjet që ndikojnë në të dhe zbuluam se si janë shpërndarë mbështetësit tanë nëpër qytete. Ne gjithashtu mblodhëm vlerësimet e qyteteve sipas numrit të nënshkruesve (kjo na lejoi të monitoronim efektivitetin e selisë dhe na tha nëse kishim zgjedhur qytetet e duhura për hapjen e selive të reja) dhe analitikë tabelore.

Për ndërfaqet e verifikimit dhe vetë mbledhjen e nënshkrimeve, shpejtësia e punës së operatorit ishte një përparësi absolute. Mbledhja kryhet në kushte të presionit akut të kohës, kështu që ne u përpoqëm të kursenim çdo sekondë dhe në të njëjtën kohë të zvogëlojmë numrin e gabimeve të mundshme të përdoruesit.

Sipas llogaritjeve tona, me numrin ekzistues të selisë dhe subjekt i një fluksi të vazhdueshëm njerëzish, çdo koleksionist duhet të kishte marrë jo më shumë se 6 minuta për person - nga "përshëndetje" deri në përfundimin e procedurës së grumbullimit.

Verifikimi dhe mbledhja e nënshkrimeve përmes një sistemi IT është një procedurë e shpikur plotësisht nga ne, ndaj ne zgjodhëm testimin MVP tek përdoruesit realë të sistemit si metodën kryesore për testimin e zgjidhjeve tona. Pra, ne testuam protokollin bazë dhe ndërfaqen e parë të verifikimit te punonjësit e selisë së Moskës dhe më pas shkuam në tre qytete të ndryshme (Shën Petersburg, Chelyabinsk dhe Ulyanovsk) për të vëzhguar. përdoruesit e vërtetë në procesin e punës. Për projekte të ngjashme është mënyra më e mirë bëni shpejt një listë të gjërave dhe rasteve të përdoruesve që mund të jenë harruar ose jo të parashikuara në fazën e projektimit dhe zhvillimit.

Pas ndryshimeve të vogla në ndërfaqe, verifikimi u nis në të gjitha selitë e fushatës. Si rezultat, ne arritëm të reduktojmë kohën e përpunimit të një pyetësori në një e gjysmë deri në dy minuta për person.

Testimi

RobotFramework u përdor për testimin e automatizuar. Për të mbuluar funksionalitetin më kritik të projektit, u shkruan testet e pranimit dhe funksionale dhe u konfigurua nisja automatike e tyre. Jenkins u përdor si sistem CI.

Funksioni më i rëndësishëm i faqes është regjistrimi i përdoruesit, i cili përfshin konfirmimin e telefonit përmes kodit SMS. Për të testuar mesazhet me kode, u konfigurua një modem GSM me një kartë SIM testuese dhe një yll. Kodi SMS u dërgua në postë, nga ku ishte tashmë i disponueshëm për testim.

Gabimet e zbuluara u shtuan në Trello si detyra për zhvilluesit.

Infrastruktura e serverit

Faqja e internetit Navalny 20!8 vazhdon të funksionojë dhe gradualisht po bëhet vendi i fushatës së grevës së votuesve, kështu që embargoja e informacionit nuk është hequr ende dhe historia do të jetë e shkurtër. Pjesa e serverit përbëhet nga tre nivele: backend, proxies caching dhe servers edge. Të gjitha konfigurimet menaxhohen përmes kuzhinierit, kështu që një server me çdo rol mund të instalohet shpejt në një makinë të re virtuale.

Backend-i drejton një bazë të dhënash dhe shembuj aplikacioni, secili aplikacion në makinën e tij virtuale dhe me IP-në e vet. Të gjithë serverët ekzistojnë në disa kopje dhe baza e të dhënave riprodhohet në modalitetin master-slave në një makinë tjetër.

Varnish është instaluar në serverin proxy, i cili ruan kërkesat për të adresa të caktuara dhe kufizime të ndryshme të varura nga URL. Nëse backend-i dështon, faqja mund të funksionojë për një kohë të pacaktuar nga një server proxy vetëm mekanizmi i regjistrimit të përdoruesit;

Serverët Edge kryejnë caching statik dhe përfundimin SSL (më pas trafiku kalon përmes rrjetit VPN). Thelbi i këtyre serverëve është të shpërndajnë pjesën më të madhe të trafikut dhe të mbrojnë pjesën tjetër të infrastrukturës nga sulmet. Këto janë makina virtuale të dobëta me një kanal gigabit në qendra të ndryshme të të dhënave. Ngarkesa shpërndahet nga balancimi DNS. Serverët Edge përmbajnë një minimum konfigurimi dhe, nëse është e nevojshme, mund të instalohen lehtësisht në pak minuta. Trafiku maksimal i dobishëm që kishim në serverët e skajshëm ishte 5 Gbps për disa orë.

Imazhet, stilet, javascript, të dhënat json ruhen në atë mënyrë që emri i skedarit të përfshijë një hash të përmbajtjes së këtij skedari (për shembull, style.28fa1c7b1761.css), kështu që të gjithë këta skedarë mund të ruhen përgjithmonë në server dhe në shfletuesin. Pjesa më e madhe e trafikut dërgohet nga serverët e skajshëm. Pastaj kalojnë vetëm kërkesat për faqet e përmbajtjes, dhe kjo është rreth 25 herë më pak të dhëna.

Ndonjëherë CloudFlare lidhet në vend të serverëve të skajit, por ne përpiqemi të kthehemi te serverët tanë, pasi CloudFlare nuk ka gjithmonë akses të mirë nga Rusia. Disa ofrues, madje edhe më të mëdhenjtë, fillojnë rregullisht të bllokojnë IP-në e tyre (gjurmët e Roskomnadzor).

konkluzioni

Mblidhni nënshkrime në stil tradicional(pa një sistem të veçantë IT, me letër, stilolaps dhe tabela Excel) - është si të fluturosh në një aeroplan tullumbace në Hënë: po, nëse merr topa të mjaftueshëm, madje mund të fluturosh lart dhe të fshihesh në retë, por arritja e qëllimit në këtë mënyrë është fizikisht e pamundur.

Për të mbledhur nënshkrime të tilla që komisioni zgjedhor do të detyrohej t'i pranonte edhe nga një kandidat i padëshiruar, filluam të ndërtojmë këtë infrastrukturë komplekse. Në këtë kapitull folëm për detyrën e vendosur para nesh dhe përgatitjen për zgjidhjen e saj.

Kapitulli tjetër flet për zgjedhjen dhe konfigurimin e pajisjeve të rrjetit të selisë, zhvillimin e skanerit tuaj të dokumenteve dhe organizimin e mbikëqyrjes video të ambienteve të selisë.

Kapitulli i tretë do të përshkruajë procesin e krijimit të aplikacioneve për mbledhjen e nënshkrimeve dhe gjithçka që lidhet me punën me fletët e nënshkrimeve fizike.

Kapitulli i katërt flet për menaxhimin e projektit, ekipin, afatin kohor dhe pak për rezultatet.

Etiketa: Shtoni etiketa

Këtë mëngjes verifikova nënshkrimin tim për nominimin e Navalny për president. Unë dua t'ju them se sa e lehtë apo e vështirë ishte, e shpejtë apo e ngadaltë.

Në fillim thjesht doja të vija në selinë e Moskës, por më pas pashë fjalë si "Regjistrohu për verifikim" në rrjete, kështu që shkova në faqen e internetit https://2018.navalny.com/ dhe në fakt pashë seksionin përkatës atje. Faqja e internetit përshkruan në detaje pse nevojitet verifikimi paraprak, por shkurtimisht - në mënyrë që të dorëzohen më pas nënshkrimet më të cilësisë më të lartë në një kohë të shkurtër.

Nuk shkruhet drejtpërdrejt për këtë në faqen e internetit, por dyshoj se në një farë kuptimi, nëpërmjet këtij verifikimi paraprak, selia ka kohë të shohë se kush do të vijë realisht për të firmosur në intervalin kohor të kërkuar nga rregullat e KQZ-së dhe kush mund të nuk vijnë.

Kam aplikuar për verifikim përmes telefonit. Fushat e formularit sugjerojnë opsione për emrat e rrugëve të qytetit (kur futni adresën), kështu që plotësimi i formularit ishte i lehtë.

Kam lënë një takim të martën për këtë mëngjes - për të enjten. Në faqen e internetit mund të specifikoni një kohë të përshtatshme dhe të regjistroheni për verifikim.

Në mëngjes mora një SMS të menduar nga selia që më kujtonte se sot u regjistrova në seli.

Gruaja ime verifikoi nënshkrimin me mua dhe disa miq tanë kishin planifikuar të shkonin me ne për verifikim. Nga rruga, gjithashtu detaj interesant— më vonë një nga miqtë duhej të qëndronte në shtëpi me foshnjën, kështu që ai e ricaktoi për një kohë tjetër në një ditë tjetër. Shërbimi është më i mirë se shërbimet shtetërore.

Nga ora 11 ishim aty. Kthesa nga rruga në seli nuk është shënuar në asnjë mënyrë - Navalny nuk u lejua të varte asnjë simbol atje. Mirëpo, topi i kuq pranë selisë dukej nga rruga, ndaj dhe selia u gjet menjëherë.

Na takoi Vitaly Serukanov, një nga drejtuesit e selisë së Moskës. Ne ishim të parët këtë mëngjes. Kishin mbetur rreth pesë minuta para fillimit të punës së selisë. Vitaly ofroi të ulej në karrige dhe tha se stafi i selisë do të vinte dhe do të fillonte verifikimin. Dhe me të vërtetë, fjalë për fjalë në disa minuta kompjuteri i parë filloi të funksionojë, pastaj i dyti, etj.

Ndërsa kishte kohë para fillimit të mbledhjes së nënshkrimeve, ne bëmë foto në sfondin e të njëjtit sfond.

Me sa kuptoj unë, nëse regjistroheni paraprakisht, përpunimi i nënshkrimit kërkon më pak kohë. Në rastin tim ishte fjalë për fjalë njëzet deri në tridhjetë sekonda. Pra pesë minuta pas hapjes së selisë, të tre kishim verifikuar tashmë firmat.

Pak më vonë, njerëzit filluan të vinin menjëherë, nga të rinjtë tek të moshuarit. Si të moshuar ashtu edhe të rinj.

Nga rruga, ne hasëm disa telashe - erdhi pronari dhe kërkoi Nikolai Lyaskin. Unë vetë nuk do të isha kundër që ta kërkoja, sepse... Ndodhi që ne nuk ishim parë për një kohë të gjatë dhe shpresoja ta kapja. Por, duke gjykuar nga llogaria e rrjetit të Lyaskin, sot jo vetëm pronari i selisë e kërkoi atë, por edhe policia. Ata duan të dëbojnë edhe një herë selinë e Moskës, sepse... siç e dimë, në Moskën e madhe, në fakt, çdo i shëndetshëm veprimtarinë politike dhe ka gjithmonë shumë presion mbi pronarët.

Në përgjithësi, sipas rezultateve. Ju duhet të verifikoni. Është e lehtë për të bërë. Dhe, më e rëndësishmja, verifikimi i nënshkrimeve ndodh shpejt.

Faleminderit stafit të selisë së Moskës për efikasitetin e tyre.

Kjo është gjithashtu një histori se si, duke përdorur softuer të lirë dhe komponentë të lirë, një ekip i vogël krijoi një sistem kompleks për mbledhjen e nënshkrimeve në shkallë kombëtare. Nuk ka zgjidhje teknike komplekse në projekt, por ka shumë detaje të rëndësishme që nuk mund të parashikohen bazuar në përvojën tipike të zhvillimit të IT.

Për lehtësi, materiali është i ndarë në katër postime, të cilat lexohen më së miri në vazhdimësi.

Ky është material teknik, por shumë nga çështjet e diskutuara këtu janë të pakuptueshme pa një njohuri të vogël të kontekstit politik bashkëkohor, prandaj mbulohet sipas nevojës. Nëse për ndonjë arsye ju tremb fjala "Navalny" (ajo do të shfaqet edhe disa herë) ose përmendja e institucioneve demokratike, thjesht mos e lexoni këtë tekst. Çështjet politike nuk do të diskutohen në komente.

Qëllimi i fushatës

Regjistrimi i Alexei Navalny si kandidat presidencial.

Detyrat e caktuara për departamentin e IT

(në rend kronologjik):

Regjistrimi paraprak i të gjithëve që janë të gatshëm të nënshkruajnë për nominimin e kandidatit tonë;
- Sigurimi i funksionimit të një rrjeti të selive në të gjithë Rusinë;
- Krijimi i një sistemi për mbledhjen e 315 mijë firmave ideale.

Konteksti historik dhe politik

Nëse nuk keni parti parlamentare, atëherë duhet të mblidhni nënshkrime për të marrë pjesë në zgjedhje. Kjo është një procedurë mbrojtëse që përdoret për të parandaluar kandidatët e “pakoordinuar” të marrin pjesë në zgjedhje.

Mundësi të pafundme për refuzimin e regjistrimit janë përcaktuar në nivelin e rregullave të grumbullimit:

  • Mbledhja e nënshkrimeve është rreptësisht e kufizuar në kohë;
  • Sipas ligjit, një përqindje e vogël e numrit të kërkuar të nënshkrimeve ndahet për martesën është e pamundur të dorëzohen nënshkrime me një diferencë të mirë;
  • Është e pamundur të verifikohen nënshkrimet nga ana jonë, pasi të dhënat e votuesve duhet të korrespondojnë me bazën e të dhënave FMS, në të cilën kanë akses vetëm organet qeveritare;
  • Gjatë kontrollit në Komisionin Qendror të Zgjedhjeve, një grafolog mund të refuzojë çdo nënshkrim dhe nuk mban përgjegjësi ligjore në rast gabimi;
  • Vetë skema e verifikimit supozon se do të ketë një përqindje të konsiderueshme të false pozitive (paradoksi i teoremës së Bayes si një pengesë zgjedhore).

Këtë e kemi hasur tashmë në Novosibirsk, kur kemi mbledhur nënshkrime për të marrë pjesë në zgjedhjet për Asamblenë Legjislative.

Për të mbledhur nënshkrime në Novosibirsk, ne krijuam sistemin Reaper, i cili u fokusua në mbledhjen e nënshkrimeve "në terren" dhe në kube, menaxhoi rrugët e mbledhësve, mori parasysh të gjitha listat e nënshkrimeve dhe bëri të mundur renditjen e nënshkrimeve bazuar në rezultatet. të kontrolleve të ndryshme.

Mbledhësit në Novosibirsk sollën më shumë se 16 mijë nënshkrime, nga të cilat ne zgjodhëm dhe dorëzuam 11,722 më të mirët, megjithë përzgjedhjen e rreptë, grupi i punës i komisionit zgjedhor identifikoi shumë "nënshkrime të pavlefshme" dhe komisioni zgjedhor refuzoi të regjistrojë kandidatët. Lexoni më shumë për arsyet absurde për të cilat nënshkrimet janë të pavlefshme.

Sistemi i ri u ndërtua duke marrë parasysh përvojën e akumuluar në mbledhjen e nënshkrimeve dhe mbrojtjen e tyre të mëvonshme në komisionin zgjedhor.

Karakteristikat e koleksionit të ri të nënshkrimeve

Janë vendosur kushte edhe më të rrepta për mbledhjen e nënshkrimeve për emërimin e një kandidati presidencial:

Nuk kërkohen më shumë se 315 mijë nënshkrime;
- Të paktën 300 mijë nënshkrime duhet të njihen si të vlefshme;
- Nuk numërohen më shumë se 7500 nënshkrime nga një rajon;
- Periudha e shkurtër e grumbullimit (nga 27 dhjetori deri më 31 janar) përkon me festat e gjata të Vitit të Ri, kur shumë njerëz shkojnë me pushime.

Duke marrë parasysh përvojën e mëparshme dhe kërkesat e reja, ne kemi adoptuar parimet bazë të mëposhtme.

Rrjeti gjithë-rus i selisë

Për shkak të kuotave rajonale, ishte e pamundur të punohej, të themi, në dhjetë qytetet më të mëdha. Mund të mblidheshin 315 mijë nënshkrime nëse do të mbuloheshin të paktën 40 qytete. Në rajonet me popullsi të rrallë, mbledhja e nënshkrimeve është më e vështirë, kështu që në praktikë, për mbledhje të suksesshme ishte e nevojshme të hapeshin selitë në shumicën e rajoneve të vendit.

Parashikimi për numrin e nënshkrimeve në momentin e përfundimit me sukses të grumbullimit tregon se në qytetet e mëdha numri i njerëzve që dëshirojnë të nënshkruajnë do të tejkalonte ndjeshëm kuotat rajonale. Moska (127 mijë) dhe Shën Petersburgu (63 mijë) nuk u përshtatën në ekran.

Mbledhja e firmave vetëm në seli

Do të na duhej të punësonim disa mijëra mbledhës për të mbledhur derë më derë. Kushdo që ka punuar ndonjëherë me koleksionistë me pagesë (ose, për shembull, studentë të sociologjisë) e di se jo të gjithë janë po aq të ndjeshëm ndaj procedurës dhe jo të gjithë e kapërcejnë tundimin për të "tërhequr" një ose dy firma. Mbushja e pakujdesshme çon në një përqindje të madhe defektesh dhe “tërheqja” e nënshkrimeve është një problem kaq i zakonshëm sa Komisioni Qendror i Zgjedhjeve parashikon një kontroll nga një grafolog. Edhe prania e një grafologu në staf dhe ekzekutimi demonstrues i disa deklaratave në polici nuk mund të pastrojë 100% selinë nga “hartistët” (ne kontrolluam). Për më tepër, mbledhësi mund të shtojë nënshkrime jo vetëm për qëllime dashakeqe, por edhe, përkundrazi, për të "ndihmuar selinë".

Ne e dinim se kur mblidhnim "në fushë", patjetër do të njiheshim me "mbledhësit toksikë", siç ishte rasti në Novosibirsk. Mbledhësit toksikë bëjnë gabime qëllimisht në të dhënat e votuesve (për shembull, ata ndryshojnë një shifër në një numër pasaporte). Detyra e tyre është të rrisin numrin e nënshkrimeve të pavlefshme mbi kufirin pas së cilës komisioni zgjedhor refuzon regjistrimin. Novosibirsk shpenzoi shumë përpjekje për të pastruar nënshkrimet toksike. Kjo është e pamundur të bëhet kur grumbullohet në të gjithë vendin.

Vetëm në selitë e palëvizshme ishte e mundur të sigurohet cilësi e mjaftueshme e nënshkrimeve, kushtet për plotësimin e saktë të fletëve të nënshkrimit dhe siguria e tyre.

Verifikimi i nënshkrimit me shumë faza

Nënshkrimet ideale janë një abstraksion matematikor. Mbledhja aktuale e nënshkrimeve është një proces kompleks dhe i vështirë. Edhe montues të ndershëm e të stërvitur gabojnë dhe në kushtet e mungesës së kohës, presionit administrativ dhe provokimeve do të ketë edhe më shumë defekte.

Kemi shumë të dhëna se si ndodhin gabimet. Në përvojën tonë, në fletët e nënshkrimeve të mbledhura në mënyrë krejtësisht të ndershme, do të ketë rreth 10% të nënshkrimeve që komisioni zgjedhor i njeh si të pavlefshme.

Ne duhej të dorëzonim jo thjesht firma të mira, por nënshkrime që komisioni zgjedhor do t'i pranonte. Kjo kërkonte disa faza verifikimi dhe një mekanizëm renditjeje - për të përzgjedhur dhe dorëzuar vetëm ato nënshkrime që kishin më shumë gjasa të kalonin kontrollet e komisionit zgjedhor, sado absurde t'i konsiderojmë.

Skanimi i pasaportës për çdo nënshkrim

Pa një skanim, e gjithë përgjegjësia për cilësinë e nënshkrimit bie mbi koleksionistin. Nëse aksidentalisht apo qëllimisht ka bërë një gabim në numrin e pasaportës, nuk do ta dimë kurrë.

Nga përvoja, ne kemi gjetur se vetëm gabimet në rishkrimin e të dhënave të pasaportës në fletën e nënshkrimit dhe gabimet e futjes së të dhënave shterojnë lehtësisht kufirin e lejuar prej 5%, edhe nëse nënshkrimet mblidhen në kushte komode dhe nga mbledhës të ndërgjegjshëm.

Duke pasur një skanim të dokumentit, ne mund të kryejmë disa faza të pavarura të verifikimit të nënshkrimit dhe të bëjmë korrigjime.

Përveç kësaj, avokatët tanë po përgatiteshin të luftonin për çdo nënshkrim në gjykatë. Herën e kaluar kishte një kategori të madhe nënshkrimesh të refuzuara, të cilat ne e dinim me siguri: nënshkrimi korrespondonte me pasaportën, por ne e kontrolluam atë në një bazë të dhënash të vjetëruar dhe të mbushur me gabime. Një bazë e të dhënave e unifikuar dhe disponueshmëria e skanimeve do t'u mundësonte avokatëve të automatizonin procesin e përgatitjes së ankesave në raste të tilla.

Natyrisht, ishte e mundur të skanohej një pasaportë vetëm në seli, përndryshe do të ishte e pamundur të sigurohej një nivel i mjaftueshëm sigurie për të dhënat personale.

Sinkronizimi me bazën elektronike të të dhënave

Të gjitha operacionet me nënshkrime dhe fletë nënshkrimesh, të gjitha statuset dhe lëvizjet duhej të pasqyroheshin në bazën elektronike të të dhënave. Sistemi i mbledhjes së nënshkrimeve duhej të monitoronte të gjitha fazat e mbledhjes dhe të identifikonte gabimet. Kjo është mënyra e vetme se si mund të ruajmë rendin (dhe qetësinë e mendjes) kur punojmë me qindra mijëra objekte fizike.

Çfarë është bërë në versionin e ri të sistemit

  • Në mënyrë që të kemi një vend për të mbledhur nënshkrime, ne kemi vendosur një rrjet të selive rajonale. Infrastruktura IT e selisë përbëhet nga disa serverë fizikë, një numër makinash virtuale, 70 rutera, 230 kamera dhe 189 stacione të plota pune. Më shumë se 250 njerëz e përdorin sistemin në të njëjtën kohë nga brenda.
  • Për të sjellë disa qindra mijëra njerëz në seli në një periudhë të shkurtër grumbullimi, filluam regjistrimin e votuesve paraprakisht në faqen e internetit 20!8, ku ata para-konfirmuan të dhënat e tyre.
  • Për të zvogëluar numrin e gabimeve, ne kemi krijuar një sistem që lejon verifikimin e pavarur të korrektësisë së plotësimit të fletës së abonimit. Sistemi përbëhet nga disa aplikacione ueb dhe një aplikacion celular për dy platforma.
  • Për të ngarkuar të dhënat në sistem, ne montuam (dhe prodhuam pjesërisht) një grup pajisjesh për skanimin e pasaportave, menduam një skemë për transferimin e sigurt të të dhënave personale dhe e zbatuam atë në të gjitha selitë.
  • Për t'u siguruar që formatimi i adresës ishte i saktë nga këndvështrimi i komisionit zgjedhor, ne ngritëm kërkimin në bazën e të dhënave të FIAS dhe së bashku me juristë e ndërtuam seriozisht për të marrë parasysh të gjitha kërkesat e ligjit.
  • Për të siguruar (pjesërisht) selinë tonë dhe për të pasur argumente shtesë në gjykata, ne kemi krijuar një sistem video survejimi dhe regjistrimi 24 orë.
  • Për të testuar infrastrukturën, mekanikën, qartësimin e të dhënave dhe përgatitjen e selisë për grumbullim, ne zhvilluam një procedurë të madhe për verifikimin paraprak të votuesve, përmes së cilës kaluan 81.750 persona.
  • Ne zhvilluam pamjen e fletës së abonimit, një sistem për logjistikën e fletëve në seli, si dhe një sistem të ruajtjes fizike dhe aksesit të shpejtë për selinë qendrore.

Teknologjitë kryesore të aplikacioneve tona të internetit

Gjuha kryesore e mbështetjes: Python.
Frontend: JavaScript, jQuery, React, D3.js.
Kornizat: Django (6 copë), aiohttp (1 copë).
Bazat e të dhënave: PostgreSQL, Redis dhe të tjerë.
Kërkimi i tekstit të plotë: Sfinks.
Serveri HTTP: Nginx, Llak.
Testimi: Jenkins, Browserstack, RobotFramework, Locust.
Monitorimi: Zabbix, Elasticsearch, Kibana, Sentry.
Vendosja: Ansible dhe mjete të tjera.
Menaxhimi i konfigurimit të serverit: Shefi i kuzhinës.

Pjesa e parë: Faqja e internetit e Navalny 20!8

Na u desh të sillnim disa qindra mijëra njerëz në seli në një periudhë shumë të kufizuar kohore. Për ta bërë këtë, ne filluam regjistrimin e mbështetësve pikërisht në ditën kur filloi fushata. Rekrutimi dhe regjistrimi i mbështetësve është një nga detyrat kryesore të faqes së internetit Navalny 20!8, kështu që ekziston një formular regjistrimi pothuajse në çdo faqe.

Meqenëse e gjithë kjo është e nevojshme jo vetëm për hir të numrave të bukur, ishte e rëndësishme që ne të dinim se mbështetësit e regjistruar janë njerëz të vërtetë, jo robotë, për të qenë në gjendje të mbajnë kontakte me ta dhe të kuptojmë se në cilin qytet janë regjistruar (në me qëllim parashikimin e përmbushjes së kuotave sipas rajoneve). Prandaj, regjistrimi në sit ishte mjaft i ndërlikuar dhe kërkonte konfirmimin e numrit të telefonit. Për të mos mashtruar veten dhe të tjerët, kemi përfshirë vetëm personat që kanë plotësuar të gjithë formularin dhe kanë konfirmuar numrin e tyre të telefonit si nënshkrues të mundshëm. Prandaj, në faqen kryesore, në vend të më shumë se një milion (numri i përgjithshëm i regjistrimeve), tani kemi vetëm 706,513 “nënshkrime të së ardhmes”.

Nga pikëpamja e ndërtimit të faqes në internet, ky është një produkt mjaft i zakonshëm. Faqja është krijuar në Python + Django + PostgreSQL, duke përdorur një ORM standard dhe një panel standard admin. Gjatë një viti e gjysmë, faqja kaloi nëpër disa përditësime: u shtuan seksione, u ndryshua funksionimi i formularit të regjistrimit, ndryshuan tekstet dhe imazhet në faqe. Ne u përpoqëm të mos e komplikonim dizajnin, në mënyrë që të mund të vendosnim duke përdorur blloqe standarde, falë të cilave disa seksione kaluan nga ideja në fillim në tre ditë.

Rreth gjysma e vizitorëve në çdo faqe interneti moderne vijnë nga pajisjet mobile. Ne u përpoqëm ta bënim sitin të përshtatshëm për të gjithë, kështu që paraqitjet u vizatuan dhe u vendosën për shfaqje të saktë në çdo gjerësi ekrani, duke filluar nga 320 pikselë.

Harta e selisë

I vetmi element ndërveprues kompleks që vizitorët shohin është një hartë e Rusisë me selinë e shënuar në të. Kur numri i selisë kaloi 50, u bë e vështirë për të lundruar në hartë për shkak të vendndodhjes së afërt të shënuesve në pjesën evropiane të vendit. Fillimisht, harta ishte menduar si një element thjesht dekorativ, por papritmas ajo u mbush me funksionalitet, kështu që për ata që tashmë e vlerësuan natyrën federale të fushatës dhe thjesht duan të gjejnë qytetin e tyre, ne krijuam një modalitet liste.

Harta është bërë duke përdorur bibliotekën e mrekullueshme dhe të gjithanshme d3.js. Ne vendosëm të shkruajmë skriptin tonë në vend që të përdorim Google Maps standarde ose Yandex.Maps për shkak të projeksionit të hartës. Ka shumë mënyra për të bërë një zhvillim të elipsoidit të Tokës në një aeroplan. Në projeksionin Mercator, objektet shtrihen shumë në gjerësinë gjeografike veriore dhe ne kemi nevojë për më shumë hapësirë ​​në ato zona ku janë përqendruar qytetet kryesore të mëdha. Për më tepër, në projeksionin Mercator, Rusia duket mjaft e çuditshme. Ne zgjodhëm projeksionin konik Albers-Siberia, i cili është më i njohur nga tekstet e gjeografisë.


Rusia e një personi të shëndetshëm (projeksioni konik i Albers) dhe Rusia e një duhanpirësi (projeksioni Mercator)

Menaxhimi i përmbajtjes

Seksioni editorial i faqes nuk është shumë interesant. Paneli i zakonshëm i administratorit Django përdoret me personalizim minimal. Me burime të kufizuara zhvillimi, është më fitimprurëse të mësosh disa përdorues administratorë të përdorin një mjet standard sesa të harxhosh kohë duke krijuar një mjet vërtet të përshtatshëm.

Disa zgjidhje që e bëjnë jetën e redaktorit më të lehtë janë marrë nga projekte të tjera. Për shembull, një mjet për tipografinë e teksteve në anën e klientit. Tipografi ynë është i përshtatshëm sepse lidhet lehtësisht me çdo fushë të futjes së tekstit ose vargut. Informacioni në lidhje me gjendjen e autotipografisë (ndezur/çaktivizuar) ruhet si një karakter pa printim në fund të rreshtit dhe nuk varet në asnjë mënyrë nga pjesa e pasme.

Për të punuar me përmbajtje komplekse të postimeve dhe lajmeve, ne përdorim një redaktues blloku, i cili përdoret gjithashtu në shumë projekte të tjera:

Ka lloje të ndryshme blloqesh, secili projekt ka grupin e vet. Çdo bllok përmban përmbajtje dhe mund të përmbajë cilësime. Të dhënat e bllokut ruhen në bazën e të dhënave në formën e json, dhe shënimi brenda bllokut të tekstit ruhet në formatin markdown.

Për shfaqje, blloqet konvertohen në formatin e kërkuar: HTML për një postim, tekst për indeksim, RSS ose XML për Yandex.Zen, JSON për një aplikacion celular, etj. Në këtë mënyrë marrim rezultate të parashikueshme në çdo pajisje me formatim mjaft kompleks të përmbajtjes.

Versioni i parë bazohej në kodin Sir Trevor. Më vonë, kur kodi i spagetit të Sir Trevor u bë i vështirë për t'u ruajtur, redaktori u rishkrua në React.

Analiza

Gjëja më interesante nga pikëpamja teknike ndodh në zonën e administrimit të faqes. Prej aty ndoqëm rrjedhën e regjistrimeve.

Në fillim, analitika ishte mjaft primitive: grafikët e numrit të regjistrimeve të llojeve të ndryshme me kalimin e kohës. Por ne donim të shihnim dinamikën sipas rajoneve dhe të gjurmojmë ndikimin e ngjarjeve të ndryshme në numrin e regjistrimeve. Kështu u shfaq analitika e shumëpritur:


Ky ekran përmban informacion përmbledhës për të gjithë jetën e sitit, një orar për një periudhë të caktuar dhe një listë të ngjarjeve për këtë periudhë. Ju mund të nënvizoni një kulm në tabelë dhe të përpiqeni të kuptoni se çfarë ngjarje e shkaktoi atë. Më shpesh, ky është publikimi i një video tjetër me një hetim në kanalin YouTube të Navalny. Rritja më e madhe e nënshkrimeve erdhi nga videot për makinacionet e zyrtarëve rajonalë.

Grafiku është bërë në d3.js, dhe filtrimi i ngjarjeve sipas kohës dhe selisë zbatohet duke përdorur bibliotekën Crossfilter. Kjo zgjidhje ju lejon të operoni në anën e klientit pa vonesa të ndërfaqes me të dhënat e regjistrimit për një interval prej më shumë se një viti në rritje prej 1 ore. Aktualisht kjo është 12 megabajt të dhëna (1.3 MB në gzip).

Një raport i vogël me tekst me treguesit kryesorë të bazës së regjistrimit dhe sukseseve për një ditë më parë u dërgohej automatikisht çdo ditë të gjithë pjesëmarrësve të projektit.

Qyteti dhe rajoni

Ne gjithashtu kemi një tabelë të madhe ku janë renditur treguesit kryesorë të përgatitjes për mbledhjen e nënshkrimeve për secilin rajon të Rusisë:

Numrat në këtë tabelë në fillim nuk donin të konvergjonin. Totali sipas qyteteve ishte dukshëm më i vogël se numri i regjistrimeve. Doli që kur plotësoni një pyetësor në faqen e internetit, njerëzit papritur shpesh bëjnë gabime në emrin e qytetit të tyre ose përdorin emra jo standardë:

Moskë - 2.5% gabime dhe 579 ndryshime drejtshkrimore;
- Shën Petersburg - 12,6% gabime dhe 767 ndryshime drejtshkrimore;
- Komsomolsk-on-Amur - më shumë se 20% gabime dhe shkurtesa, 75 opsione.

Një vlerësim i gabuar i numrit të mbështetësve mund të çojë në planifikim të gabuar të rrjetit të selisë dhe ngjarjeve të fushatës. Më duhej të mendoja se si ta ktheja hyrjen e përdoruesit të emrit të qytetit në një emër standard rajoni. Për një formë kaq të thjeshtë, nuk doja të përdorja mekanizmat e plotësimit automatik sipas KLADR ose FIAS. Prandaj, ne morëm një listë të 700 qyteteve më të mëdha në Rusi, shtuam një listë të drejtshkrimeve tipike ("spb", "n-sk") dhe bëmë një kërkim të lirë mbi to, duke i renditur ato sipas distancës Levenshtein (kjo është një masë e ndryshimi midis dy grupeve të personazheve).

Ne e klasifikuam çdo qytet në listë në një nga tre kategoritë bazuar në distancën me selinë më të afërt: selia është në qytet, selia është afër (aglomerimi urban), selia është larg. Distanca nga selia është marrë parasysh gjatë vlerësimit të numrit të personave që do të vinin dhe do të firmosnin në kohën e duhur. Në analitikë, ne numëruam veçmas të gjithë nënshkruesit dhe ata "të disponueshëm" (email i konfirmuar, jeton në qytet me seli ose afër).


Ky grafik tregon se si fushata u bë gjithnjë e më rajonale me kalimin e kohës. Pjesa e regjistrimeve të reja nga Moska dhe Shën Petersburg u ul nga 35% në 15%.

SMS dhe postë

Një tjetër vështirësi teknike ishte dërgimi i SMS-ve dhe letrave. Portat nuk dërgojnë shumë mirë mesazhet, veçanërisht në numrat e huaj. Por ne donim bazën më të pastër dhe autentike të mbështetësve, kështu që pjesa e dytë e formularit të regjistrimit kërkonte verifikimin e numrit të telefonit me SMS. Për dërgim të besueshëm, ne rrotulluam tre porta: nëse mesazhi nuk dërgohej, atëherë ai dërgohej përsëri përmes një porte tjetër. Përveç kësaj, portat individuale mund të fiken në rast të dështimeve nga ana e tyre. Normat e dërgimit të kodit SMS janë një nga parametrat e monitoruar:

Grafiku tregon se portat dështuan dy herë. Përqindja e SMS-ve të dërguara ra ndjeshëm në datat 21 shkurt dhe 17-18 prill për shkak të dështimeve në radhën e dërgimit të mesazheve. Dhe më 15 korrik ndryshuam paraqitjen e formularit të regjistrimit, kjo vërehet edhe në grafik.

Ne dërgojmë një numër të madh letrash në një bazë të dhënash me më shumë se 700 mijë adresa emaili. Dikush është i abonuar në lajme, dikush duhet të marrë një njoftim për ngjarjen. Për më tepër, çdo adresë duhet të konfirmohet sipas rregullave të 2-zgjedhjes (kjo është kur letra e parë përmban një lidhje që duhet të klikoni për të konfirmuar abonimin tuaj në buletinin). Në fillim të fushatës, ne përdorëm shërbimin ActiveCampaign, por ishte i shtrenjtë dhe tepër i ngadalshëm. Kur baza e të dhënave tejkaloi 300 mijë kontakte, u bë e pamundur të punohej. Prandaj, ne shkruam shërbimin tonë CRM / postimi, i cili ju lejon të krijoni lista postimesh dhe zinxhirë letrash bazuar në mostrat e kërkuara. Mailgun aktualisht përdoret për të dërguar letra.

Radhët e shtyra të detyrave

Dërgimi i postës ose SMS përmes API-së së shërbimeve të palëve të treta është një operacion që kërkon një kohë të konsiderueshme. Operacione të tilla duhet të kryhen në mënyrë asinkrone në mënyrë që të mos ngadalësohet ndërfaqja e përdoruesit ose të mos ngarkohet i gjithë aplikacioni. Fillimisht, të gjitha detyrat asinkrone funksionuan përmes Selinos me Redis si ndërmjetës. Çdo email ose mesazh SMS krijoi një detyrë në radhën e Selinos, pas së cilës një punëtor i lirë e përpunoi këtë detyrë. Por kjo qasje doli të ishte jo e besueshme dhe shumë intensive me burime.

Pasi morëm më shumë se 10 mijë regjistrime në një orë (jo, nuk u shfaqëm në TV, ishte një fushatë "+1"). 10 Punëtorët e Selinos nuk mund ta përballonin këtë, përdoruesit filluan të vërejnë një vonesë të konsiderueshme në marrjen e SMS dhe postës.

Pas këtij incidenti, ne braktisëm Selinën në favor të një radhe të thjeshtë të bazuar në PostgreSQL. Detyrat nga radha u renditën sipas "daemonëve" në Python, një për çdo kanal të dërgimit të mesazhit. Një herë në çdo 10 sekonda, daemon merrte një grup detyrash nga radha dhe i dërgoi të dhënat në një grup në API-në e postimit. Grupimi i detyrave reduktoi rrënjësisht ngarkesën në server dhe përdorimi i një radhe shtëpie e bëri korrigjimin dhe monitorimin jashtëzakonisht të thjeshtë.

Selino doli të ishte një mjet shumë kompleks për detyrën tonë. Kërkon konfigurim dhe monitorim të kujdesshëm përmes shërbimeve të jashtme si Flower, i cili vetë konsumon shumë burime. Në projekte të tjera ne përpiqemi të përdorim një zgjidhje më të thjeshtë - RQ + Redis.


Krahasimi i kompleksitetit të RQ dhe Selinos nga një artikull për punën me detyra asinkrone.

Procesi i zhvillimit

Si funksionon procesi i krijimit të faqes së internetit Navalny 20!8 nga këndvështrimi i zhvilluesve? Ne nuk i përmbahemi asnjë metodologjie, por përdorim qasje nga sisteme të ndryshme. Për shembull, menaxherët vendosin detyra në Trello me një strukturë të ngjashme me një bord Kanban dhe zhvilluesit përdorin praktika individuale të Programimit Ekstrem.

Përafërsisht gjysma e ekipit është e vendosur në zyrën e Moskës, dhe pjesa tjetër punon nga distanca. Punonjësit e Moskës mund të marrin pjesë në takimet e fushatës në mënyrë që të mos punojnë për të kuptuar më mirë pamjen e përgjithshme, por ne diskutojmë veçmas detyrat e departamentit të IT. Thirrjet e rregullta i lejojnë të gjithë të sinkronizohen dhe të kuptojnë drejtimin kryesor të punës në çdo moment.

Shumica e pjesëmarrësve të projektit punojnë në të me kohë të plotë, por disa detyra u kryen nga zhvillues të sjellë përkohësisht nga projekte të tjera, apo edhe nga vullnetarë. Për shembull, vullnetari Ilya krijoi pothuajse plotësisht një hartë të selisë për faqen kryesore.

Kodi burimor ruhet në një depo git në platformën Bitbucket. Një degë e veçantë krijohet për çdo detyrë të re kryesore. Ne nuk krijojmë një server për çdo degë; Pas testimit, zhvilluesi përgjegjës për detyrën i bën masterit një kërkesë tërheqjeje. Udhëheqësi i ekipit shikon kodin dhe, nëse gjithçka është mirë, fillon vendosjen. Për detyra të mëdha, zhvilluesit shkruajnë përshkrime të hollësishme të asaj që duhet të kontrollohet dhe çfarë mund të shkojë keq gjatë vendosjes.


Vendosja është organizuar shumë thjeshtë. Ne kemi një mjet që i përgjigjet një uebhook nga Bitbucket (ose një butoni nga ndërfaqja e tij), merr kodin nga dega e dëshiruar, e kopjon atë në server dhe ekzekuton skriptin e përditësimit atje. Skripti është i formatuar në një Makefile.

Kur ekzekutoni "make update", varësitë përditësohen, migrimet kryhen, skedarët statikë përpunohen pas dhe, nëse gjithçka shkoi mirë, serveri uwsgi riniset. Ne përpiqemi të bëjmë migrime në mënyrë që ata të mos thyejnë kodin e vjetër, kështu që në rast të gabimeve të vendosjes gjithçka vazhdon të funksionojë.

Zhvillimi filloi më 18 shtator 2016. Që atëherë, ka pasur 1228 angazhime, 200 kërkesa për tërheqje, vendosja është shtyrë në prodhim mbi 600 herë, dhe ka pasur 67 degë në depo (shumica prej tyre tani janë mbyllur).

Rreth dizajnit

Në ekipin e projektit, vetëm dy persona punonin vazhdimisht në dizajn (një drejtor arti me funksion produkti dhe një dizajner), ndërsa të dy ishin të përfshirë në mënyrë aktive në projekte të tjera të fushatës. Prandaj, qasja ndaj dizajnit ishte jashtëzakonisht utilitare.

Në hartimin e produkteve të IT-së, ne udhëhiqemi gjithmonë nga dy parime bazë:

1) Informacioni për përdoruesit më "dembel" dhe të papërfshirë duhet të jetë në vendin më të dukshëm (kështu, për shembull, përcaktuam vendet fillestare të blloqeve dhe seksioneve në faqe);

2) Sa më pak njerëz që përdorin produktin përfundimtar, aq më pak përpiqemi ta dekorojmë atë (kursim burimet e zhvillimit) dhe aq më shumë përpjekje mund të lejojmë për çdo përdorues (shpesh është më efektive të trajnohen disa njerëz sesa të humbim kohë duke zbatuar veçori të reja që do të kursejnë përpjekjet e përdoruesit ose do t'ju shpëtojnë nga gabimet).

Kjo është arsyeja pse sistemet tona të brendshme me përdorues të ulët përpiqen të duken si një kornizë teli të marrë në jetë dhe gjithçka me të cilën ndeshet një mbështetës i fushatës është pjesë e komunikimit të përgjithshëm vizual, rreptësisht i nënshtruar stilit të korporatës dhe sensit të përbashkët.

Një sistem IT për mbledhjen e nënshkrimeve është një projekt shumë kompleks, me shumë komponentë me burime të kufizuara, kështu që pjesa më e madhe e punës së projektuesve është bërë në letër, në takime dhe në Google Docs, dhe jo në një redaktues grafik (në rastin tonë, Skicë).

Ka shumë diagrame komplekse në projekt që thjesht dëshironi të vizatoni, dhe të gjitha mjetet elektronike për vizatimin e diagrameve që gjetëm në vend nuk na përshtateshin. Ndonjëherë përdornim draw.io, por më shpesh vizatonim drejtpërdrejt në letër. Diagramet më të rëndësishme të varura në tabelën e projektit. Aty ishin bashkangjitur edhe “bileta” në letër me pyetje për diskutim në takime.

Ne mblodhëm prototipe nga diagramet e letrës dhe skriptet e dakorduara me avokatët në marvelapp.com në mënyrë që të kontrollojmë edhe një herë logjikën dhe të sigurohemi që asgjë nuk është harruar. Vetëm pas kësaj paraqitjet u transferuan në zhvillim.

Në varësi të detyrës, u përdorën metoda të ndryshme kërkimi dhe projektimi. Pra, përpara se të bënim analizën e shumëpritur, ne zhvilluam një sërë intervistash me të gjithë përdoruesit e mundshëm të sistemit (nga shefi i stafit te personi që dërgonte postimet) dhe, bazuar në dëshirat e tyre, ne mundëm të bënim një ndërfaqe shumë e thjeshtë, e cila për një kohë të gjatë shërbeu si pulti i fushatës.

Në një faqe ne pamë fluksin e regjistrimeve, mund të shihnim ngjarjet që ndikojnë në të dhe zbuluam se si janë shpërndarë mbështetësit tanë nëpër qytete. Ne gjithashtu mblodhëm vlerësimet e qyteteve sipas numrit të nënshkruesve (kjo na lejoi të monitoronim efektivitetin e selisë dhe na tha nëse kishim zgjedhur qytetet e duhura për hapjen e selive të reja) dhe analitikë tabelore.

Për ndërfaqet e verifikimit dhe vetë mbledhjen e nënshkrimeve, shpejtësia e punës së operatorit ishte një përparësi absolute. Mbledhja kryhet në kushte të presionit akut të kohës, kështu që ne u përpoqëm të kursenim çdo sekondë dhe në të njëjtën kohë të zvogëlojmë numrin e gabimeve të mundshme të përdoruesit.

Sipas llogaritjeve tona, me numrin ekzistues të selisë dhe subjekt i një fluksi të vazhdueshëm njerëzish, çdo koleksionist duhet të kishte marrë jo më shumë se 6 minuta për person - nga "përshëndetje" deri në përfundimin e procedurës së grumbullimit.

Verifikimi dhe mbledhja e nënshkrimeve përmes një sistemi IT është një procedurë e shpikur plotësisht nga ne, ndaj ne zgjodhëm testimin MVP tek përdoruesit realë të sistemit si metodën kryesore për testimin e zgjidhjeve tona. Pra, ne testuam protokollin bazë dhe ndërfaqen e parë të verifikimit te punonjësit e selisë së Moskës, dhe më pas shkuam në tre qytete të ndryshme (Shën Petersburg, Chelyabinsk dhe Ulyanovsk) për të vëzhguar përdoruesit e vërtetë në procesin e punës. Për projekte të tilla, kjo është mënyra më e mirë për të bërë shpejt një listë të gjërave dhe rasteve të përdoruesve që mund të jenë harruar ose të mos ishin parashikuar në fazën e projektimit dhe zhvillimit.

Pas ndryshimeve të vogla në ndërfaqe, verifikimi u nis në të gjitha selitë e fushatës. Si rezultat, ne arritëm të reduktojmë kohën e përpunimit të një pyetësori në një e gjysmë deri në dy minuta për person.

Testimi

RobotFramework u përdor për testimin e automatizuar. Për të mbuluar funksionalitetin më kritik të projektit, u shkruan testet e pranimit dhe funksionale dhe u konfigurua nisja automatike e tyre. Jenkins u përdor si sistem CI.

Funksioni më i rëndësishëm i faqes është regjistrimi i përdoruesit, i cili përfshin konfirmimin e telefonit përmes kodit SMS. Për të testuar mesazhet me kode, u konfigurua një modem GSM me një kartë SIM testuese dhe një yll. Kodi SMS u dërgua në postë, nga ku ishte tashmë i disponueshëm për testim.

Gabimet e zbuluara u shtuan në Trello si detyra për zhvilluesit.

Infrastruktura e serverit

Faqja e internetit Navalny 20!8 vazhdon të funksionojë dhe gradualisht po bëhet vendi i fushatës së grevës së votuesve, kështu që embargoja e informacionit nuk është hequr ende dhe historia do të jetë e shkurtër. Pjesa e serverit përbëhet nga tre nivele: backend, proxies caching dhe servers edge. Të gjitha konfigurimet menaxhohen përmes kuzhinierit, kështu që një server me çdo rol mund të instalohet shpejt në një makinë të re virtuale.

Backend-i drejton një bazë të dhënash dhe shembuj aplikacioni, secili aplikacion në makinën e tij virtuale dhe me IP-në e vet. Të gjithë serverët ekzistojnë në disa kopje dhe baza e të dhënave riprodhohet në modalitetin master-slave në një makinë tjetër.

Serveri proxy ka të instaluar Varnish, i cili ruan kërkesat në adresa të caktuara dhe kufizime të ndryshme të varura nga URL. Nëse backend-i dështon, faqja mund të funksionojë për një kohë të pacaktuar nga një server proxy vetëm mekanizmi i regjistrimit të përdoruesit;

Serverët Edge kryejnë caching statik dhe përfundimin SSL (më pas trafiku kalon përmes rrjetit VPN). Thelbi i këtyre serverëve është të shpërndajnë pjesën më të madhe të trafikut dhe të mbrojnë pjesën tjetër të infrastrukturës nga sulmet. Këto janë makina virtuale të dobëta me një kanal gigabit në qendra të ndryshme të të dhënave. Ngarkesa shpërndahet nga balancimi DNS. Serverët Edge përmbajnë një minimum konfigurimi dhe, nëse është e nevojshme, mund të instalohen lehtësisht në pak minuta. Trafiku maksimal i dobishëm që kishim në serverët e skajshëm ishte 5 Gbps për disa orë.

Imazhet, stilet, javascript, të dhënat json ruhen në atë mënyrë që emri i skedarit të përfshijë një hash të përmbajtjes së këtij skedari (për shembull, style.28fa1c7b1761.css), kështu që të gjithë këta skedarë mund të ruhen përgjithmonë në server dhe në shfletuesin. Pjesa më e madhe e trafikut dërgohet nga serverët e skajshëm. Pastaj kalojnë vetëm kërkesat për faqet e përmbajtjes, dhe kjo është rreth 25 herë më pak të dhëna.

Ndonjëherë CloudFlare lidhet në vend të serverëve të skajit, por ne përpiqemi të kthehemi te serverët tanë, pasi CloudFlare nuk ka gjithmonë akses të mirë nga Rusia. Disa ofrues, madje edhe më të mëdhenjtë, fillojnë rregullisht të bllokojnë IP-në e tyre (gjurmët e Roskomnadzor).

konkluzioni

Mbledhja e nënshkrimeve në stilin tradicional (pa një sistem të veçantë IT, me letër, stilolaps dhe tabela Excel) është si të fluturosh një balonë në Hënë: po, nëse merr mjaft balona, ​​mund edhe të ngrihesh dhe të fshihesh në re, por ende arritja e qëllimeve në këtë mënyrë është fizikisht e pamundur.

Për të mbledhur nënshkrime të tilla që komisioni zgjedhor do të detyrohej t'i pranonte edhe nga një kandidat i padëshiruar, filluam të ndërtojmë këtë infrastrukturë komplekse. Në këtë kapitull folëm për detyrën e vendosur para nesh dhe përgatitjen për zgjidhjen e saj.

Artikulli përshkruan zgjedhjen dhe konfigurimin e pajisjeve të rrjetit të selisë, zhvillimin e skanerit tuaj të dokumenteve dhe organizimin e mbikëqyrjes video të ambienteve të selisë.

Kapitulli i tretë do të përshkruajë procesin e krijimit të aplikacioneve për mbledhjen e nënshkrimeve dhe gjithçka që lidhet me punën me fletët e nënshkrimeve fizike.

Kapitulli i katërt flet për menaxhimin e projektit, ekipin, afatin kohor dhe pak për rezultatet.

Etiketa:

  • xhango
  • Navalny
  • dizajni i ndërfaqes
  • zhvillimin e faqes në internet
  • 20!8
Shto etiketa

"Për momentin kjo është një histori PR"

Opozitari Alexey ka mbledhur 300 mijë nënshkrime të nevojshme për të regjistruar kandidaturën e tij për zgjedhjet presidenciale të Rusisë 2018. A do të lejohet tani të marrë pjesë në zgjedhje?

Sipas ligjit "Për zgjedhjet e Presidentit të Federatës Ruse" (Nr. 19 - Ligji Federal i 10 janarit 2003), një kandidat është një kandidat i vetë-nominuar (d.m.th., një kandidat që nuk është propozuar nga parti politike) duhet t'i sigurojë Komisionit Qendror të Zgjedhjeve të paktën 300 mijë nënshkrime zgjedhësish, jo më shumë se 7500 prej tyre për qark. Teknologjikisht, Navalny e përfundoi detyrën - ai njoftoi se kishte mbledhur tashmë 335,782 nënshkrime në jo më pak se 40 rajone të vendit. Megjithatë, ato nuk kanë fuqi ligjore.

“Nënshkrimet e mbledhura përpara emërimit dhe përpara hapjes së një llogarie zgjedhore nuk janë të vlefshme,” na tha Andrei Buzin, një ekspert në fushën e legjislacionit zgjedhor. Le të shpjegojmë. Sipas të njëjtit ligj “Për zgjedhjet presidenciale”, emërimi i kandidatit bëhet jo më vonë se 20 ditë nga data e publikimit zyrtar të vendimit për shpalljen e zgjedhjeve. Tani për tani ato janë planifikuar për përvjetorin e aneksimit të Krimesë, 18 mars 2018.

Megjithatë, sipas Kushtetutës, zgjedhjet presidenciale do të shpallen zyrtarisht nga Këshilli i Federatës jo më herët se 100 ditë dhe jo më vonë se 90 ditë para ditës së votimit, pra në dhjetor të këtij viti. Prandaj, Alexey Navalny do të jetë në gjendje të emërojë zyrtarisht kandidaturën e tij për zgjedhjet presidenciale dhe të fillojë mbledhjen e nënshkrimeve vetëm në dhjetor. Nëse një politikan paraqet dokumentet e emërimit në të njëjtën ditë që Këshilli i Federatës shpall zgjedhjet, atëherë ai do të ketë nga 55 deri në 45 ditë për të mbledhur nënshkrime. Nëse mbledh brenda kësaj kohe sasia e kërkuar, KQZ do të kontrollojë vërtetësinë e tyre dhe do të vendosë për regjistrimin si kandidat.

Vetë Navalny është i vetëdijshëm se nënshkrimet e mbledhura tani nuk mund të përdoren kur dorëzohen dokumentet në KQZ. Në faqen e tij të internetit, ai shkroi se për të "mbledhur sasinë e kërkuar shpejt dhe me efikasitet në orën X", çdo nënshkrim është një e-mail, numër telefoni dhe një pyetësor i shkurtër i një votuesi të mundshëm.

Megjithatë, është shumë herët të flitet për regjistrimin e Navalny si kandidat. Çështja nëse ai do të jetë në gjendje të propozojë kandidaturën e tij për zgjedhjet presidenciale është ende e pazgjidhur. Pas vendimit në rigjykimin e çështjes Kirovles, opozitari u gjend në një pirun ligjor. Nga njëra anë? është dënuar me burgim, që do të thotë se me ligj nuk ka të drejtë të marrë pjesë në zgjedhje. Nga ana tjetër, ai ka ende mundësi ta kundërshtojë këtë dispozitë të ligjit në Gjykatën Kushtetuese.

Kreu i Qendrës për Reforma Ekonomike dhe Politike, Nikolai Mironov, beson se Navalny ka mbledhur nënshkrime për të treguar peshën e tij politike dhe se ai është në gjendje ta bëjë këtë në të ardhmen.

“Kjo është një mënyrë presioni”, tha politologu i MK. - Unë mendoj se ky është një sinjal për të tjerët grupet sociale në mënyrë që ta mbështesin, dhe sponsorë të ndryshëm. Por ne nuk dimë asgjë për cilësinë e këtyre nënshkrimeve.” Eksperti vuri në dukje se një politikan i promovuar mirë mund të mbledhë 300 mijë nënshkrime, por kjo është shumë e vështirë. “Përderisa kjo histori është jashtë procesit zgjedhor, është për PR”, thotë politologu. - Kur do të mblidhen firmat e vërteta, gjithçka do të varet komisionet zgjedhore. Në një fazë ai mund të ndërpritet, por, me sa kuptoj, nuk ka asnjë skenar të gatshëm për pjesëmarrjen e Navalny në zgjedhje.”



 
Artikuj Nga tema:
Trajtimi i manisë së përndjekjes: simptoma dhe shenja A mund të largohet mania e përndjekjes me kalimin e kohës?
Mania persekutuese është një mosfunksionim mendor që mund të quhet edhe deluzion persekutues. Psikiatrit e konsiderojnë këtë çrregullim si shenjat themelore të çmendurisë mendore. Me mani, psikiatria kupton një çrregullim të aktivitetit mendor,
Pse keni ëndërruar për shampanjën?
Çfarëdo që shohim në ëndrrat tona, gjithçka, pa përjashtim, është simbol. Të gjitha objektet dhe fenomenet në ëndrra kanë kuptime simbolike - nga të thjeshta dhe të njohura në të ndritshme dhe fantastike, por ndonjëherë gjërat e zakonshme, të njohura kanë një kuptim më të rëndësishëm se
Si të hiqni irritimin e mjekrës tek gratë dhe burrat Acarimi i lëkurës në mjekër
Njollat ​​e kuqe që shfaqen në mjekër mund të shfaqen për arsye të ndryshme. Si rregull, pamja e tyre nuk tregon një kërcënim serioz për shëndetin, dhe nëse ato zhduken vetë me kalimin e kohës, atëherë nuk ka arsye për shqetësim. Në mjekër shfaqen njolla të kuqe
Valentina Matvienko: biografia, jeta personale, burri, fëmijët (foto)
Mandati *: Shtator 2024 Lindur në Prill 1949.