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

GMT+4
[00:19:07] Michael Holub вышел(а) из комнаты
[00:44:05] <ermine> ygrek: а чо, ocamlcore.org - твой? :)
[00:44:22] <ermine> тогда было бы с чего протащиться
[00:46:07] <ermine> вот если б увидеть этот аккаунт на j.ru
[00:49:01] ygrek вышел(а) из комнаты
[00:52:40] sevenov вошёл(а) в комнату
[04:15:44] sevenov вышел(а) из комнаты: Replaced by new connection
[04:15:47] sevenov вошёл(а) в комнату
[06:52:39] john вышел(а) из комнаты: Replaced by new connection
[06:52:40] john вошёл(а) в комнату
[09:55:48] ygrek вошёл(а) в комнату
[10:37:26] <ygrek> :)
[12:21:05] <ermine> ygrek: дай плиз ссылку на твой патч к сульце
[12:23:48] sceptic вышел(а) из комнаты
[12:48:26] <ygrek> http://ygrek.org.ua/p/sqlgg/demo/sulci/
[12:51:46] sceptic вошёл(а) в комнату
[12:52:06] <ermine> сайт вроде лежит
[12:53:54] <ygrek> отвечает
[12:54:04] <ygrek> иногда немного долго
[12:55:44] <ermine> ага, на третью попытку ответило
[12:59:54] ermine утомилась разбираться между разным поведением камлобилда при сборке байткода и нативкода
[13:04:22] <ygrek> в чём сейчас модно писать документацию/техническое описания/readme?
нужен вывод в html и plain text, бонус - pdf
система должны быть максимально простой, не завязанной на какие-то внешние/закрытые сервисы
пробовал
html руками - адъ
docbook - застрелишься набирать, очень много ненужных деталей
markdown (и другие wiki) - почти хорошо, но какой-то расхлябанный/неформальный и правила квотинга удручают
latex - хорош, но слишком большой
[13:04:48] <ygrek> ermine: пример в студию
[13:06:12] <ermine> пример трудно привести, ибо это проявляется на статически линкуемых плагинах, файлы которых перечислены в отдельном списке и вставляются по flag_and_dep "compile"
[13:06:48] <ermine> в случае натива все собирается, в случае байткода оно многое не видит
[13:08:15] <gds> насчёт документации -- может всякие doxygen (выбрать подмножество из него)?
[13:08:31] <ermine> включая игнорирование .mllib в другом каталоге
[13:09:53] <ermine> gds: а что ты хочешь документировать?
[13:11:32] <gds> я -- ничего. для простых вещей мне пока plain text хватает.
[13:12:07] <ermine> мда, нативные динамические плагины камлобилдом не скомпилить, байткодные плагины компиляются на ура, а программа - нет
[13:12:58] <ermine> придецо по старинке - нативный с вкомпиленными плагинами
[13:14:22] <ermine> а еще тут теологическая проблема с глобальными значениями в плагинах возникла, в основном это открытые файлы
[13:14:32] <ermine> куда их девать
[13:15:51] <ygrek> doxygen же явно для кода, а мне просто структурированный поток сознания
[13:15:54] <ermine> проблема скорее в том, что в старой сульце каждый плагин мог прочитать конфиг, потому что он был глобальным и был везде виден, в новой сульце же теперь надо вызывать функцию плагина и передавать туда кусок конфига
[13:16:05] <ermine> и соответственно эта функция открывает файлы
[13:16:23] <ygrek> т.е. от *gen'а остаётся только его личная, уникальная, очередная вики разметка
[13:19:17] <gds> ermine: открываешь конфиг глобально, читаешь из него, закрываешь файл, передаёшь кусок конфига в плагин.
[13:19:46] <gds> ygrek: ну да, кривизна. Но других нужных тебе инструментов я не видел. Может реально какую-нибудь простую вики поставить?
[13:23:18] <ermine> gds: ну вот:
let start_plugin cfg =
let f = open_in "something" in register_plugin "ping" (ping f)
такое не вызывает сомнений, если передать f надо только в одно место
[13:23:42] <ermine> если надо зарегать кучу функций, которым нужен один хэндлер
[13:25:04] <ermine> есть мысль сделать let start_plugin cfg размером на весь файл кода, и вложить туда все определения функций, которым нужен зэндлер
[13:25:22] <ygrek> gds: тогда уж я лучше какую нибудь обёртку над латех'ом (сооружу и) буду использовать
[13:25:34] <ygrek> а то эти вики - сегодная она такая - а завтра другая
[13:26:23] <gds> ygrek: а в txt там экспорт нормальный? не помню уже.
[13:26:36] <gds> ermine: не обязательно же передавать открытый канал в плагин. более того, так лучше не делать.
[13:27:33] <ermine> gds: а как же иначе? скажем, это не open_in, а файл sqlite
[13:29:03] <ygrek> gds: вон у markus mottl readme в тарболлах и странички на сайте из латеха
[13:29:47] <gds> ermine: путаешься в показаниях :) если файл с конфигом, то можно локализовать его использование: прочитать один раз конфиг и передавать только его. Если sqlite -- это совсем другая история.
[13:30:37] <ermine> gds: а, ты понял так, что это я хотела файл конфига передавать
[13:30:54] <ermine> gds: не, я хочу открывать файлы, пути к которым указаны в конфиге
[13:31:38] <ermine> gds: задача сводится к тому, чтобы где-то хранить глобальные значения, которые вычисляются согласно конфигу
[13:31:39] <ygrek> конфиг - xml
[13:31:53] <ermine> какая разница
[13:31:53] <ygrek> прога парсит конфиг
[13:32:06] <ygrek> каждому плагину в DOM'е отведён узел
[13:32:13] <ermine> если бы я знала как можно смапить xml в ini и наоборот, то был бы ini конфиг
[13:32:20] <ygrek> этот узел даётся ему при инициалиазации
[13:32:27] <gds> может пусть плагин сам открывает ресурсы?
[13:32:36] <ygrek> а свои ресурсы плагин открывает сам
[13:32:41] <ygrek> шареные ресурсы - только конфиг
[13:32:58] <ermine> открывает, да
[13:33:06] <ermine> а где хранить? в рефах?
[13:33:35] <gds> да хоть в module top values.
[13:34:13] <ermine> и тогда let smth = module ... in ...? :)
[13:34:32] <ermine> занятная идея
[13:35:34] <ermine> но регать такой утиль тяжко
[13:35:39] <gds> я не про это. без вложенных модулей.
[13:37:29] <gds> хотя, вспоминая эти плагины, там не получится -- модуль получит конфиг после инициализации. тогда думай, вариантов куча. рефы, например.
[13:37:42] <ermine> а как зарегистрировать функцию, которая видит такой хэндлер, видимый всем функциям того плагина, откуда функция?
[13:38:22] <ygrek> ыыы
[13:38:38] <ermine> для примера можно посмотреть в sulci/plugin_tld.ml, это наиболее простой случай, там открывается dbm файл
[13:38:49] <ygrek> функция которую написал Джек
[13:39:13] <ermine> чо?
[13:40:35] <ygrek> http://schools.keldysh.ru/d-mm00-31/praktika/dom.htm
[13:42:00] <ermine> там бнопня
[13:42:19] <ermine> келдыш? странно
[13:43:25] <ygrek> опера автодетектит cp1251
[13:44:44] ermine приложила патч к сульце и смотрит
[13:44:59] <ermine> по мете?
[13:45:32] <ermine> а ты попробуй текстовым броузером :)
[13:49:26] <ermine> да, работенка предстоит тяжеленькая
[13:50:06] <gds> опиши, что плагин делает при инициализации и что возвращает.
[13:51:47] <ygrek> ermine: если ты опубликуешь своё репо - я сам перенесу патч
[13:52:07] <ermine> let plugin cfg =
тут открываются нужные базы данных и регистрируются функции команд бота (функции команд должны видеть хэндлеры открытых файлов)
let _ =
register_plugin "name" plugin
[13:52:14] <ermine> это в самом плагине
[13:52:23] <ygrek> ermine: автодект по частотному распределнию букв на странице - любой вменяемый браузер умеет
[13:52:59] <ermine> дальше модуль, который читает конфиг и видит, что данный плагин не отключен/заблокирован, вызывает функцию plugin и передает ему соответствующий кусок распарсенного конфига
[13:54:00] <ermine> ygrek: метод не является вменяемым, imho
[13:55:42] <ygrek> ну конечно, самый вменяемый - расстрелять автора страницы :)
[13:56:37] <ermine> ага
[13:58:15] <gds> ermine: ну тогда всё просто и тупо. В примере ровно один let (первый) является top value.
let plugin cfg =
let dbm = Dbm.open .. in
let file = open_out ".." in
...
let myfunc () = Dbm.fetch .. in
let myfunc2 () = output_string file ".." in
( register_command "cmd1" myfunc; register_event "some" myfunc2 )
;;
т.е. myfunc и myfunc2 хранят в себе ссылки на dbm и file
[13:59:54] <ermine> gds: угу, у меня была такая мысля, но я надеялась, что существует более оригинальное решение
[14:00:27] <gds> зачем оригинальное, когда есть простое и рабочее.
[14:01:21] <ermine> ну мало ли :)
[14:02:35] ermine уважает ноу-хау и уважает их
[14:02:49] <ermine> ой
[14:02:59] <ermine> и восхищается ими
[14:03:30] <ermine> вот в августе открытием было полиморфный параметризм
[14:04:03] <ermine> одно дело - знать в теории про такие штуки, другое дело - удачно применить
[14:09:13] <gds> удачное применение -- там, где они нужны.
просто пиши код с минимумом копипасты и с нацеленностью на безопасность/безглючность, и подмечай моменты, где это нарушается. А там уже будет ясно, можно ли что-то применить или ничего интересного нет.
[14:22:07] <ermine> это у тебя такой подход к делу? :)
[14:28:19] <gds> ага. Плюс ещё принцип "как можно меньше усилий", но он стоит чуть ниже.
Самое интересное, что этих трёх целей хватает, чтобы написание любой сложнее-чем-тривиальной программы превратить в неплохое исследование -- предметной области, окамла, иногда другой computer science.
Например, написание хитрых алгоритмов периодически заводят в Coq -- интересная штука, скажу я вам. Попытки выразить мысли безопасно заводят в извраты окамловской типизации. И так далее.
Но, главное -- я никогда не делаю ничего сложнее тривиальных вещей, если на это нет какой-либо необходимости.
[14:32:29] ermine руководствуется в основном эстетикой
[14:37:55] <ermine> gds: вязание придумали мужики, но щас эта работа почему-то считается сугубо женской
[14:40:33] <gds> так раньше было нужно сугубо практическое от вязания, теперь же вяжут рюшечки да финтифлюшечки. всё объяснимо.
[19:55:43] <ermine> lablgtk2 заработал с помощью этого
ocaml_lib ~extern:true ~dir:"+lablgtk2" "lablgtk";
flag ["ocaml"; "link"; "byte"; "use_lablgtk"] & A"gtkInit.cmo";
flag ["ocaml"; "link"; "native"; "use_lablgtk"] & A"gtkInit.cmx";
[20:00:08] <ermine> при наличии тредов надо добавлять еще gtkThread.cmx
[20:02:16] <ygrek> можно просто let locale = GtkMain.Main.init () делать
[20:06:33] <ermine> а ведь работает :)
[20:06:44] <ermine> спасибо
[22:03:05] <gds> в контексте предыдущего моего аццкого птсо http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/2009/08/26.html#00:14:33.566464 уже думаю, что вместо того, чтобы где-то внутри окамла проводить разграничение, какой ассемблер брать для компиляции внутренних vs внешних асм-исходников, проще будет оформить конвертилку gnu asm -> masm, чтобы и окамл, и прочие думали, что они общаются с mingw и gas. Чтобы все думали, что платформа -- mingw, а внешними средствами будем вызывать msvc-утилиты.
Теперь с конвертилкой ассемблера проблем мало (сделали же ребята http://www.delorie.com/djgpp/faq/converting/asm2s-sed.html десятки лет назад, значит в целом реально). И думаю про сишные исходники. Реально ли там дефайнами, переданными гнутому cpp и msvc'шному cl.exe и добавлением/подменой include-директории намутить так, чтобы сишный код, рассчитанный на mingw, компилировался msvc C компилятором нормально?
[22:04:48] <gds> ("дефайнами, переданными ... msvc'шному cl.exe", конечно, стоит читать по-другому. все дефайны уходят от cpp.)
[22:13:29] ygrek не знает
[22:13:44] <ygrek> насчёт асма - видел где-то nasm2gas
[22:22:38] <gds> ага, ну если там вопросы синтаксиса по поводу осемблира -- это в теории не проблема.
в общем, идею понял. буду ковырять, как будет зудеть.
[22:29:53] <ygrek> в соответствии с принципом release crap -- http://ygrek.org.ua/p/dbfplot.html
[22:44:02] ygrek вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!