Парсер третий: Selenium

Selenium — это чисто точка входа в удивительный мир возможностей использовать разные драйверы. 

Хром и мозилла завелись сразу. 

PhantomJS ругнулся на ghostdriver, зашитый в его кишки. В кач-ве решения предлагают пересобрать его из исходников, захачив ghostdriver.

HtmlUnit валится с ошибкой, вах, не могу поменять read-only поле constructor, исполняя что-то реактоподобное, что висит на целевом ресурсе.

Тут я на распутьи: либо таки тащить chrome или chromium на сервер, либо возиться и пересобирать phantomjs под OS X и Linux.

Парсер третий: PhantomJS deprecated

Целевой сайт, с которого велся опрос нужной информации, поменял дизайн, понакрутил JS-скриптов с ES6, в результате одна из функций на сайте, с которого вёлся опрос, приказала долго жить. Позднее обнаружилось, что JS-скрипты для PhantomJS вообще перестали возвращать корректные результаты. Попытка их реанимировать ни к чему не привела. Не работает цепочка таймаутов и интервалов, и всё тут.

Выяснилось, что PhantomJS официально deprecated. В качестве альтернатив предлагалось тащить гугл на сервер. Такая перспектива меня не порадовала, в результате пошёл смотреть дальше. Недавний тренд показал, что selenium нормально себя показывает применимо к написанию ботов. 

На Hackage обнаружился webdriver, собираю Hello world, смотрю, что из этого выйдет. Если базовые тесты пройдут, потащу к себе.

Наконец-то!

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


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