Home
Objective Caml
ocaml@conference.jabber.ru
Вторник, 9 августа 2011< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | http://camlunity.ru/ (теперь с git доступом!) | Верблюды грязи не боятся! | release crap, enjoy NIH | репортьте баги официальным дилерам | ocaml мёртв и тормозит, move on | stdlib only? - ССЗБ
Конфигурация комнаты
Участники комнаты

GMT+4
[00:24:06] Typhon вошёл(а) в комнату
[00:27:14] Typhon вышел(а) из комнаты
[00:28:17] Typhon вошёл(а) в комнату
[00:28:22] Typhon вышел(а) из комнаты
[00:29:01] Typhon вошёл(а) в комнату
[00:33:35] Typhon прочитал окасаки (книжку).
[00:33:43] <Typhon> она есть на бумаге, кстати, мск.
[00:34:27] <Typhon> щитаю, правда, что просто так читать стоит только для общего образования, чтобы потом знать где искать, лично у меня имплементации (сто случаев балансировки какого-нибудь дерева, ага, плохо запоминаются).
[00:34:27] ermine вышел(а) из комнаты
[00:37:24] <Typhon> диплом, вроде как, сильно хардкорный, книжка попроще.
[02:00:05] <bobry> Typhon: на бумаге, in english? noway
[02:04:09] <Typhon> почему?
[02:05:23] <bobry> видимо я не знаю мест, где такое продают?
[02:06:28] <bobry> кстати, у тебя в cobson Binary отдельным модулем потому что ничего готового нет, или потому что не хотелось зависимостей?
[02:06:53] <bobry> я вот в Core нашел такой модуль, но тащить ради него Core как то некошерно
[02:12:33] <Typhon> я взял и слегка модифицировал Binary у японца, а у того прямо так и написано, что из Коре. тащить из-за него зависимость не хотелось
[02:13:06] <Typhon> logobook.ru + ozon.ru (но они с наценкой дикой). или amazon.com + шипитту
[02:17:10] <bobry> ну я на амазоне и хотел :)
[02:17:41] <bobry> они какие то нелюди, за ебук просят $30
[02:21:19] bobry вышел(а) из комнаты
[02:27:02] Typhon вышел(а) из комнаты: Replaced by new connection
[02:27:04] Typhon вошёл(а) в комнату
[02:57:03] <Typhon> bobry, ты вроде решал -- есть чит коды!!1! https://github.com/VictorNicollet/99-Problems-OCaml :-)
[03:36:25] Typhon вышел(а) из комнаты
[03:54:31] zinid вошёл(а) в комнату
[04:17:49] digimmortal вошёл(а) в комнату
[05:27:17] aloner2k вошёл(а) в комнату
[06:59:55] ftrvxmtrx вошёл(а) в комнату
[08:52:50] bobry вошёл(а) в комнату
[09:22:12] ftrvxmtrx вышел(а) из комнаты
[09:22:20] ftrvxmtrx вошёл(а) в комнату
[09:27:14] <bobry> кто нить в курсе про что это? http://fpish.net <http://fpish.net/> -- как то подозрительно мало тегов слева внизу
[09:29:01] <gds> странная хрень какая-то.
[09:29:06] <gds> шарпизты.
[09:54:17] <gds> сейчас прикидываю про мемоизацию, ибо надо её уже систематизировать.
Как я понимаю, практически-полезны такие варианты: 1. безлимитная -- всё запоминаем, 2. last-recently used определённое количество, 3. частный случай lru на случай одного элемента -- "последний вычисленный".  Кроме того, всегда необходимо работать с пользовательской проекцией ключа.  На случай хеш-таблиц -- ещё и с пользовательской хеш-функцией (а на случай деревьев -- с указанным упорядочиванием).  С точки зрения внутреннего устройства есть тоже варианты, но это будет следствием требований, за редкими исключениями, когда (*) эффективная-красивая структура данных предоставляет какой-то особый метод.
Внимание, вопросы.  1. Что я забыл?  2. Какие есть специальные структуры данных для описанного в (*), готовые либо несложные для кодинга?
[10:09:35] bobry- вошёл(а) в комнату
[10:29:04] <f[x]> > gds: вот ты выкладываешь либу в oss -- если ты не пишешь для нее документацию то ее существование примерно равно ее отсутствию
ничего подобного.
во-первых смотря что за либа, большинству никакая дока кроме ocamldoc'а вообще не нужна.
во-вторых рабочий код это основное, остальное приложится если понадобится.
в-третьих требовать чего-то от oss-писателей неразумно :)
в-четвёртых предположение что код выкладывают для захвата мира и ради других людей - не всегда верно, я например сабмичу патчи в апстримы исключительно потому-что это удобней чем поддерживать форки у себя, плюс иногда со стороны приходят патчи
> зачем тогда вообще делиться, если то чем ты делишься *сложно* использовать
варианты причин выше, автор выкладывает потому-что ему так хочется
> по моему мнению автор должен приложить определенные усилия чтобы сделать свою поделку полезной для сообщества
не должен, автор решает свои задачи
[10:29:36] Typhon вошёл(а) в комнату
[10:30:12] <bobry-> f[x]: sure, прагматизм в первую очередь :)
[10:32:56] <bobry-> собственно весь пассаж сводится к простой мысли «требовать чего-то от oss-писателей неразумно» -- мне нравится думать что требовать не только размуно, но и нужно, иначе наступает колапс / хаос / армагеддон / w\e
[10:32:57] <Typhon> fpish — какой-то новый стортап (сео, айпио, монетизация, скачать) для обучения фп. типа, если тебе есть чо сказать, ты там регистрируешься, объявляешь тему и проводишь "вебинар". +, кажется, можно локальный риаллайф тусовки планировать. но вообще, походу чуваки как-то офигели и хотят чтобы на их сайте чуваки создавали контент забесплатно, а они ещё и персональными данными торговать будут и рекламу подсовывать
[10:34:43] <f[x]> bobry-: мне нравится думать что если хочется чего-то потребовать то нужно рисовать патч :)
[10:35:10] <bobry-> f[x]: не всегда, но как вариант :)
[10:35:21] bobry- уже чутка приложился к ocaml-erlang-port
[10:35:24] <Typhon> да, хорошая мысль, что "требовать от автора ос либы можно только приёма пулл-реквеста/патча"
[10:35:34] <f[x]> весь этот красноглазый хаoss основывается на do-ocracy
[10:35:53] <bobry-> Typhon: патч не потребуется если автор либы сразу сделает все кошерно
[10:36:24] <f[x]> страна эльфов, в которые все либы написаны кошерно и не требуют патчей
[10:36:38] <bobry-> я сейчас про документацию и примеры если че :)
[10:36:45] <bobry-> но в целом да, not gona happen
[10:36:52] <f[x]> угу ;)
[10:36:53] <Typhon> автору "итаквсёпонятно"
[10:37:16] <bobry-> ну еще бы :)
[11:05:10] delete_ вошёл(а) в комнату
[11:09:36] delete_ вышел(а) из комнаты
[11:20:25] ermine вошёл(а) в комнату
[11:21:28] aloner2k вышел(а) из комнаты
[11:25:02] <gds> кажется (на основании amall) в мою голову уложился оазис.  Прикольная штука, однако.  Думаю вот, если бы не проблемы с make uninstall, закатал бы всё в туда.
[11:25:29] <bobry-> gds: а какие проблемы с make uninstall?
[11:26:34] <f[x]> на самом деле нет проблемы, допиши в makefile таргет с ocamlfind remove
[11:26:50] <gds> а такие: требует ту самую рабочую копию.  То есть,
cp -R project work && (cd work && make install) && rm -rf work
делает так, что uninstall'ить проект через make uninstall нереально.
[11:27:22] <gds> f[x]: вне OASIS_{START,STOP}?  По идее, должно работать?
[11:28:48] <f[x]> конечно
[11:29:06] <f[x]> можно даже попробовать назвать её uninstall
[11:29:46] <f[x]> а можно патчнуть оазис, какой-то флажок в _oasis что типа хочу нескромный uninstall без вопросов
[11:31:15] <Typhon> в _oasis ли? а если я, зловредный автор библиотеки, выпущу какое-то г, которое будет чужой труд удалять? с таким флажком? :-)
[11:31:45] <gds> пока "путь наименьшего сопротивления" -- назвать цель по-другому и не патчить оазис.  Уверен, что такое поведение кому-то ещё настолько же не понравится, насколько и мне, но ему будет не лень.
[11:32:08] <f[x]> ну, Typhon, ты можешь его и без oasis'а выпустить :)
[11:32:40] <f[x]> поэтому кстати не стоит делать sudo make install чему попало
[11:36:24] <gds> если чуть глобальнее, "sudo что попало" вообще не стоит делать.
[11:36:35] <f[x]> во
[11:41:54] <gds> я придумал очень гениальную идею (по-другому не скажешь).  В каждый проект нагенерить приватный ключ ассиметричного шифрования, а при инсталляции также инсталлить публичный ключ этого проекта.  Вот пользователи затрахаются, милое дело будет!
[11:44:08] <f[x]> м?
[11:47:38] <gds> это я прикидываю подход легалла в плане "удалять только то, что было инсталлено с текущей рабочей копии".
С одной стороны -- как-то относительно-системным образом гарантировать, что софтина будет удалять так, как она это умеет, и только своё.  С другой же -- очевидно гемор для тех, кто этого ключа не знает.
В общем, если доводить это до предела, получится, что каждая софтина должна класть свой uninstall.exe в систему, и только через него удаляться.
[11:48:37] <Typhon> на http://nixos.org/  похоже
[11:48:46] <f[x]> ну или декларативненько давать список файлов при инсталле, что собственно и делает любой пакетный менеджер :)
[11:50:19] <gds> про список файлов -- думал, но бывает и такое, что "удолить строчку из ld.conf" или "поменять в альтернативах программу такую-то на какую-нибудь другую".
[11:51:04] <gds> nixos -- оригинально..
[12:02:27] <komar> А чо это вы тут делаете?
[12:03:20] <komar> А, херню придумываете. Ну-ну.
[12:04:40] <gds> кстати вот ещё, рядом с мемоизацией вопрос.  Есть у меня способ описать "ресурс с явной финализацией" вот так:
type withres 'a 'r = { cons : 'a -> M.m 'r ; fin : 'r -> M.m unit };
(где M -- какая-то манатка с ошибками; пусть даже Identity + try/catch).  Чем хорошо -- что не форсируется, что "вот тебе with-комбинатор, и хоть как выворачивайся, но обязан в него уложиться", а можно даже какую-нибудь "область видимости" намутить, в пределах которой беспорядочно открывать ресурсы, которые при выходе будут закрыты, ну и вообще, посвободнее.
А есть подход фа-диеза, где class idisposable = < dispose : unit ; .. > и всё такое.  Но надо либо всё в объекты заворачивать, либо class idisposable ['a] = < dispose : unit ; v : 'a > какое-нибудь, и каждый раз input_line file#v.
А есть ещё "надежда на мусорщик", хоть и с "пользовательской финализацией".  В общем, если нужна "мягкая подчистка ресурсов", последнее лучше.  А если грубое, то что брать, cons+fin или idisposable?
[12:05:45] <f[x]> с with'ами понадёжней то будет
[12:06:30] <gds> да вот, как бы, idisposable тоже в with надо будет заворачивать, по-любому...
[12:06:48] digimmortal вышел(а) из комнаты
[12:12:50] digimmortal вошёл(а) в комнату
[12:26:18] delete_ вошёл(а) в комнату
[12:26:34] delete_ вышел(а) из комнаты
[13:04:34] shaggie вошёл(а) в комнату
[13:07:41] <f[x]> хм, у mingw появился такой себе менеджер пакетов
[13:07:44] <f[x]> mingw-get install ...
[13:08:14] <gds> надо будет попробовать собрать оверблд с ним.
[13:08:20] <gds> но кое-что точно не получится.
[13:56:32] <f[x]> gds: !
[13:56:41] <f[x]> откуда c;C:\\ берётся?
[14:16:13] <gds> f[x]: из баша, блеять.
[14:16:53] <gds> c:/asd раскрывается по типу "colon-separated unix paths" в "semicolon-separated dos paths"
[14:17:10] <gds> , в c;c:\asd\
[14:17:11] <gds> или типа того.
[14:18:01] <gds> в общем, я-то пропатчил там, где это актуально -- вроде, в ocamlsources/ocamlbuild/my_std.ml, либо в stdlib/sys.ml, но надо смотреть.
[14:18:12] <gds> но скажи, что делаешь и зачем.  Если ещё актуально.
[14:37:09] <f[x]> компилю 3.12.1 в msys+mingw
[14:37:12] <f[x]> без cygwin
[14:37:50] <gds> дык в README.win32 СКАЗАНО НАДО ЦЫГВЫН!11111111
[14:37:53] <f[x]> странно, это вылезло пока только в одном месте - labltk/otherlibs/support
[14:37:59] <f[x]> дык, инфа устарела 100%
[14:38:27] <gds> а, там ещё Makefile.nt кривые бывают.
[14:38:53] <f[x]> угу, у меня об это jenkins спотыкается, но в релизе в этом вроде всё ок
[14:39:12] <f[x]> world собрался всего с одним ручным вмешательством!!
[14:39:30] <gds> f[x]: опять нет повода не напомнить про http://overbld.hg.sourceforge.net/hgweb/overbld/overbld/file/tip/src/ocaml/patch
[14:40:05] <f[x]> не, я хочу собрать чистый и раздавать его, раз inria бинрных сборок не делает
[14:40:15] <f[x]> т.е. такой же как был на офсайте когда-то
[14:41:32] <gds> а, совсем-совсем чистый?  И патчи апстить в апстрим перед сборкой?
[14:44:59] digimmortal вышел(а) из комнаты
[15:19:48] mrm вошёл(а) в комнату
[15:22:08] bobry- вышел(а) из комнаты
[15:22:59] bobry- вошёл(а) в комнату
[15:23:41] <f[x]> без патчей, лягушатники же как-то собирали
[15:32:11] <gds> может потому и не собирают сейчас, что или патчи, или цыгвын?
[15:39:44] <f[x]> ну с цыгом вариант нормальный, просто мне лень ставить
[15:47:16] <ermine> тут ктонить пишет скрипты на камле (вместо bash/python/perl для шелла)?
[15:47:23] <f[x]> угу
[15:47:41] <ermine> ocamlmktop?
[15:47:52] <ermine> или ocamlrun ocaml?
[15:48:03] <ermine> или как?
[15:48:04] <f[x]> #! /usr/bin/env ocaml
[15:48:06] komar показал рукой в сторону джанестреет.
[15:48:22] <komar> f[x]: а шо, серьезно удобно?
[15:48:36] <f[x]> да уж поудобней чем на баше
[15:48:46] <komar> Гм, а ты точно осилил баш?
[15:49:02] <Typhon> писать на баше больше одной строчке — смертогрех
[15:49:07] <komar> Я просто начинаю пользоваться нормальным языком только тогда, когда понимаю, что дальше на баше не осилю.
[15:49:09] <Typhon> сохранять баш в файл — тоже
[15:49:23] <f[x]> достаточно, чтобы понять что простейшие действия занимают слишком много, а шорткаты - выстреливают
[15:50:02] <ermine> небось оно должно юзать только stdlib (посмотрев на топик)
[15:50:15] <ermine> а то всё поломается при апгрейдах!
[15:50:24] <f[x]> баш сложнее и неудобней камля, не вижу вообще причин им пользоваться для скриптов с какой-то логикой более чем на три строчки
[15:50:39] <f[x]> ermine: it depends
[15:50:52] <ermine> а что работает быстрее - баш или камло?
[15:51:00] <f[x]> ассемблер же
[15:51:11] <f[x]> а ещё быстрее - луч света
[15:51:21] <komar> > скрипты
> быстрее
[15:51:30] <komar> u doing it wrong
[15:51:45] ermine вспомнила одного чувака, который примерно по тем же причинам предпочила писать на С шелловые "скрипты"
[15:52:23] komar вспомнил чуваков, которые вместо баша пишут на питоне.
[15:52:24] <Typhon> с скриптах всё равно сведётся всё к вызовам системных функций
[15:52:26] <komar> Повбивав бы.
[15:52:56] <gds> только sh!  только аллах!
[15:53:05] <f[x]> allash
[15:53:08] <ermine> komar: ну питон с перлом понятно, там всё достаточно стабильно с библиотеками
[15:53:19] <mrm> батники, батники же ещё есть! :-D
[15:53:53] <mrm> У меня тут есть сценарий сборки в 1000 строк.
[15:54:00] <mrm> bat файл
[15:54:05] <mrm> Изнутри похож на бинарник
[15:54:23] <ermine> f[x]: а fileutils ты линкуешь к скриптам?
[15:54:39] <gds> бантики я часто свожу их к c:\msys\bin\bash %* или к чему-то подобному.
[15:54:43] <ermine> через topfind и require
[15:55:05] <ermine> надо применить прям щас, а то есть задача написать скриптец
[15:55:29] <f[x]> > линкуешь к скриптам
[15:55:46] <f[x]> topfind
[15:58:51] <f[x]> gds: забутстрапилось
[15:58:59] <gds> но как??
[16:00:05] <f[x]> всё из коробки
[16:00:09] <f[x]> я все шаги записываю
[16:00:20] <gds> покажешь потом?
[16:01:21] <f[x]> когда/если opt.opt получу
[16:01:47] <gds> и когда/если соберётся что-то ещё, использующее myocamlbuild.ml, конечно.
[16:01:57] <f[x]> угу
[16:14:39] <ermine> f[x]: а как в окамлевом скрипте рульно запустить внешнюю прогу?
[16:15:06] <f[x]> Sys.command
[16:15:21] <ermine> ну разве это рульно?
[16:17:11] <ermine> а еще гемор с командлайном
[16:17:26] <f[x]> let run s =
  prerr_endline ("+ " ^ s);
  if 0 <> Sys.command s then fail "command failed : %S" s
in
let run fmt = Printf.ksprintf run fmt in
[16:17:27] <ermine> то ли Sys.argv, то ли Arg, то ли CmdLine
[16:17:44] <f[x]> match List.tl (Array.to_list Sys.argv) with
[16:18:06] <gds> Sys.command не рульно, точно.  Тот же шелл и его эскейпинг.
[16:19:03] <ermine> и прочитать вывод
[16:19:53] <f[x]> Filename.quote
[16:22:08] <gds> quote -- ага-ага, та же хня, что и "$var" в шелле почти.
а вывод читать -- на тот же шелл рассчитывать.  повбивав би.
[16:30:18] <ermine> вот так потом скрипты втихаря превращаются в нормальные standalone программки
[16:30:39] <ermine> или дописывается функционал куда следует
[16:34:40] <ermine> потом, неудобно последовательно выполнять команды типа sudo ...; cd ...; ./smth; cd ... и тд
[16:34:55] <ermine> ну cd понятно, а судо?
[16:35:05] <ermine> не, su точнее
[16:35:34] <gds> простые комбинаторы пишутся для последовательности.  я даже придумаю тебе сейчас инфиксный оператор!111
[16:35:46] <f[x]> если у тебя скрипт запускалка других скриптов то на баше это ок
[16:35:47] <gds> su -- в топочку, sudo же.
[16:37:31] <ermine> gds: а оператор хоть полиморфный?
[16:37:39] <gds> а надо?
[16:38:24] <ermine> да подозреваю, что число операторов весьма ограничено и посему их надо реюзить
[16:38:34] <ermine> без слезопролития
[16:39:08] <gds> Modulename.( тут полиморфные очень-очень )
[16:39:37] <ermine> а художественно выглядит в коде?
[16:39:53] <gds> обрисуешься.
[16:42:34] <ermine> ну рассказывай как выглядит твой оператор, чонить типа &<&>&?
[16:45:37] <ermine> интересно, а есть лимит длины оператора?
[16:45:42] <ermine> >>>>>====
[16:46:26] <ermine> помницо, в меркуриале были длинные стрелки
[17:08:04] <bobry-> товарищи, а кто нибудь генерил модуль Labels автоматически с помощью camlp4?
[17:08:07] <bobry-> или так некошерно?
[17:11:00] <ermine> а что это?
[17:12:11] <bobry-> http://batteries.forge.ocamlcore.org/doc.preview:batteries-beta1/html/api/Array.Labels.html
[17:12:19] <bobry-> те же функции только с labels
[17:14:29] <ermine> а кто должен давать имена аргументам?
[17:14:45] <bobry-> ну тык camlp4 то их знает вестимо
[17:15:37] <ermine> откуда?
[17:22:04] <bobry-> ну я просто предположил, ибо с camlp4 еще не ковырялся
[17:22:14] ftrvxmtrx вышел(а) из комнаты
[17:22:20] <f[x]> gds: ocamlfind, oUnit и ExtUnix собрались :)
[17:22:23] ftrvxmtrx вошёл(а) в комнату
[17:23:25] <bobry-> я вот тут медитирую на jane street core -- как это они распаковывают 64-х битные инты в обычный int в Binary_packing? в камле же они 63 бита, если я не путаю
[17:28:02] <f[x]> круто, msys инсталлит ssh в developer toolkit, проблема заливки файлов с виртуальной машины снимается
[17:41:23] <gds> http://ru-declarative.livejournal.com/100257.html
[17:41:23] mrm вышел(а) из комнаты
[17:42:22] bobry- вышел(а) из комнаты
[17:42:27] bobry- вошёл(а) в комнату
[17:44:47] mrm вошёл(а) в комнату
[17:59:55] bobry вышел(а) из комнаты
[18:00:26] bobry вошёл(а) в комнату
[18:20:34] <bobry-> а чем такие штуки делают? https://github.com/ocaml-batteries-team/batteries-included/blob/master/src/batArray.ml#L41
[18:24:02] ftrvxmtrx вышел(а) из комнаты
[18:24:09] ftrvxmtrx вошёл(а) в комнату
[18:25:32] zinid вышел(а) из комнаты
[18:33:06] bobry- вышел(а) из комнаты
[18:33:40] bobry- вошёл(а) в комнату
[18:49:02] digimmortal вошёл(а) в комнату
[18:52:32] mrm вышел(а) из комнаты
[18:53:00] mrm вошёл(а) в комнату
[19:03:24] <Typhon> в качестве пятиминутки юмора http://zw0rk.blogspot.com/2011/08/blog-post_09.html
[19:05:22] <f[x]> оуч
[19:11:25] bobry вышел(а) из комнаты
[19:11:38] bobry вошёл(а) в комнату
[19:15:21] <komar> Епт, блогеры уже на посты в жуйке ссылаются.
[19:19:58] <Typhon> ptabhjd?
[19:20:00] <Typhon> зефиров?
[19:27:50] <komar> Твоя пятиминука юмора.
[19:31:58] bobry- вышел(а) из комнаты
[19:36:10] <Typhon> а, я не заметил источник. зефиров иногда ссылается на жуйк тоже
[19:43:23] shaggie вышел(а) из комнаты
[19:50:38] <komar> Раза три уже.
[19:50:50] <komar> Он читает жуйк по тегу хаскель.
[19:56:03] Typhon читает твитор по тэгу #ocaml
[20:19:44] komar пишет в псто по тегу *ocaml.
[20:20:48] f[x] коммитит в repo по тэгу =ocaml
[20:20:51] <bobry> komar, много пишут в psto по тегу ocaml?
[20:20:58] <bobry> в жуйке по моему никто не пишет
[20:21:08] <komar> Нет. Клево, да?
[20:21:09] <bobry> за редким исключением троло-хацкеллистов
[20:22:09] Typhon вышел(а) из комнаты
[20:22:21] <bobry> komar, ну и да -- еще как клево
[20:22:32] bobry вышел(а) из комнаты
[20:22:38] bobry вошёл(а) в комнату
[20:36:15] digimmortal вышел(а) из комнаты
[20:38:51] <ermine> f[x]: а что ты в скриптах используешь вместо awk?
[20:38:59] <gds> а я сру на всех по тэгу *
[20:44:31] <f[x]> ermine: вместо awk - awk
[20:44:42] <f[x]> пруф - http://ygrek.org.ua/p/code/pmpa
[20:49:49] <ermine> кажись где-то был agrep еще
[20:51:55] ermine посмотрела на первую строчку скрипта и скривилась
[20:52:23] <ermine> не, это не тру
[20:53:47] <ermine> ба, новая версия type-conv вышла
[21:54:46] mrm вышел(а) из комнаты
[22:47:05] Typhon вошёл(а) в комнату
[23:03:38] ermine вышел(а) из комнаты
[23:06:28] abiogenesis вошёл(а) в комнату
[23:09:46] ygrek вошёл(а) в комнату
[23:09:59] ygrek вышел(а) из комнаты
[23:10:10] ygrek вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!