June 4th, 2018

Visa calculator, часть 1

Выпал надолго из колеи. Надо раз в сезон брать отпуск, чтобы хвосты устранять. После перехода со всяких 3rd party трэкеров задач на локальный org-mode что-то да сдвинулось с мертвой точки. Конечно, пока о стабильности говорить не приходится, но тем не менее.

История вопроса


  • Год назад в Эквадоре мы с коллегами рассуждали о минусах частых перемещений по миру: это надо за визами следить, за нерезиденством... Так родилась идея о визовом калькуляторе-валидаторе, об инструменте, с помощью которого можно проверять, сколько осталось дней на сейчас или сколько дней останется если ещё сколько-то дней остаётся, но надо будет скоро опять лететь/ехать куда-то вдаль и надо планировать поездку, исходя из оставшихся дней. Ну или перезаказывать визу.

  • В то же время игрался с PureScript, тогда были breaking changes с обратной совместимостью между его инструментами, связанные с переходом с 0.10 на 0.11, если мне не изменяет память. На выбор из MVC можно было взять Pux или Halogen. Halogen не завёлся, Pux взлетел сразу же.

  • Было решено сделать эксперимент без обращений к серверу. Т.е. чисто клиентское предложение, зачем там сервер. Он там не нужен. Все данные можно обработать прямо там. Заодно и посмотрим, что из этого выйдет.

  • Долго ли, коротко ли, после организации всех связанных с этой тулой задач в org-mode, процесс ускорился и вышел на финишную прямую.

  • Алгоритм, вычисляющий собственно результат, был написан в период бессонницы. Выход из бессонницы был связан с возвращением из командировки, из-за нагрузки пришлось забросить его в дальний ящик. Спустя три недели я на код тот без содрагания смотреть не мог. Ещё неделю тыкал его палкой, и он начал подавать признаки жизни.

Как этим пользоваться

  • Наколотить дат в формате YYYY-MM-DD.

  • Ввести ограничения по визы X дней за Y (другие типы визы заложены, но пока не реализованы).

  • Собственно всё. Любые данные немедленно триггерят вычисления.

Как это работает

  • Выбираются все будущие диапазоны из всех введенных корректно диапазонов.

  • Слева направо по будущим диапазонам для каждого дня идёт вычисление.

  • Смотрим в прошлое на Y дней и ищем, исчерпаны ли X дней. Получаем разницу, от которой и отталкиваемся.

  • Смещаемся по будущему до тех пор, пока лимит не исчерпывается.

Демо

После деплоя вылез ряд недочётов, мешающих заявить о production readiness. Зафиксировал, зарелизил. И да, я снова в форме.
Tags: , ,