Здравейте, Бях помолен да конвертирам една малка програмка, която изчислява спечелените мандати по райони, съгласно методиката на ЦИК използвана в избори от 2009-та до сега - 2013-та. Оригиналната програма бе написана на Visual Basic за Excel, и не можеше да се ползва от стандартен Browser. Резултата може всеки да види сложен ето тук - https://www.bivol.bg/bg-elections-code.html
Програмката е "standalone", не изисква сървър и може да се ползва от всеки HTML5 съвместим browser (IE10, Firefox 20, Safari 5.1, Opera 12.10, Chrome 23 или по-нов).
Отне ми 3-4 дни, като понеже пътувах през цялото време, и имах и други задължения отделях по около час на ден, а и отделно нямах Excel та съм "тествал и дебъгвал" на ум. Не ми се събира дори един работен ден. Доколкото разбрах подобно време са отделили и тези, които са писали оригиналният код на VB. Поради това, не мога да не отбележа, че не разбирам защо цената на същият този труд положен от ИО е толкова висока. Вероятно се извършват и други дейности освен броенето, които не са ми известни. Но по-вероятно говорим за скрита под формата на конкурс държавна субсидия за частна компания, държавна собственост.
Също така не разбирам защо ИО не публикува (отвори) кода на своята програмка. Приказките за фалшифициране на изборите от това са абсолютни глупости, и толкова плиткоумни обяснения, че просто нямам думи. Такова обяснение предполага, че едва ли не, сега като съм написал същата програма, изборите може да се фалшифицират? А защо ни е нужна и програма, всеки с калкулатор и методиката на ЦИК (която е публична), може да отиде в тоалетната и тайно, докато седи там да фалшифицира изборите? Стига глупости. По скоро говорим за срама от - липсата на такава програма, или нежеланието да се види тя, за да се оцени реалният труд необходим за броенето.
Казаха ми че имало и конкурс обявен сега (не разбрах дали от ИО) за програма с отворен код, която да брои изборите. Приложената тук програма, реално може да го направи това, и не изисква сървъри, операционни системи, бази с данни, може да импортира файлове, включително и във формата на ИО (така както ми бе обяснен). Аз персонално няма да я публикувам в този конкурс.
Искам да отбележа, че VB за Excel си има своите специфики, сили и особености, докато JS има други. Неща написани по определен начин на VB няма да работят ефективно на JS, ако са написани по същият начин. Все пак JavaScript е най-бързият интерпретируем програмен език в света в момента (по-бърз от Java) - за пример, погледнете проекта emscripten, където програми на C се компилират до асемблер, който се интерпретира от JavaScript, и полученият резултат работи около 2-3 пъти по-бавно от оригиналната програма, което е потресаващо бързо. Поради ефективността на JavaScript интерпретаторите, няма да видите колко неефективно работи кода. Той може да се съкрати поне 3 пъти и да се разбърза поне 10 пъти, ако се напише "както трябва". Но поради това, че ми липсваше Excel, и дори методиката на ЦИК, аз реших да съм консервативен и да следвам оригиналният код 1:1. Така или иначе програмата работи "мигновено".
Ще ми се да илюстрирам и колко е мощен съвременният JavaScript и като standalone (виж NodeJS) и като вграден в броусъри. Особено с HTML5 разширенията, вече има много малко неща, които да не могат да се направят директно на JavaScript. В този код, аз използвам само няколко реда, с които реализирам импортирането на CSV файла.
Отделно код написан само на JS, без сървърна част, работи без да товари сървъри и теоретично има безкрайна скалируемост.
Методиката на ЦИК е математически неиздържана. Тъй като мандатите първо се раздават глобално, а после се опитват да се напаснат върху МИР-овете, може да се образуват проблеми като - преразпределяне на отрицателен мандат (спечелен мандат да се отнеме на партия, който проблем случай по случай се решава от ЦИК) или пък (по-честият случай) може дадена партия, получила дори 0 гласа в даден МИР, да вземе мандат там поради преразпределение от друг район. Ние имаме таблица, която показва с bold спечеленият оригинално мандат, и после със синьо и червено пътят на преразпределението му (през следващият с най-много гласове, и т.н. докато се напаснат). Ако погледнете примерните данни от изборите през 2009-та, ще видите че едва ли не преразпределенията са били на всякъде. Така партии, които практически са спечелили даден МИР, може да не са спечелили мандат, защото на друга партия е прехвърлен такъв тук. В много ситуации, може да се получи неразрешим проблем, при който за да се продължи изпълнението трябва да се реши как да се преразпределят гласовете на ръка. Така се получава ситуация, в която ЦИК реално субективно преценява кой да получи мандат и къде, чрез гласуване. Следователно пристрастието на членовете на ЦИК, има значение, а те са партиино избрани лица, и най-вероятно биха преферирали своите (традиционните) партии, пред новите формации, дори последните реално да имат повече гласове за мандат.