ответ на #2906666

1. теперь мы знаем, что делают наши изменения в коде.
2. мы знаем, как протестировать наши изменения.
3. но мы не уверены в корректности требований, по которым эти изменения внесены.
4. да пофигу на незнание джавы, умеешь рисовать картинки и писать алгоритмы, а код — это хрень, разве лишь много его.
5. новые требования сводят на нет всю стабилизацию, это нормально.
6. эмулятор хорошо, но нужно подавать ему на вход корректные наборы данных, которые диктуются требованиями, см. пункт 2.
7. хорошую вещь Ignite (en. "воспламенение") не назовут. вот и тушим пожары.
8. я в нуар-сити, надо выбрать соответствующие фотки..

1. мы не знаем, что делают наши изменения в коде.
2. мы не знаем, как их протестировать.
3. но начинаем догадываться.
4. мы не знаем джавы.
5. и это не помешало нам отбить эскалацию. и стабилизировать решение.
6. мы получили 3 разных эмулятора запросов в нашу сторону, выбрали лучший, который успешно стучится на прокси, но пункт 2 и пункт 3.
7. игнайт — сыроватая вещь.. Кассандра — ещё более, т.к. 8 и 9.
8. WHERE ... IN ('x'); — OK
9. WHERE ... IN ('x','y'); — not implemented yet, LOL

1. на новом проекте без джавы никак.
2. проект для меня и команды начался сразу с пожара, огонь которого успели развести коллеги из Индии.
3. интенсивность поступающей информации велика и меняющихся требований велика.
4. налицо нежелание коллег передавать нам знания.
5. начальство требует от нас патчей сразу, не беря в расчет время на погружение и адаптации к существующим процессам (их можно считать нет).
6. за время между митингами ничего не успеть написать на джаве, т.к. писать надо много. фрустрирую. прототипировать тоже некогда..
7. брать работу на дом нельзя, иначе потом случаются инциденты со светофорами или бессонные ночи.

кажется, пора что-то менять..

когда начинаешь погружаться в апачевский инкубатор, становится трудно остановиться. сначала Cassandra, потом Kafka, может быть, Spark.. через какое-то время думаешь, Ignite или Hazelcast.. отдельно доставляет приходить на совещания, на которых англичане бьют палками индусов, сразу перед глазами начинают мелькать картинки из прошлого, которое я не мог видеть..

Что-то chrome/chromium тянуть на сервер неохота, ведь они испытывают те же проблемы, что и фантом абсолютно сходу.. Так что придётся выдумывать новый финт ушами. Возьму Selenium, webdriver, посмотрю, насколько сия комбинация жизнеспособна. От JS уже тошнит.

команда сопорта целевого ресурса очень хорошо работает по запрету парсинга контента, накидали скриптови фреймов, которые делают асинхронную прогрузку страниц из фантома затруднительной. и вместе с тем они открывают доступ к постраничному обращению через параметры запроса, которые ранее были закрыты.

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

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

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

попутно делаю декомпозицию задач по второй фазе проекта с сайтом. пока очевидно, что Fay можно немного улучшить, добавив туда немного виртуального состояния и event loop. как это сделано в purescript pux. но для этого надо реализовать ещё одну зависимость. короче, нужен эксперимент на кошках.

если этого не сделать, то голый Fay потом будет классно сопортить.

в мире OSS всегда надо иметь возможность взаимодействовать с миром упоротых систем, написанных кем-то другим.. зачастую эти системы общаются с внешним миром через стандартные интерфейсы и по стандартным протоколам, но иногда встречается всякое.. но главное в этом мире говнокода — это то, как внешний мир данных отображается на внутренний мир данных. и вот эти маппинги.. они повсюду.. и эксель юзать для их обработки — ну зло. а что если маппинги надо куда-то замаппить? это ж ужас. а что если маппинги маппингов надо куда-то замаппить? а что если, we need to go deeper? а ведь так оно и должно работать..

Сайт — это жесть, релиз ещё на неделю может отложиться. Ещё 4 замечания зафиксировано по адаптивной верстке. Ещё +10 мелких поступило сегодня.
Ну хорошо, что эта мелочь тривиально решилась правками стилей.
Верстальщик сделал лого текстом вместо картинки. CSS magic.
Жду пятой итерации замечаний.

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

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

а это вообще нормально, что компиляция yesod формы для POST запроса из 12 полей вызывает OOM? такое поведение уходит, если дать виртуалке 6 гб. На 5.5 гб падает. при этом компиляция под нативную ось тянет и не жрет столько памяти..

Студентка решила повторяющуюся мегазадачу.
20 часов превратилось в 0.25 часа.

Другая тоже подтягивается: решила 3 типовые задачи.

Хорошо-то как. По сайту осталось 7 основных доработок, блокирующих релиз. и 3 минорных, которые надо бы тоже решить..

дорос до докера. для того, чтобы получить  ~/.stack/programs/x86_64-linux на OSX, пришлось в stack.yaml добавить следующее:

system-ghc: false
docker:
image: fpco/stack-build:lts-8.0
enable: true
run-args:
— --ulimit=nofile=60000
set-user: true

GHC для сборки нужно порядка 30000 открытых файлов. системные значения — около 15 тысяч. Да, забыл сказать, что сначала надо было сделать upgrade проекта с 7.10.2 на 8.0.2. До этого в системе действовал какой-то другой лимит, уже успел забыть, мешавший компилятору делать своё дело. Потом с lts-3.22 уходить на lts-8.21. Теперь — делать небольшой downgrade до 8.0, т.к. для 8.21 не было образа, а делать образ спецом уж крайне лениво было. Теперь вот зоопарк конфигураций.

Во-первых, открывается англоязычный интерфейс в жуйке. Возможно, это связано с тем, что региональные настройки английские.
Во-вторых, пошёл массивный прогресс после длительной стагнации:

Сайт:
— делегирование домена успешно осуществлено.
— осталось несколько тэгов из schema.org прикрутить.
— можно деплоить сайт после этого.

Офис:
— грядёт переезд в новое место.
— доки, наконец-то, сделаны на том уровне, при котором их не стыдно светить заказчику.
— а значит, что можно стартовать билд и биться за качество нашего солюшна.
— и из разморозки выйдет проект по менеджменту проекта.

Новости фронтэнда.
— после устранения боли в стерилизации JSON и прикручивания CORS к серверу процесс качественно ускорился.
— не покидает меня мысль о том, что промежуточный State на клиенте не нужен. N2O.hs себя хорошо показывал, но еще очень сыроват в качестве веб-фреймворка. Думаю после деплоя сайта уделить ему качественно времени.

Вроде всё есть, а сериализации-десериализации массивов/списков днём с огнём не сыщешь. Чуть дальше примитивных типов уйдёшь — Generic не шуршит. Nested types — тоже ни в какую. Пошёл в код посмотрел purescript-foreign. А там всё общение через FFI. Ну зашибись, приехали. Причем без посредника — никак. Напрямую — жесть.

instance Decode (Array MyAwesomeType) не указан, вывести не могу.
Заводишь инстанс на Array — сиротка, вай-вай-вай, пошёл вон.

Придётся юзать FFI: github.com

целевой ресурс, с которым парсер интегрировался, в очередной раз за 2.5 года изменил дизайн. отвалилась одна бизнес-функция. попутно выяснилось, что там накрутили фич модных, которые не способен выполнить фантомjs без polyfill. решение проблемы засора js-консоли оказалось вообще на поверхности.

page.onError = function(msg,trace){}

Пока отхожу от джетлага, взялся за код юая, хочу синхронизирующиеся комбобоксы грамотно воткнуть, чтоб без костыля. События на события можно вешать, но потом также можно упороться в отладке. Иными словами, нужно как-то уметь познакомить два комбобокса. Меняешь значение в одном — меняется у соседа. Чтобы вообще без разницы было, какую из двух форм заполняешь. Короче, спать надо идти, а не маяться дурью на ночь глядя.

Не, так, конечно, бывает. Вместе с компилятором рекомендуется ставить `pulp`, а-ля `ghcid`, только покруче.

Делаем 1.
pulp init # OK
pulp build

/usr/bin/env node not found.
ок, сделал симлинку, поехали.

Делаем 2.
pulp build

Error found: in module Control.Monad.Eff
bower_components/purescript-eff/src/Control/Monad/Eff.purs line 36, column 1 — line 36, column 52

reddit.com чувак говорит, ставьте новый purescript, там все починено!

Делаем 3
npm install -g purescript@next

Нода говорит, я старая, не панимат.
искаропки недостаточно хипсторская шла. скачали, перебили, да, симлинка не нужна, поехали.

Делаем 4.
pulp build

psc not found
В том же треде чувак пишет, я тут переименовал утилиту, psc там, и другие старые выкинул на мороз, юзайте пацаны новую, purs. пока чиню поломанное API с pulp, юзайте обертыши из директории scripts, все работает. Ок, пошёл, сделал симлинков, выдал доступ юзеру своему.

Делаем 5.
pulp build

Invalid option `--ffi'

В том же веткой ниже другой чувак говорит, всё тлен, пацаны, в гуглогруппе разрулили.
Ломать не строить. Откатывайтесь обратно на старый, пока, вот вам зависимости, вот вам счастье. Ок, поправил зависимости.

Делаем 6.
bower i
pulp build.

* Build successful

Большой прогресс по достижению цели.

Дали тестовое задание из конторы, в которую стучусь уже давно из-за локации, в которой находится один из её офисов. Запилил мокап, отправил тут же. Ща буду генерить JSON и клиента для отображения. Заодно посмотрю, на что способны PureScript/Elm. Fay мне понравился, хоть и он и того, но не им единым. И да поможет мне сила.

Навеяно #2861604.
Помню на прошлом рабочем месте был крутой чел. Т.е. мы офигевали от того, что происходит.

— Он приносил в офис бутылку пива, допивал её и выбрасывал в окно, выходящее во двор, где лежал строительный мусор всякий, в аккурат за 30 секунд до входа в комнату начальства.
— Дали ему задачу взять запилить для жыбосса JSP по мотивам прототипа-скрипта на PHP, но задачу формализовали до жути (маршрут, допустимые параметры гет-запроса, логика, где брать данные, что использовать). Тот берет прототип, подмахивает расширение .php на .java, открывает в IDE и заявляет с претензией, что ваш г-код не компилируется.
— Через неделю в коде класса появился метод getPostgreSQL().
И многое-многое другое. Быстро стал мемом в компании. Выгнали его на мороз, короче.

Но выяснилось, что на новом месте он уже был лидом, а ещё через год — менеджером.

Дополнил все точки выхода из диаграммы условий контентом, пару раз отрефакторил.
Бинарное дерево с Bool и вышло. Лаконичнее код уже не получилось написать. Посмотрю на код через месяц-другой обязательно. Как его ещё можно улучшить.

Добрался до гипотез. Реализовал весь подсчет на стороне базейки. Надо протестировать. Потом — монетизация. Пока смотрю в сторону коробочного решения типа яндекс.кассы.

Потому что, сначала надо фичи релизить, да. А потом уже отсекать сущности бритвой Оккама. Долгострой пора выводить в продакшн.

[atom]

A0 = connect.t
Z0 = wait.t
...
A2 = auth_fail.t
A3 = retry_auth.t
A4 = logout.t

[hfsm]

disconnect = *-Z0 # any command, disconnect after timeout defined in wait.t
retry = A2-A3 # wrong username, retry authorize
sequence1 = A0-retry-retry-A4
...

Дамп из головы пока такое выдаёт в качестве синтаксиса для описания иерархических конечных автоматов.