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

GMT+4
[00:00:50] ygrek вышел(а) из комнаты
[00:09:15] <ermine> а так - асихронное чтение из сокета пашыт на ура
[00:15:21] <gds> то есть, библиотека gtk подкидывает в сокет, а окамловский код это читает и генерит нужные события, вызывает нужные функции и так далее? Или как?
[00:17:01] <ermine> вешаешь калбэк на сокет до запуска main()
[00:17:19] <ermine> остальное не должно меня волновать :)
[00:18:17] <gds> примеры описаны в документации на lablgtk?
[00:19:03] <ermine> я доку пока не видела, ибо свежий lablgtk не собирается из-за sourceview
[00:19:48] <ermine> http://faq.pygtk.org/index.py?req=show&file=faq20.016.htp
[00:19:58] <ermine> вот тебе пример, хоть и на другом языке
[00:28:59] <gds> тьфуты, я было про более универсальную штуку подумал. А в этом раскладе тебе нужно работать только с теми сокетами, которые регистрируешь через io_add_watch, а main loop так же запускаешь через gtk.main ()?
[00:41:33] sceptic вышел(а) из комнаты: Replaced by new connection
[00:41:37] sceptic вошёл(а) в комнату
[02:00:44] sceptic вышел(а) из комнаты
[02:20:43] <sevenov> ermine, оО а зачем pygtk?
[06:51:09] john вышел(а) из комнаты: Replaced by new connection
[06:51:10] john вошёл(а) в комнату
[07:53:33] john вышел(а) из комнаты
[08:19:08] sceptic вошёл(а) в комнату
[08:28:35] john вошёл(а) в комнату
[09:56:32] Typhon вошёл(а) в комнату
[09:57:27] ygrek вошёл(а) в комнату
[10:18:51] <ermine> gds: да
[10:31:19] Mon вошёл(а) в комнату
[10:50:04] Mon вышел(а) из комнаты
[10:52:34] Mon вошёл(а) в комнату
[10:55:51] Mon вышел(а) из комнаты
[11:00:38] f[x] вошёл(а) в комнату
[11:04:45] Mon вошёл(а) в комнату
[11:41:14] ygrek вышел(а) из комнаты
[12:15:11] sceptic вышел(а) из комнаты
[12:15:57] sceptic вошёл(а) в комнату
[12:20:06] Typhon вышел(а) из комнаты: Replaced by new connection
[12:20:07] Typhon вошёл(а) в комнату
[12:52:41] <f[x]> gds: а ты aio на камле использовал для скорости? удалось? цифры какие получились?
[12:55:18] <gds> не использовал, так как идея с лишним копированием показалась мне плохой, негодной, а других идей не было. Поэтому забил, так как большого резона делать то, что я хотел сделать, уже не стало, и решил пока ограничиться обычным вводом-выводом.
[13:03:51] <ermine> aio? wtf?
[13:04:38] <ermine> а, сисколы
[13:08:51] <f[x]> кстати, насчёт своих либ - можно же "проинсталлить" их в каталог где они живут/собираются - тогда проект их использующий всегда будет иметь последнюю версию плюс обычную систему сборки (как и у тех кто будет использовать "релиз")
[13:09:13] <f[x]> ermine: я имел ввиду async I/O в общем
[13:09:32] <gds> точнее, в lib/_build/ ?
[13:12:00] <f[x]> да
[13:12:27] <f[x]> ну билдить их всё равно надо будет явно
[13:12:30] <gds> кстати, а ведь толковая идея. При билде библиотеки (находясь в lib/) инсталлим библиотеку (в ../site-lib/), а при очистке билд-директории -- uninstall'им (чтобы полагаться на сообщение ocamlfind'а типа "либа не найдена", что значит "либа не скомпилирована").
[13:12:35] <f[x]> но это можно в makefile прописать
[13:13:39] <gds> или для ocamlbuild нет понятия "замочить _build"?
[13:14:18] <ermine> f[x]: чем инсталлить?
[13:15:15] <gds> ведь можно в окамлбилде прописать цель вида libname.install?
[13:15:31] ermine уже не хочет вновь использовать Makefile
[13:15:46] f[x] вышел(а) из комнаты
[13:16:09] <sceptic> use autotools, Luke
[13:16:17] <ermine> gds: можно написать rule, которая что-то порождает и от чего-то зависит
[13:16:45] <ermine> надо будет развить эту мысль дальше
[13:17:00] <ermine> а вот ocamlbuild install не пойдет
[13:17:26] <ermine> вместо этого надо ocamlbuild /path/lib/lib.cma
[13:18:23] <ermine> в общем, не слишком четко получается
[13:19:01] <gds> а имхо чотко, но мой оптимизм возможно связан с незнанием ocamlbuild.
[13:20:13] f[x] вошёл(а) в комнату
[13:20:52] <f[x]> ocamlbuild -clean суть rm -rf _build
[13:21:30] <f[x]> ermine: инсталлить чем угодно, ocamlfind'ом
[13:21:55] <f[x]> gds: зачем при очистке анинтсаллить?
[13:22:11] <f[x]> пускай себе в site-lib лежит META указывающий на lib/_build
[13:22:18] <gds> чтобы ocamlfind ругался прилично, а не на "не найден .cma"
[13:22:44] <f[x]> ой ой
[13:23:08] <f[x]> заморочки
[13:23:24] <f[x]> зато без этого всё просто
[13:23:30] <gds> а как же щёлкат опцию "использовать libname локальную/глобальную"?
[13:23:57] <f[x]> META файлом
[13:24:31] <f[x]> или два META - ocaml-dbf и ocaml-dbf-dev?
[13:25:59] <gds> гы. а если использовать subpackages (или как их) -- ocaml-dbf.xxx сначала "отрезолвится" в мета-файл ../site-lib/ocaml-dbf/META, в котором уже будет искаться subpackage "xxx"?
[13:26:17] <ermine> f[x]: а у тебя есть инсталляшка гденить в камлобилде?
[13:29:34] <f[x]> gds: может, не знаю как оно там устроено
[13:29:53] <f[x]> ermine: неа, не было нужды
[13:30:26] <f[x]> имхо камлобилд для инсталла исопльзовать не надо
[13:30:51] <f[x]> для инсталла нужен шеллскрипт и не более
[13:31:09] Typhon вышел(а) из комнаты
[13:31:14] <gds> шеллскрипт -- не кроссплатформенно, в отличие от камлобилда.
[13:31:42] <f[x]> ну если в шеллскрипте написано ocamlfind install bu bu bu
[13:31:50] Typhon вошёл(а) в комнату
[13:31:51] <f[x]> то вполне
[13:31:55] Typhon вышел(а) из комнаты
[13:32:18] <f[x]> а из камлобилда тоже можно Sys.command "cp a b" вызвать :)
[13:33:10] <gds> но из камлобилда можно реализовать и более человеческие варианты. да хотя бы тупое копирование реализовать циклом, по блокам читая-записывая.
[13:33:29] <f[x]> а профит какой?
[13:34:21] Typhon вошёл(а) в комнату
[13:35:24] <f[x]> мне нравится makefile с целями build doc install uninstall первые две сразу вызывают ocmalbuild, последние две - ocamlfind. и кроссплатформенно
[13:36:01] <ermine> сегодня буду пытаться наладить инсталляцию в мусоросборник
[13:36:15] <ermine> и соответственно компиляция с либлами оттуда
[13:36:49] <ermine> а вот вопрос из этого истекает -- валить все в один каталог или подкаталоги?
[13:37:14] ermine тут бегает вокруг и почти не читает то что тут написали, видимо зря
[13:40:32] <gds> не нравится наличие make. Можно как-то переложить его обязанности на ocamlbuild? Исключительно чтобы избавиться от него.
А то я смотрю на msvc в последнее время краем глаза.
[13:41:15] <f[x]> под msvc есть nmake с точно таким же синтаксисом для простых вещей
[13:41:28] <f[x]> ну можно переложить на камлобилд плюс Sys.command
[13:41:44] <ermine> да можно переложить
[13:42:09] <ermine> вы лучше скажите - инсталлить в один каталог все либлы или в подкаталоги в одном каталоге?
[13:42:10] <f[x]> хотя make удолбен тем что сразу vim'ом подхватывается :)
[13:42:48] f[x] исходя из прошлого опыта требует от ermine чёткого ТЗ :)
[13:42:56] <gds> ermine: тут ещё более интересная и красивая ситуация.
[13:45:03] <ermine> f[x]: вон в старой сульце OCamlMakefile инсталлил все либлы в локальный каталог site-libs/подкаталоги, а при компиляции программы ocamlfind подхватывал оттуда
[13:45:39] <ermine> можно в принципе повторить это, но я как-то хотела не зависеть от ocamlfind, но наверное тоже зря
[13:46:10] <ermine> gds: не заметила
[13:47:03] <ermine> короче, буду инсталлить в site-libs/подкаталоги, дальше хоть камлофиндом, хоть напрямую прописывать пути
[13:47:39] <ermine> правда это ломает некоторую малину при активной разработке сразу нескольких паккаджей
[13:48:36] ermine зарыдала и пошла сувать myocamlbuild.ml во все каталоги
[13:48:44] <f[x]> моя позиция неизменна - если либа используется более чем в одном проекте - относится к ней как к внешней сущности, ставить ocamlfind'ом глобально (при активной разработке - "ставить" в исходный каталог сборки самой либы). все остальные либы считать либами на уровне интерфейсов но держать в source-tree родительского проекта
[13:49:50] <f[x]> соответственно у каждой "настоящей" либы - свой камлобилд - чтобы её могли использовать другие независимо. недолибы же используются из родительсокого камлобилда простым include:
[13:50:02] john вышел(а) из комнаты
[13:50:47] <f[x]> впрочем я эту схему не использовал, а только продумал :)
[13:51:01] <f[x]> но по всей видимости скоро надо будет что-то такое делать
[13:51:43] <ermine> мне без этой схемы не опубликовать чонить
[13:52:41] ermine в паралельном чате пытается обсудить проблемы схемотехники, нихрена не рубя в ней
[13:54:19] <ermine> там нужно было выинуть один операционный узел на плате, увеличить радиатор на транзисторах, чтобы увеличить выходной ток с 1 ампера до пяти и найти помехи в другой части платы
[14:01:06] ermine изучает мойкамлобилд в sqlgg на предмет унификации
[14:14:03] sceptic вышел(а) из комнаты
[14:20:05] ygrek вошёл(а) в комнату
[14:21:12] john вошёл(а) в комнату
[15:29:51] <ermine> вот жалко что в камлобилде нельзя написать таргеты-phony
[15:45:53] <ermine> а еще кажись камлобилд не понимает пути снаружи _build
[15:48:28] <ermine> а, не понимает в prod
[15:59:58] <ermine> нопесала ocamlbuild install, пашыт, можно уже радоваться жизни
[17:02:55] sceptic вошёл(а) в комнату
[17:35:04] <f[x]> как использовать stream-err? http://brion.inria.fr/gallium/index.php/Stream_Parser
[17:38:18] <f[x]> что-то я как ни пытаюсь - не получается
[17:41:36] <f[x]> а, получилось
[17:44:47] <f[x]> в мануале понятно описано - http://caml.inria.fr/pub/docs/manual-camlp4/manual003.html
[17:45:11] <ermine> в мануале старого camlp4 было понятнее
[17:45:41] <ermine> ага
[17:47:40] <f[x]> а как заматчить конец стрима?
[17:47:48] <f[x]> только руками Stream.empty проверять?
[17:48:20] <ermine> [< >] ?
[17:49:34] <f[x]> нет, это "любой"
[17:49:46] <ermine> хм
[17:50:48] <ermine> а мне казалось, что он и есть empty
[18:09:56] <f[x]> streams are cute
[18:31:38] <ermine> с ними гимора много иногда
[18:35:28] <f[x]> например?
[18:35:50] <f[x]> я пока использую для парсинга - php serialize и bencode
[18:36:03] <ermine> когда хочется смотреть на символ дальше, который смотрится в соседней функции
[18:36:40] <ermine> в общем, все матчинги доступны только в текущей функции
[18:37:09] <ermine> и приходится соображать как построить развесистый парсер
[18:38:02] <f[x]> т.е. look-ahead далеко?
[18:39:27] <ermine> ага
[18:40:05] <ermine> удобно когда надо парсить лишь [< d = int; sp = space; d2 = int >]
[18:43:01] 604 вошёл(а) в комнату
[18:43:39] <604> я смотрю, фраза про релизы прижилась тут :))
[18:47:44] ermine раздумывает, как инсталлить *.cmi скопом, не перечисляя
[18:53:09] <f[x]> что-то я не вижу ocamldbi в пакетах debian..
[18:54:31] john вышел(а) из комнаты
[19:03:17] <f[x]> есть только для etch
[19:03:19] <f[x]> от враги
[19:05:06] <f[x]> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=443847
[19:05:36] <f[x]> gds: либо ocamldbi не труъ либо одно из двух
[19:07:16] Typhon вышел(а) из комнаты
[19:09:21] john вошёл(а) в комнату
[20:21:06] f[x] вышел(а) из комнаты
[20:39:48] ermine медитирует над теологическим вопросом "как и чем задавать путь для инсталляции"
[21:51:50] john вышел(а) из комнаты: Replaced by new connection
[21:51:51] john вошёл(а) в комнату
[23:15:01] <gds> прикольно: приезжал в родные пенаты (т.е. в мой город) давно знакомый чел, практикующий похапэ за деньги. как подтвердилось, и среди _них_ бывают хорошие люди.
[23:18:47] <gds> f[x]: ocamldbi -- вот хрен его знает. Конечно, оно не тру, ибо базовая херня, которая мало кому нужна сама по себе -- разве что примерить свой модуль супротив его интерфейса.
И дофига всего не умеет в плане интерфейса. А в плане реализации -- умеет только odbc и вроде ещё какую-то мелочь.
Чую в себе силы завязать туда ещё sqlite3, mysql, oracle (тупиковую ветвь, которая собирается mingw'ом), dbf (ну примерно), сохранить odbc, а остальное уже на контрибуциях.
Осталось подумать, надо ли оно. С таким уё.. интерфейсом, как в ocamldbi -- не надо, точно. Новый родить -- вариант. Но там думать надо.
[23:19:53] <gds> 604: да, благодаря тебе опенсорс и всякое гну тут начало процветать. Если внимательно вдуматься, это парадоксально. Не находишь?
[23:21:33] <gds> ermine: про "путь для инсталляции" -- в смысле? Если инсталляция локальная, то используем ../etc/findlib.conf, там есть путь, вроде. Если глобальная, то зовём ocamlfind без локального конфига.
[23:22:19] <ygrek> gds: судя по отзывам оно поддерживает и mysql и postgres, как обёртка к соответствующим биндингам
[23:22:30] <ygrek> но видимо все предпочитают использовать биндинги
[23:22:44] <604> а в чем ты видишь парадокс?
[23:22:54] <ygrek> т.е. получается для mysql вариант только один существует - и этот вариант не умеет параметры
[23:23:07] <ygrek> по-видимому я знаю что буду делать на этой неделе :)
[23:23:32] <gds> ygrek: ну хз, как оно поддерживает. Криво -- верю. Нужно ровно.
[23:23:39] <gds> а чего собираешься?
[23:23:51] <ygrek> хочу параметры
[23:24:36] <ygrek> сишные биндинги я уже на эту тему разобрал, осталось с камлем подружить
[23:25:01] <gds> 604: говорил типа "release early, release often, release crap" в качестве стёба над гнутыми и опенсорсными, и небось надеялся, что crap'а будет меньше. А парадокс в том, что стало больше.
[23:25:37] <ygrek> а будет ещё больше
[23:25:44] <ygrek> муа ха ха
[23:25:56] gds открывает канализационный люк
[23:25:59] <604> а мне кажется наоборот. "ща мы как соберёмся, да как покажем ему, на что мы способны!" ;)
[23:26:32] <gds> 604: ну мы же реально crap кидаем -- полурабочее, не факт что верное, а с формальной стороны вообще не доказанное!
[23:27:52] <604> вы когда-нить видели, как квас бродит? что происходит, когда банку толкаешь?
[23:28:44] <gds> ygrek: берёшь за основу ocaml-mysql классический? давай навернём нормальный dbi-интерфейс. лично я бы принял непосредственное участие. лично мне почти нравится перлячий dbi как общий интерфейс, но нужно ещё кое-что продумать вдобавок.
ведь базы данных для примитивных применений таки реально похожи.
[23:29:15] <gds> 604: дада, прекрасно видел. Но не факт, что всплывающая субстанция как-либо хороша :)
[23:31:08] <ygrek> gds: мне только нужны параметры. если пациент операбелен - почему бы и нет?
[23:31:42] <604> в любом случае, всё что ни делается, к лучшему. Больные NIH-синдромом все равно будут строить свои велосипеды, а вот кому-то вы сэкономите чуть-чуть драгоценной жизни
[23:32:27] <ygrek> гм, и это я слышу от ярого поборника crap'а?
[23:32:30] <ygrek> я разочарован
[23:32:56] <604> просто я сегодня добрый
[23:34:16] <604> видимо, связано с тем, что относительно давно в этот crap не вляпывался
[23:35:08] <gds> ygrek: вот в параметрах весь кизяк.
тебе нужны входные параметры?
нужны позиционные или именованные?
ортогонально к этому, ещё бывают выходные параметры. и входные-выходные.
а бывает, что входные-выходные имеют начальное значение, и должны возвращать нормальное выходное значение.
а ещё бывает так, что выходное значение надо ограничить определённым количеством байтов.
вот эту жесть я в идеале хотел бы оформить в человеческом dbi-интерфейсе. пусть даже для хитрых случаев (апофеоз -- "входной-выходной именованный параметр с начальным значением и максимальной выходной длиной") придётся создавать специальное значение, отвечающее за этот параметр.
[23:37:00] <ermine> ой наболтали тут, пока я мучалась с раздиранием камлобилда на кусочки
[23:37:02] <gds> дело в том, что я писал простенькую программку, работающую с оракловской базой, и мне все эти возможности (в их худшем виде) таки пригодились. ошибкозащищённость, удобство.
[23:37:19] <ermine> получился почти тот же глобальный камлобилд конфиг, который копируется из проекта в проект
[23:37:20] <ygrek> результат query - это просто rowset. насчёт ограничения макс длины не думал - обычно нужны все данные. насчёт входных - нужны хоть какие-нибудь - с именованием sqlgg сам справится (он мог бы и сам справится склеивать query - но я не хочу этого делать)
[23:37:35] <ermine> теперь бы главное - не забыть обновить везде, если обновил в одном
[23:38:07] <ygrek> начальное значение - не думал, можно средствами камля задавать - зачем это в sql?
[23:39:21] <gds> ygrek: я про bind-параметры. например, разумный pl/sql код:
"
begin
:var := :var || 'somestring';
end;
"
должна быть привязка "var" => "начальное значение", и в результате выполнения оператора нужно иметь возможность получить "var" => "начальное значениеsomestring", если оно влезает в указанный лимит.
[23:40:14] <gds> без подобного интерфейса будет очень печально работать с хранимыми на стороне бд процедурами.
[23:40:52] <604> ygrek: ничего, скоро я доберусь до ваших творений, вот тогда вы у меня попляшете :) Или вы к тому времени успеете допилить их до вменяемого состояния?
[23:41:20] <gds> 604: no wai. зачем допиливать -- it works for me!
[23:41:46] <ermine> жалко что камлобилд позволяет только один файл снаружи него самого скомпилить, в смысле myocamlbuild_config.ml, а в нем можно прочитать любой файл, вот интересно как прочитать файл, в котором можно определить разные параметры, а не только пути к паккаджам?
[23:42:02] <604> началось...
[23:42:15] gds димонически ржот
[23:42:43] <ermine> надо мной?
[23:42:48] <gds> ет.
[23:43:01] <gds> ermine: а если там указать ссылку на Fofyga.some_value, оно не попытается скомпилировать фофыгу?
[23:43:09] ermine рыдает и продолжает жрать колючего верблюда
[23:43:44] <ermine> gds: не скомпилится
[23:44:09] <ermine> gds: можно прочитать файл и распарсить его чем бог пошлет в виде String.sub
[23:44:57] <ermine> gds: вон у ygrek парсятся строки вида extlib=/path/extlib
[23:45:19] <ermine> gds: вот вопрос как туда добавить разные всякие полезные значения?
[23:46:07] <gds> ermine: назови конечную цель своего путешествия
[23:46:27] <604> gds: а что за чел (который на пхп пишет) и чем он доказал, что хороший?
[23:47:10] <ermine> gds: вписать путь в site-lib, куда можно инсталлить и определить булевое значение для "static", для статической компиляции в байткоде с сишней либлой
[23:47:56] <gds> 604: чел ничего не доказывал. а понятие "хороший человек" -- даже не знаю, как можно объяснить.
[23:48:18] <ermine> gds: ну собственно формат конфига
site-lib=/path
static=true
extlib=/path/extlib
это в лоб
[23:48:28] <ermine> а по морде не дадут?
[23:50:10] <604> т.е. до того момента "пишет на похапе" было своего рода клеймом типа "ест по ночам детей"? ;)
[23:52:26] <gds> ermine: касаемо site-lib -- хз. в случае, как я это представляю, можно один раз создать ../etc/findlib.conf, чисто для ocamlfind, там и держать site-lib. extlib держать уже в месте, которое знает ocamlfind, которого снабдили конфигом ../etc/findlib.conf. про статику -- хз.
[23:53:21] <gds> 604: скорее удивлён, что человек, который законтачился с таким количеством кала, осилил сохранить свою человеческую сущность.
[23:54:41] <ermine> gds: по дефолту это ../../site-lib
[23:55:07] <ermine> gds: меня волновал другой вопрос: все строки в конфиге имеют тогда одинаковый семантический смысл
[23:55:27] <ermine> и поэтому нельзя будет автоматически нагенерить ссылки на внешние библиотеки
[23:56:15] <ermine> у ygrek в камлобилде явно прописываются какие нужны либлы, я решила что этого не надо
[23:56:25] <ygrek> ermine: а в чём трабла навернуть более сложный формат конфига?
[23:56:36] <ygrek> я предпочитаю простой вариант пока его хватает
[23:56:57] <ygrek> кстати, там можно проенумерить все либы и обьявить их ocaml_lib'ами
[23:57:17] <ygrek> но у некоторых надо имя cma файла явно указывать
[23:57:23] <ygrek> ты хочешь это тоже в конфиг?
[23:57:29] <ermine> ygrek: дадад, более сложный парсер, руки почесались привернуть ini конфиг, только вот фиг его прикомпилишь
[23:57:42] <ygrek> в принципе эта инфа есть в ocamlfind - пример на вики как его доставать
[23:58:00] <ygrek> я осознанно решил этого не делать
[23:58:18] <ermine> фсио ф конфиг!
[23:58:32] <604> gds: попахивает элитизмом
[23:58:42] <ygrek> gds: теперь понятно зачем в биндингах упоминается чтение параметра после выполнения query
[23:59:05] <ygrek> я с таким use case'ом не сталкивался
[23:59:12] <ygrek> буду иметь ввиду
[23:59:37] <ygrek> (кстати, пример с оракловской базой мог бы пригодится)
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!