Aleksey Navalnının namizədliyinə imza atacağam. Navalnı prezident seçkilərində iştirak etmək üçün etibarsız imzalar toplayıb


Kampaniya +1. 1.000.000 imza toplayırıq

2018-ci il prezident seçkilərində namizəd irəli sürmək üçün lazım olan 300 min imzanı toplamaq bizə 4 ay çəkdi. Yeni hədəfimiz bir milyondur və biz “+1” kampaniyasına başlayırıq.

Rusiya Federasiyasının qanunlarına görə, prezidentliyə namizəd kimi qeydiyyatdan keçmək üçün ərizəçi Mərkəzi Seçki Komissiyasına 300 000 təsdiqlənmiş imza təqdim etməlidir ki, bu da çox tez toplanmalıdır. qısa müddət. Yığım üçün cəmi 40 gün ayrılıb, bizdə isə ondan da azdır, çünki bu 40 gün Yeni il bayramlarına düşür. Əslində bu, hakimiyyətin yaratdığı növbəti süni maneədir. Bundan əlavə, imzalar ölkənin 40 regionunda toplanmalıdır - Rusiya Federasiyasının hər bir subyektindən 7500-dən çox olmamalıdır.


Foto: Evgeni Feldman

Tələb olunan 300 mini MSK-ya vaxtında təqdim etmək üçün bilməliyik ki, qərargahımızın açılacağı bütün rayonlarda 7500 imzaya arxalana bilərik. Və onların tam vaxtında və prosedura tam uyğun olaraq toplanacağını.

Kremlin seçkilərdə görmək istədiyi namizədlər kəsilmiş kağızları imza kimi götürəcək, biz bunu dəfələrlə görmüşük. İmzalarımıza mikroskop altında baxılacaq

Aleksey Navalnı


Foto: Evgeni Feldman

Çox güman ki, MSK Navalnının qərargahı tərəfindən təqdim olunan imzaları xüsusilə diqqətlə öyrənəcək - buna görə də biz özümüzü mümkün qədər sığortalamalı və protokolda nəzərdə tutulduğundan daha çox yığmalıyıq. Biz təkcə e-poçt ünvanlarını deyil, həm də Aleksey Navalnının namizədliyini dəstəkləməyə hazır olan hər kəsin telefon nömrələrini və qısa profillərini toplayırıq. Bu, ona görə edilir ki, biz dəqiq bilək ki, bizim tərəfdarlarımız hansı bölgələrdə və neçə nəfərdir.

Ətrafınızda müstəqil müxalifət namizədini dəstəkləmək istəyən çoxlu insan dənizi var. Ən azından seçkilərdə rəqabət səbəbiylə. Hətta zaputinilər də rəqabəti dəstəkləyir və müstəqil namizədləri seçki bülletenində görmək istəyirlər

Aleksey Navalnı


Növbəti hədəfimiz bir milyon imzadır ki, bu da ilin sonunda bizə lazım olan 300 000 imzanı təmin edəcək. Bunun üçün biz “+1” kampaniyasına start veririk və artıq saytda qeydiyyatdan keçmiş hər kəsi ən azı daha bir nəfəri qeydiyyatdan keçməyə razı salmağa çağırırıq. Və ya daha yaxşısı, iki və ya beş - və sonra tələb olunan milyon yaya qədər əldə ediləcək.

İndi həqiqətən köməyinizə ehtiyacımız var. Zəhmət olmasa vaxtınızın 10-15 dəqiqəsini sərf edin və dostlarınızdan, qohumlarınızdan və ya iş yoldaşlarınızdan birini imzalamağa təşviq edin.


Foto: Evgeni Feldman

Sosial şəbəkədə bir neçə dostunuza məktub və ya mesaj yazın:
"Salam. Navalnının namizəd kimi irəli sürülməsinə imza atdım. Siz də verə bilərsiniz? düz olacaq"

Aleksey Navalnı

Artıq qeydiyyatdan keçən 385,531 nəfər nəhəng qüvvədir. Gəlin bundan maksimum yararlanaq. "+1" kampaniyasına qoşulun.

Abunə vərəqi sistemimizdə əsas sənəddir. Böyük bir obyekt toplusu ilə işləyərkən etmək istədiyiniz ilk şey, hər bir obyekti verilənlər bazasındakı qeydlə əlaqələndirmək üçün onlara unikal identifikator təyin etməkdir. Amma imza vərəqəsinin forması qanunla çox ciddi şəkildə müəyyən edilib, onun hər hansı pozulması bütün namizədin imzalarını rədd etmək üçün əsasdır. Seçki komissiyasına təqdim edilmiş vərəqdə lazımsız işarələrə və ya simvollara yol verilmir.

Novosibirskdə imzaları toplayarkən hər bir vərəqi bir multiforaya (şəffaf "fayl") yerləşdirdik, üzərində vərəq ID-si və bütün xidmət qeydləri markerlə yazılmışdır. Bu, dörd min vərəq üçün işlədi, lakin yüz minlərlə vərəq üçün işləməyəcək. Bu dəfə biz multiforların istifadəsini etibarsız və əlverişsiz bir həll hesab etdik.

Hüquqşünaslar imza vərəqinin formasını pozmadan hər bir vərəqi müəyyən etməyə imkan verən bir üsul icad etdilər. Qanun abunə vərəqinin fiziki ölçüsü haqqında heç nə demir. Bu, bizə vərəqi elə tərtib etməyə imkan verdi ki, identifikasiya kodları onun yuxarı hissəsində tətbiq edilsin və seçki komissiyasına təqdim edilməzdən əvvəl sadəcə kəsildi.

Vərəq kodu 6 simvoldan ibarətdir. Kiril əlifbasında qrafik analoqları olan latın rəqəmlərindən və hərflərindən istifadə edə bilərsiniz (istənilən tərtibatda yaza biləcəyiniz formalarda). Rahatlıq üçün ayırıcılar əlavə etdik: 91−X7−BA.

Eyni identifikator işin müxtəlif mərhələlərində avtomatik tanınması üçün QR kodu kimi çap olunur. QR kodları etibarlılıq və tanınma sürəti baxımından bütün digər barkod növlərini üstələyib.

Qərargahın həyatı çətinliklərlə doludur, buna görə də QR kodları vərəqlər üçün müxtəlif stresli vəziyyətlərdə diqqətlə sınaqdan keçirilmişdir...

... və üç kodun hər hansı bir canlı yarpağı emal etmək üçün kifayət edəcəyinə qərar verdi.

Hüquqşünaslar və dizaynerlər planın həm qanuna, həm də sağlam düşüncəyə uyğun olmasını təmin etmək üçün çox çalışdılar. Vərəqdəki imzaların sayı ayrıca yoxlanılıb. Az sayda imza - çoxlu vərəqlər, çoxlu lazımsız yazılar (kollektordan və səlahiyyətli nümayəndədən məlumatlar), sertifikatlaşdırmada daha çox səhvlər. İmzalar çoxdur - seçici məlumatlarını daxil etmək əlverişsizdir, imza sətirlərində daha çox səhvlər var. Prototiplərlə təcrübə etdikdən sonra beş imza üzərində qərarlaşdıq.

Hər bir vərəq (daha doğrusu, vərəq identifikatoru) verilənlər bazasında yaradılır, bundan sonra onu A4 kağızında çap etmək olar. Ancaq sadəcə bir vərəq götürüb ən yaxın printerdə çap edə bilməzsiniz. Qanuna görə, imza vərəqələrinin hazırlanması namizədin seçki hesabından ödənilməlidir. Onlar adətən kənar podratçı tərəfindən istehsal olunur. Buna görə də, texniki tərəfi mümkün qədər dost və çevik etdik. Vərəqlər ya birbaşa brauzerdən çap olunur, ya da hər hansı rahat şəkildə podratçıya ötürülə bilən çox səhifəli PDF faylında əvvəlcədən saxlanılır.

Sych: imza toplamaq üçün hazırlıq

İmza vərəqələrində fiziki imzaların toplanmasına yalnız namizəd irəli sürüldükdən və xüsusi seçki hesabı açıldıqdan sonra başlana bilər. Qanun bunun üçün çox az vaxt verir. Bütün prosesləri aradan qaldırmaq və seçkilərin rəsmi elanından sonra işi mümkün qədər sürətləndirmək üçün əvvəlcədən mümkün qədər çox əməliyyat keçirməyimiz vacib idi. Tərəfdarlarımızın məlumatlarını ilkin yoxlamaq, qərargahları öyrətmək və toplama mexanikasını sınaqdan keçirmək üçün biz yoxlama proseduruna başladıq.

Doğrulama imza toplamanın beta versiyasıdır: real qərargahda, eyni avadanlıqla, sənədlərin eyni ciddi yoxlanışı ilə, lakin imzanı kağız vərəqə qoymadan. Sych tətbiqi təsdiqlənmiş insanların məlumatları ilə işləmək üçün hazırlanmışdır.

Sych tərkibi

RESTful API ilə backend: Python 3.6, aiohttp, aiohttp_admin, SQLAlchemy.
Verilənlər bazaları: PostgreSQL, Redis.
Bildiriş demonu.
Pasport nömrəsinin tanınması iblisi.
Analitika qurmaq üçün daemon.
Pasportun nömrəsinə görə yoxlanılması xidməti.
Ünvanlarla işləmək üçün Kladr-API-nin qutulu versiyası (PHP 5.6 + MongoDB).

Sych üçün RESTful API ilə ayrıca backend etmək qərarına gəldik, çünki onu bir neçə xidmətlə, o cümlədən Navalny 20!8 vebsaytı ilə inteqrasiya etməyi planlaşdırdıq. Keşləmə üçün yaddaş kimi ayrıca PostgreSQL verilənlər bazası və Redis istifadə edilmişdir. İstifadəçiləri idarə etmək üçün ehtiyaclarımıza uyğun olaraq dəyişdirdiyimiz aiohttp_admin kitabxanasından istifadə edilmişdir.

Operatorun daxili interfeysi pasportun skan edilməsinin və şəxsi məlumatların doldurulmasının addım-addım formasıdır. Çox sayda mümkün vəziyyətə görə bu forma React-də yazılmışdır.

Navalny 20!8 veb-saytı ilə qarşılıqlı əlaqə nişanla qorunan və yalnız vasitəsilə əldə edilə bilən API vasitəsilə həyata keçirilib. yerli şəbəkə virtual maşınlar arasında.

Doğrulama üçün qeydiyyatdan keçin

Qərargahda iş yükünü zamanla bərabər paylamaq üçün yoxlama üçün görüş təyin etdilər. Saytda qeydiyyatdan keçdikdən sonra bir şəxs rahat qərargah və vaxt seçdiyi qeyd interfeysinə giriş əldə etdi.

İş yükünə nəzarət etmək, qeydləri və cədvəlləri idarə etmək üçün regional menecer və qərargah koordinatoru üçün ayrıca interfeys hazırlamışıq:

Qərargahda fövqəladə vəziyyət yaranarsa, koordinator gələcək yoxlama görüşlərini kütləvi şəkildə ləğv edə bilər. Bununla belə, o, bunu təkbaşına edə bilməz - o, regional menecerdən ləğvin təsdiq kodunu tələb etməlidir. Bu variantdan bir neçə dəfə istifadə etməli olduq.

Bildirişlər

Sych-də şaxələnmiş bildiriş sistemi tətbiq edilmişdir. İmza qoyan şəxs yoxlamaya yazıldıqda, görüşdən yayındıqda, görüş ləğv edildikdən bir həftə sonra, uğurlu yoxlamadan sonra, qərargah tərəfindən təyinatı ləğv etdikdən sonra və bir sıra digər hallarda poçt vasitəsilə bildiriş almalı idi.

Görüşün üç saat öncədən xatırlanması və qərargahın görüşü ləğv etməsi barədə SMS bildirişlər göndərilib. Bildiriş növbəsi Navalny 20!8 saytında olduğu kimi eyni prinsipə uyğun olaraq hazırlanmışdır: verilənlər bazasında poçt və SMS şlüzləri vasitəsilə qruplar şəklində göndərilən mesajlar olan cədvəllər.

Pasport məlumatlarının tanınması

Operatorların işini qiymətləndirmək və məlumat daxil edərkən səhvlərin faizini müəyyən etmək üçün biz əlavə skan tanınmasına sahib olmaq istədik. Pasportların dəyişkənliyinə görə etibarlı avtomatik tanınma mümkün deyildi, ona görə də iki variant nəzərdən keçirildi: istifadəçilərinin onları tanıması üçün skanları Yandex.Toloka-ya göndərmək və ya ofisdə bunu edəcək bir qrup könüllü işə götürmək. Lakin şəxsi məlumatların təhlükəsizliyi məsələsi hər iki variantı dayandırdı və biz yalnız pasport nömrəsi üçün avtomatik tanınma buraxdıq.

Analitika Sycha

Yoxlama zamanı biz nəinki öz tərəfdar bazamızı dəqiqləşdirib yoxladıq, həm də qərargahın işini, infrastrukturu, avadanlıqları və imza toplama mexanizmlərini sınaqdan keçirdik. Prosesi izləmək və onu düzəltmək üçün sadə bir analitika etdik.

Qərargah üç proses idarəçiliyinə malik olduğundan - qərargah koordinatorları (bir qərargahın işinə cavabdehdir), regional menecerlər (bir neçə bölgədə bir qrup qərargahın monitorinqi) və federal qərargahın rəhbərliyi (hər şeyi və hər kəsi izləyir), sistem məlumatları qruplaşdırdı. istifadəçilərin hər bir kateqoriyası üçün müxtəlif yollarla.

Əksər təfərrüatları qərargahın koordinatoruna göstərdik. O, bütün operatorların statistikasını və əsas göstəricilərin dinamikasını görürdü və onların əsasında idarəetmə qərarları qəbul edə bilirdi: daha çox və ya daha az operator yerləşdirmək, xəbərdarlıqları artırmaq, həftə sonları iş qrafikini dəyişmək, tez-tez səhvlərə yol verən işçilərin işdən çıxarılması və ya yenidən hazırlanması və s.

Biz regional menecerə lazımsız təfərrüatları əsirgəmədik və ilk ekranda o, öz qərargah qrupu üçün yalnız ən vacib şeyləri gördü: əsas göstəricilər, reytinqlər və problemli qərargah (həyəcan verici qırmızı ilə göstərilir). Qərargahı göstəriciləri orta səviyyədən N% aşağı olan, xroniki olaraq az yüklənmiş (əlavə bildiriş tələb olunurdu) və daxilolmaların sayı ilə həddən artıq yüklənmiş (bu o demək idi ki, bütün insanlar qeydiyyatdan keçə bilməz və operatorların sayı artırılmalıdır) göstəriciləri ilə “problemli” kimi təsnif etdik. .


Aşkar edilmiş problemi daha yaxşı başa düşmək üçün regional menecer asanlıqla hər bir qərargah üçün ətraflı statistikaya baxa və koordinator üçün mövcud olan bütün məlumatları görə bilər.

Federal qərargahın dərhal tam mənzərəni görməsi vacib idi, ona görə də biz əsas kampaniya göstəricilərini bir ekranda topladıq və yoxlamanın aparıldığı bütün şəhərlər üçün xülasə cədvəli yaratdıq. Cədvəldə məlumatların tam dəstinə baxmaq üçün maraqlandığınız qərargahı seçə bilərsiniz.

Ümumilikdə analitikada 50-dən çox göstərici nümayiş etdirilib. SQLAlchemy heç vaxt təmiz SQL-ə keçməyəcək və kodun oxunaqlı qalmasını təmin edəcək qədər çevik idi. Ən çox əmək tələb edən göstəricilər üçün biz onları əvvəlcə Redis-də yaddaşda saxladıq, lakin sorğular zamanı onları fonda vaxtaşırı hesablamaq və fayldan götürmək daha asan oldu.

Reaper 2018: imza toplama sistemi

Doğrulama prosesi ilə paralel olaraq imzaların toplanması sistemi də hazırlanıb. Novosibirskdə istifadə edilən və fiziki obyektlərlə - vərəqlər və imzalarla işləməyi bacaran sistemin arxitekturası əsas götürülüb.

Arxa tərəfdən, Reaper 2018 köhnə Reaper-in varisidir, lakin operator interfeysini yoxlama sistemindən aldı. Bəzi ekranlar Sych-in işi ilə bağlı rəyləri təhlil etdikdən sonra təkmilləşdirildi. Bundan əlavə, məlumatların yoxlanılmasının bir neçə səviyyəsi və vərəqlərin hərəkətini idarə etmək üçün interfeyslər əlavə edilmişdir.

Operator interfeysi

İmzanın əldə edilməsi prosesində operator seçicinin pasportunu skan etməli, blankı doldurmalı (qeydiyyat möhüründə göstərilən ünvanın tələb olunan formatda yazıla bilməyəcəyini nəzərə alaraq) imza vərəqinə məlumatları daxil etməlidir. sistemin təlimatları. Ancaq əvvəlcə seçicinin üç əsas şərtə cavab verib-vermədiyini yoxlamaq lazımdır:

1. Seçki zamanı onun yaşı 18-dən yuxarı olmalıdır.
2. Əgər seçici 20 və ya 45 yaşındadırsa, onun yeni pasportu olmalıdır.
3. Pasport etibarsızlar siyahısında olmamalıdır.

Etibarsız pasportların məlumat bazasını yoxlamaq sadə əməliyyat olsa da, onun da öz incəlikləri var. Məlumat bazası Daxili İşlər Nazirliyi tərəfindən öz internet səhifəsində yayılır. Əvvəllər seçkilərdən əvvəl nədənsə bu verilənlər bazasını yükləmək imkanını söndürmüşdülər, ona görə də biz hər gün əvvəlcədən verilənlər bazasının cari versiyasını yükləməyə başladıq (bunu söndürməyi unutmayın).

İndi verilənlər bazasında 110 milyondan çox qeyd (seriya və pasport nömrələri) var. Kiçik bir verilənlər bazası və indekslərlə tez axtarış etmək üçün aşağıdakı sxem icad edilmişdir: PostgreSQL-də bir milyon qeyddən ibarət bir cədvəl yaradılmışdır, onun əsas açarı pasport nömrəsidir (0-dan 999999-a qədər), ikinci sahədə isə bütün seriyalar var. bu nömrə üçün etibarsız pasportlar. Səsi azaltmaq üçün seriyalar ikili formata (hər biri iki bayt) tərcümə edildi və zlib istifadə edərək sıxıldı (sadəcə istədim). Əvvəlcə verilənlər bazası indekslər olmadan təxminən 1 GB yer tutur. Emaldan sonra indeks daxil olmaqla 260 MB alırıq. Bir rekord orta hesabla 15 ms-də yoxlanılır.

Etibarsız pasportlar bazasında yoxlamadan keçən şəxslərin pasportlarının 0,6%-i aşkar edilib. Bu o deməkdir ki, belə bir yoxlama olmasaydı, etibarsız imza limitinin 12%-ni təkcə bu tip xətaya sərf edərdik.

Vətəndaşın 20 və ya 45 yaşı olduğu, lakin pasportunu hələ dəyişmədiyi üçün pasportların 0,88 faizi bizə uyğun deyildi. Bu isə etibarsız imza limitinin daha 18%-ni təşkil edir.


Abunə vərəqəsində operator tərəfindən doldurulmuş 4 sütun var: tam adı, doğum ili, pasport nömrəsi və daimi qeydiyyat ünvanı. Bütün bu məlumatlar mümkün səhvləri yoxlamaq və düzəltmək üçün Reaperdən keçdi. Məsələn, ad və ata adı sahələrində yazı xətalarının axtarışı işləyir:

Ad göstərişləri üçün API-də dəyəri böyük siyahı ilə müqayisə edən və üç mümkün cavabı qaytaran metod var:

Hər şey qaydasındadır, belə bir ad var;
- oxşar ad var (belə və belə);
- naməlum ad (nadir ad və ya ciddi səhvlər yazılı).

Ayrı bir hekayə "e" hərfidir. Ondan istifadə edən pasportlar var, lakin əksər hallarda o, "e" ilə əvəz olunur, buna görə də pasport məlumatlarının hər hansı sahəsində "e" varsa, biz xəbərdarlıq göstəririk.

Sistem özü heç nəyi düzəltmir, yalnız məlumat verir. Operator və müfəttişlər belə hallara diqqət etməli və düzgün qərar verməlidirlər.

Sənədlərin skan edilməsi

Sənədlərin şəkillərini əldə etmək üçün biz öz istehsal etdiyimiz skanerlərdən və operator stansiyası kimi Raspberry Pi-dən istifadə edirik. Bu, ikinci fəsildə ətraflı təsvir edilmişdir.


Bu şəkil pasportun skanı deyil, təsadüfi məlumatlardan qrafik redaktorda toplanıb.

Şəkil müştəri tərəfində HTML 5 Canvas API-dən əldə edilir və serverə JPEG-dən ibarət base64 sətri kimi göndərilir. Front-end nöqteyi-nəzərindən skanerlər iki rejimdə işləyə bilər: USB veb-kamera və yerli alt şəbəkədəki kompüterdən video axını. Owl yalnız USB kameralarla işləyir, Reaper 2018 isə rejimlər arasında keçid etməyə imkan verir. Hansı skanerdən istifadə edəcəyini operator özü seçir.

Qonşu kompüterlərin video axınının seçilməsi ilə bağlı kiçik bir problem var idi: masalar və skanerlər köçürülə bilər, operatorlar isə oturacaqları dəyişə bilər. Növbəti dəfə operatorun yanında hansı skanerin olacağını bilmirik. Mən qərargahın alt şəbəkəsini çeşidləməli və operatora canlı skanerlərdən hər hansı birini seçmək imkanı verməli oldum. Lakin məlum oldu ki, skanerin video yayım serveri düzgün CORS başlıqlarını təyin etsə də (Access-Control-Allow-Origin: *), OPTIONS sorğularına cavab vermir. Brauzer qonşu hostlara ajax sorğularını qadağan edirdi, bu da axtarış üçün adi jQuery.ajax()-dan istifadə etməyi qeyri-mümkün edirdi. JSONP sorğuları da kömək etmədi, çünki onları proqramlı şəkildə ləğv etmək mümkün deyildi və bir neçə onlarla gözləyən sorğu səhifəni tamamilə blokladı. Şəkillər problemi həll etməyə kömək etdi. DOM-a teqlər əlavə etdik və onlara video axınının src-ni təyin etdik. Əgər şəkil axının ölçüsünə uyğun ölçüləri dəyişibsə, o zaman yayım canlı hesab edilib və operatora göstərilib.

Brauzerdə video axınının göstərilməsi təvazökar Raspberry Pi prosessorlarını nəzərəçarpacaq dərəcədə yükləyir, buna görə də biz “ekran qoruyucu” etməli olduq: 5 dəqiqəlik hərəkətsizlikdən sonra brauzer yayımı dayandırır.

Qeydiyyat yeri haqqında aktual məlumatları seçmək bizim üçün vacibdir. Pasportun ikiqat səhifəsində 6 möhür ola bilər, ancaq biri lazımdır. İnterfeys klaviaturadakı oxlardan istifadə edərək və ya önizləmədə istədiyiniz möhürü klikləməklə onu seçməyi təklif edir.

Hələ heç bir qeydiyyat olmaya bilər. Belə seçicilər boş bölgə və ünvan göstərilməklə ayrıca imza vərəqəsində qeyd edilir və qeydiyyat skanı buraxılır.

Ünvan emalı

İmza formasını doldurmağın ən çətin tərəfi seçicinin ünvanıdır. İmzanı etibarsız edən xətaların yarısından çoxu ünvanla bağlıdır.

Qeydiyyat ünvanı üçün qanuni tələblərin uzun bir siyahısı var. Misal üçün:

Bu, FIAS verilənlər bazasına (federal məlumat ünvan sistemi) uyğun ünvan olmalıdır;
- adı dəyişdirilmiş küçələr üçün köhnəsi pasportda olsa belə, yeni adlar göstərilməlidir;
- qanun qeyd edilməli olan ünvan obyektlərinin iyerarxiyası üçün müəyyən bir format müəyyən edir (məsələn, şəhər ərazisini göstərə bilməzsiniz).

Bunlar sadəcə əsas məqamlardır, lakin bir çox xırda şeylər də var ki, onların siyahısı seçki komissiyası ilə hər qarşılıqlı əlaqə ilə tamamlanır. Xırda tələblərə belə əməl edilməməsi seçki komissiyasının imzanı qəbul etməməsi üçün əsasdır.

Novosibirskdə imza toplanması zamanı “ünvan” sahəsi ilə bağlı şikayətlərə görə imzaların təxminən 3,5%-i etibarsız hesab edilib. Bu isə prezidentliyə namizədin irəli sürülməsi üçün imzalar üçün nəzərdə tutulan limitin 70%-ni təşkil edir.

Bütün tələbləri yerinə yetirmək üçün, düzgün format yaratmaq və kollektora abunə vərəqində nə yazmalı olduğunu göstərmək üçün hər bir ünvanı kompüterdən keçirməyə məcburuq.

Mümkün olduqca API-lərdən istifadə etməməyə çalışırıq. üçüncü tərəf xidmətləri, istifadəçilərimiz haqqında məlumat verməmək və API-nin ən vacib anda qəfil söndürüldüyü bir vəziyyətə düşməmək üçün. Ünvanlarla işləmək imza toplamaq üçün vacib funksiyadır, ona görə də biz FIAS verilənlər bazası üçün öz API-mizi yaratmalı olduq.

FIAS verilənlər bazasında hələ evlər və mənzillər haqqında kifayət qədər keyfiyyətli və tam məlumat yoxdur, buna görə də küçə səviyyəsində dayandıq. Bu formada, bütün əlavə konstruksiyaları olan verilənlər bazası təxminən 2 GB ağırlığında və PostgreSQL şəklində olduqca rahat yaşayır. Import üçün fias2pgsql deposundan dəyişdirilmiş skriptlərdən istifadə edilmişdir.

Universal ümumrusiya ünvan giriş forması üçün "şəhər", "küçə", "ev" sahələrini sadəcə edə bilməzsiniz, çünki bir çox müxtəlif ünvan formatları və ünvan obyektlərinin növləri var. Qeyri-adi formatın məşhur nümunəsi küçə adı olmayan evləri olan Zelenoqraddır. Ancaq inanın ki, milli miqyasda bu, kifayət qədər əhəmiyyətsiz bir hadisədir.

Bir sıra təcrübələrdən sonra üç sahəyə malik bir forma üzərində qərar verdik:

Rusiya Federasiyasının subyekti - həmişə mövcuddur, bu, ən başa düşülən sahədir;
- FIAS-a uyğun ünvan - FIAS daxilində verilmiş regionun ünvanları üçün avtomatik tamamlama ilə sahə;
- ev/bina/mənzil - daimi qeydiyyat möhürünə uyğun olaraq məlumatların dəqiq surətdə köçürüldüyü sətir.

Hüquqşünaslar ünvanların dəyişdirilməsi cədvəlini tərtib etdilər, onun köməyi ilə biz FİAS ünvanlarını seçki qanunvericiliyinə uyğun formata gətirdik. Çox vaxt ünvan elementlərindən birini istisna etmək lazım idi. Bəzi ünvanlar (qaraj kooperativləri, həyətyanı sahələr və digər oxşar obyektlər) tamamilə istisna edilib. İT departamentinə qaydaların əks olunduğu cədvəl, hüquq departamentinə isə cavab olaraq 44 növ ünvanın hər biri üçün 10 nümunə təqdim edilib.

Bir neçə belə təkrarlamadan sonra baza istifadəyə hazır idi.

Tapşırıqın texniki hissəsi gündə 1 milyon sorğu yükünə tab gətirə biləcək avtomatik tamamlama ilə rahat və sürətli axtarış təşkil etmək idi. Sfenks axtarış sistemi kimi istifadə edilmişdir. Sorğu lazımsız simvollardan təmizlənir və Sfenksə göndərilir və o, müəyyən edilmiş qaydalara uyğun olaraq obyektlərin tam ünvanlarını qaytarır.

Sfenks XML formatında yazılmış ünvan sahəsini indeksləşdirir. Bu saxlama formatı rahat oldu, çünki bütün metadata Sphinx-in axtarış üçün istifadə etmədiyi, lakin yaddaşda saxladığı və verilənlər bazasına əlavə giriş olmadan nəticələrə qaytardığı XML atributlarında gizlənə bilər. Ön tərəfdə bir yerdə bu atributlar gözəl bir ünvan çubuğu yaratmaq üçün istifadə olunur.

Həll rahat və sürətli oldu. Təklif API-yə bir sorğu 15-20 ms-də tamamlanır; arxa uç o qədər də güclü olmayan virtual maşında 300 eyni vaxtda əlaqəni asanlıqla idarə edə bilər.

Abunə vərəqinin doldurulması

İmzalar həmin mövzunun vərəqlərinə daxil edilməlidir Rusiya Federasiyası vətəndaşın daimi qeydiyyat ünvanı aid olduğu (və ya qeydiyyat olmadıqda bölgəsiz xüsusi vərəqlərdə). Biçən operatora hansı bölgənin vərəqinin götürülməsi lazım olduğunu bildirir və ona başqa bölgənin vərəqini imzalamağa icazə vermir.
Təsəvvür edin ki, siz belə bir problemi kompütersiz, müxtəlif bölgələrdən çoxlu adamların olacağı və bölgələrə görə sıralanmış boş vərəqləri olan sənədlər kabinetinin olmayacağı bir vağzalda imza toplamadan həll etmək istəyirsiniz. Pasportların təxminən üçdə birində qeydiyyat möhüründə bölgənin adı yoxdur və təsadüfi yoldan keçənlər oyunun qaydalarını bilmir və nəyisə asanlıqla qarışdıra bilirlər. Bu, çoxlu sayda səhvlərin mənbəyi kimi görünür ki, bu da qanuni 5%-lik hədd altında qəbuledilməzdir.

Abunə vərəqinin doldurulması mürəkkəb və məsuliyyətli prosedurdur. Vərəqdə imza sətirləri, toplayıcının sertifikatı və səlahiyyətli nümayəndənin imzası var. Bütün bu bloklar ciddi formal tələblərə uyğun olaraq tamamlanmalıdır. Doldurmağın hər mərhələsində bütün vərəqi və ya imzaların bir hissəsini etibarsız edə biləcək səhvlər mümkündür.

Biz ümumi səhvlərin ehtimalını azaldan operator iş ssenariləri hazırlamışıq. “Ev” bölgəsinin vərəqlərindəki sertifikat yazıları (imzaların təxminən 80%-i qərargahın yerləşdiyi rayondan olacaq) toplayıcı tərəfindən əvvəlcədən, sakit şəraitdə doldurulur. Bütün vərəq blokları üçün Reaper onların necə doldurulması lazım olduğunu dəqiq göstərir.


Doldurma interfeysi real abunə vərəqini təqlid edir Bu an operatorun qarşısındakı stolun üstündə uzanır. İşlənmiş sətirlər, doldurulacaq sütunlar, vərəq nömrəsi və daxil ediləcək böyük məlumatlar göstərilir.

Doldurulmuş sətir üçün operator öz statusunu göstərməlidir (bir xətti ilk dəfə uğurla doldurmaq həmişə mümkün olmur). Hər bir düzəliş və silinmə vərəqdə kollektorun qeydi və verilənlər bazasında müvafiq statusla müşayiət olunmalıdır.

Bütün vərəq doldurulduqdan sonra ona tarix və kollektorun imzası yapışdırılır. Vərəq yoxlama üçün təqdim olunur.

Qərargahda imzaların yoxlanılması, vərəqlərlə işləmək

Hər iş gününün sonunda, imzaları olan bütün vərəqlər axşam və ya gecə baş verən yoxlamaya gedir (qərargahımız kiçikdir, bütün prosesləri paralel aparmaq üçün sadəcə heç bir yer yoxdur). Müfəttiş (həmçinin namizədin səlahiyyətli nümayəndəsidir) hər bir vərəqə və hər bir imzaya baxır, onu pasportun skan edilmiş səhifələrinin fraqmentləri ilə müqayisə edir və bütün vacib elementləri yoxlama siyahısına uyğun yoxlayır. Səhvlər aşkar edilərsə, bu, xüsusi interfeysdə qeyd olunur.
Sertifikatlaşdırma qeydi ayrıca yoxlanılır. Sertifikatlaşdırma səhvləri xüsusilə təhlükəlidir, çünki onlar bir anda bütün vərəqə təsir edir. Bu cür səhvlər bütün etibarsız imzaların təxminən 9%-ni təşkil edir.

Bəzi səhvlər düzəldilə bilər, lakin imza sətirlərində yalnız kolleksiyaçı düzəlişlər edə bilər və o, axşam/gecə qərargahda olmadığı üçün düzəliş üçün lazım olan bütün məlumatlar elektron şəkildə ötürülür. Konteksti başa düşmək üçün əvvəllər xəttlə baş verən hər şeyi görmək lazımdır. Müfəttiş, operator və vəkil arasında belə bir “söhbət” yarandı.


Şəkildəki bütün adlar və digər məlumatlar uydurmadır

Səhvlər ölümcül görünürsə və ya hər hansı bir şübhə varsa, vərəqə vəkilə göndərilir. İmzalarda səhvlər olmadıqda və ya bütün düzəlişlər artıq aparılıbsa, müfəttiş səlahiyyətli şəxsi imzalayır və vərəqi mərkəzi qərargaha göndərir.

İfadələr və xoşbəxtliyin neyrofiziologiyası

Yoxlanılan xəttin vəziyyətini tez və dəqiq seçmək üçün biz ifadələr şəklində düymələrdən istifadə etdik. Bunun dərin neyrofizioloji səbəbləri var. Beynin görmə sistemi müəyyən görüntülərə cavab verən qədim, aşağı səviyyəli mexanizmlərə malikdir. Vizual sistem müxtəlif oriyentasiyalı düz xətt seqmentlərinə ən tez cavab verir, çünki xətlər ilkin vizual korteks tərəfindən asanlıqla aşkar edilir. İkinci dərəcəli vizual korteksdə, sadə həndəsi fiqurlar(bunu öyrənmək lazımdır) və üz sxemi. Üstəlik, təkcə üz deyil, əsas üz ifadələri də tanınır. Yəni ifadələr. Düz xətləri tanımaq kimi, bu da fitri bir qabiliyyətdir. Bu aşağı səviyyəli sistem sayəsində ifadələr mətndən daha sürətli və daha dəqiq tanınır.


İfadələr şəklində nişanlar müfəttişin imzaya verə biləcəyi statusların mənasına yaxşı uyğun gəlir: "yaxşı", "problemlər var", "pis". “Vəkilə göstər” ifadəsi ilə bağlı bəzi şübhələr var idi, lakin biz bunun öhdəsindən gəldik.

İfadələrin interfeysi humanistləşdirdiyi və bununla da operatorun həyatını bir qədər yaxşılaşdırdığına dair bir fikir də var. Bu vacibdir, çünki Operatorlar sistemimizlə işləmək üçün uzun saatlar sərf etməli və ayıq-sayıq qalmalı idilər.

Vərəqlərin göndərilməsi

Hazır vərəqlər hər gün mərkəzi qərargaha göndərilir. Çox vərəq ola bilər, bir neçə yüz. Hansı vərəqlərin hazır olduğunu və qərargahı tərk etdiyini dəqiq bilmək istəyirik, lakin onların əl ilə qeydiyyata alınması çox vaxt aparır və etibarsızdır. Göndərilən vərəqləri izləmək üçün mobil proqram yazılıb.

Bu, qərargahda işlənmənin bütün mərhələlərini keçməmiş vərəqi səhvən göndərməyə cəhd edərsə, yüzlərlə vərəqin və hesabatın kodlarını tez bir zamanda skan etməyə imkan verən bir rejimə malikdir. Bir vərəqi skan etmək 1-2 saniyə çəkir.

Skandan sonra vərəqlər qablaşdırılır və Moskvaya göndərilir.

Forma təfərrüatları

Bütün pasport məlumatları daxil edilir və monospace Source Code Pro Regular şriftində göstərilir. Orada sıfırı "O" hərfindən ayırmaq asandır və simvollar müasir pasportlarda çox istifadə olunanlara olduqca oxşardır.

Bütün formalar elə hazırlanmışdır ki, tablardan istifadə edərək sahələr və əsas düymələr arasında keçid edə biləsiniz. Giriş fokusu yalnız səhifə yükləndikdə deyil, həm də səhv mesajı bağlandıqdan sonra istədiyiniz sahədə olur. Modal dialoqlar diqqəti elə tutur ki, keçid yalnız onların idarəetmələri arasında baş verir.

Bütün düymələr basıldıqda qalıcı bir şey baş verir, bunu bütün görünüşü ilə göstərir. Məlumat göndərilərkən daxiletmə sahələri deaktiv edilir. Səhvlər olduqda, ətraflı izahatlar görünür.

Vərəqlərin logistika və fiziki saxlanması

Sənədləri ötürmək bəşəriyyətin inanılmaz uğur qazandığı fəaliyyətlərdən biridir. Deyəsən, dəftərxana ləvazimatları mağazasına gedə, "Federal" imza toplamaq üçün dəst ala və təfərrüatları düşünməyəsən. Ancaq bir problem var: bütün ofis həlləri çox bahadır. Hər bir qərargaha bir neçə on minlərlə rubla sənəd skaneri və yüz minə asma qovluqları olan şkaflar verə bilmərik, buna görə də hər mərhələdə bir şey icad etməli və qırıntılardan nəsə yaratmalı olduq.

Prosesin fizikası ilə bağlı bəzi faktlar

315 min imza təqdim etməliyik. Bunun üçün müxtəlif səhvlərə görə regional kvotalar və marjalar nəzərə alınmaqla 1 milyona yaxın imza toplanıb emal edilməlidir. Hər vərəqdə maksimum beş imza ola bilər, amma reallıqda hardasa 3-4 imza olacaq. Bu, bizə təxminən 300 min vərəq verir.

A4 kağız vərəqinin sahəsi 1/16 m²-dir.
Adi ofis kağızının sıxlığı 80 q/m², hər vərəqin çəkisi 5 q-dır.
500 vərəqdən ibarət paketin hündürlüyü boş vərəqlər üçün 4,5 sm, doldurulmuş vərəqlər üçün 6 sm-dən çoxdur.

Məlum olub ki, bütün yığılmış vərəqlərin çəkisi 1,5 ton olacaq və bir dəstəyə qatlandıqda onların hündürlüyü təxminən 36 metr olacaq.

Bütün bunları necə saxlamaq olar?

İmza vərəqələri çap olunur, imzalarla doldurulur, yoxlanılır, təsdiqlənir və hər gün mərkəzi qərargaha göndərilir. Bir qərargah gündə bir neçə yüz vərəq göndərir, buna görə də bu mərhələdə problem olmamalıdır.

Əyləncə mərkəzi qərargahdan başlayır. Orada regional qərargahdan vərəqləri qəbul etməyi və kolleksiyanın sonuna qədər onlarla işləməyi asanlaşdıracaq bir saxlama sistemi təşkil etməlisiniz. Yığım başa çatdıqdan sonra vərəqlər bölgələr üzrə qruplaşdırılmalı və seçki komissiyası üçün qovluqlara yapışdırılmalıdır.

Biz sadəcə olaraq vərəqləri sonsuz qalaqlara qoya bilmərik, çünki hüquqşünaslar istənilən vaxt müəyyən bir nümunə üçün bəzi vərəqləri çıxarmaq istəyə bilərlər. Hər bir vərəqin dəqiq harada yerləşdiyini bilməli, onu tez əldə edib geri qaytara bilməlisiniz.

Sürətli giriş üçün vərəqlərin fiziki verilənlər bazasının indeksləşdirilməsi sistemi icad edilmişdir. İndeks bir neçə səviyyədən ibarətdir: qərargah (qutu), qutu, qovluq. Arxivdəki qovluq ünvanı belə görünür: 77−1−15. Hər qovluqda 25 vərəq var (xüsusi qaydada).


Sol yuxarıdakı şəkildə kağız qovluqlarda 500 abunə vərəqi üçün bir qutu var.
Sağdakı şəkildə asma qovluqlarda 2000 vərəq çekmecesi göstərilir.

Vərəqlərin qəbulu və çeşidlənməsi

Bölgələrdən gələn bütün vərəqlər avtomatik ikitərəfli skaner vasitəsilə skan edilir (o, artıq ofisdə idi, ona görə də biz onu LEGO və Arduino-dan özümüz yığmaq məcburiyyətində deyildik). Bu cihaz nəticəni SFTP vasitəsilə serverə yükləyə bilər. Orada skanlar standart yerlərdə QR kodları axtaran, onları tanıyan və skanları ümumi verilənlər bazasına bağlayan python skripti vasitəsilə aparılır. Skript hətta büzülmüş vərəqləri etibarlı şəkildə emal edir.

Taramadan sonra vərəqlər çeşidlənməyə keçir. Hər bir vərəq mobil proqram (çeşidləmə rejimi) vasitəsilə skan edilir. Sistemdə vərəqi tapır, statusu "mərkəzi qərargaha gəldi" kimi dəyişir və vərəqin yerləşdirilməli olduğu qovluğun koordinatlarını göstərir. Operator vərəqi göstərilən qovluğa yerləşdirdiyini təsdiqləyir (əməliyyatı bağlayır).

Eyni bölgədən olan vərəqlər qovluqda yer olduğu müddətcə ardıcıl olaraq yerləşdirilir, buna görə də bütün proses çox tez baş verir.

Backend

Reaper 2018 standart şablon mühərriki və ORM ilə Djanqoda hazırlanır. Məlumat bazası kimi PostgreSQL istifadə olunur. Sistemin xidmət hissələri - FIAS, pasportun yoxlanılması, ilkin qeydiyyat məlumatları ilə iş - öz verilənlər bazası ilə ayrıca modullarda (django tətbiqi) yerləşdirilir.

İmzaların fiziki dünyası bir neçə sinif obyektləri şəklində təqdim olunur: imza vərəqi, vərəqdəki sətir, imza. Bu siniflərin obyektləri obyektin real dünyadakı vəziyyətini əks etdirən atributlara malikdir. Dövlətləri idarə etmək üçün biz sonlu dövlət maşını şablonundan və django-fsm kitabxanasından istifadə etdik. Dövlətlər arasında bütün keçidlər FSM əməliyyatları şəklində yazılır, bunun çərçivəsində obyektlə lazımi yoxlamalar və əlavə hərəkətlər aparılır.

Dövlət diaqramı belə görünür:

Vərəqin boşluqdakı mövqeyi onun daxil olduğu cərgələrin vəziyyəti ilə müəyyən edilir. Vəkil tərəfindən yoxlanılması lazım olan xətlər varsa, vərəq "vəkilə" statusunu alır. Vəkil vərəqi götürüb kodunu yoxlama interfeysinə daxil edən kimi vərəq “vəkillə” statusunu alır. Beləliklə, biz həmişə bütün vərəqlərin dəqiq mövqeyini bilirik və onların birbaşa taleyini başa düşürük.

Test

İmza toplama sistemində əl ilə yoxlamaq üçün çoxlu müxtəlif vəziyyətlər və onlar arasında keçidlər var. Yoxlamaları avtomatlaşdırmaq üçün operatorların və müfəttişlərin işi ilə bağlı bütün ssenarilər djanqo tərəfində testlərlə əhatə olunur.

O imzalar olmayanda milyonlarla imza toplamaq üçün sistemə baxmağın faydası yoxdur. Verilənlər bazasını doldurmaq üçün toplama prosesi zamanı verilənlər bazasının tipik vəziyyətini işə salan skriptlər yazılmışdır ki, siz real verilənlərə bənzər bir şeylə dolu sistemə baxa biləsiniz.

İmzaların toplanması vaxt baxımından çox məhduddur və bu vaxtın əhəmiyyətli hissəsi bu dəfə Yeni il bayramlarına düşür. Qərargah və yığım sistemindəki yükün qeyri-bərabər olacağını gözləyirdik. Sistemin istənilən real imza axınının öhdəsindən asanlıqla gəlməsi vacib idi. Pik vaxtlarda saatda 10 minə qədər imza gözlənilirdi. Adi bir veb sayt üçün bu, ciddi görünmür, lakin bizim vəziyyətimizdə bu “ziyarətçilər” sırası serverdə böyük yük yarada bilər. Bu, sadəcə ziyarətlər və ya qeydiyyatlar deyil: hər bir imzanın əldə edilməsi serverə təxminən 50 sorğu və bir neçə yüksək keyfiyyətli təsvirin işlənməsini nəzərdə tutur.

Locust istifadə edərək yük testi aparılmışdır. Bu PyPI vasitəsilə əldə edilə bilən sadə bir vasitədir. Ssenarilər, Django-da vahid testləri kimi Python kodunda təsvir edilmişdir:

Testlər sorğu sürəti, müştərilərin sayı və serverin cavab müddəti qrafiklərini əks etdirən veb-interfeys vasitəsilə həyata keçirilə bilər.

Layihənin yerləşdirilməsi Navalny 20!8 saytında olduğu kimi təşkil olunub.
Reaper veb proqramlarına yalnız qərargahın VPN şəbəkəsi vasitəsilə daxil olmaq olar.

Monitorinq

İmza toplama sistemində iştirak edən serverləri və proqramları izləmək üçün müxtəlif vasitələrdən istifadə edirik.

Zabbix layihədəki bütün virtual maşınların vəziyyətinə nəzarət edir.

Elasticsearch bütün virtual maşınlardan nginx qeydlərini toplayır, Kibana bunu qrafiklər şəklində göstərir.

Sentry proqramlar və frontendlərdən gələn bütün səhvləri ehtiva edir. Backend səhvləri ilə bağlı statistikanı pozmamaq üçün cəbhələr ayrıca "təşkilata" yerləşdirilir. Faydalı bir şey, amma Keşikçinin yükümüz altında işləməsi olduqca çətin idi.

qaz

Bu funksional monitorinqdir, uptime.com-a bir qədər bənzəyir, yalnız evdə hazırlanmışdır. Backend django üzərində qurulub, növbələr redis-də arxa uçlu kərəviz üzərində qurulub.

Layihə domenləri Goose-a əlavə edildi. Hər bir domen üçün nəzarət edilməli olan ünvanlar, tarama intervalı və tarama növü göstərilir. Siz sertifikatı, məzmunu, HTTP başlıqlarını, yönləndirmələri və digər faydalı şeyləri yoxlaya bilərsiniz.

Əgər bir şey səhv olarsa, Gus gecənin ortasında məktublar və SMS göndərə və ya zəng edə və vəziyyəti insan səsi ilə izah edə bilər (Twillio xidmətindən zənglər və nitq sintezi üçün istifadə olunur).

Veb interfeysində siz həmişə hansı domenlərdə səhvlərin olduğunu və yoxlama növbəsinin necə getdiyini görə bilərsiniz. Hər dəqiqə 20-25 yoxlama aparılır. Teqlər əlavə edin

Blogerdən məyus olan funksioner qərargahdakı ağır vəziyyətdən danışıb.

Bloqqerin qərargahında Aleksey Navalnı Mərkəzi Seçki Komissiyasının qadağasına və Konstitusiya Məhkəməsinin açıqlamalarına baxmayaraq, prezidentlik kampaniyası üçün vəsait toplamaqda davam edən çaşqınlıq yenə də yaşanır. FBK-nın yeni funksioneri və hüquq müdafiəçisi öz Facebook səhifəsində etirazçılar sıralarında yaranmış idarəetmə böhranı haqqında yazır. Vitali Serkuanov. Serukanov Navalnının komandasından getməsini “özünə hörmət ehtiyacı” ilə izah edib.

Vitali Serkuanovun sözlərinə görə, Navalnının qərargahı fond donorlarının tələblərini təmin edə və regionlarda toplanmış imzaların statistikasını dərc edə bilmir. Fəalın səbəbi bəllidir: namizədliyi irəli sürmək üçün bloqqerin 250 min səsi çatışmır, lakin son tarixdən əvvəl lazımi sayda tərəfdar toplamaq mümkünsüz iş olacaq. Qeydiyyat üçün MSK-ya təqdim olunacaq sənədlərin son müddəti 31 yanvar 2018-ci il saat 18:00-da başa çatır. Buna görə də, Serukanovun qeyd etdiyi kimi, Navalnının komandası prinsipə uyğun olaraq taktikanı dəyişir. Nikkolo Makiavelli“Son vasitələrə haqq qazandırır”. Təşviqat kampaniyasının uğursuzluğundan gələcək seçkiləri boykot mərhələsinə keçidin çətin mərhələsi kimi dekabrın 24-də icazəsiz mitinqlər planlaşdırılır.

“Volkov (Navalnının baş qərargah rəisi) həbslər, həbslər və mənfi təbliğat dənizi vasitəsilə kampaniyanın uğursuzluğunun səbəbləri, ilk növbədə, taktiki suallara cavab verməkdən yayınmaqdan başqa yeni heç nə ilə çıxış etməyib. Kütlənin rəğbətini artırın, inzibati həbslərlə mübarizə aparın, sadə iştirakçılar isə cinayət cəzası alacaqlar”, Serukanov yazır.

Hüquqşünas İlya Craft FBK-nın fəaliyyəti ilə bağlı müstəqil araşdırma aparan , şərhində "Siyasət Bu gün" İnformasiya Agentliyi qeyd edib ki, məyus Navalnı tərəfdarlarının sayı təbii olaraq artır.

Agentliyin həmsöhbəti keçmiş könüllüləri bu kateqoriyaya yerləşdirir Aleksandr TurovskiDenis Lebedev. Birincisi bloqqerin qərargahında axtarış zamanı yaralanıb, lakin Navalnı onun adını çəkməyə zəhmət çəkməyib. Bənzər bir hekayə üç il əvvəl Lebedevlə baş verdi. FBK biznesinə etdiyi səfərlərin birində ayağı sınmışdı, lakin fond fəala onun problemləri ilə məşğul olmayacaqlarını açıqladı.

Remeslo əmindir ki, Navalnının qərargahı çox yaxşı başa düşür ki, onlar xərclənən ianələrin hesabını verə bilməyəcəklər və lazımi sayda imza toplaya bilməyəcəklər.

“Həqiqətən heç bir dəstək yoxdur. Bu vəziyyət göstərir ki, onlar adi işi təşkil edə bilmirlər, çünki bu insanlar heç vaxt heç yerdə işləməyib, halal zəhmətlə pul qazanmayıblar. Nə Volkov, nə də Navalnı. Ona görə də onlar bir-birlərini cəlb edirlər. Əgər lazımi səviyyədə dəstək olsaydılar, insanlar dayanmadan axışardılar. Volkov və Navalnı tamamilə istedadsız olsalar belə, biz bu imzaları topladıq, lakin onlar da istedadsız olduqlarına və dəstək səviyyəsi olmadığına görə, biz əldə etdiyimizi alırıq”, - Remeslo şərh edib.

Bu, həm də pulsuz proqram təminatı və ucuz komponentlərdən istifadə edərək kiçik bir komandanın ümummilli miqyasda imza toplamaq üçün mürəkkəb sistem yaratması haqqında hekayədir. Layihədə mürəkkəb texniki həllər yoxdur, lakin tipik İT inkişaf təcrübəsinə əsaslanaraq proqnozlaşdırıla bilməyən bir çox vacib detallar var.

Rahatlıq üçün material ən yaxşı ardıcıl oxunan dörd yazıya bölünür.

Bu, texniki materialdır, lakin burada müzakirə olunan məsələlərin bir çoxu müasir siyasi kontekst haqqında cüzi məlumat olmadan başa düşülmür, ona görə də lazım gəldikdə əhatə olunur. Əgər nədənsə “Navalnı” sözündən (daha bir neçə dəfə görünəcək) və ya demokratik təsisatların xatırlanmasından qorxursunuzsa, sadəcə olaraq bu mətni oxumayın. Şərhlərdə siyasi məsələlər müzakirə olunmayacaq.

Kampaniya məqsədi

Aleksey Navalnının prezidentliyə namizəd kimi qeydə alınması.

İT departamentinə verilən tapşırıqlar

(xronoloji ardıcıllıqla):

Namizədimizin irəli sürülməsi üçün imza atmağa hazır olan hər kəsin öncədən qeydiyyatı;
- Rusiya ərazisində qərargahlar şəbəkəsinin fəaliyyətinin təmin edilməsi;
- 315 min ideal imzanın toplanması sisteminin yaradılması.

Tarixi və siyasi kontekst

Əgər parlamentdə partiyanız yoxdursa, o zaman seçkilərdə iştirak etmək üçün imza toplamaq lazımdır. Bu, “razılaşdırılmamış” namizədlərin seçkilərdə iştirakının qarşısını almaq üçün istifadə edilən qoruyucu prosedurdur.

Toplama qaydaları səviyyəsində qeydiyyatdan imtina üçün sonsuz imkanlar müəyyən edilmişdir:

  • İmzaların toplanması ciddi şəkildə vaxtla məhdudlaşır;
  • Qanuna görə, nikah üçün tələb olunan sayda imzanın cüzi faizi ayrılır, yaxşı marja ilə imza təqdim etmək mümkün deyil;
  • İmzaları bizim tərəfimizdən yoxlamaq mümkün deyil, çünki seçici məlumatları FMS məlumat bazasına uyğun olmalıdır, ona yalnız dövlət orqanlarının daxil ola bilər;
  • Mərkəzi Seçki Komissiyasında yoxlanarkən qrafoloq istənilən imzadan imtina edə bilər və xəta baş verdikdə hüquqi məsuliyyət daşımır;
  • Yoxlama sxeminin özü yalnış müsbətlərin əhəmiyyətli bir hissəsinin olacağını güman edir (Seçki maneəsi kimi Bayes teoreminin paradoksu).

Biz bununla artıq Novosibirskdə Qanunvericilik Məclisinə seçkilərdə iştirak etmək üçün imza toplayanda rastlaşmışıq.

Novosibirskdə imza toplamaq üçün biz “tarlada” və kublar üzərində imza toplamağa yönəlmiş “Reaper” sistemini yaratdıq, toplayanların marşrutlarını idarə etdik, bütün imza vərəqlərini nəzərə aldıq və imzaları nəticələrə əsasən sıralamağa imkan verdik. müxtəlif çeklərdən.

Novosibirskdə toplayanlar 16 mindən çox imza gətirdilər, biz onlardan ən yaxşısını seçib təqdim etdik 11.722. Ciddi seçimə baxmayaraq, seçki komissiyasının işçi qrupu bir çox “etibarsız imza” müəyyən etdi və seçki komissiyası namizədləri qeydə almaqdan imtina etdi. İmzaların etibarsız sayılmasının absurd səbəbləri haqqında ətraflı oxuyun.

Yeni sistem imzaların toplanması və sonradan seçki komissiyasında mühafizəsi sahəsində toplanmış təcrübə nəzərə alınmaqla qurulub.

Yeni imza kolleksiyasının xüsusiyyətləri

Prezidentliyə namizədin irəli sürülməsi üçün imzaların toplanması üçün daha sərt şərtlər müəyyən edilib:

315 mindən çox imza tələb olunmur;
- Ən azı 300 min imza etibarlı hesab edilməlidir;
- Bir rayondan 7500-dən artıq imza sayılmır;
- Qısa yığım müddəti (dekabrın 27-dən yanvarın 31-dək) ​​çox insanın tətilə getdiyi uzun Yeni il tətillərinə təsadüf edir.

Əvvəlki təcrübəni və yeni tələbləri nəzərə alaraq, biz aşağıdakı əsas prinsipləri qəbul etdik.

Ümumrusiya qərargah şəbəkəsi

Regional kvotalara görə, məsələn, on ən böyük şəhərdə işləmək mümkün deyildi. Ən azı 40 şəhər əhatə olunsa, 315 min imza toplana bilərdi. Əhalisi az olan rayonlarda imza toplamaq daha çətindir, ona görə də praktikada uğurlu toplanması üçün ölkənin əksər bölgələrində qərargahlar açmaq lazım gəlirdi.

İmzaların toplanmasının uğurla başa çatması zamanı proqnoz göstərir ki, böyük şəhərlərdə imza atmaq istəyənlərin sayı regional kvotaları xeyli ötəcək. Moskva (127 min) və Sankt-Peterburq (63 min) ekrana sığmadı.

İmzaların yalnız qərargahda toplanması

Qapı-qapı toplamaq üçün bir neçə min seçici işə götürməli olardıq. Ödənişli kolleksiyaçılarla (və ya, məsələn, sosiologiya tələbələri) işləmiş hər kəs bilir ki, onların heç də hamısı prosedura eyni dərəcədə həssas deyil və hər kəs sadəcə bir-iki imza “çəkmək” şirniktəsinin öhdəsindən gəlmir. Ehtiyatsız doldurma qüsurların böyük bir faizinə gətirib çıxarır və imzaların “çəkilməsi” o qədər geniş yayılmış problemdir ki, Mərkəzi Seçki Komissiyası qrafoloqun yoxlamasını təmin edir. Hətta heyətdə bir qrafoloqun olması və polisə verilən bir neçə ifadənin nümayişkaranə şəkildə icrası belə, qərargahı "çatışmazlıq ustalarından" 100% xilas edə bilməz (yoxladıq). Bundan əlavə, kolleksiyaçı yalnız bəd niyyətlə deyil, əksinə, "qərargahda kömək etmək" üçün imza əlavə edə bilər.

Biz bilirdik ki, “tarlada” yığarkən, Novosibirskdə olduğu kimi, bizi mütləq “zəhərli kolleksiyaçılar”la tanış edəcəklər. Zəhərli maddələr toplayanlar seçici məlumatlarında bilərəkdən səhvlərə yol verirlər (məsələn, pasport nömrəsinin bir rəqəmini dəyişirlər). Onların vəzifəsi etibarsız imzaların sayını limitdən yuxarı artırmaqdır, bundan sonra seçki komissiyası qeydiyyatdan imtina edir. Novosibirsk zəhərli imzaları təmizləmək üçün çox səy sərf etdi. Bütün ölkə üzrə yığarkən bunu etmək mümkün deyil.

Yalnız stasionar qərargahlarda imzaların kifayət qədər keyfiyyətini, imza vərəqələrinin düzgün doldurulması üçün şəraiti və onların təhlükəsizliyini təmin etmək mümkün olub.

Çox mərhələli imza yoxlaması

İdeal imzalar riyazi abstraksiyadır. İmzaların faktiki toplanması mürəkkəb və çətin prosesdir. Hətta vicdanlı, hazırlıqlı montajçılar belə səhvlərə yol verirlər və vaxt çatışmazlığı, inzibati təzyiq və təxribatlar şəraitində daha çox qüsurlar olacaq.

Səhvlərin necə baş verdiyinə dair çoxlu məlumatımız var. Bizim təcrübəmizə görə, tam vicdanla toplanmış imza vərəqələrində seçki komissiyasının etibarsız saydığı imzaların təxminən 10%-i olacaq.

Biz sadəcə yaxşı imzalar yox, seçki komissiyasının qəbul edəcəyi imzalar təqdim etməli idik. Bunun üçün bir neçə yoxlama mərhələsi və sıralanma mexanizmi tələb olunurdu - nə qədər absurd hesab etsək də, yalnız seçki komissiyasının yoxlamalarından keçmə ehtimalı yüksək olan imzaları seçmək və təqdim etmək üçün.

Hər bir imza üçün pasportun skan edilməsi

Skan olmadan, imzanın keyfiyyətinə görə bütün məsuliyyət kolleksiyaçının üzərinə düşür. Əgər təsadüfən və ya qəsdən pasport nömrəsində səhv edibsə, heç vaxt bilməyəcəyik.

Təcrübəmizdən məlum oldu ki, yalnız pasport məlumatlarının imza vərəqinə yenidən yazılması zamanı edilən səhvlər və məlumatların daxil edilməsi xətaları, hətta imzalar rahat şəraitdə və vicdanlı toplayıcılar tərəfindən toplansa belə, icazə verilən 5%-lik həddi asanlıqla tükəndirir.

Sənədi skan edərək, imzanın yoxlanılmasının bir neçə müstəqil mərhələsini həyata keçirə və düzəlişlər edə bilərik.

Bundan əlavə, vəkillərimiz məhkəmədə hər imza üçün mübarizə aparmağa hazırlaşırdılar. Keçən dəfə rədd edilmiş imzaların böyük bir kateqoriyası var idi, biz bunu dəqiq bilirdik: imza pasporta uyğun gəlirdi, lakin biz onu köhnəlmiş və səhvlərlə dolu verilənlər bazası ilə yoxladıq. Vahid məlumat bazası və skanların mövcudluğu vəkillərə belə hallarda şikayətlərin hazırlanması prosesini avtomatlaşdırmağa imkan verərdi.

Əlbəttə ki, pasportu yalnız qərargahda skan etmək mümkün idi, əks halda şəxsi məlumatların kifayət qədər təhlükəsizliyini təmin etmək mümkün olmayacaqdı.

Elektron məlumat bazası ilə sinxronizasiya

İmza və imza vərəqələri ilə aparılan bütün əməliyyatlar, bütün statuslar və hərəkətlər elektron məlumat bazasında öz əksini tapmalı idi. İmzatoplama sistemi toplanmanın bütün mərhələlərinə nəzarət etməli və səhvləri müəyyən etməli idi. Bu, yüz minlərlə fiziki obyektlə işləyərkən nizamı (və dincliyi) qorumağın yeganə yoludur.

Sistemin yeni versiyasında nələr edilib

  • İmza toplamaq üçün yerimiz olsun deyə, regional qərargahlar şəbəkəsini yerləşdirmişik. Qərargahın İT infrastrukturu bir neçə fiziki serverdən, bir sıra virtual maşınlardan, 70 marşrutlaşdırıcıdan, 230 kameradan və 189 tam iş stansiyasından ibarətdir. Sistemdən eyni vaxtda 250-dən çox insan daxildə istifadə edir.
  • Qısa bir müddət ərzində bir neçə yüz min insanı qərargaha gətirmək üçün biz seçicilərin məlumatlarını əvvəlcədən təsdiqlədiyi 20!8 saytında əvvəlcədən qeydiyyata almağa başladıq.
  • Səhvlərin sayını azaltmaq üçün abunə vərəqinin doldurulmasının düzgünlüyünü müstəqil yoxlamağa imkan verən sistem yaratdıq. Sistem bir neçə veb proqramdan və iki platforma üçün mobil proqramdan ibarətdir.
  • Məlumatları sistemə yükləmək üçün biz pasportların skan edilməsi üçün bir sıra avadanlıq yığdıq (və qismən istehsal etdik), şəxsi məlumatların təhlükəsiz ötürülməsi sxemini düşündük və bütün qərargahlarda həyata keçirdik.
  • Seçki komissiyası baxımından ünvanın formatlaşdırılmasının düzgün olmasını təmin etmək üçün biz FİAS-ın məlumat bazasında axtarışa başladıq və hüquqşünaslarla birlikdə qanunun bütün tələblərini nəzərə almaq üçün onunla ciddi məşğul olduq.
  • Qərargahımızın təhlükəsizliyini (qismən) təmin etmək və məhkəmələrdə əlavə arqumentlərə malik olmaq üçün biz 24 saatlıq videomüşahidə və qeyd sistemi qurmuşuq.
  • İnfrastrukturun, mexanikanın sınaqdan keçirilməsi, məlumatların dəqiqləşdirilməsi və qərargahın toplanması üçün hazırlanması üçün biz seçicilərin ilkin yoxlanılması üçün böyük bir prosedur keçirdik, ondan 81 750 nəfər keçdi.
  • Biz inkişaf etmişik görünüş abunə vərəqi, qərargahda vərəq logistika sistemi, həmçinin mərkəzi qərargah üçün fiziki saxlama və sürətli çıxış sistemi.

Veb tətbiqlərimizin əsas texnologiyaları

Əsas backend dili: Python.
Frontend: JavaScript, jQuery, React, D3.js.
Çərçivələr: Django (6 ədəd), aiohttp (1 ədəd).
Verilənlər bazası: PostgreSQL, Redis və s.
Tam mətn axtarışı: Sfenks.
HTTP server: Nginx, lak.
Test: Jenkins, Browserstack, RobotFramework, Locust.
Monitorinq: Zabbix, Elasticsearch, Kibana, Sentry.
Yerləşdirmək: Ansible və digər alətlər.
Server konfiqurasiyasının idarə edilməsi:Şef.

Birinci hissə: Navalny 20!8 saytı

Biz çox məhdud vaxt ərzində bir neçə yüz min insanı qərargaha gətirməli olduq. Bunun üçün kampaniyanın başladığı gündən biz tərəfdarların qeydiyyatına başladıq. Tərəfdarların toplanması və qeydiyyatı Navalny 20!8 saytının əsas vəzifələrindən biridir, ona görə də demək olar ki, hər səhifədə qeydiyyat forması var.

Bütün bunlar təkcə gözəl nömrələr naminə lazım olmadığından, qeydiyyatdan keçmiş tərəfdarların botlar deyil, real insanlar olduğunu bilmək, onlarla əlaqə saxlamaq və onların hansı şəhərdə qeydiyyatda olduqlarını anlamaq bizim üçün vacib idi. regionlar üzrə kvotaların yerinə yetirilməsini proqnozlaşdırmaq üçün). Buna görə də, saytda qeydiyyatdan keçmək kifayət qədər mürəkkəb idi və telefon nömrəsinin təsdiqini tələb edirdi. Özümüzü və başqalarını aldatmamaq üçün yalnız bütün formanı dolduran və telefon nömrəsini potensial imza atanları kimi təsdiqləyən şəxsləri daxil etdik. Buna görə də, əsas səhifədə bir milyondan çox (qeydiyyatların ümumi sayı) əvəzinə indi cəmi 706 513 “gələcək imzamız” var.

Veb sayt qurmaq baxımından bu, kifayət qədər adi bir məhsuldur. Sayt standart ORM və standart idarəetmə panelindən istifadə edərək Python + Django + PostgreSQL-də hazırlanmışdır. Bir il yarım ərzində sayt bir neçə yeniləmədən keçdi: bölmələr əlavə edildi, qeydiyyat formasının işi dəyişdirildi, səhifələrdə mətnlər və şəkillər dəyişdirildi. Dizaynı çətinləşdirməməyə çalışdıq ki, standart bloklardan istifadə edərək tərtib edə bilək, bunun sayəsində bəzi bölmələr üç gün ərzində ideyadan işə düşdü.

İstənilən müasir veb-saytı ziyarət edənlərin təxminən yarısı ondan gəlir mobil cihazlar. Saytı hamı üçün əlverişli etməyə çalışdıq, buna görə də planlar 320px-dən başlayaraq istənilən ekran genişliyində düzgün göstərilmək üçün tərtib edildi və yerləşdirildi.

Baş qərargah xəritəsi

Ziyarətçilərin gördükləri yeganə mürəkkəb interaktiv element qərargahı olan Rusiyanın xəritəsidir. Qərargahların sayı 50-ni ötdükdə, ölkənin Avropa hissəsində markerlər yaxın yerləşdiyindən xəritədə hərəkət etmək çətinləşdi. Əvvəlcə xəritə sırf dekorativ element kimi düşünüldü, lakin birdən-birə funksionallıqla doldu, buna görə də kampaniyanın federal xarakterini artıq qiymətləndirən və sadəcə öz şəhərini tapmaq istəyənlər üçün siyahı rejimi yaratdıq.

Xəritə gözəl və çox yönlü d3.js kitabxanasından istifadə etməklə hazırlanmışdır. Xəritə proyeksiyasına görə standart Google Maps və ya Yandex.Maps istifadə etməkdənsə, öz skriptimizi yazmağa qərar verdik. Bir təyyarədə Yer ellipsoidinin inkişafının bir çox yolu var. Merkator proyeksiyasında cisimlər şimal enliklərində çox uzanır və bizə əsas yerlərin olduğu yerlərdə daha çox yerə ehtiyacımız var. böyük şəhərlər. Bundan əlavə, Mercator proyeksiyasında Rusiya olduqca qəribə görünür. Biz coğrafiya dərsliklərindən daha çox tanış olan Albers-Sibir konik proyeksiyasını seçdik.


Sağlam insanın Rusiyası (Albers konik proyeksiyası) və siqaret çəkənin Rusiyası (Mercator proyeksiyası)

Məzmun İdarəetmə

Saytın redaksiya bölməsi çox da maraqlı deyil. Adi Django admin paneli minimal fərdiləşdirmə ilə istifadə olunur. Məhdud inkişaf resursları ilə bir neçə idarəçi istifadəçiyə standart alətdən istifadə etməyi öyrətmək, həqiqətən rahat olanı yaratmaq üçün vaxt sərf etməkdən daha sərfəlidir.

Redaktorun həyatını asanlaşdıran bəzi həllər digər layihələrdən götürülüb. Məsələn, müştəri tərəfində mətnlərin tipoqrafiyası üçün bir vasitə. Tipoqrafımız rahatdır, çünki o, istənilən mətn və ya sətir daxiletmə sahəsinə asanlıqla qoşulur. Avtotipoqrafiyanın vəziyyəti haqqında məlumat (on/off) xəttin sonunda çap olunmayan simvol kimi saxlanılır və heç bir şəkildə backenddən asılı deyildir.

Yazıların və xəbərlərin mürəkkəb məzmunu ilə işləmək üçün bir çox digər layihələrdə də istifadə olunan blok redaktorundan istifadə edirik:

Müxtəlif növ bloklar var, hər bir layihənin öz dəsti var. Hər blokda məzmun var və parametrlər ola bilər. Blok məlumatları verilənlər bazasında json formasında, mətn blokunun daxilindəki işarələmə isə markdown formatında saxlanılır.

Göstərmək üçün bloklar tələb olunan formata çevrilir: yazı üçün HTML, indeksləşdirmə üçün mətn, Yandex.Zen üçün RSS və ya XML, mobil proqram üçün JSON və s. Bu yolla biz kifayət qədər mürəkkəb məzmun formatına malik istənilən cihazda proqnozlaşdırıla bilən nəticələr əldə edirik.

İlk versiya Sir Trevor koduna əsaslanırdı. Daha sonra ser Trevorun spagetti kodunu saxlamaq çətinləşəndə ​​redaktor React-də yenidən yazılmışdır.

Analitika

Texniki baxımdan ən maraqlısı saytın admin bölməsində baş verir. Oradan qeydiyyatın gedişini izlədik.

Əvvəlcə analitika olduqca primitiv idi: qeydiyyatların sayının qrafikləri fərqli növlər zamandan. Amma biz regionlar üzrə dinamikanı görmək və müxtəlif hadisələrin qeydiyyat sayına təsirini izləmək istədik. Çoxdan gözlənilən analitika belə ortaya çıxdı:


Bu ekranda saytın bütün həyatı üçün xülasə məlumatları, müəyyən dövr üçün cədvəl və bu dövr üçün hadisələrin siyahısı var. Qrafikdə zirvəni vurğulaya və hansı hadisənin səbəb olduğunu anlamağa çalışa bilərsiniz. Çox vaxt bu, Navalnının YouTube kanalında araşdırma ilə başqa bir videonun yayımlanmasıdır. İmzaların ən böyük artımı bölgə məmurlarının maxinasiyaları ilə bağlı videolardan olub.

Diaqram d3.js-də hazırlanmışdır və hadisənin vaxt və qərargah üzrə filtrasiyası Çarpaz filtr kitabxanasından istifadə etməklə həyata keçirilir. Bu həll müştəri tərəfində 1 saatlıq artımlarla bir ildən çox müddət ərzində qeydiyyat məlumatları ilə interfeys gecikmələri olmadan işləməyə imkan verir. Hazırda bu, 12 meqabayt məlumatdır (gzip-də 1,3 MB).

Qeydiyyat bazasının əsas göstəriciləri və əvvəlki günün uğurları ilə kiçik mətn hesabatı hər gün avtomatik olaraq bütün layihə iştirakçılarına göndərilirdi.

Şəhər və rayon

Həm də Rusiyanın hər bir bölgəsi üçün imza toplamaq üçün hazırlığın əsas göstəricilərinin sadalandığı böyük bir cədvəlimiz var:

Bu cədvəldəki rəqəmlər əvvəlcə yaxınlaşmaq istəmədi. Şəhərlər üzrə ümumi sayı qeydə alınanların sayından xeyli az idi. Məlum oldu ki, saytda sorğu anketi doldurarkən insanlar gözlənilmədən tez-tez şəhərlərinin adında səhvlərə yol verirlər və ya qeyri-standart adlardan istifadə edirlər:

Moskva - 2,5% səhv və 579 orfoqrafiya dəyişikliyi;
- Sankt-Peterburq - 12,6% səhv və 767 orfoqrafiya variasiyası;
- Komsomolsk-on-Amur - 20% -dən çox səhv və abreviatura, 75 seçim.

Tərəfdarların sayının düzgün hesablanmaması qərargahlar şəbəkəsinin və təşviqat tədbirlərinin düzgün planlaşdırılmamasına səbəb ola bilər. Şəhər adının istifadəçi girişini necə standart bölgə adına çevirmək barədə düşünməli oldum. Belə sadə bir forma üçün KLADR və ya FIAS-a uyğun olaraq avtomatik tamamlama mexanizmlərindən istifadə etmək istəmədim. Buna görə də, biz Rusiyanın 700 ən böyük şəhərinin siyahısını götürdük, tipik yazımların siyahısını (“spb”, “n-sk”) əlavə etdik və onları Levenşteyn məsafəsinə görə sıralayaraq, boş axtarış apardıq (bu, iki simvol dəsti arasındakı fərq).

Siyahıdakı hər bir şəhəri ən yaxın qərargaha qədər olan məsafəyə görə üç kateqoriyadan birinə təsnif etdik: qərargah şəhərdədir, qərargah yaxındır (şəhər aqlomerasiyası), qərargah uzaqdadır. Lazımi vaxtda gəlib imza atacaq adamların sayı hesablanarkən qərargahdan məsafə nəzərə alınıb. Analitikada biz bütün imzalayanları və “mövcud” olanları ayrıca saydıq (təsdiqlənmiş e-poçt, qərargahı olan şəhərdə və ya yaxınlıqda yaşayır).


Bu qrafik zaman keçdikcə kampaniyanın getdikcə necə regional xarakter aldığını göstərir. Moskva və Sankt-Peterburqdan yeni qeydiyyatların payı 35%-dən 15%-ə qədər azalıb.

SMS və poçt

Digər texniki çətinlik isə SMS və məktubların göndərilməsi idi. Şlüzlər mesajları, xüsusən də xarici nömrələrə çox yaxşı çatdırmır. Amma biz tərəfdarların ən təmiz və orijinal bazasını istəyirdik, ona görə də qeydiyyat formasının ikinci hissəsi SMS vasitəsilə telefon nömrəsinin yoxlanılmasını tələb edirdi. Etibarlı göndərmə üçün biz üç şlüz fırladıq: əgər mesaj çatdırılmayıbsa, o, yenidən başqa şlüz vasitəsilə göndərilib. Bundan əlavə, fərdi şlüzlər yan tərəfdə nasazlıqlar olduqda söndürülə bilər. SMS kodunun çatdırılma dərəcələri monitorinq edilən parametrlərdən biridir:

Qrafik şlüzlərin iki dəfə uğursuz olduğunu göstərir. Fevralın 21-də və aprelin 17-18-də göndərilən SMS-lərin payı mesaj göndərmə növbəsindəki nasazlıqlar səbəbindən xeyli azalıb. İyulun 15-də biz qeydiyyat formasının tərtibatını dəyişdik, bu da qrafikdə nəzərə çarpır.

700 mindən çox e-poçt ünvanından ibarət məlumat bazasına çoxlu sayda məktub göndəririk. Kimsə xəbərlərə abunədir, kimsə hadisə ilə bağlı bildiriş almalıdır. Bundan əlavə, hər bir ünvan 2-opt-in qaydalarına uyğun olaraq təsdiqlənməlidir (bu, ilk məktubda bülletenə abunəliyinizi təsdiqləmək üçün klikləməyiniz lazım olan bir keçid ehtiva edir). Kampaniyanın əvvəlində biz ActiveCampaign xidmətindən istifadə etdik, lakin o, bahalı və inanılmaz dərəcədə yavaş idi. Verilənlər bazası 300 min kontaktı keçəndə işləmək mümkünsüz oldu. Buna görə də, tələb olunan nümunələr əsasında poçt siyahıları və məktub zəncirləri yaratmağa imkan verən öz CRM / poçt xidmətimizi yazdıq. Mailgun hazırda məktubları çatdırmaq üçün istifadə olunur.

Təxirə salınmış tapşırıq növbələri

Üçüncü tərəf xidmətlərinin API vasitəsilə poçt və ya SMS göndərilməsi xeyli vaxt aparan bir əməliyyatdır. Bu cür əməliyyatlar asinxron şəkildə aparılmalıdır ki, istifadəçi interfeysini ləngitməsin və ya bütün tətbiqi yük altında qoymasın. Əvvəlcə bütün asinxron tapşırıqlar Broker kimi Redis ilə Celery vasitəsilə işləyirdi. Hər bir e-poçt və ya SMS mesajı Kərəviz növbəsində bir tapşırıq yaratdı, bundan sonra pulsuz işçi bu tapşırığı icra etdi. Lakin bu yanaşma etibarsız və çox resurs tutumlu oldu.

Bir dəfə bir saat ərzində 10 mindən çox qeydiyyat aldıq (yox, bizi televiziyada göstərmirdilər, “+1” kampaniyası idi). 10 kərəviz işçisi bunun öhdəsindən gələ bilməyib, istifadəçilər SMS və məktubların qəbulunda əhəmiyyətli gecikmə müşahidə etməyə başlayıblar.

Bu hadisədən sonra biz PostgreSQL-ə əsaslanan sadə növbə lehinə Kərəvizdən imtina etdik. Növbədən gələn tapşırıqlar Python-da hər mesajın çatdırılması kanalı üçün bir olan “daemon”lara görə sıralanırdı. Hər 10 saniyədə bir demon növbədən tapşırıqlar toplusunu götürdü və məlumatları bir partiyada poçt API-yə göndərdi. Qruplaşdırma tapşırıqları serverdəki yükü kökündən azaltdı və evdə hazırlanmış növbədən istifadə sazlama və monitorinqi olduqca sadə etdi.

Kərəviz də çıxdı mürəkkəb alət vəzifəmiz üçün. Özü də çoxlu resurs sərf edən Flower kimi xarici yardım proqramları vasitəsilə düşünülmüş konfiqurasiya və monitorinq tələb edir. Digər layihələrdə daha sadə bir həlldən istifadə etməyə çalışırıq - RQ + Redis.


Asinxron tapşırıqlarla işləmək haqqında məqalədən RQ və Kərəvizin mürəkkəbliyinin müqayisəsi.

İnkişaf prosesi

Navalny 20!8 veb-saytının yaradılması prosesi tərtibatçıların nöqteyi-nəzərindən necə işləyir? Biz heç bir metodologiyaya riayət etmirik, fərqli sistemlərdən yanaşmalardan istifadə edirik. Məsələn, menecerlər Trello-da Kanban lövhəsinə bənzər strukturla tapşırıqlar qoyurlar və tərtibatçılar fərdi Ekstremal Proqramlaşdırma təcrübələrindən istifadə edirlər.

Komandanın təxminən yarısı Moskva ofisində yerləşir, qalanları isə uzaqdan işləyir. Moskva işçiləri ümumi mənzərəni daha yaxşı başa düşmək üçün işləməmək üçün kampaniya görüşlərində iştirak edə bilərlər, lakin biz İT şöbəsinin vəzifələrini ayrıca müzakirə edirik. Daimi zənglər hər kəsə hər an işin əsas istiqamətini sinxronlaşdırmağa və başa düşməyə imkan verir.

Layihə iştirakçılarının əksəriyyəti bunun üzərində tam iş günü işləyir, lakin bəzi tapşırıqlar müvəqqəti olaraq digər layihələrdən gətirilən tərtibatçılar və ya hətta könüllülər tərəfindən yerinə yetirilib. Məsələn, könüllü İlya, demək olar ki, tamamilə əsas səhifə üçün qərargahın xəritəsini yaratdı.

Mənbə kodu Bitbucket platformasında git deposunda saxlanılır. Hər bir əsas yeni vəzifə üçün ayrıca filial yaradılır. Biz hər filial üçün quruluş serveri yaratmırıq; onların hamısı tək test serverində işləmək üçün inkişafa birləşdirilir. Sınaqdan sonra tapşırığa cavabdeh olan tərtibatçı ustaya çəkmə sorğusu göndərir. Komanda lideri koda baxır və hər şey yaxşıdırsa, yerləşdirməyə başlayır. Böyük tapşırıqlar üçün tərtibatçılar bunu edirlər ətraflı təsvirlər nəyi yoxlamaq lazımdır və yerləşdirmə zamanı nəyin səhv ola biləcəyi.


Yerləşdirmə çox sadə şəkildə təşkil edilmişdir. Bitbucket-dən veb-qancaya (və ya onun interfeysindəki düyməyə) cavab verən, istədiyiniz filialdan kodu götürən, serverə köçürən və yeniləmə skriptini orada işləyən alətimiz var. Skript Makefile-də formatlanıb.

“Yeniləmə et” funksiyasını işə saldığınız zaman asılılıqlar yenilənir, köçürmələr həyata keçirilir, statik fayllar sonradan işlənir və hər şey qaydasındadırsa, uwsgi serveri yenidən işə salınır. Köhnə kodu pozmamaq üçün köçürmələr etməyə çalışırıq, belə ki, yerləşdirmə səhvləri halında hər şey işləməyə davam edir.

İnkişafa 18 sentyabr 2016-cı ildə başlanılıb. O vaxtdan bəri, 1228 öhdəlik, 200 çəkmə sorğusu olub, yerləşdirmə 600 dəfədən çox istehsala buraxılıb və depoda 67 filial var (onların əksəriyyəti indi bağlıdır).

Dizayn haqqında

Layihə komandasında yalnız iki nəfər davamlı olaraq dizayn üzərində işləyirdi (məhsul funksiyası olan bədii rəhbər və dizayner), hər ikisi digər kampaniya layihələrində fəal iştirak edirdi. Buna görə dizayna yanaşma son dərəcə faydalı idi.

İT məhsullarının dizaynında biz həmişə iki əsas prinsipi rəhbər tuturuq:

1) Ən "tənbəl" və cəlb olunmayan istifadəçi üçün məlumatlar ən görünən yerdə olmalıdır (biz, məsələn, saytdakı blokların və bölmələrin ilkin yerlərini belə təyin etdik);

2) Son məhsuldan nə qədər az insan istifadə edərsə, biz onu bəzəməyə bir o qədər az çalışırıq (inkişaf resurslarına qənaət edirik) və hər bir istifadəçi üçün bir o qədər çox səy göstərə bilərik (bir neçə insanı öyrətmək çox vaxt həyata keçirməyə vaxt itirməkdən daha effektivdir) istifadəçi səylərinə qənaət edəcək və ya sizi səhvlərdən xilas edəcək yeni xüsusiyyətlər).

Buna görə də bizim aşağı istifadəçi daxili sistemlərimiz tel kafes kimi görünməyə çalışır və kampaniya tərəfdarının qarşılaşdığı hər şey ciddi şəkildə korporativ üsluba və sağlam düşüncəyə tabe olan ümumi vizual ünsiyyətin bir hissəsidir.

İmzaların toplanması üçün İT sistemi məhdud resurslara malik çox mürəkkəb, çoxkomponentli layihədir, ona görə də dizaynerlərin işinin əsas hissəsi qrafik redaktorda deyil, kağız üzərində, iclaslarda və Google Sənədlərdə həyata keçirilirdi (bizim halda, Eskiz).

Layihədə çox şey var mürəkkəb sxemlər, sadəcə çəkmək istədiyimiz və diaqramları çəkmək üçün yerində tapdığımız bütün elektron alətlər bizə uyğun deyildi. Bəzən biz draw.io-dan istifadə edirdik, lakin daha çox birbaşa kağız üzərində çəkirdik. Ən vacib diaqramlar layihə lövhəsində asılmışdı. İclaslarda müzakirəyə çıxarılacaq sualların yer aldığı kağız “biletlər” də oraya əlavə olunub.

Məntiqi bir daha yoxlamaq və heç nəyin unudulmadığına əmin olmaq üçün marvelapp.com saytında hüquqşünaslarla razılaşdırılmış kağız diaqramlardan və skriptlərdən prototiplər topladıq. Yalnız bundan sonra planlar inkişafa köçürüldü.

Tapşırıqdan asılı olaraq müxtəlif tədqiqat və dizayn üsullarından istifadə edilmişdir. Beləliklə, çoxdan gözlənilən analitikaya başlamazdan əvvəl, sistemin bütün potensial istifadəçiləri ilə (kadr rəhbərindən tutmuş poçt göndərişini göndərən şəxsə qədər) bir sıra müsahibələr apardıq və onların istəklərinə əsaslanaraq, bir araya gətirə bildik. çox sadə interfeys, uzun müddət kampaniyanın idarə paneli kimi xidmət etmişdir.

Bir səhifədə biz qeydiyyat axınını gördük, ona təsir edən hadisələri görə bildik və tərəfdarlarımızın şəhərlər üzrə necə paylandığını öyrəndik. Biz həmçinin imzalayanların sayına görə şəhərlərin reytinqlərini topladıq (bu, bizə qərargahın effektivliyinə nəzarət etməyə imkan verdi və yeni qərargahların açılması üçün düzgün şəhərləri seçib-seçmədiyimizi bildirdi) və cədvəl analitikası.

Doğrulama interfeysləri və imzaların toplanması üçün operatorun iş sürəti mütləq prioritet idi. Yığım kəskin vaxt təzyiqi şəraitində baş verir, buna görə də biz hər saniyə qənaət etməyə və eyni zamanda potensial istifadəçi səhvlərinin sayını azaltmağa çalışdıq.

Hesablamalarımıza görə, mövcud qərargah sayı və davamlı insan axını ilə hər bir kollektor adambaşına 6 dəqiqədən çox olmamalıdır - "salam"dan toplama prosedurunun tamamlanmasına qədər.

İmzaların İT sistemi vasitəsilə yoxlanılması və toplanması bizim tərəfimizdən tamamilə icad edilmiş prosedurdur, ona görə də həllərimizin sınaqdan keçirilməsi üçün əsas metod kimi sistemin real istifadəçiləri üzərində MVP testini seçdik. Beləliklə, biz əsas protokolu və ilk yoxlama interfeysini Moskva qərargahının əməkdaşları üzərində sınaqdan keçirdik, sonra iş prosesində real istifadəçiləri müşahidə etmək üçün üç müxtəlif şəhərə (Sankt-Peterburq, Çelyabinsk və Ulyanovsk) getdik. Oxşar layihələr üçün belədir Ən yaxşı yol dizayn və inkişaf mərhələsində unudulmuş və ya gözlənilməyən əşyaların və istifadəçi hallarının siyahısını tez bir zamanda hazırlayın.

İnterfeysdə kiçik dəyişikliklər edildikdən sonra bütün kampaniya qərargahlarında yoxlamaya başlanılıb. Nəticə etibarı ilə bir anketin işlənmə müddətini adambaşına bir yarımdan iki dəqiqəyə qədər azalda bildik.

Test

RobotFramework avtomatlaşdırılmış sınaq üçün istifadə edilmişdir. Layihənin ən kritik funksionallığını əhatə etmək üçün qəbul və funksional testlər yazılmış və konfiqurasiya edilmişdir avtomatik başlanğıc. Jenkins CI sistemi kimi istifadə edilmişdir.

Saytın ən vacib funksiyası istifadəçinin qeydiyyatıdır ki, bu da SMS kodu vasitəsilə telefonun təsdiqini nəzərdə tutur. Mesajları kodlarla yoxlamaq üçün sınaq SİM kartı və Asterisk ilə GSM modemi konfiqurasiya edilmişdir. SMS kodu artıq sınaq üçün mövcud olduğu poçta göndərildi.

Aşkar edilmiş səhvlər Trello-ya tərtibatçılar üçün tapşırıq kimi əlavə edildi.

Server infrastrukturu

Navalnıy 20!8 saytı fəaliyyətini davam etdirir və tədricən seçicilərin tətil kampaniyasının saytına çevrilir, ona görə də informasiya embarqosu hələ də götürülməyib və hekayə qısa olacaq. Server hissəsi üç səviyyədən ibarətdir: backend, keşləmə proksiləri və kənar serverlər. Bütün konfiqurasiyalar aşbaz vasitəsilə idarə olunur, ona görə də istənilən rolu olan server yeni virtual maşında tez quraşdırıla bilər.

Backend verilənlər bazası və tətbiq nümunələri, hər bir proqram öz virtual maşınında və öz IP ilə işləyir. Bütün serverlər bir neçə nüsxədə mövcuddur və verilənlər bazası master-slave rejimində başqa maşına təkrarlanır.

Proksi serverdə müəyyən ünvanlara sorğuları və müxtəlif URL-dən asılı məhdudiyyətləri saxlayan Varnish quraşdırılıb. Backend uğursuz olarsa, sayt qeyri-müəyyən müddətə proxy serverdən işləyə bilər; yalnız istifadəçi qeydiyyatı mexanizmi pozulacaq.

Edge serverləri statik keşləmə və SSL ləğvini həyata keçirir (sonra trafik VPN şəbəkəsindən keçir). Bu serverlərin mahiyyəti trafikin əsas hissəsini paylamaq və infrastrukturun qalan hissəsini hücumlardan qorumaqdır. Bunlar müxtəlif məlumat mərkəzlərində gigabit kanalı olan zəif virtual maşınlardır. Yük DNS balansı ilə paylanır. Edge serverlərində minimum konfiqurasiya var və lazım gələrsə, bir neçə dəqiqə ərzində asanlıqla quraşdırıla bilər. Kenar serverlərdə əldə etdiyimiz maksimum faydalı trafik bir neçə saat ərzində 5 Gbps idi.

Şəkillər, üslublar, javascript, json məlumatları elə saxlanılır ki, fayl adına faylın məzmununun hashı daxil olsun (məsələn, style.28fa1c7b1761.css), beləliklə, bütün bu fayllar serverdə əbədi olaraq yaddaşda saxlanıla bilər və brauzerdə. Trafikin böyük hissəsi kənar serverlərdən göndərilir. Sonra yalnız məzmun səhifələrinə edilən sorğular keçir və bu, təxminən 25 dəfə az məlumatdır.

Bəzən kənar serverlər əvəzinə CloudFlare qoşulur, lakin biz serverlərimizə qayıtmağa çalışırıq, çünki CloudFlare həmişə Rusiyadan yaxşı əlçatanlığa malik deyil. Bəzi provayderlər, hətta ən böyükləri də mütəmadi olaraq IP-lərini bloklamağa başlayırlar (Roskomnadzorun izləri).

Nəticə

Ənənəvi üslubda (xüsusi İT sistemi olmadan, kağız, qələm və Excel masaları ilə) imza toplamaq Aya şar uçmaq kimidir: bəli, kifayət qədər şar götürsəniz, hətta havaya qalxıb buludlarda gizlənə bilərsiniz, lakin Hələ bu şəkildə hədəflərə çatmaq fiziki olaraq mümkün deyil.

Seçki komissiyasının hətta arzuolunmaz namizəddən belə qəbul etməyə məcbur olacağı imzaları toplamaq üçün biz bu mürəkkəb infrastrukturu yaratmağa başladıq. Bu fəsildə qarşımıza qoyulan vəzifə və onun həllinə hazırlıq haqqında danışdıq.

Məqalədə qərargahın şəbəkə avadanlığının seçilməsi və konfiqurasiyası, öz sənəd skanerinizin hazırlanması və qərargah binalarının video nəzarətinin təşkili təsvir olunur.

Üçüncü fəsildə imzaların toplanması üçün ərizələrin yaradılması prosesi və fiziki imza vərəqələri ilə işləmək ilə bağlı hər şey təsvir olunacaq.

Dördüncü fəsildə layihənin idarə edilməsi, komanda, vaxt qrafiki və bir az nəticələr haqqında danışılır.

Teqlər:

  • djanqo
  • Navalnı
  • interfeys dizaynı
  • saytın inkişafı
  • 20!8
Teqlər əlavə edin

“Hələlik bu, PR hekayəsidir”

Müxalifətçi Aleksey 2018-ci ildə Rusiyada keçiriləcək prezident seçkilərində namizədliyini qeydə almaq üçün tələb olunan 300 min imza toplayıb. İndi onun seçkilərdə iştirakına icazə veriləcəkmi?

"Rusiya Federasiyası Prezidentinin seçkiləri haqqında" qanuna (№ 19 - 10 yanvar 2003-cü il tarixli Federal Qanun) uyğun olaraq, namizəd özünü irəli sürən namizəddir (yəni, namizədliyi irəli sürməyən namizəddir. siyasi partiya) Mərkəzi Seçki Komissiyasına ən azı 300 min seçici imzası təqdim etməlidir, hər bir rayon üzrə onların sayı 7500-dən çox olmamalıdır. Texnoloji cəhətdən Navalnı tapşırığı yerinə yetirdi - o, artıq ölkənin ən azı 40 bölgəsində 335 782 imza topladığını açıqladı. Lakin onların heç bir hüquqi qüvvəsi yoxdur.

Seçki qanunvericiliyi sahəsində ekspert Andrey Buzin bizə deyib: “Namizədlikdən əvvəl və seçki hesabı açılmazdan əvvəl toplanmış imzalar etibarlı deyil”. Gəlin izah edək. Həmin “Prezident seçkiləri haqqında” qanuna əsasən, namizədin irəli sürülməsi seçkilərin təyin edilməsi haqqında qərarın rəsmi dərc edildiyi gündən 20 gündən gec olmayaraq baş verir. Hələlik onlar Krımın ilhaqının ildönümünə, 18 mart 2018-ci il tarixinə planlaşdırılır.

Bununla belə, Konstitusiyaya əsasən, prezident seçkiləri Federasiya Şurası tərəfindən səsvermə gününə ən geci 100 gün qalmış və ən geci 90 gün qalmış, yəni bu ilin dekabrında rəsmi olaraq təyin ediləcək. Müvafiq olaraq, Aleksey Navalnı prezident seçkilərində öz namizədliyini rəsmən irəli sürə və yalnız dekabrda imza toplamağa başlaya bilər. Siyasətçi namizədlik sənədlərini Federasiya Şurasının seçkiləri təyin etdiyi gün təqdim edərsə, imza toplamaq üçün onun 55 ilə 45 günə qədər vaxtı olacaq. Bu müddət ərzində tələb olunan məbləği toplasa, Mərkəzi Seçki Komissiyası onların həqiqiliyini yoxlayacaq və namizəd kimi qeydə alınması barədə qərar verəcək.

Navalnının özü də bilir ki, indi toplanan imzalardan MSK-ya sənədlər təqdim edilərkən istifadə etmək olmaz. O, öz internet səhifəsində yazıb ki, “lazımi kəmiyyəti X saatda tez və səmərəli şəkildə toplamaq” üçün hər bir imza potensial seçicinin elektron poçtu, telefon nömrəsi və qısa anketidir.

Lakin Navalnının namizəd kimi qeydə alınması barədə danışmaq hələ tezdir. Onun hətta prezident seçkilərində namizədliyini irəli sürə bilməyəcəyi məsələsi hələ də həllini tapmayıb. “Kirovles” işi üzrə yenidən məhkəmədə hökm çıxarılandan sonra müxalifətçi hüquq çəngəlində qalıb. Bir tərəfdən? həbs cəzasına məhkum edilib, yəni qanunla onun seçkilərdə iştirak etmək hüququ yoxdur. Digər tərəfdən, onun hələ də qanunun bu müddəasına Konstitusiya Məhkəməsində etiraz etmək imkanı var.

İqtisadi və Siyasi İslahatlar Mərkəzinin rəhbəri Nikolay Mironov hesab edir ki, Navalnı öz siyasi çəkisini göstərmək üçün imza toplayıb və o, gələcəkdə bunu etməyə qadirdir.

MK politoloqu “Bu, təzyiq üsuludur” dedi. - Məncə, bu, fərqliliyə bir siqnaldır sosial qruplar ona və müxtəlif sponsorlara dəstək olmaq üçün. Amma bu imzaların keyfiyyəti haqqında heç nə bilmirik”. Ekspert qeyd edib ki, yaxşı irəli sürülən siyasətçi 300 min imza toplaya bilər, lakin bu, çox çətindir. “Nə qədər ki, bu hekayə seçki prosesindən kənardadır, bu, PR üçündür”, politoloq deyir. - Həqiqi imzalar nə vaxt toplanacaq, hər şey ondan asılı olacaq seçki komissiyaları. Müəyyən bir mərhələdə onun əlaqəsi kəsilə bilər, amma mənim başa düşdüyümə görə, Navalnının seçkilərdə iştirakı üçün hazır ssenari yoxdur”.