Наконец-то!

Приехал доминиканский ром.


Честно говоря, я уже и забыл, что просил что-нибудь привезти из Доминиканы, так что бутылка рома была вполне себе неожиданностью. Сделал фотку на фоне решётки Смоленского кладбища. Оно уже было закрыто, так-то я прямо через него хожу. Кстати, насколько ром хорош?
Tags:

Visa calculator, часть 2

Ну вот и всё. Баги разрешены. Пурскрипт, конечно, медленен. Но на тех объёмах данных, для которых пилился калькулятор, это заметно не будет.

  • Конечно же, проблема была в объединении всех возможных диапазонов дат: как пересечений, так и вложенных диапазонов. Такое теперь устраняется.

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

Остаёся всякая мишура предрелизная, типа плашки про кукисы, GDPR compliance страница.

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: , ,

Как же я рад...

...тому, что эквадорская веха в моей жизни закончилась. С февраля 2017 по апрель 2018. В общей сложности полгода (6 месяцев) физически там прожил. 

Самые яркие моменты

  • спас человеческую жизнь во время восхождения на вулкан Котопакси;
  • обронил смартфон с половиной заряда батареи в такси и вернул его через 7 часов (отследить через гугл не удалось, отключена настройка была предварительно, когда роуминг настраивал);
  • уборщик вынес купленных сувениров на USD85 как мусор из номера гостиницы, ущерб возместили через 2 дня разборок;
  • отравился ceviches в Эсмеральдасе в кафе при автобусном терминале.

Из странного 

Потерял дефолтное состояние "дома". Теперь у меня нет дома, как такового. Везде свой и везде чужой — одновременно. Все локации ощущаются как коробки со стенами, полом и потолком.

Парсер третий: Yesod Site Release

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

Пока идут подготовительные работы к нагнетанию траффика, накапливаются задачи на вторую фазу проекта. Вторая фаза призвана показать, что сайт может генерировать доход. 

Под капотом сайта wai/warp, Yesod, Fay, PhantomJS, Postgres. Fay позволяет хорошо оборачивать JS в типы, но ему не хватает фреймворка, приходится выдумывать многое на ходу. Yesod — сам по себе монстр, в котором есть всё, что нужно, и он очень многословен. 

Появилась необходимость делать инфраструктуру под рабочий цикл. Есть два окружения для разработки: Linux, OS X. Есть тестовый стенд и продакшн сервер. 

Эквадор

План предельно прост и ясен.

1. Пичинча.
2. Пасха.
3. Базилика.
4. Папаякта, термальные источники.
5. Манта.
6. Зоопарк в Гуаябамба.
7. Экватор.
Tags:

От типов данных к типам сессий

Мне по пути с этими ребятами. Среди них Philip Wadler, его имя на слуху. Про остальных услышал впервые сегодня.

Today, software tools exploit types to optimise code, whereas they do not exploit protocols; tomorrow, software tools will exploit session types to optimise communication. In short, architects, programmers, and software tools will all be aided by session types to reduce the cost of producing concurrent and distributed software, while increasing its reliability and efficiency.

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

Эмуляторы и протоколы на любой вкус и цвет. Продвинутый ETL-фреймворк для построения миграционных и интеграционных приложений, кстати тоже. Учитывая то, что данные в общем случае надо протаскивать через по-разному ветвящиеся последовательности преобразований.

Интересно, можно ли под это дело будет открыть какой-нибудь ETL/IO consultancy...

Эмуляция IO

Сначала было нужно эмулировать железку, плюющуюся по телнету предзаготовленным выхлопом по ограниченному списку команд протокола TL-1. Потом на вход эмулятору подавалась заготовленная наперед директория со специально составленными парами файлов, по которым формировалось отображение входящего запроса на соответствующий ему ответ.

Стало лучше, появилась примитивная гибкость. Однако, этот подход имел фатальный недостаток. К примеру, можно было сначала "залогиниться", потом сделать "логаут", а после запросить какой-нибудь список или какую-нибудь конфигурацию. Последовательности никакой.
РазмышленияCollapse )

Колумбия

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

  1. Богота. Гора Монсеррат.

  2. Богота. Закат, центр, Terra Colpatria.

  3. Сальто дель Текендама.

  4. Сипакира. Cathedral del Sal.

Tags: ,