Home
Objective Caml
ocaml@conference.jabber.ru
Понедельник, 30 мая 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:00:14] <gds> не скандалы, но интриги и расследования!
[00:00:20] <ermine> вот с csrf этот фокус не прйдет - надо считать форму (распарсить хтмыл), запомнить значения hidden inputов и с ними засабмитить
[00:01:09] <Typhon> gds, btw, как ты смотришь на перенос кода в src ? (и соот-но тестов в tests
[00:02:08] <ermine> Typhon: ты уже наводишь оазис на итераты?
[00:02:10] <gds> Typhon: пассивно-одобрительно (в хорошем смысле слова, блджад1!!!1).  То есть, самому лень, но было бы прилично -- сейчас это модно, говорят.  Смысла не понимаю, но всё же.
[00:02:36] <Typhon> ermine, на amall :-)
[00:03:16] <ermine> ых
[00:03:18] <Typhon> gds, модно да, + путь к порядку :-) вроде как в тестах -- тесты, в срц -- срц, а вокруг всякая шляпа валяется, типа _tags и прочего :-)
[00:04:17] <gds> ermine: конечно не умею от csrf защищаться.  Вообще, у меня было много "слоёв", и я, мягко говоря, глобально залюбился с этой задачей.  Но именно так я считаю правильно реализовать вебню на окамле.  Ты ещё обсуждённые сессии вспомни, чтобы потравить меня.  Ну а чо, их реально нет.
[00:06:29] <gds> Typhon: если сделаешь -- будет хорошо, буду рад поддерживать порядок.  Но у меня какая-то "ленивая модель вычислений", те же компромиссы между "правильно" и "быстро", и вот, в них разделение на src/ и tests/ не попало в "правильно", а их неразделение попало в "быстро".
[00:07:31] <ermine> gds: (тупо) eliom ищет свои шняги в 4 таблицах, если не преувеличиваю, и еще хранит что-то мистическое в lwt process storage!
[00:08:14] <ermine> поэтому про сессии можно забыть, и помнить только о том, чтобы не забыть тот или иной сервис назначить доступным только в сессии
[00:09:12] <ermine> например, кнопка выхода после логина - сугубо сессионная штука, которую незачем показывать кому попало по урлу http://localhost/logout
[00:10:20] ermine не спала прошлой ночью и поэтому не знает, несет ли бессвязный или связанный с мыслами gds бред
[00:10:42] <ermine> если чо - сорри
[00:11:38] <gds> ermine: про слои -- уточню: это и манатки (общий интерфейс, сейчас -- над lwt, но легко поверх тредов ОС сделать), и итераты над ними, и обработка чистого хттп-протокола итератами, и "хттп-сервер" над предыдущим слоем, и "сервисы" (что-то в сторону роутинга запросов, но ещё не елиом), работающие над "серверами".
Про eliom -- понимаю.  Может к похожим идеям приду.  Про logout конкретно -- весьма мудрое решение.
А так -- всё логично, именно около-елиомовское я кодил в последнее время, только пониже да пожиже.
[00:12:47] <ygrek> можно всё в одной репке держать
[00:13:01] <ygrek> достаточно просто уметь из одной репки все N проектов отдельно интсаллить
[00:13:31] <ygrek> можно вообще все сырцы вперемешку в одном каталоге
[00:13:58] <ygrek> интересно сумеет ли оазис в таком случае META разрулить
[00:16:10] <ermine> без помощи камлобилда - не сможет
[00:16:31] <Typhon> ygrek, осталось понять, а нужно ли? :-)
[00:16:36] <ermine> в камлобилде можно смухлевать с созданием подкаталогов, а в оазисе их явно указать
[00:17:33] <ygrek> с подкаталогами всё просто, а вот без?
[00:18:14] <ermine> если библиотек больше одной - нет
[00:18:28] <ermine> оазис не будет создавать даже setup.ml
[00:18:43] <ermine> я недавно сама напоролась на такую шнягу
[00:19:12] <ermine> подумала чуток и объединила всё в одну либлу и успокоилась
[00:20:02] <ygrek> ясно
[00:20:54] <Typhon> gds, а filename_new в amall это патченный Filename из стд? а почему не fileutils? если оазисом пользоваться, то fileutils уже установлен будет, в смысле, не очень большая зав-ть
[00:21:42] <Typhon> а, там совсем маленький дифф
[00:22:59] <gds> всё в одной репке держать -- точно не нужно.  Частично -- есть репка "rebildol", в которой subrepos, в которых реальные проекты, а из файлов -- служебное, типа rebildol.sh, incoming.sh, outgoing.sh, pullall.sh или около того.
[00:23:55] <gds> Typhon: filename_new -- мне надо было камло 3.11 поддерживать, да и сейчас надо кое-где.  Это просто filename.*, взятый из 3.12 (фактически, из svn).
[00:24:45] <gds> Typhon: не знаю пока, будет ли везде оазис.  А дифф там хоть и маленький, но нужный, иначе не брал бы.
[00:25:29] <Typhon> не, я думал, так какие-то серьёзные патчи, поэтому про филеутилс спросил, а так всё ясно.
[00:55:34] ermine вышел(а) из комнаты
[00:57:07] gds вышел(а) из комнаты
[01:15:56] ygrek вышел(а) из комнаты
[01:37:22] <Typhon> gds, точно надо уметь делать хотя бы `Service ([""; "http://*:12345"], "test"). а то слушатель запускается на any, а обрабатывает только на локалхосте. а если заходить по внешнему адресу ругается: Can't find path "/test/ewg" on server "*.*.*.*:12345". URI dump follows:
{ scheme="http" authority={ host_kind=Reg_name host="*.*.*.*" port=12345 userinfo=None } path="/test/ewg" query=None fragment=None }
[01:58:53] <Typhon> gds: пушнул. dbi без постгри собирал, в топлевеле загружал. на более серьёзном не проверял. для самого амала оба теста работают. кстати, с подпакетами можно пойти дальше: вынести http и uri штуки в amall.http или amall.web, res + filew + with_com в amall.misc, например, а в core amall оставить stdlib extensions, например.
[02:26:16] Kakadu вышел(а) из комнаты
[02:33:33] <Typhon> gds, кстати, камлтемплейт в тарболах свежий? а то там scm = cvs,  => NO WAY! а в тарболах там всё не очень красиво, например в configure вычисляется prefix и суётся ocamlfind'у и он ставит не туда, куда надо ставить либу, а куда-то в неправильное место.
[02:48:02] zert вышел(а) из комнаты
[03:01:56] <Typhon> gds: про dbg, ясное дело, хочется кнопочку иметь, чтобы отключить, но это рабочее.
Вот что интересует, если ты говорил, что cadastr добавляет оверхэд, почему решил использовать в http сервисах его? или там оверхэд маленький в данном конкретном случае? или нет задачи иметь быстрый хттп отдавальщик?
ещё смущает sleep в тесте, это он только в тесте так или в любом случае нужно его использовать? хотя это lwtшный слип, но всё равно, осадочек.
[03:02:44] <Typhon> если всегда использовать, то я б засунул последние пять строчек в какую-нибудь функцию библиотечную (как впрочем и returnOK: string -> ...  сделал бы, для большинства случаев).
[03:07:38] <Typhon> gds: а ещё в роутинг пока не врубился -- если повесить на test (как в тесте), то example.com/test/blabla "вернёт" [blabla]. а как сделать то же самое без test -- не понял. вешал и на "/" и на "", но example.com/blabla ругается, что не такого адреса.
причём, если повесить на "" то example.com возвращает []. а если на "/", то ругается снова.
[03:12:17] <Typhon> gds: а ещё, если запускать ab -c X -n 10000 example.com/test/blabla, то при X > 8 ab падает с "apr_socket_recv: Connection reset by peer (54)", но тут могут быть моей системы какие-то ограничения, хз.
[03:23:50] <Typhon> %) гонял "ab" и amall на vpn-ке, теперь там такое:
)>>= nestat
netstat: kvm not available: /dev/mem: No such file or directory
Some tcp sockets may have been deleted.
[03:25:22] Typhon вышел(а) из комнаты
[09:03:15] gds вошёл(а) в комнату
[09:19:01] <gds> Typhon: про "слушанье хоста *" -- пока предлагаю тупой вариант: сделать так, чтобы "пустая строка" в компоненте пути говорила "матчь что хочешь".  А хост-порт можно будет потом вытащить из "запроса" (а не из segpath, передаваемого сервису).  Это -- то решение, которое я готов сходу накодить.  Так как: 1. вроде говорили с людьми разными, и пустые компоненты путей на практике не используются, то есть, можно брать это значение для своих гнусных целей, 2. накодить такое легко -- фактически, заменить обращение к disp.fallback на обращение к disp.seg_map к ключу "".  Но, вообще, неплохо бы сделать грамотный роутинг.  Как -- пока не знаю.
[09:22:11] <gds> Typhon: про подпакеты мне вот что удивительно -- получается, в случаях отсутствия постгреса будет ошибка сборки либы, требуемой для amall.dbi?  И всё будет нормально работать?  С другой стороны, если добавлять потом к dbi ещё что-нибудь, кроме постгреса, у пользователей явно будет желание билдить "только постгрес", "только xxx", "xxx + yyy".  Пока не знаю, как лучше сделать, но dbi реально надо выносить как-то из общака.
[09:28:25] <gds> Typhon: camltemplate -- вроде camltemplate-1.0.2.tar.gz свежий.  Думаю, может, есть смысл в какую-нибудь нормальную репку его оформить, hg/git на выбор, и на том же форже оставить её клон.  Но хочется ещё культурно сконвертить из cvs.
[09:30:13] <gds> Typhon: dbg -- надо однозначно его отключать, но как лучше -- опять же, не придумал.  Printf.ifprintf -- оставляет сообщения в объектниках/бинарниках, форсирует вычисление печатаемых значений, а всё это -- криво.
[09:32:02] <gds> Typhon: оверхед от кадастра в хттп -- малый.  На каждый запрос по несколько обращений к map#get_opt (по количеству компонентов матчимого пути).  Потом, когда ясно, какой контейнер лучше, переделаю.  Может вообще сортированный массив будет.
[09:34:49] <gds> Typhon: sleep в lwt -- из-за того, что lwt'шный server (Lwt_unix.establish_server вроде) запускается как бы "в фоне", и его не ждёт никто при определении того, можно ли возвращаться из runIO.  В идеале можно было бы добавить функциональность "ждать, пока данный Lwt_unix.server работает", а там уже, по сигналу либо по сообщению, даваемому через веб, дёргать Lwt_unix.shutdown_server или как-то так.  Мне тоже sleep не нравится.
[09:36:14] <gds> Typhon: "как сделать то же самое без test" -- вешать на `Service [""; "http://example.com:12345"].  Оно заматчит хост, а дальше остальные компоненты передаст сервису.
[09:38:51] <gds> Typhon: я не профайлил это дело и не бенчмаркал через ab.  Знаю такие вещи: использую lwt'шный establish_server, над сокетами не туплю, магеи никакой не делаю.  То есть, по логике, системные штуки типа "connection reset by peer" и подобное -- это зависит от камла/лвт.  Но будем разбираться, мне "много rps" понадобится обязательно, для чего и мерял тогда, когда самый первый хттп-сервер асилил на lwt.
[09:51:01] <gds> кстати вот, надо бы мне толково вникнуть в applicative functors, они вроде хорошие-годные для роутинга урлов.
[10:30:47] ygrek вошёл(а) в комнату
[10:31:01] ygrek вышел(а) из комнаты
[10:31:29] ygrek вошёл(а) в комнату
[10:40:37] ftrvxmtrx вышел(а) из комнаты
[10:51:50] Kakadu вошёл(а) в комнату
[11:52:17] ygrek вышел(а) из комнаты
[12:00:51] ermine вошёл(а) в комнату
[12:06:55] Typhon вошёл(а) в комнату
[12:10:42] ftrvxmtrx вошёл(а) в комнату
[12:13:37] <Typhon> про роутинг хочу посмотреть другие штуки, особенно рельсы (как популярную штуку) — как там сделанно. в случае отсутсвия постгреса будет ошибка на стадии "configure", лечится —disable-dbi, с постгресом можно третий уровень пакетов придумать, но я такое не видел и не уверен, что оно сработает. можно сделать подпакет "amall.dbi_postgres" или что-то типа того, и его выключенным держать по умолчанию. Если же дби отдельно будет, можно будет просто для каждого бд зависимого модуля отдельный подпакет сделать, и проблем "хочу то", "хочу это" — не будет.
с сигналом мне нравится мысль.
про "без test" понял, сам протупил, там же список, действительно, а не кортеж, надо было просто не передавать.
[12:14:07] <Typhon> Кстати, по роутам и по обраотчикам вообще — хочется различать GET/POST и вешать разные обработчики на разные типы.
[12:14:52] <Typhon> про ab — скорее всего моя проблема какая-то, ограничения vpn или ещё что-то, надо глянуть лимиты всякие, потому что понимаю, что ты вряд ли как-то хачишь, а лвт должен держать, плюс отчё
[12:15:01] <Typhon> ты о siege -c 100 помню
[12:19:23] <gds> про роутинг -- давай, будет интересно.  Заодно посмотри на http://erratique.ch/software/cmdliner , механизм нравится, типизированный, гибкий.  Регекспы предпочёл бы отправить в топку.
dbi -- вынесем отдельно, причём в скором времени.  если ты вынес его в подпакет, то половина дела сделана.  а третий уровень -- тоже сомнения есть.  но до проверки дело не дойдёт естественным путём.
GET/POST -- да, надо, но с общим механизмом, когда он будет.  Сейчас могу предложить изучение request.rq_method разве что.
ab -- потом позапускаю ещё, но, если раскопаешь, сообщи.  И, в целом, профайлить таки будет нужно.  Считай, все эти итераты, функторы, Subarray.t char -- предполагаю, где-то может быть что-то исключительно тормозное.
[12:20:07] <gds> кстати, твои коммиты ещё не смотрел, руки не доходят, так что жги ещё :)
[12:31:11] zert вошёл(а) в комнату
[12:56:59] ygrek вошёл(а) в комнату
[13:10:21] ygrek вышел(а) из комнаты
[13:23:45] Digimmortal вошёл(а) в комнату
[14:21:19] gds вышел(а) из комнаты
[14:28:17] <Typhon> ЛёГалл спалил прикольное: http://anonscm.debian.org/gitweb/?p=pkg-ocaml-maint/packages/oasis2debian.git;a=tree
[15:03:41] Digimmortal вышел(а) из комнаты
[15:10:04] <f[x]> ы, месяца два назад спалил уже :)
[15:10:11] ftrvxmtrx вышел(а) из комнаты
[15:10:19] ftrvxmtrx вошёл(а) в комнату
[15:11:07] <Typhon> я не видел, а ты, как партийный человек, должен был уведомить чятик, если видел %)
[15:11:33] <Typhon> btw, ЛёГалл, кажется, что-то подозревает: "is f[x] = ygrek ?"
[15:12:10] <f[x]> надо было, да, хотя я его сам с тех пор так и не попробовал
[15:25:28] gds вошёл(а) в комнату
[15:38:46] f[x] потихоньку троллит Le Gall'а насчёт тормознутости darcs
[15:45:24] <komar> Гм.
[15:45:58] <komar> Сделал гет оазиса и мне выдало, что репа старая и тормознутая и что надо сказать маинтейнеру to run darcs optimize --upgrade with darcs 2.4.0 or higherю
[15:46:18] <komar> И да, тормозит он неплохо так.
[16:00:28] <Typhon> надо сказать мейнтенеру to run "rm -rf _darcs && git init . "
[16:01:34] <komar> Есть конвертеры.
[16:01:54] <komar> А так и ЛеГалл живой, и у вас не тормозит.
[16:10:29] <f[x]> из нового формата тоже минуту тянется :)
[16:11:09] <komar> Пичяль.
[16:14:55] <f[x]> так, давайте урлы на конвертилки!
[16:16:11] <f[x]> Le Gall начинает сдаваться
[16:19:30] <gds> чтобы фоннаты darcs сдавались -- это удивительно.  Они же обычно упоротые.
[16:21:19] f[x] возвращает gds веру в людей
[16:21:55] <komar> f[x]: в аптитуде посмотри.
[16:22:36] <komar> Хы, а там нету.
[16:27:21] <f[x]> нашёлся вроде, надо будет потестить и дать чёткие инструкции
[17:00:43] <komar> А тем временем академик Зефиров использует svn.
[17:01:11] <f[x]> академик штанги?
[17:02:33] <komar> Ты ничего не понимаешь в академиках.
[17:02:56] <f[x]> эт точно
[17:08:31] <ermine> Typhon: нет новых идей насчет комментариев?
[17:09:54] <Typhon> в виде git notes хранить к коммиту/посту ^_^
[17:10:27] ermine задала сакраментальный вопрос гуглю и теперь читает про магазины
[17:11:30] <ermine> Typhon: git notes - это наверное неудобно для генерации страницы
[17:11:45] ftrvxmtrx вышел(а) из комнаты
[17:11:55] ftrvxmtrx вошёл(а) в комнату
[17:13:59] <Typhon> ну ты ж всё равно не каждый раз будешь генерить всё? кэш какой-нибудь прикрутить :-) олсо, можно писать комменты в редис, например, и в гит notes
[17:15:17] <ermine> перегенеривать страницу придется при каждом новом комменте
[17:16:18] <ermine> а пчу бы не хранить комменты так же как посты, в гите?
[17:16:59] <Typhon> а как связывать будешь пост и комменты?
[17:18:07] <ermine> ну это наверное несложно, если складировать по каталогам
[17:18:17] <ermine> труднее понять как именовать файлы комментов
[17:18:52] <f[x]> sqlite ftw?
[17:18:55] <ermine> вот в гите же легко создавать tree
[17:19:36] <ermine> если юзать склайт, то гит не нужен?
[17:20:11] <ermine> потом, склайт не thread-safe
[17:20:23] <f[x]> thread-safe
[17:20:38] <ermine> мутекс вешать не надо уже?
[17:23:21] <Typhon> ermine: а откуда у тебя треды возьмутся?
[17:23:53] <f[x]> никогда не надо было
[17:24:54] <ermine> Typhon: lwt?
[17:25:54] <Typhon> ermine: а они уже треды системные рожают?
[17:34:36] <ermine> Typhon: при использовании sqlite придеца юзать lwt_preemptive, не?
[17:34:48] <Typhon> придётся, да
[17:34:56] <ermine> а они как раз, того, системные вроде
[17:35:03] <Typhon> или писать асинк драйвер
[17:41:24] <ermine> ладно, сегодня буду писать байтики кода в гиську, а там посмотрим, может что-то гениальное (типа просто файлик под названием comments, который придется парсить каждый раз при генерации страницы) придет в голову
[17:42:31] <ermine> тут встанет вопрос об ужадении комментов, это надо какой-нить git revert организовать
[17:44:32] <Typhon> git notes тогда круче, кмк
[19:10:23] <ermine> похоже щас гит по умолчанию пакует свои объекты
[19:12:42] <ermine> ых
[19:13:16] <Typhon> в прогите пишут, если пушишь или если много лузе обжектов
[19:14:51] <ermine> [ermine@ermine /usr/home/ermine/devel/ocaml/brainfuck/.git/objects]$ file 03/f3767f6ed524d0e002821c61023cca32f54247
03/f3767f6ed524d0e002821c61023cca32f54247: VAX COFF executable not stripped
[19:15:00] <ermine> чудный такой формат
[19:15:12] <ermine> неужто исполнится на ваксе?
[19:15:23] <Typhon> ещё и в двух версиях %) http://book.git-scm.com/7_the_packfile.html
[19:16:33] <ermine> раби-раби
[19:25:36] <ermine> пока даже не поняла, откуда плясать
[19:28:28] komar вышел(а) из комнаты: Replaced by new connection
[19:28:29] komar вошёл(а) в комнату
[19:32:46] <ermine> так, нашла печку
[19:42:24] <gds> Typhon: посмотрел amall, вроде бы насчёт оазиса в целом прилично вышло.  Культур-мультур.  Однако теперь ссыкотно исправлять исходники -- опять, как с ocaml-substrings, вылезет что-то при uninstall.
[19:43:58] <Typhon> надо тебе удалить амалл своими удаляторами (или просто окамлофинд ремуы) и после этого ставить/удалять оазисом, всё должно ок
[19:48:27] <gds> понял, так и сделаю.
[20:37:13] ftrvxmtrx вышел(а) из комнаты
[20:48:25] Typhon вышел(а) из комнаты
[21:29:41] <ermine> как лучшие умы камла парсят бинарные файлы?
[21:32:57] <ermine> gds: а твой ocaml_substrings уже катят для этого?
[21:45:41] ftrvxmtrx вошёл(а) в комнату
[21:50:00] Typhon вошёл(а) в комнату
[21:51:15] <Typhon> парсить -- это, наверное, к iteratees. я парсю стримам, по-другому не умею ^_^
[22:38:22] <gds> ermine: substrings -- вполне можно, если в строку вмещается.  Можно даже сказать, что iteratees -- это как бы надстройка над substrings -- работают поверх них.  Но лучше итераты асилить.  Если что, в простых случаях помогу.
[22:40:12] <gds> ermine: если будет что-то из функций, что годно для строк, я эту функцию реализую для подстрок тоже, у меня есть в этом выгода, хоть и небольшая.
[23:17:27] ygrek вошёл(а) в комнату
[23:37:04] Typhon вышел(а) из комнаты: Replaced by new connection
[23:37:06] Typhon вошёл(а) в комнату
[23:40:18] iconofstyle вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!