to post messages and comments.

← All posts tagged ?

Господа. Я хочу генерировать код на нескольких, языках Golang, Python, JS . Есть описание структур данных в виде yaml списков. Я планирую по этим файлам построить AST и генерить для каждого языка код.
Подскажите что вы бы использовали для этой задачи. Ну или что принято использовать.

Господа. Созрел вопрос.
Итак есть функция github.com
Задача добавить перед ней вызов функции которая меняет State, в зависимости от Term-а (Если терм больше текущего LeaderState -> FollowerState) и вызвать пару функций в монаде Transition.
runTransitionT — это "синоним" RWST и state тут конкретный тип состояния (FollowerState/CandidateState/LeaderState), а не обобщённый(existential?) SomeState .
Я решил эту проблему вот таким способом : github.com
Т.е. сделал трансформерами RW без T и поменял тип вызываемых функций на более общий.

Может быть возможно как-то поменять Transition чтоб это влезало в одну монаду?

Пришлось мне все сообщения об ошибках посчтитать и пронумеровать, для того чтоб пользователь моего API мог интернационализировать их. Собственно за базу взял идею wiki.haskell.org . Вместо render можно конечно просто Show использовать, но мне удобнее ByteString . Ну и сделал инстанс Enum. Однако, поскольку не все конструкторы Nullary , toEnum внятный изобразить нельзя.
Внимание вопрос, кошерно ли использовать такой урезанный Enum или лучше навелосипедить свой Message -> Int ?

Продолжая вопросы из — #2794212 . Собственно расставлением кучи ! мне удалось заставить вылетать эксепшн в нужном потоке. Однако, мне нифига не понравилась такая т.к. мне кажется это совсем не правильным. Т.е. sink по умолчанию ленивый по своим агрументам, и только после того как я сделал его энегричным, что-то заработало.
Собственно встаёт вопрос как принято решать в кондуитах проблемы с тем что санк с эксепшеном может улететь в другой поток?
Кроме того можно, же воспользоваться decodeOrFail . Но насколько я понимаю тогда придётся воспользоваться map Maybe (...) $$ catMaybe $$ sink . Но информация об ошибке пропадает. Чтоб не пропадала придётся писать свой Conduit.

Есть у меня RollingQueue привязанная к UDP сокету. И если в сокет записать херню вылетает эксепшн из Binary десериализатора. Но обрабатывается он совсем не там где я ожидаю. Код тут:
gist.github.com
Подскажите почему так происходит.

? IP udp

Размер датаграммы которую можно отослать без разбивки на несколько TCP пакетов равна MTU — TCP Header — UDP Header (8). Размер TCP header 20-60 байт и зависит он от наличия Options. Что это за опции?

Есть у меня необходимость слать некие сообщения через UDP, перед посылкой я хочу проверять их длину, а если длина больше датаграммы разбивать на части. Собственно я хочу чтоб кондуит который отправляет сообщения принимал на вход только сообщения проверенной длины.
Собственно вопрос как такие ограничения принято задавать в системе типов?

Есть 2 списка [(Int,a)] и [(Int, b)] . Нужно провести классическую sql операцию JOIN , тут вроде просто
[(snd i, snd j) | i <- as, j <- bs, fst i == fst j]. А мне нужен Outer JOIN. Чтоб результатом был [(Maybe a, Maybe b)] .
Как такое принято делать?

Есть такой тип данных:
data Result = COk | CFail String

Т.е. что-то вроде Maybe но наоборот. И вот приходится мне комбинировать эти Result в стиле bind (>>=) .
Норот, может есть где-то готовый тип с инстансом Monad ?

господа, а не посоветуете ли вы мне какой-нить хороший мануал для ant-а . Хочу настроить автосборку своего хаскильного проекта через Bamboo а у одминоф там ант.

Господа есть проблема с настройкой vpn-а. Есть сеть на роутере(debian-wheezy)(192.168.1.5) этой сети не поднимается openvpn тунель, а на компе который внутри сети понимается (192.168.1.3).
На роутере 4 интерфейса eth0, eth1, wlan0, br0.  eth0 и wlan0 объединены в br0, на него раздаётся dhcp. NAT делается одной коммандой. /sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE .
Внятной ошибки openvpn на 192.168.1.5 не пишет:
Mon Apr 20 22:25:42 2015 TCPv4_CLIENT link remote: [AF_INET]176.126.237.214:443
Mon Apr 20 22:25:42 2015 Connection reset, restarting [0]
Mon Apr 20 22:25:42 2015 SIGUSR1[soft,connection-reset] received, process restarting

Собственно вопрос куда копать?

Люди, а присоветуйте мне структуру данных для хранения лог-а. Вот есть в RaFT-е лог. От него требуется:
1. выдавать запись по индексу (индексы целые монотонновозрастающие)
2. выдавать последнюю запись
3. добавлять запись в конец
4. убирать записи с индексом >= нужного

Сейчас такой лог реализован IntMap-ом в памяти и, вцелом, он неплохо справляется реализуя перечисленное:
1. lookup
2. findMax
3. insert
4. filter

Однако, хочется persistance. Первая идея была взять acid-state и при коммите сохранять IntMap туда. В принципе, можно наверное просто в файл после сериализации сохранять, состояние то между потоками не шарится писать туда может только один... Обновления там простецкие, index++ и дописать в конец. Может кто-то встречал что-то более подходящее или есть какие-то идеи?