Home
Objective Caml
ocaml@conference.jabber.ru
Воскресенье, 9 августа 2009< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся!
Конфигурация комнаты

GMT+4
[00:05:22] sevenov вышел(а) из комнаты
[00:05:35] sevenov вошёл(а) в комнату
[00:32:48] <gds> ermine: луа к чему только можно цепляют. делается. а как думаешь, шелл-скрипты -- покатят?
а вот про нетграфы таки интересно. я с бсд общался как пользователь, поэтому сетей не осиливал особо.
[00:37:57] zfsed вышел(а) из комнаты
[01:28:13] sevenov вышел(а) из комнаты: Replaced by new connection
[01:28:15] sevenov вошёл(а) в комнату
[07:10:26] sevenov вышел(а) из комнаты
[07:11:03] sevenov вошёл(а) в комнату
[11:33:28] ygrek вошёл(а) в комнату
[12:08:50] <ermine> gds: http://ru.wikipedia.org/wiki/Netgraph
[12:10:09] <gds> ermine: ага, догадывался. А что конкретно хочешь привнести оттуда?
[12:10:21] <gds> (то есть, догадывался, но теперь точно прочитал)
[12:11:47] <ygrek> что значит "победить типизацию"? как будто бы луавские значение не имеют типа "по сути". Просто этот тип придётся явно описать в интерфейсе что конечно же добавляет работы на старте но уменьшает в процессе (использования)
[12:14:47] <ermine> gds: там надо цепляться к ноде по имени и получать от ноды продукт ее деятельности (примерно как в камлобилде rule)
[12:15:14] <ermine> gds: проблема в том, что типы продуктов надо где-то описывать и статически линковать
[12:15:22] <ermine> а хочется свободу
[12:15:28] <gds> ygrek: отпуск/командировка/больница? гадаю тут :)
[12:16:01] <ygrek> первое :)
[12:16:17] <gds> ygrek: правильно!
[12:17:44] ygrek видит два пути или свобода по типу "всё - строка" или строгие зависимости по типу XHTML.M
[12:18:15] <ermine> ygrek: у меня камление обычно заключается в том, что надо придумать типы данных и согласовать всё вокруг них
[12:18:18] <gds> ermine: смотря что дальше от ноды дальше надо. Самое тупое -- sum type поверх: Takes_int_gives_string of (int -> string) | ..., который связать с именем.
Если не в рантайме надо связывать, то всё более статически и удобно реализуется.
[12:18:21] <ygrek> по второму пункту могу сказать что для написания "реального" хтмля приходится вводить unsafe_data и unsafe_attrib
[12:18:27] <ermine> иногда утомляет до ненависти
[12:19:21] <gds> ermine: так радоваться надо! В других языках всё состоит в написании тонн кода и отладки, и хоть она и производит впечатление реальной деятельности, оно в целом геморнее.
[12:21:10] <ermine> gds: нетграфы написаны на цэ! круче них только звезды
[12:21:43] <ygrek> (на шелле написать не осилили)
[12:21:44] <gds> значит Obj.magic тебе в руки, и лови всё в рантайме :) Хочешь?
[12:23:04] <ermine> ну, а для динамической загрузки плагинов как иначе?
[12:23:20] <ermine> плагины надо цеплять к нодам хуков
[12:24:11] <ermine> первоначальный вриант был - написать type event = | длинный список евентов и дописывать по мере развития хуков
[12:26:11] <gds> для динамической загрузки тех плагинов, которые компилируются вместе (из одного дерева исходников) -- статические типы однозначно. Пусть неудобняк, но всё же.
Кроме того, не зря спрашивал -- а что же с этими нодами надо будет делать? Вполне возможно, что дело асиливается.
[12:27:35] <ermine> а вот не хочу дописывать евенты в один длинный список
[12:28:27] <ermine> gds: ты видел eggdrop, бот для irc?
[12:29:35] <ermine> и в клиентах для IM хуки широко используются - это скопления калбэков для отработки того или иного события
[12:32:13] <gds> eggdrop не видел.
так всё же, что за калбэки? Если они имеют один и тот же тип вида t -> t, то всё отлично.
[12:35:22] <ermine> gds: простейший вид калбэка: в чате прошла мессага, в ней содержится команда. Нужно вызвать соответствующую функцию для ее отработки, а функция содержится в плагине
[12:35:26] <gds> можно навернуть ещё один слой типизации -- json-static / sexplib / binprot, гонять данные ими, а в модуле проверять на то, соответствует ли типу.
[12:36:01] <ermine> когда плагин загружается, она регистрирует функцию в обработчике команд, а обработчик команд зарегался в обработчике мессаг
[12:37:09] <gds> ermine: понял. Ну наплодить несколько типов (реально немного имхо), которые будут описывать тип калбэка и хранить само его значение в sum type, а дальше эти типы ассоциировать со строками, так и хранить/юзать.
[12:40:57] <ermine> gds: где описать типы?
[12:43:49] <gds> если из одних исходников всё компилируется, то где-то в них.
[12:45:00] <ygrek> ну тип колбэка в таком случае это string -> unit
[12:45:08] <ygrek> string то что идёт после комманды
[12:46:28] <ermine> в данном случае
[12:47:08] <ermine> теперь другой плагин seen, который ловит входы и выходы юзеров и запоминает дату/время, а потом по команде сообщает, когда юзер был здесь
[12:47:11] <ermine> какой тип?
[12:47:44] <ermine> тут два типа - тип команды и тип евентов в чате
[12:49:16] <gds> event -> unit для ловли входов-выходов, и string -> string для запроса.
можно ввести sum type в качестве аргумента: Event of event | Command of string, пока так. Дальше -- больше. Но всё тут нормально типизируется.
[12:50:13] <ygrek> ну на самом низком уровне тип тоже один - xmpp_event -> xmpp_event list, потом для удобстваон специализируется под частные случаи, но если для плагина нет подходящего частного случая то он использует базовый тип
[12:51:10] <gds> кстати логично.
[12:57:21] <ermine> gds: ты принуждаешь писать длинный тип
[12:57:27] <ermine> длинный sum
[12:57:33] <ermine> на все случаи жизни
[12:57:46] <ermine> новый плагин не сварганишь, не отредактировав sum
[12:57:48] DiGiTAL_CuRSe вышел(а) из комнаты
[12:57:53] <gds> случаев не так уж и много, если в целом.
[12:58:07] <ermine> много
[12:58:34] <gds> докажы
[12:59:19] <gds> вон ygrek посоветовал базовый вариант -- бери его и не парься, если реально много.
[13:00:03] <ermine> type event =
| Message | Presence | Iq | MUC_join | MUC_leave | MUC_change_nick | MUC_kick | MUC_ban | MUC_(дохрена еще ...) | Whiteboard | Voice | Video | ...
[13:00:13] <ermine> фантазия кончилась
[13:00:51] <ermine> а теперь прикиньте, что обработчик MUC можно оторвать от основного тела - тогда бот не будет сидеть в конфах
[13:01:04] <ermine> и поэтому изрядный кусок евентов окажется лишним
[13:01:33] <gds> тогда оформить тип muc_event и в type event указать MUC of muc_event
[13:02:36] <ermine> не вижу разницы :)
[13:05:33] <ermine> gds: другой вариант хуков есть в camlp4 в описании грамматики
[13:05:48] <ermine> там можно вставлять свои правила в указанное место
[13:05:54] <ermine> только вот продукт там один
[13:08:56] DiGiTAL_CuRSe вошёл(а) в комнату
[13:30:33] DiGiTAL_CuRSe вышел(а) из комнаты
[14:15:44] asprit вошёл(а) в комнату
[14:21:21] <asprit> Всем привет
[14:23:40] <gds> шолом
[15:03:32] <gds> ygrek: а в каких целях нужны unsafe_data + unsafe_attrib для реального html? Понятно, что какие-то исключения из правил, но какие?
[15:06:10] <ygrek> javascript вставить
[15:06:12] <ygrek> инлайном
[15:06:18] <ygrek> onclick всякие
[15:16:47] <gds> но лексические правила ведь одинаковы, просто добавляются новые атрибуты, отсутствующие в честном html?
[15:17:03] DiGiTAL_CuRSe вошёл(а) в комнату
[15:20:12] <ygrek> да, конечно
[15:20:55] <ygrek> хотя вот содержимое javascript надо вставлять как preencodedcdata, чтобы он не пытался его форматтить
[15:21:43] <ygrek> а по умолчанию он этого не даёт делать и надо ковырять внутренности
[15:27:07] <gds> то есть, оно по умолчанию эскейпит символы, превращая их в &lt;, &quot;, что для js не годится, так?
[15:30:12] <ygrek> да, плюс форматтит по ширине вставляя пробелы и перенося строки по правилам хтмля что для js конечно не годится
[15:30:48] <ygrek> правда это я использую pretty_print
[15:35:18] <gds> ага, идею понял.
хтмл всё-таки мало пригоден к типизации, в основном со стороны разделения труда. Подобные извраты, конечно, можно было бы закодить.
[15:43:29] <ygrek> да, согласен. мне пригодилось в качестве генерирования гуи для админки сервиса - дизайин не нужен и содержимое в основном всякие отчёты которые хорошо факторизуются на стороне кода
[15:47:58] asprit вышел(а) из комнаты: Replaced by new connection
[15:48:01] <ygrek> ух, rwmjones выдал вкусный цикл про ocaml internals
[15:48:05] ygrek разгребает rss
[15:48:26] <gds> урлыурлы?
[15:49:20] <ygrek> http://rwmj.wordpress.com/
[15:52:32] <gds> о, он даже знает, что такое матрёшка. цикл буду чтить таки. систематизация не повредит.
[16:11:34] sevenov вышел(а) из комнаты
[16:16:46] sevenov вошёл(а) в комнату
[16:23:29] sceptic вышел(а) из комнаты
[16:26:48] sceptic вошёл(а) в комнату
[16:27:49] sceptic вышел(а) из комнаты
[16:30:17] sceptic вошёл(а) в комнату
[16:31:31] asprit вошёл(а) в комнату
[16:48:31] <gds> "Article was good but fish face at the top scared the shit out of me!"
+1 таки.
[16:52:29] sceptic вышел(а) из комнаты
[17:07:17] sceptic вошёл(а) в комнату
[17:18:19] sceptic вышел(а) из комнаты
[17:20:39] zfsed вошёл(а) в комнату
[17:38:55] asprit вышел(а) из комнаты
[17:46:44] sevenov вышел(а) из комнаты
[17:57:09] sevenov вошёл(а) в комнату
[18:00:03] sceptic вошёл(а) в комнату
[18:00:35] sceptic вышел(а) из комнаты
[18:00:44] sceptic вошёл(а) в комнату
[18:08:27] sevenov вышел(а) из комнаты
[18:20:57] sceptic вышел(а) из комнаты: Replaced by new connection
[18:39:00] ygrek вышел(а) из комнаты
[18:40:03] ygrek вошёл(а) в комнату
[18:58:45] asprit вошёл(а) в комнату
[19:03:16] sevenov вошёл(а) в комнату
[19:52:13] sceptic вошёл(а) в комнату
[19:52:16] sceptic вышел(а) из комнаты
[19:59:06] asprit вышел(а) из комнаты
[20:18:01] sceptic вошёл(а) в комнату
[20:47:34] sevenov вышел(а) из комнаты
[20:47:48] sevenov вошёл(а) в комнату
[22:10:19] ygrek вышел(а) из комнаты
[22:43:18] Стёпа вошёл(а) в комнату
[22:46:22] Стёпа вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!