Home
Objective Caml
ocaml@conference.jabber.ru
Пятница, 27 мая 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:01:37] zert вышел(а) из комнаты
[00:13:00] zert вошёл(а) в комнату
[00:14:10] arhibot вошёл(а) в комнату
[00:16:09] avysk вошёл(а) в комнату
[00:49:44] gds вышел(а) из комнаты
[01:15:11] komar вышел(а) из комнаты: Replaced by new connection
[01:15:12] komar вошёл(а) в комнату
[01:19:05] arhibot вышел(а) из комнаты
[01:19:39] Kakadu вышел(а) из комнаты
[01:20:54] <Typhon> zert, "@Zert subscribed to your blog. http://juick.com/Zert/" -- у меня есть блог?! oO
[01:23:18] <zert> микроблог!
[01:24:09] <komar> Typhon: а вы уже в курсе, что хозяин жуйка — трап?
[01:24:40] <Typhon> zert, а где мне можно посмотреть на мой микроблог, на который ты подписался? :-)
[01:25:04] <Typhon> komar, я читаю только zert'а через рсс, так что на хозяина жуйка мне наплевать ^_^
[01:25:06] <zert> в жуйке
[01:25:28] <komar> Typhon: http://juick.com/typhon@jabber.ru/
[01:25:35] <zert> komar: ты неправ
[01:25:39] <komar> Typhon: ник выстави через NICK Typhon
[01:25:44] <zert> это трап — хозяин жуйка
[01:25:55] <zert> всё совсем иначе
[01:26:04] <komar> Действительно.
[01:57:32] Typhon вышел(а) из комнаты
[02:44:24] ftrvxmtrx вышел(а) из комнаты
[02:45:39] ftrvxmtrx вошёл(а) в комнату
[03:42:06] Digimmortal вошёл(а) в комнату
[04:39:20] zert вышел(а) из комнаты
[04:55:52] Digimmortal вышел(а) из комнаты
[09:03:19] gds вошёл(а) в комнату
[09:16:00] avysk вышел(а) из комнаты
[10:57:39] ftrvxmtrx вышел(а) из комнаты
[11:25:48] komar вышел(а) из комнаты: Replaced by new connection
[11:25:49] komar вошёл(а) в комнату
[11:44:44] Kakadu вошёл(а) в комнату
[11:53:23] Kakadu вышел(а) из комнаты
[11:53:49] Kakadu вошёл(а) в комнату
[12:29:40] Typhon вошёл(а) в комнату
[12:31:57] ftrvxmtrx вошёл(а) в комнату
[13:04:13] gds вышел(а) из комнаты
[13:33:24] ermine вошёл(а) в комнату
[14:35:24] ermine вышел(а) из комнаты
[14:43:38] gds вошёл(а) в комнату
[14:43:56] SANJAR вошёл(а) в комнату
[14:44:05] <SANJAR> Будет игра и американский разговор,перевод.заходите на english_club
[14:45:43] SANJAR вышел(а) из комнаты: actum est, ilicet
[16:08:59] <Typhon> gds: а ты не планируешь роутинг свой и вообще хттп лёгкий выкладывать? мне очень интересно такое иметь, для лёгких морд или рест-апи к сервисам (когда оксиген — оверкил)
[16:09:18] <gds> Typhon: ща спрошу насяльника.
[16:29:32] SANJAR вошёл(а) в комнату
[16:30:02] SANJAR выгнали из комнаты
[16:44:05] <gds> Typhon: https://bitbucket.org/gds/amall , но там пока рефакторинг в самом разгаре.  Плюс к тому, роутинг запросов -- в модуле, который я предполагал для подхода "сель -- паехаль", т.е. функтор, берущий IO и итераты и создающий всё, что нужно для работы сервера.  Если нужен чисто роутинг, надо будет выдрать.  Несложно, но надо будет.
[16:44:50] <gds> кроме того, я пришёл к весьма странному на первый вид техническому решению.  Путь "http://host:port/a/b/c?d#e" будет в "путях сервисов" представлен как [""; "http://host:port"; "a"; "b"; "c"].
[16:45:23] <Typhon> класс! :-) про роутинг — что такое первый элемент?
[16:45:29] <Typhon> фантазия не работает :-)
[16:46:22] <gds> первый элемент -- штука, позволяющая слушать путь [""], чтобы ловить запросы ко всем хостам (на случай, если надо роутинг делать хитрее, чем по пути).
[16:48:15] <gds> Typhon: если будешь в делах использовать, замутим ветку stable, куда сливать стабильные версии.
[16:48:46] <Typhon> ?d — уйдёт параметрами в функцию? + не очень пойму, зачем хост:порт в роутинге запросов — стандартный кейс — у тебя сервис висит себе на хосте и всё. да и в момент написания я ж могу не знать, на каком хосте оно висеть будет, это в каких-нибудь конфигах задаваться может. то есть, можно ли у тебя такое решить? (роутить, не зная хост)
[16:56:17] <gds> ?d#e уйдёт в ещё одном параметре с полным uri, там оно разделено-разбито.
хост-порт -- затем, что мне сходу надо обслуживать десятки виртуальных хостов, и затейливо ругаться в случаях, когда запрос на неизвестный хост.
"хост в запросе" <> "хост, на котором висит".
если хочешь обрабатывать запросы ко всем хостам -- решения такие: 1. правильное, но сложное: сделать не segpath (см. amall_http_service.ml), а более продуманную структуру данных, в том числе с возможностью указать "любой хост", 2. хак: сделать специальный парсинг для строчек с хостами-портами.  Неспортивно.  3. рабочее сейчас: зарегистрировать fallback для уровня [""] и не регистрировать сервисы там -- т.е. все запросы будут иттить туда.  4. относительная кошеризация п.3 -- сделать, чтобы в fallback прописывалась не http_service_func, а disp_handler, который можно сделать "Level ...".
дело в том, что я рассчитывал сразу на свои применения.  Если у тебя другие -- доведём до общего варианта.  п.1 лично я кодить не хочу, но changeset'ы приму с радостью, если будут разумными, п.2 -- перлу нет, п.3 -- нет возможности матчить путь дальше красивым образом, п.4 -- средней говнистости решение, но я бы накодил.
[16:58:48] <Typhon> ага, буду смотреть, спрашивать, что-нибудь писать тогда :-) btw, amall — это про ролики?
[16:59:43] <gds> amall -- "amatei common code, all of it", типа.  "всё, что во всех проектах аматея используется".
[17:00:35] <gds> хотя да, гуглится забавное.  но тогда проверял по критерию "amall download", нет ли чего.
[17:03:44] <gds> Typhon: хотя вот, посмотри, как ты к п.4 относишься.  Мне сходу нравится.  А там можно эволюционно расширить до [`Any (*host*); `Path "a"; `Path "b"] (строить ту же структуру данных, но на основании другого входа).
[17:05:58] <Typhon> хорошее решение. а если "слушать" обработчиком на [""; ""; "path"; "to"; "resource"] — что будет ?  
[17:10:21] <gds> сейчас, по логике, будут запросы вида "GET /path/to/resource/* HTTP/1.1\r\n\r\n", без Host:.  Когда думал вносить специальную логику в матченье компонентов, меня что-то останавливало, в отличие от случая с внесением логики в преобразователь uri -> segpath.
Но, всё же, специальный случай (для матчинга незарегистрированного компонента) я ввёл, некий fallback в коде.
Думаю вот -- в здравом уме и светлой памяти кто-нибудь обрабатывает урлы вида http://host:port/a/b//c/d?e#f ?
[17:11:16] <Typhon> чтобы показать красивое 404, например? :-)
[17:13:14] <gds> интересно насчёт практических целей.
[17:14:43] <Typhon> ещё можно убрать сдвоенный слэш и послать на правильный адрес. также всё, что после "a/b/" может считаться параметром REST запроса с типом "path" (но я бы сам сервис тогда повесил на "a/b" , без trailing slash" )
[17:16:50] <gds> а на практике кому-нибудь такое надо?  думаю сделать фокус, заменить fallback на соответствие "" => штука_для_любого_компонента_пути.  то есть, в твоём случае вешать обработчик на [""; ""; "a"; "b"].
[17:18:29] ermine вошёл(а) в комнату
[17:27:30] <Typhon> а всё, что осталось после "a/b" уйдёт в параметры? на практике сдвоенный слэш — это либо ошибка ввода, кмк, либо параметр
[17:30:20] <gds> я прикидываю использовать пустую строку как wildcard, в случае хостов это приемлемо, и вот думаю, в случае a/b//c/d это покатит, или когда-нибудь будет нужно обрабатывать путь ["a"; "b"; ""; "c"; "d"].
[17:37:35] <gds> а, вот почему мне эта идея не понравилась раньше: потому что в случае, когда регистрируемся на "/a/b" и запрос приходит на "/a/b/c/d", обработчик получит ["c"; "d"] в параметр.  В случае, когда будет wildcard в директориях, например, "/a/*/c" и будет запрос на "/a/b/c/d", то сходу неизвестно, что передавать как параметр, и нужно ли специально передавать "b".  В общем, некрасиво.
[17:38:53] <Typhon> осталось придумать, зачем нужно "/a/*/c" :-)
[17:40:16] <gds> незачем.  но сейчас всё в одной иерархии без разделения случаев "матчим протокол-хост-порт" и "матчим путь".
[17:43:24] <Typhon> люди говорят такое нужно, как пример "/user/stupid/photos/favorite"
[17:43:37] <Typhon> где stupid — это вайлдкард-параметр
[17:44:04] <Typhon> хм, вайлдкард != параметр, по идее. в смысле, параметр куда полезнее вайлдкарда, в пути
[17:50:51] <gds> появилась идейка наподобие такой: если зарегистрировались на "/a/*/c", а запрос на "/a/b/c/d", то в аргументах передавать ["b"; "d"].  То есть, весьма тупо, но информация не теряется.
[17:54:18] <Typhon> [`Path "a"; `StringParam "name"; `Path "b"; `IntParam "id" ] — ?
[17:54:40] <Typhon> и в обработчик отображение передавать какое-то
[17:54:49] <Typhon> name => stupid ; id => 42
[17:57:56] <Typhon> либо, в стиле принтфа, требовать от функции-обработчика нужных типов, в зависимости от "паттерна", но я не знаю, как такое сделать, тогда не понадобятся имена, а будет тупо `StringParam какой-нибудь
[17:58:08] <gds> была идея, но отображение принципиально сложнее, чем тупо по префиксу, и нужно реже.  С другой стороны, можно было бы использовать олеговские комбинаторы для парсинга так, чтобы они применяли к пользовательской функции name -> id -> .
[17:58:42] <gds> можно ещё извратиться в сторону Arg, Set_string всякие.
[18:01:53] <gds> если брать тупой вариант и парсить "/user/stupid/photos/favorite", можно зарегистрироваться под "/user" и паттерн-матчить [ param; "photos"; "favorite"; tail ].
[18:03:32] <Typhon> тогда, получается, что пользователю условной библиотеки роутинга, придётся делать ещё один уровень роутинга, что не совсем хорошо.
[18:04:19] <gds> согласен.
[18:04:41] Digimmortal вошёл(а) в комнату
[18:05:53] <gds> минусы матчинга (если его как единственный роутинг пользовать) -- то, что требуется компилировать этот матчинг.  минусы пользовательского указания путей -- сложнее привязать значения к идентификаторам.
[18:11:30] <gds> да и окамловский match не сможет сконвертить компонент пути в целое число, например.
[18:14:20] <gds> ещё можно взять олеговские парсеры да переточить их на матчинг компонентов урла.
[18:45:15] <gds> Typhon: подумал ещё немного.  Нормального варианта не вижу.  В качестве терминальной стадии дошёл до итерата, парсящего поток компонентов пути -- то есть, фактически, стоит реализовывать парсер поверх итератов, видимо какой-нибудь glr (earley мне чуть-чуть разонравился).  Но это слегка геморно.  С другой стороны, это для кучи других применений нужно -- собственно, разбор хттп-протокола на таком парсере был бы повеселее, чем сейчас (выложил, amall_http.ml, тупак там).
В общем, если будут идеи про роутинг запросов -- сообщи.
Да и может кому-нибудь из чятика подобное надо [будет], тоже буду рад идеям.
[18:46:43] f[x] юзает камловый матч по строке урлу
[18:46:59] <f[x]> для простого http-api больше и не надо
[18:47:17] <Typhon> f[x]: сплит по слэшу и матч?
[18:47:27] <f[x]> без сплита
[18:47:32] <gds> но как???
[18:47:34] <f[x]> по целой строке
[18:47:46] <f[x]> без параметров
[18:49:07] <f[x]> http://paste.in.ua/2463/
[18:51:20] <Typhon> а, ну это совсем простой хттп-апи :-) а Httpev где-нибудь посмотреть можно?
[18:51:22] <gds> понял.  для простого апи, действительно, этого хватает.
[18:52:06] <f[x]> не, мне лень причёсывать
[18:52:27] Typhon посмотрел на топик
[18:52:45] <f[x]> argh
[18:54:43] <f[x]> там всякие зависимости.. и вообще примитивный
[18:55:07] <gds> ну, главное, коммерческой тайны там нет? :]
[18:56:05] <f[x]> :)
[18:56:22] <f[x]> критический компонент инфраструктуры, ё
[19:05:56] <gds> вспомнил я Arg не к добру: http://erratique.ch/software/cmdliner/doc/Cmdliner#basics
[19:06:04] <gds> анонс из рассылки
[19:21:51] <Digimmortal> а кто в чём на камле код пишет?
[19:22:17] <Digimmortal> а то я вот почитал http://juick.com/Zert/1372309 и подумал, что все в виме или емаксе
[19:22:30] <Typhon> emacs
[19:22:49] <komar> vim
[19:23:15] <gds> emacs (но тупой)
[19:23:26] <komar> Вообще, здесь больше предпочитают текстовые редакторы, чем IDE.
[19:23:50] <gds> far (падвендой, изредка, но отучаюсь -- он фатально промахивается с \r\n).
[19:24:30] <komar> omg
[19:24:58] <Digimmortal> komar: ну, я так и подумал - выбора то все равно нет
[19:25:37] <komar> Ну, вон, я в видео про ounit какую-то IDE видел.
[19:25:46] <komar> И чувак мышкой в кнопочки давит.
[19:25:58] <komar> Совсем не понял я смысла такого извращения.
[19:26:07] <Digimmortal> IDE это не про кнопочки и мышку
[19:26:10] <Typhon> я camelia использовал одно время
[19:26:14] <gds> EFuns!!!!1111111
[19:26:23] <Typhon> IDE — это про жаббер в буффере ^_^
[19:26:29] <Digimmortal> :)
[19:26:52] <Digimmortal> Typhon: а оно рабочее?
[19:27:27] <gds> в видео есть смысл -- есть категория хомячков, которые тащатся от обучающего видео.  Типа и "дядька чото рассказывает-показывает", и "не телевизор".
[19:27:36] <Typhon> Digimmortal: ну работало, под виндовсом. смысла особого не вижу
[19:27:47] <Typhon> видео и "скринкасты" — это ужас просто какой-то
[19:27:59] <f[x]> vim и far под виндой
[19:27:59] <komar> О, это эклипс под маком.
[19:28:04] <Digimmortal> а почему видео ужас?
[19:28:04] <Typhon> вместо того, чтобы дать ссылку на доки или кратко изложить, час ерундой занимаются
[19:28:16] <Typhon> дооооолго
[19:28:20] <komar> http://www.youtube.com/watch?v=5Om2aEijfls зоцените поцоны
[19:28:36] <Digimmortal> ну, иногда башка не варит, не дом 2 же смотреть?
[19:28:58] <Digimmortal> а видео - хоть какая-то польза
[19:29:03] <Typhon> да я никого не осуждаю и тд, просто сам не люблю, когда видео делают, вместо статьи
[19:29:23] <Digimmortal> а почему вместо?
[19:29:30] <Digimmortal> а если в дополнение?
[19:29:33] <gds> komar: make youtube unshow it!!!11
[19:29:51] <Typhon> в дополнение я просто забью и не увижу видео, очевидно :-)
[19:30:19] <komar> gds: да я сам в слезах.
[19:30:53] <Digimmortal> видео жесть
[19:31:30] <Digimmortal> кино про юнит тесты в окамл это мега трэш
[19:31:33] <gds> вообще, я за то, чтобы такие вещи озвучивать голосом Тётушки Совы (кто воспитывает малых, может в курсе).
[19:31:35] <komar> О! Загуглите «хабрахабр pho ocaml».
[19:31:51] <komar> *php
[19:32:31] Kakadu вышел(а) из комнаты
[19:32:33] <Typhon> с pho тоже нашлось
[19:34:56] <Digimmortal> даже непонятно как на "хабрахабр pho ocaml" реагировать
[19:35:15] <Digimmortal> вроде не php'ист
[19:35:23] <Digimmortal> писал это
[19:36:05] <gds> я нашёл статью, где сишную прослойку делают.  Оно?
[19:36:34] <Digimmortal> я её же нашёл
[19:38:45] <komar> А я кроме заголовка все равно ничего не читал.
[19:39:00] <komar> Но подумал, что вам понравится.
[19:39:11] <Digimmortal> я кроме шизофреничности решаемой задачи ничего крамольного не вижу
[19:39:26] <Digimmortal> на заголовок на 5
[19:41:59] <gds> ну я вот лично очень рад этой статье и её эффекту.  Там показывают, что камло и похапэ вместе -- приемлемо, доступно, просто (на уровень копипасты в сишной прослойке забиваем, похапэшникам это ок).
[19:45:40] <Digimmortal> копипаста это в zval *phpgroup_of_group (group *gr) и group group_of_phpgroup (zval *gr)?
[19:49:20] <gds> вообще дублирование информации имел ввиду.  видел, что в сишечьке набросано многое.
[20:13:43] Digimmortal вышел(а) из комнаты
[20:27:05] Kakadu вошёл(а) в комнату
[20:34:24] Kakadu вышел(а) из комнаты
[20:34:28] Kakadu вошёл(а) в комнату
[21:08:44] Typhon вышел(а) из комнаты
[21:22:00] Kakadu вышел(а) из комнаты
[21:23:14] Kakadu вошёл(а) в комнату
[21:37:06] ftrvxmtrx вышел(а) из комнаты
[22:10:06] Typhon вошёл(а) в комнату
[22:22:56] ygrek вошёл(а) в комнату
[22:32:26] Kakadu вышел(а) из комнаты
[22:33:00] Kakadu вошёл(а) в комнату
[23:02:40] <Typhon> Оказывается, в инрии разрешают прикасаться к х-лю и агде. http://nicolaspouillard.fr/publis/nameless-painless.pdf . расстроен :-(
[23:25:05] ftrvxmtrx вошёл(а) в комнату
[23:27:22] <komar> > разрешают
[23:29:27] <ygrek> николя да, ренегат
[23:51:17] ermine вышел(а) из комнаты
[23:52:12] <ygrek> хм CAMLlocal без CAMLreturn, по-моему это чревато
[23:59:36] ftrvxmtrx вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!