← All posts tagged ?

dr-Chaos

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

dr-Chaos

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

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

dr-Chaos

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

dr-Chaos

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

dr-Chaos

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

dr-Chaos
? IP udp

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

dr-Chaos

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

dr-Chaos

Есть 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)] .
Как такое принято делать?

dr-Chaos

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

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

dr-Chaos

Господа есть проблема с настройкой 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

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

dr-Chaos

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

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

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