← All posts tagged погроммирование

agr

теперь я понимаю, почему у Саймона перелопачен был весь blaze-html. нельзя просто взять и параметризовать AttributeValue. у него поменялся kind.

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

agr

EventHandler просто заработал как надо, а вот регистрация ивентов подкачала. Выкидываю оттуда весь реакт и весь ghcjs на мороз. ещё кажется, что есть лишние конструкторы у MarkupM, пока не пойму, нужны они мне или нет. врезка поддаётся со скрипом.

agr

первую страницу налабал на новом фреймворке:
— 1 тип данных рендерится,
— 10 разных рекордов
— 4 вида элемента
— 5 событий
— рендеринг через blaze-html
— если проводить аналогию с Data.Aeson, то для "Value" ещё не покрыт "Object".
— куча бойлерплейта.
— связь событий с моделью прописывается отдельно, т.е. потенциально: "забыл", и привет баги в рантайме.. надо думать новый констрейнт, чтобы прямо в MarkupM (или обёртке) можно было события назначать, ну чтобы хотя бы как в пурскрипте.

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

под размерностями я понимаю:

1. модель коммуникации
— broadcast/multicast
— выделенная сессия
2. реализации MVC концепта, нужны примеры (список простых примеров уже есть, бери и делай)
3. формат данных:
— текстовый (+)
— бинарный (на следующей странице обкатаю)
4. клиентские (JavaScript) события (условно, тысячи их.. это целый мир джаваскрипта, на который я замахнулся). Пока покрыто лишь 5.

agr

— ещё буквально парочку ивентов запилить, решив сопутствующие проблемы, и итерация 1 всё..
— итерация 2 — админка для блога, набиваю шишки, собираю и реализую новые требования.
— итерация 3 — запилить монадку поверх MarkupM, чтобы связать (пока) разделённые обработчики событий, с элементами, на которые они завязаны..

и можно выносить фреймворк наружу..

agr

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

agr

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

последнее что сделал, это — shared state.

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

первые 2 дают разделение серверного рендеринга на несколько опций (рендерить всем; рендерить всем, кроме меня; рендерить только мне).

бонусом получаю такую фичу, как подсветка редактируемого в настоящий момент атрибута.

agr

одолел, короче, эту ботву с базой пакетов. есть замечательный пакет ghc-paths. в нём пути к тулам определяются через переменные окружения, например, GHC_PACKAGE_PATH.
cabal-install, ghc и ghc-pkg растут и развиваются. и тут приходит стэк и начинает переписывать переменные окружения, т.к. у него есть минимум 2 базы пакетов (от снапшота, компилятора) в ~/.stack. ещё есть ~/.../.stack-work. там тоже есть, да. по ходу дела во время билда stack делает своё страшное дело и затирает HASKELL_SANDBOX_CONFIG, устанавливая его в базу пакетов снэпшота (!). вот это вообще ни разу не тривиально. я думал, что "песочница" — это база локальная, из .stack-work. а оказалось, что нет. снэпшот — это песочница. таким образом, все extra-deps, которые кладутся в .stack-work, остаются не удел и не видны.

придумал вообще рабочий костыль.
если вижу в пути ".stack", то пускаю "stack exec — ", иначе — оставляю значение из ghc-paths (либо дефолтное).

agr

самая боль — рисовать клиента для отображения метамодели на страницу на Fay. GHCJS неохота тащить на сайт, слишком уж он жирный (GHCJS).. вчера сел и по-честному написал, что я хочу от Fay, чтобы мне не было больно.. и спустя два часа вырисовался план. так можно убить сразу двух зайцев..

— JQuery и иже с ним уйдут (но постепенно.. я успел на свою беду наговнокодить три ведра дерьма, придётся взять лопату и убрать за собой).
— код клиента облегчится в N раз (останутся только транспорт и протоколы, inspired by N2O)
— появится серверный рендеринг всей динамической шляпы..

за сегодня написал транспорт в приемлемом виде..

agr

11 отказов с кодом 405. вообще странно, отдельно взятый браузер от яндекса. но конкретно в этом случае ему спасибо. бот пришёл ко мне от него с этой ошибкой.. полез воспроизводить — столкнулся с бесконечным циклом и too many redirects. пофиксил, да. выводы: нужна документация, слишком много условий, созданных в разное время.. глаза разбегаются..

agr

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

agr

Решил, наконец, поиграться в метамодельки. Веселье заключается в том, что каждому рекорду соответствует ещё его метадата. В связи с чем, возникает хороший вопрос... Допустим, у меня есть тип данных A с именем объекта (aName) и ещё 8 рекордами (aParam1 .. aParam8). Поскольку я помимо данных из базы тяну ещё и метаданные, по которым их идентифицировать, и не люблю ддосить базу, то мне надо вытащить за раз одним селектом 19 полей (имя, идентификатор и тип объекта (3) + параметр и его айдишник x 8 (16)) из базы. Persistent со своим RawSql отваливается на подступах с 8 колонками.

postgresql-query потянет? или что-т другое?

agr

через час после включения новой фичи в телегу прилетает сообщение об ошибке. странное сообщение о том, почему Int не равен Null. оказывается, это древняя багофича persistent: select sum(x) from ... where ... при отсутствии данных persistent сходит с ума и приводит типы не туда. ну ок, пофикшено другим запросом. теперь интересно, сколько отказов в связи с этим было..

agr

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