@haskellru

Страница 1486 из 1551
Alexander
25.09.2018
14:46:16
а что такое представление для форм?

там есть servant-blaze который может выдавать html, из всего у чего есть ToMarkup

я не уверен, что из типа данных он может сгенерить форму

у нас используется swagger, который по API геренирует интерфейс с формами

Google
Alexander
25.09.2018
14:47:50
но это не для пользователя интерфейс

Yuriy
25.09.2018
14:48:30
а что такое представление для форм?
тип для представления в программе

и функции его декодирования из запроса

но это не для пользователя интерфейс
зачем формы непользователю?

Alexander
25.09.2018
14:49:40
есть servant-multipart для multipart-formdata

есть тестирование и администрирование

Yuriy
25.09.2018
14:50:14
есть тестирование и администрирование
а, так это тоже пользователи, только не конечные

Alexander
25.09.2018
14:50:31
для urlencoded формы не знаю, поидее оно же через обычный url пойдет, и надо там комбинировать

Kakadu
25.09.2018
15:30:45
А на каком примере можно видеть, что хвостовая важна?

Alexander
25.09.2018
15:34:59
forever f = f » forever f ?

Kakadu
25.09.2018
15:51:52
А чтоб без монад?

Alexander
25.09.2018
15:52:54
в haskell хвостовая рекурсия не настолько интересна в силу ленивости

Google
Aleksey
25.09.2018
15:53:06
fix же

или iterate

Так. Туплю. Обе не хвостовые :)

Alexander
25.09.2018
15:55:25
fix - вообще хитрый

Aleksey
25.09.2018
15:58:49
А чтоб без монад?
В любом рекурсивном коде с аккумулятором

Yuriy
25.09.2018
16:32:08
а зачем доказывать важность TCO? не важна она. просто есть два стула — можно в язык добавлять особый синтаксис для циклов, а можно просто TCO

A64m
25.09.2018
16:32:42
ну нет

фп код писать без нормальной tco проблематично

Yuriy
25.09.2018
16:34:17
да с TCO всё проще. а если нужна явная форма цикла, она пишется как функция

A64m
25.09.2018
16:51:30
да не только "форма цикла" нужна, нужно чтоб взаимнорекурсивные функции нормально оптимизировались

иначе никаких комбинаторных парсеров и т.д.

Yuriy
25.09.2018
17:07:37
Terminator
25.09.2018
18:26:12
@d37284 будет жить. Поприветствуем!

@sukhmel будет жить. Поприветствуем!

Alexander
26.09.2018
06:04:37
@chshersh прикольный логгер, точнее то, что база без лишнего и можно на его основе нормальный сделать. Вообще в логгере нужно примерно как в di, иметь структуру, стек [path_or_context]

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

остальное все равно ты будешь делать middleware

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

но похоже в этой либе нету дуракцих решений из di и katip и есть шанс сделать хороший логгер

Dmitry
26.09.2018
06:08:20
@chshersh прикольный логгер, точнее то, что база без лишнего и можно на его основе нормальный сделать. Вообще в логгере нужно примерно как в di, иметь структуру, стек [path_or_context]
Спасибо! ?`CallStack` уже добавляется и показывается номер строки кода, в которой было логирование сделано. ThreadId использовался в прошлом проекте, где я работал. Расширить можно просто. Я надеюсь, что после использования станет лучше видно, чего не хватает и что надо допилить.

Google
Alexander
26.09.2018
06:08:21
мне наверное ещё хотелось бы возможность иметь какой-то стейт между сообщениями для эффективности

callstack не нужен

Alexander
26.09.2018
06:08:40
нужен стек тегов

Dmitry
26.09.2018
06:08:56
нужен стек тегов
Это тоже не так сложно сделать, интерфейс вроде позволяет. Можно считать, что CallStack — это такой самый простой работающий из коробки автоматический стэк тегов.

Alexander
26.09.2018
06:11:55
katip притащили в пакет слишком много: 1. можно добавлять много scribe (на самом деле всегда можно сделать 1 который делает много) 2. есть много лишнего, что логируется: environment, processid и т.д и тащится 3. не эффективное представление тегов 4. не конфигурируемый вывод сообщения, в итоге приходится scribe переписывать di: 1. не конфигурируемая асинхронность 2. только monad-approach

стек тегов это возможность ко всем сообщениям в этом же стеке добавить какую-либо информацию, например, user id,

и компонент

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

Dmitry
26.09.2018
06:14:36
или я что-то не знаю про стек тегов или мы понимаем под этим совсем разное
Пока что CallStack используется, как простой способ показывать строку кода, в которой вызвалось логирование. Прикольная фича, и иногда бывает полезно. Конечно, можно отключить, чтобы этого не было.

Dmitry
26.09.2018
06:15:13
стек тегов это возможность ко всем сообщениям в этом же стеке добавить какую-либо информацию, например, user id,
А, кажется, это как раз того, для чего в библиотеке есть комонады ? С их помощью можно вроде решить эту проблему, и она станет не проблемой

Alexander
26.09.2018
06:15:24
в katip это не стек, это просто большой Aeson.Value

и на каждой записи в лог он сериализуется, (идеально было бы как-то переиспользовать работу) но я не знаю как

в di это как и надо стек

в одной прикольной закрытой сишной программе там dsl для управления стейт машинами логов

но, к сожалению, у них патенты на это решение

у вас в либе прикольно, что она не делает лишнего (судя по блогу)

и делает то, что надо

Google
Dmitry
26.09.2018
06:19:42
у вас в либе прикольно, что она не делает лишнего (судя по блогу)
Это и было одной из основных целей библиотеки. Сделать гибкий и простой базовый интерфейс, поверх которого можно уже сделать все, что душе захочется.

Alexander
26.09.2018
06:20:17
т.к. меня достало, что с катипом я начинаю переписывать куски

400 строк переизобретения

The mirror
26.09.2018
07:27:08
Кто-то тут когда писал, что им удалось сериализовывать программу на Free Monads, тем самым обеспечивая факт, что программу можно будет запустить после инцидента, восстановив и десериализовав ее. Я правильно понял?

Admin
ERROR: S client not available

The mirror
26.09.2018
07:27:44
По-моему это был @graninas, если не ошибаюсь

Александр
26.09.2018
07:28:07
Это был я

Программу перезапустить после инцидента - да. Можно прибить kill -9 раннер, запустить другой (потенциально на другой машине), и программа начнет работать с того же места. Работало это так: - У нас всегда был текст этого workflow в БД в виде PureScript-кода. - Мы отправляли в БД результат каждого шага. - Мы умели взять список результатов от шагов скрипта и прокрутить скрипт, не выполняя операции, до места, когда он сдох.

Мы также могли считать, сколько шагов скрипт выполняется, и если нужно, его обрывать.

Александр
26.09.2018
07:33:39
Про буферизацию и персистентную очередь не понял Мы сделали эти workflow для бизнес-сценариев, которые могут длиться оооочень долго. Хоть час, хоть день, хоть неделю.

Типа, ты задал программе входные данные, и можешь в следующий раз задать те же данные, и программа пойдет тем же путем? Нет, наши workflow интерактивные, они общаются с внешним миром, в них есть развилки и все такое

Alexander
26.09.2018
07:35:32
у нас так тоже было

там был граф + куча воркеров работающих, и умеющих персиститься

Александр
26.09.2018
07:36:17
Да только ленивый не писал свои workflow ;)

Alexander
26.09.2018
07:36:17
сишники такое любят, но они без free monad обходятся

лучше бы мы без free monad обходились

accidental complexity там огромный

Александр
26.09.2018
07:36:40
Ну мы еще могли подменять сценарии на ходу при некоторых условиях.

Google
Александр
26.09.2018
07:37:01
accidental complexity там огромный
У нас крайне малый. Может, у вас неправильно все сделано было

Alexander
26.09.2018
07:37:05
может

Александр
26.09.2018
07:37:16
Я ж скрины где-то постил

Alexander
26.09.2018
07:37:52
вообще тот кусок пыталсь сделать 3 человека, почему-то по разному

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

но по хорошему надо было все выкинуть к чертям

Anton
26.09.2018
07:38:29
И переписать!

Alexander
26.09.2018
07:39:19
да

Anton
26.09.2018
07:39:19
На колве итераций сходящейся к бесконечности, получилось бы обязательно найти нужный дизайн

Alexander
26.09.2018
07:39:32
нужно было сделать апи к очереди и базе

и дать писать скрипты на lua

Александр
26.09.2018
07:39:46
Ну, если там сугубо Haskell, то сложнее, конечно. Нас спасало то, что PureScript - это, на самом деле, JavaScript, только в обертке. Чтобы персистить сам текст программы и потом запускать его на node.js использовался простой, но все же трюк из мира JS

Alexander
26.09.2018
07:39:51
и сказать заказчику, вам надо - вы и пишите

Anton
26.09.2018
07:40:05
> lua /me triggered

Страница 1486 из 1551