понедельник, 27 апреля 2015 г.

Принцип двойной записи и псевдовыборы

Тут некое видео, которое показывает тонкие места нашей(все давно понимают, что не нашей) избирательной системы:
https://navalny.com/p/4219/

И так, основной глюк всей этой системы - это "вброс". Проблема, как мне кажется, имеет очевидное решение.

Почти постановка задачи.

На избирательном участке в день выборов проходит не более 2000 человек (мультиплицирующий коэффициент не так важен). Важен факт, что всех этих людей обрабатывают (проверяют в списках/паспорт) вручную.

Если в результате бюллетеней оказывается меньше, чем официально выдано - это формально не проблема. Текущими законами (очевидно, это все с моей точки зрения, так как "закон о выборах" я не читал) не запрещается взять, но не проголосовать.

Хуже, если бюллетеней оказывается больше, чем изначально выдано.

Задача сводится к проверке аутентичности/подлинности бумажки. Очевидно, что если бумажка только содержит галочку и ее можно отпечатать в некоторой типографии, то ничего не получится.

Первое тривиальное решение, которое приходит в голову - это заверять каждую бумажку у Главного(-ых) в избирательной комиссии. Подписи 3-4 человек в углу документа/специальном поле, позволяют отделить выданные от "вброшенных". Круговая порука, 3-4 человека, представляющие разные стороны. По крайне конкретно эту проблему должен решить. Минусы тоже очевидны - замедление процесса, и необходимость в изменении законов/процесса. Лично я - за честность.

Возможна куча других модификаций, типа записывать что этот бланк выдан тогда-то (с точностью до минуты) в отдельный лог (журнал). И на бланке ссылка. В случае подозрений можно искать в логах. Тут только аккуратно продумать с тайностью голосования, чтобы нельзя было привязать голос к голосующему.

Варианты с фильтром Блюма, (полу-)центральной выдачей GUID-ов и т. д. возможны, но пока довольно сложны.

ЗЫ. Подделывать подписи 3-4 людей тоже возможно, но таки сложнее. 

воскресенье, 19 апреля 2015 г.

Абстрактнее

https://gist.github.com/noelwelsh/02b9ecf6d21c7b8934e8

Хотя в текущем проекте потенциально null-ы могут придти только из внешних систем (), но писать обработку на всякий случай приходится. Сейчас это только Cassandra и какая-то хреновина для гео-локации по ip (maxmind). Наследие. "В java только дедушки" (с).

null вообще запрещен синтаксически к употреблению в scalaStyle. Приходится в нескольких местах закрывать/открывать проверку стиля.

Вот те две проверки на равенство null теперь можно довольно красиво заменить на (см. ссылку на месте первого абзаца):

> result.?.getOrElse("")

Перфекционизма с возрастом все больше и больше. Это отход от студенчества.

Прошелся по коду. Оказалось, что Option[_] тоже можно глуповато использовать. Очевидно, это лучше чем null. Но и пересолить/переборщить тоже можно. К тому же, если потом в каждом месте match-ить или if-ить. Try[_] там оказался уместнее. Хотя дать волю, то его тоже начнуть match-ить или if-ить, хотя кроме необходимого map/flatMap больше ничего и не надо.

В scala очень нравится то, что через месяц (и каждый месяц в течение нескольких лет) написанный код уже начинает вызывать отторжение, и хочется переписать на чуть более абстрактные абстракции. И это очень клево, хоть какая-то движуха.