Home
Objective Caml
ocaml@conference.jabber.ru
Понедельник, 24 мая 2010< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся! | release crap | judge by commits, not comments | voice по запросу | ocaml мёртв, move on
Конфигурация комнаты
Участники комнаты

GMT+4
[00:07:58] gds вышел(а) из комнаты
[00:40:30] ermine вышел(а) из комнаты
[01:17:56] digital_curse вышел(а) из комнаты
[01:22:24] ygrek вышел(а) из комнаты
[02:47:25] Typhon вышел(а) из комнаты
[08:05:27] iNode вошёл(а) в комнату
[09:01:35] Monstreek вошёл(а) в комнату
[09:04:14] gds вошёл(а) в комнату
[09:10:37] digital_curse вошёл(а) в комнату
[10:10:00] Monstreek вышел(а) из комнаты
[10:28:41] ygrek вошёл(а) в комнату
[10:30:57] ermine вошёл(а) в комнату
[10:42:40] <ygrek> внезапно в ocaml-beginners:
> While searching for something, I found this:
> http://github.com/ermine
> It has simple & nice code samples.
[10:43:00] serp256 вошёл(а) в комнату
[10:46:35] npoektop вошёл(а) в комнату
[10:51:10] ʇsʎɯ вошёл(а) в комнату
[10:52:46] <ʇsʎɯ> gds: у меня вопрос есть. когда до этого случая тебе последний раз нужны были циклические списки?
[11:01:21] komar вошёл(а) в комнату
[11:03:48] <gds> примерно год-полтора назад, когда игрался с обработкой звука.
[11:04:37] <gds> выкрутился использованием stream'ов, так как игрушечная задача была.
[11:07:14] <ʇsʎɯ> хм...
[11:07:44] <ʇsʎɯ> а до того?
[11:10:08] <ermine> ygrek: осталось туда же положить и berkeleyDB :), только надо еще доплитить
[11:11:32] <gds> до этого -- циклический список, создаваемый на этапе компиляции через let rec, содержащий несколько "обработчиков", которые я через List.iter обходил, и которым через Unix.accept подсовывал новые соединения.
[11:16:18] <gds> ну и потом, надо же как-то решать сверхсложную задачу, в которой каждого n-ного человека из круга убивают, пока не останется кто-то один!111111
[11:18:06] <ʇsʎɯ> это решается и без списков
[11:18:39] <ʇsʎɯ> next = (cur + step) mod len
[11:19:27] <gds> спасибо, кэп!
[11:19:52] <ʇsʎɯ> я просто почему спросил, мне вообще ни разу в жизни циклические списки нужны не были, а ты, я вижу, уже там неслабую либину накатал...
[11:20:21] <ʇsʎɯ> но раз у тебя это постоянно, то всё логично
[11:27:01] <gds> мне тоже они не были нужны, пока я не знал, что их тоже можно использовать :)  Конечно, вручную делать список можно (структурка из головы и мутабельного хвоста), но не очень удобно.
Как-то давно родил сишный код для заворачивания линейного в круговой, но всё остальное на цэ писать было лень.  Потом посмотрел на extlib, на extList.ml, и понял, что можно сделать удобно.  Ценой использования Obj, конечно.
Пока набросал порядка 50кб кода (минус переработанный extList.mli), скоро уже выпущу это дело.  Там думать надо было мало, больше быдлокодить надо.
[11:37:15] <ʇsʎɯ> ну может я чего-то не понимаю, но список - это же гемор, его поддерживать надо в правильном состоянии, там...
[11:47:46] <gds> если делать его мутабельным, типа type 'a mut_list = { hd : 'a ; tl : mutable mut_list 'a }, то изменения ложатся в три категории: 1. рвём список: cell.tl := [], 2. присоединяем к другому списку: cell.tl := some_list, 3. делаем цикл из текущей ячейки куда-то: cell.tl := this_list's_cell.  Соответственно, по отношению к цикличности мы можем либо создать, либо укоротить, либо присоединить, либо разорвать цикл.  По идее, следить практически не надо, если все функции умеют работать и с циклическими, и с линейными списками.
А если поддерживать функциональный интерфейс к циклическим спискам (например, расширенный extList.mli с нужными поправками, но эквивалентный extlib'у на линейных списках), то следить нужно только внутри модуля, а безопасность получаем благодаря иммутабельности и типизации.
[11:56:05] <ʇsʎɯ> (mod N) гораздо проще, как для меня
[12:09:48] ygrek вышел(а) из комнаты: Replaced by new connection
[12:09:51] ygrek вошёл(а) в комнату
[12:24:38] <gds> кстати, благодаря этой задачке (называется "Задача Иосифа Флавия") нашёл кривость в своих новых функциях (split_circular).  Вот что вышло для тестирования циклических списков: http://pastebin.com/7W74cg5U
насчёт сверхсложной задачи -- извени, я немного пошутил.
[12:35:08] <ʇsʎɯ> я и не подумал, что ты на самом деле считаешь её сверхсложной
[12:35:39] <gds> понял, ну проехали.  Реально, решение на тупой арифметике тут нужно, и не больше.
[12:46:42] <ʇsʎɯ> что там с ICFP? фэйлим?
[12:47:36] <gds> адавайте.  только ищите "лидера".  вон, ygrek может возьмётся за это дело?
[12:52:34] ygrek вряд-ли
[12:55:00] <ʇsʎɯ> ну я вобще на лидера не тяну, я и OCaml толком не знаю
[12:55:18] <gds> ygrek: нежелание, лень или времени не будет?
[12:57:07] <gds> а вообще, кто хочет поучаствовать (хотя бы до уровня "прочитать задание и решить, кодить ли")?
[12:57:57] <komar> ʇsʎɯ, вот ты и идеально подходишь для лидера, только ник смени.
[12:58:48] <ygrek> участвовать постараюсь, а организовывать всё неохота
[12:59:04] <ʇsʎɯ> komar: а что не так с ником?
[12:59:04] <ygrek> хотя что там организовывать - репо да чат
[12:59:24] <ʇsʎɯ> репо гитхаб организует
[12:59:26] <ʇsʎɯ> ))
[13:02:32] <komar> ʇsʎɯ, а автокомплитить мне его как?
[13:02:55] <ʇsʎɯ> ну, я не виноват, что myst уже занят у вас тут
[13:03:01] <ʇsʎɯ> можешь писать m
[13:03:55] <ʇsʎɯ> и чего это я подхожу на лидера?
[13:04:43] <gds> а подходит ли открытый хостинг для контеста?
[13:05:35] <komar> Да кому мы нафиг сдались.
[13:07:00] <komar> m, ну как? Кто умеет, тот делает, кто не умеет, тот учит, то учить не может — руководит.
[13:07:19] <gds> ну, если фейлить, то пусть все видят, покатит и открытый.
[13:08:12] <ʇsʎɯ> не-не, кто умеет - работает, кто нет - командует, а кто и командовать не умеет - учит
[13:08:17] <ʇsʎɯ> 100 раз уже убеждался
[13:08:49] <gds> для сапки было же желание хоть как-то попобеждать, там и закрытую репку, и закрытый чятик оформили.  Если же подходить к вопросу легче, можно и открытое оформить.
[13:08:50] <ʇsʎɯ> чтобы камандовать надо хоть чё-то понимать, что вообще происходит
[13:09:08] <ʇsʎɯ> ой, а кто будет следить-то?
[13:09:20] <ʇsʎɯ> репо назвать - 2nd_grade_labs
[13:09:27] <ʇsʎɯ> и хер кто вообще туда заглянет
[13:09:36] <ʇsʎɯ> а кто заглянет - нифига не поймёт
[13:09:48] <gds> конкуренты, ясное дело!
про security by obscurity думал, тут её достаточно, в самый раз.
[13:11:39] <ʇsʎɯ> а откуда конкуренты будут знать где репо и как он выглядит?
[13:11:45] iNode вышел(а) из комнаты
[13:11:48] <ʇsʎɯ> эту инфу сабмитить надо что ли?
[13:16:45] iNode вошёл(а) в комнату
[13:52:28] ermine теперь мучается с отклонениями кода в биндинге для случая использования тредов
[13:54:03] <ermine> вот вопрос в том, кошерно ли теперь использовать непубличные методы библиотеки
[13:57:18] <gds> ermine: в сигнатуры они выведены?
[13:59:07] <ermine> gds: нет, я собираюсь применить макросы из инклюда, который используется при сборке сишней bdb, но их нет в публичном db.h
[14:00:24] <ermine> gds: в случае с тредами, если ты при открытии базы указываешь, что оно треданутое, надо использовать механизм аллокации для пар key/data (маллок или свой буфер)
[14:00:50] <ermine> собираюсь нечестным путем определить, что база треданутая и вызвать маллок
[14:02:10] <gds> насчёт макросов -- хз, видимо приемлемо, если документировать это и явно вынести этот макрос в отдельный .h, чтобы было меньше гемора с его обнаружением/заменой, в случае чего.  Кошерность страдает при этом, конечно.
[14:04:19] <ʇsʎɯ> да влупить mutex и не париться
[14:07:40] <ermine> а макрос как раз проверяет чему равен мутекс базы
[14:25:39] cfhy0pfv8eione вошёл(а) в комнату
[14:25:44] cfhy0pfv8eione вышел(а) из комнаты
[14:26:07] <ʇsʎɯ> ололо
[14:26:14] <ʇsʎɯ> спамеры в jabber!
[14:26:17] <ʇsʎɯ> это надо отметить
[14:27:44] <gds> из серии "Каждый Функциональщик Желает Знать" -- опасности изменяемого состояния: http://imgpaste.com/i/bpusa.jpg (осторожно, мат и императивщина).
[14:28:02] <komar> Кстати, насчёт. Как с ними бороться?
[14:29:24] <ʇsʎɯ> gds: боян ))
[14:29:39] <ʇsʎɯ> komar: меньше переменных - меньше состояний, нутыпонел
[14:37:20] <komar> m, да не, я про спамеров.
[14:37:37] <komar> О, да я на gds'а подписан.
[14:40:03] <gds> адскими технологиями наподобие rss, очевидно.
[14:45:15] <ʇsʎɯ> в смысле, бороться со спамерами?
[14:45:18] <ʇsʎɯ> какими именно?
[14:45:27] <ʇsʎɯ> спам-фильтр же
[14:47:01] <ermine> какой фильтр?
[14:48:09] <ermine> против них действует капча, которая в этой конфе пчу-то не включена
[14:49:53] <ygrek> ermine: т.е. включить капчу и default users as participants и у человека не будет голоса пока не ответит на капчу или не попадёт в member'ы - так?
[14:50:53] <ʇsʎɯ> можно в капчу ocaml-код засунуть
[14:51:37] <ermine> ygrek: если человек не ответит на капчу - его здесь совсем не видно
[14:51:58] <ermine> а визиторы и прочие роли - это уже после прохождения капчи
[14:52:42] <ermine> мемберы и прочие админы не видят капчу
[14:52:45] <gds> можно глянуть на конфу, в которой капча уже включена и куда можно заходить так, чтобы не законтачиться?
[14:53:12] <ʇsʎɯ> haskell@
[14:53:29] <ʇsʎɯ> но там чуть другое
[14:53:34] <ermine> в хаскеле капча и тестбот
[14:53:40] <ʇsʎɯ> капчи не видел
[14:53:43] <ʇsʎɯ> тестбот видел
[14:53:52] <komar> Там капча текстовая.
[14:54:00] <komar> Или это тестботом называется?
[14:55:01] <ʇsʎɯ> ну там решаешь задачу - дают права
[14:55:04] <ʇsʎɯ> это тестбот
[14:55:10] <ʇsʎɯ> но я там больше года не был уже
[14:55:13] <ermine> тестбот просто дает голос
[14:55:17] <ʇsʎɯ> капчи тогда не видел
[14:55:32] <gds> в haskell@ -- не та капча, о которой ermine.
[14:55:50] <ʇsʎɯ> да, не та
[14:55:56] <ʇsʎɯ> но там не больше нравится
[14:56:00] <ʇsʎɯ> мне*
[14:56:06] <ʇsʎɯ> чем капчи всякие
[14:56:16] <ʇsʎɯ> там заодно и троллей всяких отсеивает
[14:56:49] <ermine> в хаскеле эти бот-спаммеры давно не ходят из-за капчи
[14:56:56] <ermine> а не из-за тестбота
[15:00:01] <ermine> gds: я могла бы снять с тебя мембера в хаскеле, если бы знала, что пиджин умеет капчу
[15:00:55] <ʇsʎɯ> можешь снять с меня
[15:00:57] <gds> да, у меня там роль есть, так как заходит нормально.  А какая-нибудь другая конфа с капчей есть?  А то лень просить тебя снова поставить роль мембера, а вдруг понадобится.
[15:01:05] <ʇsʎɯ> мне не критично, заодно и проверим пиджин
[15:02:21] <ermine> а ты там под каким ником?
[15:02:28] <ʇsʎɯ> таким же
[15:02:33] <ʇsʎɯ> перевёрнутым
[15:02:50] <ʇsʎɯ> ну или по JID можешь посмотреть
[15:04:14] <ermine> лень
[15:04:20] <ermine> тебя там сейчас видимо нет
[15:04:30] <ʇsʎɯ> щяс попробую зайти
[15:05:32] <ʇsʎɯ> ну снимай, я там
[15:06:17] <ermine> теперь перезаходи
[15:06:49] <ʇsʎɯ> haskell@conference.jabber.ru: Ваши сообщения к haskell@conference.jabber.ru блокируются. Для снятия блокировки перейдите по ссылке http://captcha.jabber.ru/captcha/3143041163
[15:06:52] <ʇsʎɯ> всё работает
[15:07:29] <ʇsʎɯ> открываешь в браузере, вводишь, пускает
[15:07:52] <ermine> правильный клиент отображает саму капчу в клиенте
[15:08:22] <ermine> ну браузер для убогих клиентов
[15:10:08] <gds> клёва, надо такое тутачьке тоже.
[15:11:04] <ermine> gds: а ты можешь проверить на себе в конфе devel@, например, там тоже капча
[15:11:18] <ʇsʎɯ> ну, у меня тонкий клиент на сервер, что поставили, то и пользую
[15:11:23] <ʇsʎɯ> собсно, не парит особо
[15:15:38] <ermine> да какой из пиджина тонкий клиент
[15:15:51] <ermine> это ж монстр еще тот
[15:15:54] <ʇsʎɯ> блин
[15:16:00] <ʇsʎɯ> я не то имел ввиду
[15:16:07] <ʇsʎɯ> у меня тонкий клиент на столе
[15:16:11] <ʇsʎɯ> работает всё на сервере
[15:16:17] <ʇsʎɯ> я там есессна не админ
[15:16:22] <ʇsʎɯ> => что дают, то и жру
[15:17:11] <ermine> а что за тонкий клиент?
[15:17:17] <ermine> интересно стало
[15:17:25] <gds> капчу посмотрел, нравится.  спамботы отсеятся точно.
[15:17:48] <ʇsʎɯ> ermine: лол, PC без винчестера
[15:18:34] <ermine> терминал какой-то, наверное
[15:19:56] <ʇsʎɯ> да обычный PC
[15:20:31] <komar> m, на работе в жаббере торчишь, что ли?
[15:22:56] <ʇsʎɯ> а то!
[15:48:18] digital_curse вышел(а) из комнаты
[15:48:56] digital_curse вошёл(а) в комнату
Конфигурация комнаты
[16:14:49] Конфигурация комнаты изменилась
[16:15:03] <ygrek> включил капчу
[16:17:20] <gds> классно!  поглядим, кто/что отсеется.  по идее, останутся живые спамеры и очень умные скрипты.
[16:18:19] <ʇsʎɯ> тестбот бы это решил
[16:34:58] iNode вышел(а) из комнаты
[16:40:03] <gds> а ещё мы умеем так:
l2=[60; 70; {80; 90}]
l1=[0; 1; 2; {3; 4; 5}]
l1+l2=[60; 71; 82; {93; 84; 95; 83; 94; 85}]
(l1+l2)/10=[6; 7; 8; {9; 8; 9; 8; 9; 8}]
compacted=[6; 7; {8; 9}]
[16:43:37] <ygrek> кул
[17:30:18] gds вышел(а) из комнаты
[17:49:56] serp256 вышел(а) из комнаты
[17:50:08] serp256 вошёл(а) в комнату
[18:03:33] kkostya вошёл(а) в комнату
[18:07:29] kkostya вышел(а) из комнаты
[18:14:16] kkostya вошёл(а) в комнату
[19:28:55] ʇsʎɯ вышел(а) из комнаты
[19:36:07] serp256 вышел(а) из комнаты
[19:46:58] kkostya вышел(а) из комнаты
[20:05:07] ygrek вышел(а) из комнаты
[20:05:13] ygrek вошёл(а) в комнату
[20:14:55] ygrek вышел(а) из комнаты
[20:16:26] ygrek вошёл(а) в комнату
[21:21:30] iNode вошёл(а) в комнату
[21:49:52] <ygrek> загадка:
The Swiss Army Chain Saw - All the stupidities of UNIX in one!
[22:44:33] Typhon вошёл(а) в комнату
[22:45:26] <Typhon> sed :)
[22:48:06] <olegfink> ygrek, может быть, какой-нибудь lex? :-)
[22:48:37] <olegfink> BUGS: The asteroid to kill this dinosaur is still in orbit.
[22:48:41] <olegfink> (из lex(1))
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!