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:05:55] <gds> касаемо парвела -- наколбасил очереди, тесты под них.  Вроде работает, однако, если будет желание, поглядите, вдруг найдётся какой-нибудь эпический баг: https://bitbucket.org/gds/parvel/src/bde99460053f/lwt_mq_parvel.ml
[00:12:11] ermine вспомнила, что хочет окамлевую ноду к ырланку
[00:12:27] <Kakadu> а что такое нода?
[00:13:17] <ermine> ну у erlang процессы запущенные на разных машинах (или на одной даже) могут обмениваться между собой сообщениями
[00:13:46] <ermine> они тогда узлы сложной топологии
[00:13:52] <Kakadu> так
[00:13:57] <Kakadu> понял
[00:14:26] <Kakadu> ты хочешь чтобы они могли обмениваться также с процессами в смысле нашего Lwt?
[00:16:00] <ermine> не знаю как в lwt сделано, но скорее всего там жалкая пародия на ерланговое решение
[00:16:22] <ermine> а я хочу просто из камла получать сведения из ерлангового кластера
[00:17:54] <gds> ermine: сейчас модно хотеть эрланговскую ноду к парвелу.
[00:27:50] <Typhon> http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.61.9966  -- внезапно нашлось
[00:28:07] <ermine> gds: а что такое парвел?
[00:28:18] <gds> "параллельный велосипед"!
[00:28:34] <ermine> а
[00:29:30] <ermine> gds: а что будет с твоим парвелом, если послать ему rpc:call("q", [])?
[00:29:54] ermine надеется, что не ошиблась с синтаксисом... чота запамятовалось
[00:30:08] <Typhon> я думаю, что всякую гадость в парвеле слать нельзя!
[00:30:17] <gds> если я правильно понимаю эрланг, то при отсутствии процесса "q" там, где хотим вызвать, будет ошибочка.
[00:31:00] <gds> Typhon: слать можно и нужно.  Как же иначе тестировать безопасность для работы в условиях набигающих этихсамых.
[00:31:08] <ermine> нене
[00:31:22] <ermine> ща посмотрю в ман rpc
[00:32:07] <ermine> rpc:call(Parvel, "erlang", "q", []).
[00:32:29] <ermine> ну или заменить erlang на parvel
[00:33:32] <gds> в общем, история такая: опциональный "опасный" (камловский нативный) маршаллинг -- да, может привести к фейлу, но я его обвешу одной несложной рюшечкой (ygrek даже функтор такой выкладывал), и тут будет приемлемо: "если используешь нативный Marshal _и_ косячишь в разработке по-тупому, где тебя русским по белому предупреждают -- будь готов к ипическому фейлу".  Но type-safe тоже будет.  json в последнее время нравится мне, да и вариантов куча.
[00:36:45] <gds> ermine: про твой пример -- тоже в маны глянул, всё понял.  Буквально недавно сокрушался об этом, да.  Невозможно безопасным образом сказать удалённому камловскому процессу "запусти данную unit->unit", потому что бинарники могут быть разными.  Единственный вариант -- регистрация функций.  И, да, вызов по (Node, Module, Function, Args) -- не выходит.  Либо байткод нужен, либо препроцессор, либо одинаковые бинарники.  Но все варианты кривые до жути.  Лёгкая небезопасность не повредит.  Миллионы программистов на C, C++, Erlang, javascript, php -- все они просто не могут ошибаться.
[00:37:58] <gds> если нужно нормальное решение, но с модифицированным языком -- jocaml брать, однозначно.  только с вендой там засада.
[00:38:14] <gds> но кому та венда нужна, действительно.
[00:40:22] ermine вышел(а) из комнаты
[00:43:34] <ygrek> gds: компилишь же хвункцию в dll и marshal'ишь dll на ноду, а там её dynlink'ом
[00:44:04] <ygrek> кросс-платформенный кластер не взлетит, но кого это волнует
[00:51:44] <gds> про dll -- жжош!
[00:51:56] <gds> лучше .ml, наверное даже.
[01:07:54] Kakadu вышел(а) из комнаты
[01:23:31] Typhon в тоске из-за отсутствия в Array чего-нибудь типа 'a array -> int -> int -> ((int, 'a) -> 'a) -> unit
[01:23:42] <Typhon> наверняка в батарейках есть?
[01:26:39] <Typhon> (modify есть, который весь меняет, а для кусков нет, жаль )
[01:26:47] <gds> единственное разумное, что лезет в голову с такой сигнатурой, это по смыслу помесь Array.sub + Array.mapi.  Весьма специальная штука, я бы не факт, что такое в общую библиотеку положил.
[01:27:16] <Typhon> fill_func я хочу
[01:28:54] <Typhon> а то Array.fill какой-то мне малополезный :-)
[01:31:27] <gds> теперь понял.  Навелосипедь!
[01:32:08] <Typhon> ага, уже велосипедю. по мне, так fill_func полезнее/обощённее, и fill из неё запросто получается, а вот обратно -- нет :-(
[01:38:11] <gds> да, в окамле много проблем от того, что все фапают на производительность.  С другой стороны, у этого явления есть и хорошие стороны.
[01:39:03] <gds> либо появится человеческий инлайнер, либо в самой тупой библиотеке будет много-много специальных функций.  А может и ошибаюсь.
[01:40:05] ygrek вышел(а) из комнаты
[01:55:50] komar вышел(а) из комнаты: Replaced by new connection
[01:55:51] komar вошёл(а) в комнату
[02:06:00] komar вышел(а) из комнаты: Replaced by new connection
[02:06:00] komar вошёл(а) в комнату
[02:17:16] gds вышел(а) из комнаты
[02:17:22] gds вошёл(а) в комнату
[02:17:26] gds вышел(а) из комнаты
[02:30:52] komar вышел(а) из комнаты: Replaced by new connection
[02:30:52] komar вошёл(а) в комнату
[04:19:53] Typhon вышел(а) из комнаты
[08:14:55] iNode вошёл(а) в комнату
[08:51:15] ermine вошёл(а) в комнату
[08:55:43] gds вошёл(а) в комнату
[09:03:31] komar вышел(а) из комнаты
[09:39:52] ygrek вошёл(а) в комнату
[10:16:43] ygrek вышел(а) из комнаты
[10:55:46] gds вышел(а) из комнаты
[11:13:03] zert вышел(а) из комнаты
[11:13:16] f[x] вышел(а) из комнаты
[11:13:27] iNode вышел(а) из комнаты
[11:13:55] bobry вышел(а) из комнаты
[11:14:30] ermine вышел(а) из комнаты
[11:52:25] bobry вошёл(а) в комнату
[11:54:42] zert вошёл(а) в комнату
[11:57:25] ermine вошёл(а) в комнату
[12:06:59] gds вошёл(а) в комнату
[12:07:01] komar вошёл(а) в комнату
[12:17:04] sceptik вошёл(а) в комнату
[12:17:10] sceptik вышел(а) из комнаты
[12:19:15] Typhon вошёл(а) в комнату
[13:18:25] avysk вошёл(а) в комнату
[13:27:57] f[x] вошёл(а) в комнату
[13:28:14] <f[x]> http://blog.mozilla.com/dmandelin/2011/04/22/mozilla-javascript-2011/
[13:33:35] <gds> где-то я видел подобный GC, как они описывают.  Где же, вспомнить бы...
[13:33:44] <Typhon> что, ещё больше теперь жс будут отличаться друг от друга?
[13:36:17] f[x] вышел(а) из комнаты
[13:41:20] <gds> я тут кратенько изложил концепции парвела, чтобы перед глозаме была общая картина того, что же я делаю.  https://bitbucket.org/gds/parvel/wiki/concepts_rus , решил не засирать камлунити/вики, потому что пока это мусор, а потом можно будет скопировать-перенести.
[13:41:55] f[x] вошёл(а) в комнату
[13:48:29] <f[x]> а блин, вот и я нарвался на method get_smth = f x
[13:48:47] <f[x]> сижу и туплю почему f вызывается больше одного раза
[13:55:24] <gds> добро пожаловать в клуб.
[13:56:59] <gds> думаю, Lazy.force (lazy (f x)) проканает.  А то и комбинатор вида
value once fu = Lazy.force (lazy (fu ()));
method get_smth = once & fun () -> f x
не знаю, что лучше.
[13:57:12] <gds> но интересно, как решил?
[14:00:42] <f[x]> думаю тут без синглтон фабрики комбинаторов не обойтись!
[14:00:53] <f[x]> просто let = перед объектом
[14:03:11] <gds> но приходится дважды писать название метода/биндинга, мне это не нравилось в своё время.
[14:06:32] <f[x]> фигня
[14:06:50] <gds> у меня было 4..5 таких, и решил так же, но будь больше -- была бы не фигня.
[14:07:19] <gds> нет такой cs/it проблемы, которую нельзя было бы решить копипастой, дада.
[14:19:30] Kakadu вошёл(а) в комнату
[14:19:42] Kakadu вышел(а) из комнаты
[14:19:58] Kakadu вошёл(а) в комнату
[14:28:24] ygrek вошёл(а) в комнату
[15:18:52] bobry вышел(а) из комнаты
[15:36:13] ygrek вышел(а) из комнаты
[15:36:36] <gds> парвел, общение между процессами (tcp/ip, базовые вещи, приветствие, пиды, служба имён): https://bitbucket.org/gds/parvel/wiki/inter-process-protocol -- буду рад критике.
[15:42:21] bobry вошёл(а) в комнату
[15:48:15] Kakadu вышел(а) из комнаты
[15:51:05] Kakadu вошёл(а) в комнату
[15:55:11] <ermine> уф, собрала оксигень с елиомом (на n-ый день трудов)
[16:13:55] <Typhon> а тебе для разработки или деплоила? если деплоила, то можно б было ocsigen-bundler попользовать
[16:21:35] <f[x]> уф, у jdh твиттер затягивает
[17:21:09] ermine вышел(а) из комнаты
[17:25:05] ermine вошёл(а) в комнату
[17:33:54] ermine вышел(а) из комнаты
[17:34:51] <gds> f[x]: сходу не нашёл, поделишься урлом?
[17:37:40] <f[x]> http://twitter.com/#!/jonharrop
[18:16:39] <gds> да, факт, что-то интересное там есть.  Про Y-комбинатор очень понравилось.  А про то, что камлокодеры фапают на message passing -- это он зря.  Если конкретно меня брать в рассмотрение, то message passing у меня лишь нижний уровень, поверх которого можно наворачивать.  Лично я не хочу одним m.p. ограничиваться, инфа 100%.
[18:17:45] <Kakadu> а я перешел по ссылке и вообще не понял куда дальше нажимать
[18:19:24] <Typhon> дальше не надо нажимать, дальше надо крутить!
[18:20:34] <Kakadu> ну нажал я слева и справа что-то появилось. это что?
[18:20:49] <gds> если слева внизу нажал, то это меню "Пуск".
[18:21:01] <Kakadu> gds: у меня openbox
[18:21:08] <gds> упс.
[18:21:19] <Kakadu> )
[18:27:11] Typhon вчера на ночь наколбасил ~250 строк чудовищно императивного кода на камле, реализуя один алгоритм, а с утра понял, что этот алгоритм, в общем то, и не нужен
[18:27:56] <Typhon> мораль — лучше поспать  + Nothing Good Ever Happens After 3:00 AM
[18:31:29] <gds> у меня другие выводы: 1. top-down programming + типизация + прототипы в стиле "raise Exit", 2. тупейшая реализация и пометка "todo: переписать, когда взлетит".
Про поспать -- мысль всегда правильная.
А про 3:00 -- недельку назад встал в 2:00 (впервые за последние годы), где-то к 3:00 включился моск, и таки вполне продуктивно поколбасился до официальной работы.  Но это скорее счастливое исключение.
[18:51:02] <bobry> wtf? http://caml.inria.fr/pub/ml-archives/caml-list/
[18:51:14] <bobry> чего это там NaN то везде
[18:51:44] <gds> потому что дата -- это not a number, очевидно же.
[18:53:45] ermine вошёл(а) в комнату
[18:55:23] <Typhon> NaN это визитная карточка мыллиста, практически
[19:05:14] <f[x]> priceless : jdh наезжает на spj
[19:05:18] <f[x]> http://stackoverflow.com/questions/5492930/programming-language-for-functional-parallelism-f-vs-haskell/
[19:07:18] <f[x]> там вообще зачётный тред
[19:08:55] Typhon вышел(а) из комнаты
[19:27:17] <bobry> жаль spj нету in person
[19:28:51] <f[x]> ну там второй simon есть
[19:52:32] f[x] вышел(а) из комнаты
[20:04:11] f[x] вошёл(а) в комнату
[20:06:48] f[x] вышел(а) из комнаты
[20:19:15] f[x] вошёл(а) в комнату
[22:02:23] <gds> возникла нужда между вики-синтаксисами markdown и creole конвертить.  Кто-нибудь асиливал?
[22:02:39] <gds> на пердле не хочу :)  Кстати вот, а двустороннее конвертирование -- скорее хочу.
[22:22:08] bobry вышел(а) из комнаты
[22:28:14] <Kakadu> komar: ура ты тут. А то я ирке точно нормально вопрос не сформулирую
[22:29:59] <Kakadu> http://ocsigen.org/eliom/sources/tests/miniwiki/miniwiki.ml?view=content в 338й строчке должно возвращаться Eliom_output.Redirection.page Lwt.t
[22:30:07] avysk вышел(а) из комнаты
[22:31:07] <Kakadu> однако view_page из 326й строчки возвращает тип  Eliom_pervasives.XHTML.M.html Lwt.t
[22:31:18] <Kakadu> почему это компилируется, я уже совсем не понимаю
[22:31:47] bobry вошёл(а) в комнату
[22:37:14] <Kakadu> вообще когда типы не подписаны всё очень плохо
[22:44:35] <komar> Здрасте.
[22:47:14] <komar> Не, нифига не пойму, причем тут Eliom_output.Redirection.page?
[22:48:49] <Kakadu> потому что тип у Eliom_output.Redirection.register_post_service
[22:49:17] <komar> Ах ты ж елки, это новый оксиген.
[22:49:22] <Kakadu> http://paste.org.ru/?i8yrvd
[22:49:29] <komar> Я в нем не шарю, я его не тыкал даже.
[22:50:01] <Kakadu> вся надежда на ermine с бубном?
[22:50:19] <komar> На нее, она в свеженькое любит потыкать.
[23:03:19] <Kakadu> не, это вынос мозга
[23:03:58] <Kakadu> и вижу использование функции и не могу ни понять её тип, ни понять где она определена
[23:07:07] <Kakadu> кажется разобрался
[23:17:15] <gds> Kakadu: в простых случаях тип выражения можно определить, приписав ему тип unit: "expr" => "((expr) : unit)" и посмотрев на сообщения типовыводилки.  Однако это в простых случаях всё хорошо, в сложных же оно поверит, что там unit, а потом аукнет где-нибудь в другом месте, трёхэтажно.
[23:17:57] <Kakadu> gds: ну я так и делал, только писал int вместо unit
[23:18:11] <gds> ага.  непринципиально.
[23:18:32] komar всегда проверяет типы с помощью print_string
[23:18:58] <Kakadu> я просто получил тип, и нашел его не в том модуле и потом мучался долго
[23:19:07] <Kakadu> komar: не понял
[23:19:37] <gds> кстати, иногда удобно определить абстрактные типы
type a
type b
и посмотреть, что же оно хочет, приписав тип a -> b.  А если понятно, что "указан b, а хочется option 'c", то дописать a -> option b, например.
[23:19:53] <komar> Поставить новый оксиген, что ли.
[23:20:06] <komar> Оно сильно бажное?
[23:20:21] <Kakadu> понятия не имею
[23:22:48] ermine приползла без бубенчиков
[23:23:09] <Kakadu> ermine: не надо. я уже сам справился
[23:23:43] <komar> ermine: новый оксиген (который 1.9*) сильно бажный?
[23:25:08] <Kakadu> ermine: скажи - нет)
[23:25:09] <ermine> komar: хз, я только сегодня его полностью собрала впервые за два месяца
[23:25:34] <komar> А, так, значит, я не самый отсталый.
[23:25:37] <komar> Не буду ставить.
[23:25:45] <ermine> щас буду вникать заново в веб-моделирование
[23:26:20] <ermine> komar: два месяца назад он не бажил
[23:26:51] ermine собрала у себя дома и на боевом сервере
[23:30:29] bobry вышел(а) из комнаты
[23:32:44] ygrek вошёл(а) в комнату
[23:34:05] superbobry вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!