Home
Objective Caml
ocaml@conference.jabber.ru
Воскресенье, 19 июня 2011< ^ >
gds установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Светлое будущее -- http://camlunity.ru/ | Нефильтрованное настоящее -- https://github.com/camlunity/kamlo_wiki | Портер прошлое -- http://gdsfh.dyndns.org/kamlo/ | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+4
[00:04:27] ermine мучительно смотрит на задачу парсинга урла
[00:04:53] <ermine> вот хорошо бы выдрать из изпута урл целиком, а не по частям, чтобы потом их склеивать
[00:05:20] <ermine> нужен хитрый тестировщик инпута
[00:11:18] <gds> ermine: и мы доходим до вложенных парсеров -- "урлоту до пробела выдери, дай на анализ, остальное продолжим потом опционально".
Вот честно, в случае хттп я бы только итераты пользовал.  А в случае "из мелкой строки несложное распарсить" -- может и комбинаторы.  Наверное, я где-то гоню.
[00:12:36] <gds> ermine: кстати, про вложенные парсеры я имел ввиду ту самую "горизонтальную композицию итератов", чтобы недокушанное первым попадало второму.
[00:14:09] <ermine> так, тестировщик есть
[00:18:13] <ermine> а сейчас проблема в том, что тестировщик будет повторять парсер до посинения
[00:18:48] <ermine> пойду я пока посплю чуток
[00:19:18] <ermine> gds: про попарсить до пробела - имхо это беднота
[00:20:11] <ermine> gds: сначала я думала парсить тела абзацев в маркдауне именно так - выкусить кусок инпута до пустой строки
[00:21:09] <ermine> потом поняла, что можно использовать это условие как определение тела абзаца, в котором, кроме запрета на пустую строку, еще есть ссылки, картинки и выделения
[00:21:55] <ermine> так что не понадобились выкусывать строку и по ней ездить еще одним парсером
[00:26:12] <gds> ermine: тебе виднее, как тебе лучше-нужнее.  я попробовал подсказать варианты какие-то.  конечно, без претензий вида "это то, что тебе надо!1111".
[00:27:23] <ermine> gds: не забывай, что логика у меня женская
[00:28:28] <ermine> вот когда буду приделывать парсер xml - может, еще пожалею о своей женской логике
[00:28:40] <ermine> пока что радуюсь наличию этой логики
[00:34:09] <gds> ermine: твой гендер вносит милый аромат "может не совсем чотко, как у учоных, но у мужыков порой хуже, а тут прилично, но надо вывернуть моск слегка".  Это не сравнится с тем же гердовским "делали полуахтунги для полуахтунгов".
Однако вот кое за что я готов тебя критиковать адски и жестоко.  Тем не менее, видя изоморфизм на уровне комбинаторов, мне не ссыкотно, если вдруг захочешь оформить это на итератах.  Но это я так, для примера.
[00:53:54] gds вышел(а) из комнаты
[00:54:50] <ermine> спасибо за комплименты
[00:55:50] ermine вышел(а) из комнаты
[01:06:45] komar вышел(а) из комнаты
[01:07:18] komar вошёл(а) в комнату
[01:21:57] bobry вышел(а) из комнаты
[01:43:58] ftrvxmtrx вышел(а) из комнаты
[01:45:35] ftrvxmtrx вошёл(а) в комнату
[02:02:08] ftrvxmtrx вышел(а) из комнаты
[02:03:43] ftrvxmtrx вошёл(а) в комнату
[02:26:37] ftrvxmtrx вышел(а) из комнаты
[02:28:20] ftrvxmtrx вошёл(а) в комнату
[02:33:21] ftrvxmtrx вышел(а) из комнаты
[02:35:58] ftrvxmtrx вошёл(а) в комнату
[02:44:59] ftrvxmtrx вышел(а) из комнаты
[02:46:06] ftrvxmtrx вошёл(а) в комнату
[03:08:01] ftrvxmtrx вышел(а) из комнаты
[03:08:57] ftrvxmtrx вошёл(а) в комнату
[03:12:50] ftrvxmtrx вышел(а) из комнаты
[03:14:07] ftrvxmtrx вошёл(а) в комнату
[03:21:54] komar вышел(а) из комнаты: Replaced by new connection
[03:21:55] komar вошёл(а) в комнату
[03:23:38] ftrvxmtrx вышел(а) из комнаты
[03:25:16] ftrvxmtrx вошёл(а) в комнату
[03:32:21] zinid вошёл(а) в комнату
[03:42:23] ftrvxmtrx вышел(а) из комнаты
[03:44:24] ftrvxmtrx вошёл(а) в комнату
[03:50:23] abiogenesis вошёл(а) в комнату
[04:02:39] Typhon вышел(а) из комнаты
[04:03:19] ftrvxmtrx вышел(а) из комнаты
[04:05:01] abiogenesis вышел(а) из комнаты
[04:05:02] ftrvxmtrx вошёл(а) в комнату
[04:20:42] ftrvxmtrx вышел(а) из комнаты
[04:22:44] ftrvxmtrx вошёл(а) в комнату
[04:28:14] ftrvxmtrx вышел(а) из комнаты
[04:30:21] ftrvxmtrx вошёл(а) в комнату
[04:44:15] ftrvxmtrx вышел(а) из комнаты
[04:45:30] ftrvxmtrx вошёл(а) в комнату
[04:51:54] ftrvxmtrx вышел(а) из комнаты
[04:53:09] ftrvxmtrx вошёл(а) в комнату
[05:13:31] ftrvxmtrx вышел(а) из комнаты
[05:14:46] ftrvxmtrx вошёл(а) в комнату
[05:25:09] ftrvxmtrx вышел(а) из комнаты
[05:26:25] ftrvxmtrx вошёл(а) в комнату
[05:30:18] ftrvxmtrx вышел(а) из комнаты
[05:31:35] ftrvxmtrx вошёл(а) в комнату
[05:39:30] ftrvxmtrx вышел(а) из комнаты
[05:40:50] ftrvxmtrx вошёл(а) в комнату
[05:49:04] ftrvxmtrx вышел(а) из комнаты
[05:50:58] ftrvxmtrx вошёл(а) в комнату
[05:58:27] ftrvxmtrx вышел(а) из комнаты
[06:00:09] ftrvxmtrx вошёл(а) в комнату
[06:06:46] ftrvxmtrx вышел(а) из комнаты
[06:08:50] ftrvxmtrx вошёл(а) в комнату
[08:22:40] Kakadu вошёл(а) в комнату
[09:46:55] komar вышел(а) из комнаты: Replaced by new connection
[09:46:55] komar вошёл(а) в комнату
[10:17:57] ermine вошёл(а) в комнату
[10:26:01] komar вышел(а) из комнаты
[10:27:52] komar вошёл(а) в комнату
[10:28:27] <ermine> zinid: 8)
[10:34:44] <zinid> ermine: ;)
[10:49:31] gds вошёл(а) в комнату
[11:13:18] <ermine> gds: а вот щас у меня вопрос - как приучить комбинаторы к end-of-input,то бишь к тому, что Chunked кончился, если этот еверт случится в p1 >> p2 посередине, то ведь будет жпа
[11:13:48] <ermine> gds: а в итератах как?
[11:14:29] <ermine> жпа в том, что если в модуле инпута можно подкачать еще чуток данных из файла/сокета, но в этом случае всё это заблокируется на чтении
[11:17:04] <ermine> может расширить тип результата парсера, там щас Parsed и Failed, добавить NotEnoughData
[11:17:41] <ermine> и страдать с созданием калбэков для следующего куска данных
[11:17:44] <ermine> ыы
[11:17:51] <komar> Я бы не стал.
[11:19:03] <ermine> создавать калбэки?
[11:19:17] <ermine> или добавлять третий вариант?
[11:19:23] <komar> В чем проблема сделать парсер p_end, который выдавал бы Parsed на конец данных?
[11:20:13] <komar> В случае, если можно подкачать еще данных, он фейлится и эти данные передаются другому парсеру.
[11:20:23] <ermine> и когда его звать в p1 >> p2?
[11:20:28] <gds> ermine: в итератах так: горизонтальная композиция (т.е. последовательное чтение) осуществляется через bind = ( >>= ), и вот, составной итерат кормят данными.  Пока первый итерат не вернул "готово, вот значение", продолжается его кормление, а как вернул, так это значение применяем и начинается кормление второго итерата.
[11:21:15] <komar> p_hello >> p_whitspace >> p_world >> p_dot >> p_end — как-то так.
[11:22:01] <ermine> gds: у тебя итерат ездит по одной и той же строчке до посинения, пока не будет готово?
[11:22:02] <komar> Или нужно обязательно знать, некорретные ли поступили данные или их просто не хватило?
[11:24:38] <ermine> komar: а тут два подхода, как "захоронить" "остаток" парсеров - либо таки создав калбэк, который на входе получит новый кусок данных, или внутри себя вызывать Unix.read и тем самым заблокироваться, пока не поступят данные
[11:24:51] <gds> ermine: ввод-вывод и непосредственно обработка данных разнесены, ввод осуществляют енумераторы, которые формируют чанки из входящих данных (из сокета, из строки, из головы, из результата запроса к реляционке), и вот, тупо применяют эти чанки к итерату, опционально к составному.
[11:25:52] <ermine> gds: не, я к тому, что если "не готово", то на следующем шаге итерат читает строку опять с самого начала, только на этот раз строчка подлинее будет
[11:25:54] <komar> Надо что ли в итераты потыкать.
[11:26:02] <komar> А то каждый Божий день тут про них говорите.
[11:26:25] <komar> gds: где качать?
[11:26:29] <ermine> komar: тут это новая религия
[11:27:32] <gds> ermine: если "не готово", то итерат равен IE_cont None k, и следующие чанки будут отданы функции k.  Если станет "готово", то итерат будет равен IE_cont (Some e) k в случае ошибки e (и с возможным продолжением k, если ошибка recoverable), либо IE_done res в случае "вот вам значение".
[11:28:05] <gds> komar: что именно качать -- краткое описалово принципа?  Рекомендую его, сейчас найду ссылоту.
[11:28:37] <komar> gds: тарбол с сорцами, на которые можно натравить make doc.
[11:29:29] <ermine> gds: ну такое понятно, в этом случае действительно пофигу, будет ли итерат читать с начала или нет, просто в случае комбинаторов я пока не понимаю как заморозиться посередине p1, чтобы разморозиться на новых чанках
[11:30:45] <gds> komar: это у х-юг надо спрашивать.  мой порт без make doc.  можешь мой iteratees.ml почитать, там вполне документировано.  но на всякий случай вот http://okmij.org/ftp/Haskell/Iteratee/IterateeIO-talk-notes.pdf
[11:31:09] <gds> ermine: в случае комбинаторов я бы тоже не знал, как такое сделать.  Надо думать.
[11:31:41] <ermine> gds: ясно, буду думать и применять женскую логику
[11:32:23] bobry вошёл(а) в комнату
[11:32:29] <komar> Так это не либа, а концепция, что ли? А что ты в [caml-list] выкладывал?
[11:33:27] <komar> Сам нашел. http://ocaml-iteratees.forge.ocamlcore.org/
[11:34:43] <gds> komar: (я тут отходил слегка.)  Концепция -- была изначально.  Либа есть, нашёл правильно.  В caml-list выкладывал.
[11:34:55] <ermine> komar: итерат - это фолд, который вызывает функцию, применяет к ней результат предыдущего вызова этой функции и новый кусок данных, ничо там сложного, только куча научных слов, которых как раз тяжело понять: iteratee, enumeratee, enumerator
[11:35:22] <komar> Академики, лишь бы придумывать.
[11:35:45] <gds> ermine: итерат -- это не фолд, а около.  Это и есть та самая функция, которую вызывают на новые данные, и которая хранит всё состояние в себе.
[11:36:28] <ermine> gds: ну в общем да
[11:36:44] <gds> академики, факт.  Однако внезапно я считаю это почти лучшим способом разбора входящего потока.
[11:37:03] <ermine> для итерата таки важно, чтобы он не запаниковал, когда увидит неожиданный конец данных
[11:38:54] <ermine> gds: тут можо вспомнить мой xml парсер, код которого ты видел - там каждая функция возвращала функцию, которая ждала на вход еще одну (только одну!) букву
[11:39:07] <ermine> следовало бы развить это до ожидания побольше букв
[11:39:07] <gds> да, важно, и вот этот конец данных он тупо паттерн-матчит -- если на вход передают EOF _, значит конец.
[11:39:38] <gds> ermine: ага, парсер помню, идея примерно такая.
[11:40:28] <ermine> жалко что я тогда про итераты не знала
[11:41:38] <komar> А оно быстрое?
[11:42:01] <ermine> итераты? весьма
[11:42:06] <komar> Отлично.
[11:42:50] <ermine> ну там внутренние итераты не завязаны на i/o, это их не касается, поэтому ничо не блокируется, остается прицепить к какой-нить системе типа lwt
[11:43:41] <ermine> только вот я разумею итераты только на input, про output как раз ничего не знаю
[11:43:41] <komar> А шо, маке док нету?
[11:44:23] <ermine> komar: а ты пишешь доку на старте проекта сразу?
[11:44:33] <komar> Да.
[11:44:44] <ermine> ишь какой культурный
[11:44:56] <komar> -mkdir -p doc
$(CAMLDOC) -d doc -html *.ml
[11:45:23] <gds> komar: итераты -- быстрые тем, что входные данные разложены в массивы, и функции нижнего уровня, обрабатывающие эти массивы для выдачи элементов, могут это делать так, как хотят: например, поэлементным сканированием, весьма быстрым (фактически, доступ к массиву).
[11:45:46] <komar> А массив как реализован?
[11:45:58] <gds> ermine: можно прицепить не только к lwt -- например, к обычному камловскому вводу-выводу.
[11:48:00] <gds> komar: make doc нет по таким причинам: 1. iteratees.ml -- вполне нормальная документация, 2. лень заворачивать всё в ocamldoc-документацию, 3. часто, очень часто есть желание посмотреть в имплементацию, когда что-то смотришь, 4. иметь переменные типов 'a, 'b, 'c вместо 'eli, 'elo1, 'el -- отстой.
[11:48:02] <ermine> ну про lwt - это понятно
[11:49:59] <gds> komar: массив -- базовый массив там просто Array.t, выделяется тем, кто делает непосредственный ввод, но доступ к массиву идёт через модуль Subarray, который { arr : array 'a ; ofs : int ; len : int }.  Кроме того, есть специализированные функции, исключающие необходимость проверки правомерности доступа к каждому элементу и исключающие i+ofs на каждую операцию.
[11:50:51] <komar> О, отлично.
[11:50:53] <gds> komar: эти специализированные функции -- в subarray.ml
[11:51:05] <komar> Всегда хотел изобрести subarray, но боялся, что будет абстракция и плохо.
[11:52:03] <gds> фактически да, абстракция и плохо, но не очень, ибо внутреннюю работу можно вынести в функции, осведомлённые об абстракции и не нарушающие её.
[11:52:18] <komar> revised с original понамешали.
[11:53:27] <komar> А знаете ли вы, как заставить ocamldoc генерить одну доку для проекта со смесью revised- и original-синтаксиса?
[11:54:11] <gds> original -- в it_Ops.ml только, ну так это "внешний файл", типа-либа.
[11:54:40] <gds> а вот не знаю.  Если чо, может, проще будет it_Ops.ml переколбасить в revised?
[11:55:04] <komar> Эх, академики, все вам «не нужно».
[11:55:12] <komar> Доки не нужны, мешать синтаксис не нужно.
[11:55:38] <komar> Зато оазисы с окамлбилдами нужны, они же все умеют, а то. чего не умеют — то не нужно.
[11:55:47] <gds> komar: если будешь делать что-либо "конструктивное", может присунешь патчи-коммиты в репку?
[11:56:08] <komar> Щя, мне надо выбухтиться, а то ж не все вам меня травить.
[11:56:10] <gds> доки обязательно нужны -- ну так в iteratees.ml они есть.
[11:56:28] <gds> давай, давай, трави, ибо по делу.  но ocamldoc кривой в плане 'a 'b 'c
[12:00:43] <komar> Что-то у вас в хттп-репе негусто.
[12:01:21] <gds> где именно?
[12:01:34] <komar> http://hg.ocamlcore.org/cgi-bin/hgwebdir.cgi/ocaml-iteratees/ocaml-iteratees/
[12:02:49] <gds> срань господня.
gds@umodni:~/dev/ocaml-iteratees$ hg outg fo
comparing with ssh://ssh.ocamlcore.org//hgroot/ocaml-iteratees/ocaml-iteratees
searching for changes
no changes found
и как это понимать?..  сильванчег съел мою репку?
[12:03:04] <komar> Ссх вроде работает.
[12:03:13] <komar> Я отклонировался.
[12:03:41] <gds> ща отпешу ему, ясное дело.
последняя ревизия -- 1cefff812afe.
[12:04:42] <komar> И эти люди порицают меня в использовании даркса.
[12:05:36] <ermine> а что, кто-то еще использует даркс?
[12:07:01] <komar> <----
[12:10:02] <ermine> когда тут не знают готового ответа, то надо закопаться в гугль...
[12:11:08] <komar> Может, наоборот?
[12:11:31] <ermine> а там кстати на каждом шагу маячит Scala в запросе про парсеры
[12:12:59] abiogenesis вошёл(а) в комнату
[12:13:25] <komar> ermine: а в новом елиоме уже можно ковырять отправляемые http-заголовки?
[12:14:38] <ermine> komar: добавлять?
[12:14:50] <komar> Я хочу закосить под nginx.
[12:15:07] <komar> Ну или хотя бы редактировать ласт модифаеды и кеш-контролы.
[12:15:12] abiogenesis вышел(а) из комнаты
[12:15:27] <ermine> komar: ну там в функции send вроде есть ~headers
[12:15:37] <ermine> там добавлять
[12:15:52] <ermine> а фильтровать на выходе - это скорее к оксигену
[12:18:32] <komar> Плохо.
[12:18:53] <ermine> тогда я просто не поняла твоего вопроса
[12:19:17] <komar> Плохо, что нельзя закосить под nginx, не ковыряя оксигена.
[12:20:11] <ermine> а что такое "закосить под nginx"?
[12:20:22] <komar> Выдавать такие же заголовки.
[12:20:45] <ermine> а ковырять оксигень никому и не придется, у него есть модуль, который призван фильтровать всё что выходит
[12:21:02] <komar> Чогде
[12:22:31] <ermine> http://ocsigen.org/ocsigenserver/manual/outputfilter  - не то?
[12:22:44] <ermine> причем там дока скорее всего для 1.3
[12:30:03] <gds> ну вот, сильван обещал пофиксить эту биду с hgweb, где-то на неделе.
[12:32:19] ermine вникает в -- Pure Iteratees and parsing combinators  
[12:34:35] <komar> Очень плохой фильтр.
[12:34:51] <komar> Но, кажется, он мне поможет написать хороший.
[12:41:55] komar принимает ставки на то, в каком году на ocsgien.org/trac починят redirect loop.
[12:44:20] <gds> ermine: а в iteratees.ml примерно оно и есть.  Или в .hs понятнее?
[12:45:04] <ermine> gds: хз, пока еще никуда не вникала, тут бегала
[12:50:31] <ermine> gds: похоже там комбинация >> и пр только на уровне вызовов итератов, а не унутре них
[12:51:14] <gds> ermine: ну правильно, зачем итерату надо знать, как и с кем его комбинируют?
[12:51:59] <ermine> gds: ну я наивно надеялась, что увижу пример с комбинаторами внутри итерата
[12:52:17] <ermine> ну ладно, где наша не пропадала!
[12:52:35] <gds> ermine: ну вот пример: let combined = it1 >>= fun x -> it2
[12:52:46] <gds> это итерат, содержащий >>= внутри.
[12:53:42] <ermine> gds: а как у тебя оно будет парсить "1+1"?
[12:54:02] <ermine> скажем в первом чанке было 1+, во втором 1
[12:54:42] <ermine> или хуже - в первом чанке кусок длинного числа 11111111
[12:55:21] <ermine> надо чонить придумать в тестирующих инпут функциях
[12:56:40] <gds> например,
let parse_simple_expr = parse_number >>= fun a -> parse_operator >>= fun op -> parse_number >>= fun b -> (a, op, b)
Если в первом чанке "11111", то при применении этого чанка к parse_simple_expr мы получим итерат, в котором чанк передан в первый parse_number, но первый parse_number не вернул результата, поэтому будет возвращён итерат, который следующий чанк будет досовывать ему же.
[12:57:06] <zinid> скока магии в камле ;)
[12:57:41] <gds> не магия, а чистое инженерство.
[13:00:17] <gds> а у меня бида.  Пытаюсь родить комбинаторы через
value (string, string_opt) = common ~want_ftype:( (=) Postgresql.CHAR) ...
, и имею ограничение мономорфизма, так как string и string_opt будут результатами применения, а не лямбдами.  Вспомнить бы, что тут делать, учитывая, что common имеет реально общие куски для string и string_opt.
[13:01:16] <ermine> gds: вот эта часть магии у меня вопросов не вызывает
[13:04:15] komar нашел, как добраться к хедерам. Если что — спрашивайте.
[13:04:48] <ermine> в улиоме?
[13:05:24] <komar> Почти.
[13:05:36] <komar> Можно в елиоме использовать без костылей.
[13:06:25] <ermine> komar: а косить под proxy_pass уже умеешь?
[13:06:36] <komar> Што это?
[13:06:45] <ermine> шняга из nginx
[13:06:52] <ermine> я думала, ты знаешь nginx :)
[13:08:17] <komar> Я знаю, где у него мануал.
[13:08:22] <komar> Больше я о нем ничего не знаю.
[13:19:46] ftrvxmtrx вышел(а) из комнаты
[13:21:27] ftrvxmtrx вошёл(а) в комнату
[13:22:31] ermine перепиливает свой модуль инпута
[13:22:59] <ermine> может лучше пиццу пожарить
[13:31:09] <gds> ermine: пицца = быстрые углеводы => лучше не есть, если есть варианты.
[13:32:38] <gds> даже так не катит: http://paste.in.ua/2620/ , гадство.
[13:42:53] <ermine> пицца - это не только быстрые углеводы, но и никаких телодвижений по готовке еды: сунул в микроволновку и через несколько минут готово
[13:44:06] <gds> ermine: в микроволновку также можно сунуть кусок мяса, посыпанный солью-перцем, я так периодически делаю.  Конечно, приходится подольше подождать, но в плане ручной работы -- почти один хрен.
[13:47:04] <ermine> gds: а потом отмывать печку! беее
[13:47:05] <gds> ermine: я тоже лентяй, поэтому также присовываю 1. сосиски-сардельки (желательно нормальные, иначе отстой; можно "полуфабрикаты" в виде колбасок/котлеток), 2. рыбу, присыпанную солью-перцем, 3. яйцо сырое, разбитое на тарелку, 4. кабачки нарезанные-посоленные.  Вроде что-то ещё делал, забыл.  Каждое из полученных блюд требует минимума вмешательства, а польза для здоровья/жирка несравнима.
[13:47:50] <gds> ermine: мясо -- на тарелку.  отмывать тарелку просто: поставил в раковину, залил водой, через сутки провёл рукой/тряпкой и сушиться.
[13:49:28] <komar> Вы выводите меня из рабочего состояния, лучей голода вам.
[13:49:33] <ermine> gds: не, из мяса сок летит на стенки печки
[13:49:50] <ermine> я еще там жарю картошку, масло летит тоже
[13:49:57] <ermine> ужос
[13:51:17] <gds> ermine: есть пластмассовые колпаки над тарелкой.  Они берут на себя жыр и пар, в результате чего просто под кран их и всё, там на них не засыхает, уже год не мою толково колпак, и не воняет, и чистый.  А вот картошку жарить не советую по тем же соображениям, что и пиццу.
[13:51:31] <gds> komar: извени, постараюсь больше не.
[13:53:57] <ermine> komar: сходи пообедай :)
[13:54:24] <komar> Я пиццы захотел, пиццы здесь нету.
[13:54:32] <komar> Где я тебе в горах пиццу возьму?
[13:55:28] <ermine> в каких еще горах?
[13:55:46] <komar> В кавказских.
[13:56:33] <ermine> однако тырнет с камлом там уже есть
[13:57:01] <komar> Я постарался.
[13:58:11] <gds> komar: есть очень простые рецепты приготовления пиццы, по уверениям моей леди "справится даже программист".  Если чо, сообщи.
[13:59:14] <komar> Комар не справится, он сожрет ингридиенты перед монитором.
[13:59:31] <ermine> раскатать тесто и навалить сверху чего попало
[14:01:32] <komar> Тесто? Какое тесто?
[14:02:48] <ermine> сходи на сайт edimdoma.ru
[14:05:00] <ermine> gds: я кажись начала осознавать, что мне надо от своих комбинаторов, чтобы они работали в итератах, попробую сегодня сотворить интерфейс, а модуль инпута у меня превращается в модуль работы с чанком
[14:06:06] <gds> ermine: не знаю, как у тебя точно, но на слух звучит адекватно.  Но нужен код.
[14:07:22] Kakadu вышел(а) из комнаты
[14:43:38] ftrvxmtrx вышел(а) из комнаты
[14:45:05] ftrvxmtrx вошёл(а) в комнату
[15:07:55] Typhon вошёл(а) в комнату
[15:16:06] <gds> Typhon: не в курсе, нужны ли слеши в конце в _oasis в Path: ...?  А то они то присутствуют, то отсутствуют в твоём amall/_oasis.  По идее, не нужны, чтобы не было "//" в командных строках, но может я чего-нибудь не знаю?
[15:22:10] <Typhon> Не нужны, по идее, но в оазисном мануале периодически встречаются. я случайно, видимо, оставил. проблем может и не быть, fileutils (или как там он называется) нормализует путь.
[15:23:39] <ermine> недостаточно нормализует
[15:23:44] <ermine> если появляются //
[15:26:09] <Typhon> я не замечал, кстати двойных слэшей
[15:27:19] <ermine> в I: Running test?
[15:29:09] <gds> Typhon: вот тут -- http://paste.in.ua/2617/ -- в последней строке есть "tests//".  То есть, по идее, стоит убрать, как я понял.
[17:06:31] <gds> komar: кстати вот, про Subarray -- недавно создал "библиотеку лёгкого поведения" https://bitbucket.org/gds/ocaml-substrings/ -- пока там мало кода, но зато туда может присунуть кто угодно!  Ну и главное, что там прописаны типы: можно взять эту либу, развивать проект с их участием, а затем свои функции, использующие данный тип, присунуть в эту либу, чтобы использовать их в других своих проектах, где нужны подстроки.  Я всегда так делаю, пока считаю такой подход клёвым.
[17:07:25] <komar> Ага, понял.
[17:07:39] <komar> С мелкой кастомайзной фигней так и надо, да.
[17:11:30] komar назло зарегался на битбакете.
[17:11:46] <komar> Гм, патчтаг там еще живой, нет?
[17:12:20] <komar> Один раз я зарегистрировал там аккаунт и забил туда паблик кей одного знакомого придурка.
[17:12:32] <komar> Потом сказал, что это мой сервер и попросил провести стресс-тест.
[17:12:41] <komar> К концу вечера патчтаг слег.
[17:13:07] <komar> А когда он поднялся, этот придурок стал использовать его в качестве прокси. И, может, до сих пор использует.
[17:19:35] <gds> komar: а как это "в качестве прокси"?
[17:19:54] <komar> А я не помню. Через ssh как-то.
[17:21:06] <komar> О. это был отменный параноик. У него весь интернет шел через каскад серверов. Вместо линупса урезанный по самые помидоры LFS, в котором даже поддержки модулей не было.
[17:21:29] <komar> А разделы все зошыфрованы трукриптом. Загрузка с флешки была.
[17:22:19] <komar> Мы над ним поржали, конечно, но как-то раз его сдал ментам кореш, который знал, что он всякую фигню на форуме про каннибализм постит.
[17:22:37] <komar> За ним пришли, включили компьютер, а там голая винда без ничего.
[17:23:04] <gds> фигассе, сколько поворотов сюжета!
[17:23:07] <komar> Несмотря на то, что он накатал чистосердечное, дело закрыли за отсутствием состава.
[17:24:37] <gds> щас менты умные пошли, пришлось бы хотя бы объясняться, "чё за хрень у тебя на других разделах винта".  Конечно, элементарно, но всё же.
[17:25:01] <komar> Других разделов «не было».
[17:26:26] <gds> ну, имею ввиду, не занятое разделами место на диске.
[17:26:47] ermine упоенно совершает надругательства над монадами и итератами и пытается понять как написать последнюю строчку кода, чтобы оно наконец скомпилилось
[17:27:27] <gds> ermine: ооооо, это ональные стродания.  Давай пример кода и описалово того, что уже есть, вероятно помогу.
[17:28:59] <ermine> gds: на http://yo.jabber.ru/~ermine/k.ml
[17:29:17] <ermine> gds: я там пытаюсь выработать себе концепцию
[17:34:11] <ermine> ну всё, пропал gds, теперь его до вечера нам не увидеть!
[17:36:59] <gds> ermine: а вот нифига!  Потому что порекомендую сделать так: взять код "bindI" и "сократить" его, подставив манатку identity в качестве манатки -- то есть, как у тебя и есть всё.  (почти, но Chunk почему-то of 'a -- поэлементно бродить будешь?)
Где брать bindI -- известно?
[17:38:15] <gds> манатка identity, если чо, это такая, где
value return = identity;
value bind f m = f m;
value bind_rev m f = bind f m;
value ( >>= ) = bind_rev;
[17:38:36] <gds> то есть, у тебя уже прописана она в типе итерата твоего.
[17:38:52] <gds> (а, ну конечно, type m 'a = 'a)
[17:41:36] <ermine> нуу
[17:43:04] <gds> а сейчас -- чуть конструктивнее.
[17:43:11] <gds> покажу.
[17:44:19] <ermine> gds: насчет поэлементно - ну это только первый вид, дальше хотела тестить последовательность
[17:44:32] zinid вышел(а) из комнаты
[17:45:12] <ermine> да я уже почти скомпилила, почти - думаю, откуда бы добыть инпут, чтобы сунуть в ie_done
[17:45:23] <gds> ermine: полуконструктивно только выходит: у тебя тип parsing не связан с типом iteratee.  И вообще, итераты не при делах.
[17:46:09] <ermine> gds: а должен быть связан?
[17:47:14] <ermine> gds: там монады и про итераты ничо не знают, тупое копирование идеи из парсера xml: let parse_name nextf char = (аккумулируем charы и суем результат в nextf)
[17:48:19] <ermine> gds: вообще стандартный parsing - это type ('a, 'b) parsing =
Parsed of 'a * 'b | Failed, где 'b - инпут, тут я подумала и решила вынуть из парсинга
[17:50:39] <ermine> скомпилилось
[17:51:16] <ermine> gds: обнови файл, вот от этого поделия буду плясать дальше
[17:51:29] <ermine> там монады пока не применяются, придется потрахацо
[17:54:02] komar вышел(а) из комнаты: Replaced by new connection
[17:54:03] komar вошёл(а) в комнату
[18:20:45] komar вышел(а) из комнаты: Replaced by new connection
[18:20:45] komar вошёл(а) в комнату
[18:52:17] Typhon вышел(а) из комнаты
[19:10:39] komar вышел(а) из комнаты: Replaced by new connection
[19:10:39] komar вошёл(а) в комнату
[19:39:25] komar вышел(а) из комнаты: Replaced by new connection
[19:39:27] komar вошёл(а) в комнату
[20:59:56] Typhon вошёл(а) в комнату
[21:10:34] zert вошёл(а) в комнату
[21:27:27] avysk вошёл(а) в комнату
[21:28:13] avysk вышел(а) из комнаты
[22:32:09] Typhon вышел(а) из комнаты: Replaced by new connection
[22:32:12] Typhon вошёл(а) в комнату
[23:46:45] abiogenesis вошёл(а) в комнату
[23:48:06] <abiogenesis> с сульцей потрахайся
[23:58:42] <gds> чо чо?
[23:59:22] <abiogenesis> ну давно не коммитила
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!