Home
Objective Caml
ocaml@conference.jabber.ru
Пятница, 24 июня 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:10:41] Typhon вошёл(а) в комнату
[00:29:14] <ermine> gds: ниасилила интерфейс гитхуба в этом плане
[00:29:40] ermine после пробоины на велосипеде сходила побухать с горя, теперь опять притащилась домой
[00:30:15] <gds> ermine: выруби issue tracking -- вроде можно там, ну и оставь мыло в качестве поддержки.
[00:30:31] <ermine> gds: кстати изначально mltls, если мне склероз не изменяет, тоже был подточен под апи вида fun -> t -> nextf
[00:31:08] <gds> про велик -- знакомая история, тоже была проблемка, забивал на покатушки порядка пары месяцев, но зря.
[00:31:36] <ermine> gds: у меня был "змеиный укус"
[00:31:54] <ermine> может, этот термин тебе чота говорит :)
[00:32:18] <ermine> жестко перепрыгивали яму, задняя камера не выдержала
[00:33:26] <ermine> а на переднем колесе покрышка в двух местах повредилась, почти вылезев из обода
[00:34:13] <ermine> тормозить надо было, а не гнать с дикой скоростью через ямы
[00:38:36] <gds> термин -- говорит.  от ямы зависит, может можно было бы перепрыгнуть безопасно, но вообще, у разных людей кайф в разном, и тут не факт, что "надо было [что-то делать]".  явно и однозначно не скажешь, вот в чём дело.
[00:39:07] Typhon вышел(а) из комнаты
[00:39:21] <gds> отписал сильвану про оазис в рамках "dumb user experiment" и с чистой совестью валю спатке.
[00:39:29] Typhon вошёл(а) в комнату
[00:39:55] <Typhon> это хотя бы не обидная авария. я вот на позапрошлых выходных приехал на велике на работу, по случаю мероприятий, авралов и дедлайнов. поставил с утра в уютном дворе нашей фабрики велик, вечером, часов через 12 вышел, сел, поехал, а оказалось -- заднее колесо спущено! обнаружил в покрышке вкрученный туда саморез. камера оказалась пробита в двух местах. около двух часов сидел, клеил, переклеивал, нашёл ещё ножевой порез у нипеля, зачинил и его, но видимо ещё где-то дыры были. так и поехал домой на метро
[00:40:00] <Typhon> :-(
[00:42:39] <gds> Typhon: ахтунги в уютном дворе, точно.
[00:44:36] <ermine> да обидная немного, яму можно было объехать в одном месте, но то место было занято встречным пионером в тот момент, не успели на скорости туда свернуть, когда пионер освободил то место
[00:45:07] <ermine> надо учесть, что катаюсь я на тандеме, а это двойной вес на колеса
[00:46:33] gds вышел(а) из комнаты
[01:39:43] ermine вышел(а) из комнаты
[02:16:04] Typhon вышел(а) из комнаты
[02:17:59] Typhon вошёл(а) в комнату
[02:47:51] Typhon вышел(а) из комнаты
[03:26:47] zert вышел(а) из комнаты
[03:46:59] komar вышел(а) из комнаты: Replaced by new connection
[03:47:00] komar вошёл(а) в комнату
[03:56:51] komar вышел(а) из комнаты: Replaced by new connection
[03:56:53] komar вошёл(а) в комнату
[03:59:01] komar вышел(а) из комнаты: Replaced by new connection
[03:59:02] komar вошёл(а) в комнату
[04:06:07] zinid вошёл(а) в комнату
[04:21:44] komar вышел(а) из комнаты: Replaced by new connection
[04:21:47] komar вошёл(а) в комнату
[04:31:37] komar вышел(а) из комнаты: Replaced by new connection
[04:31:39] komar вошёл(а) в комнату
[04:49:18] komar вышел(а) из комнаты: Replaced by new connection
[04:49:21] komar вошёл(а) в комнату
[05:25:22] komar вышел(а) из комнаты: Replaced by new connection
[05:25:22] komar вошёл(а) в комнату
[05:27:54] komar вышел(а) из комнаты: Replaced by new connection
[05:27:56] komar вошёл(а) в комнату
[06:31:41] komar вышел(а) из комнаты: Replaced by new connection
[06:31:43] komar вошёл(а) в комнату
[06:35:45] komar вышел(а) из комнаты: Replaced by new connection
[06:35:48] komar вошёл(а) в комнату
[06:45:50] komar вышел(а) из комнаты: Replaced by new connection
[06:45:50] komar вошёл(а) в комнату
[07:03:44] komar вышел(а) из комнаты: Replaced by new connection
[07:03:45] komar вошёл(а) в комнату
[07:25:12] komar вышел(а) из комнаты: Replaced by new connection
[07:25:15] komar вошёл(а) в комнату
[07:40:15] komar вышел(а) из комнаты
[07:41:47] klapaucius вышел(а) из комнаты
[07:42:25] komar вошёл(а) в комнату
[07:48:58] komar вышел(а) из комнаты
[07:50:08] komar вошёл(а) в комнату
[08:06:30] komar вышел(а) из комнаты: Replaced by new connection
[08:06:30] komar вошёл(а) в комнату
[08:17:24] ermine вошёл(а) в комнату
[08:32:01] komar вышел(а) из комнаты: Replaced by new connection
[08:32:01] komar вошёл(а) в комнату
[08:35:56] komar вышел(а) из комнаты: Replaced by new connection
[08:35:59] komar вошёл(а) в комнату
[08:43:30] komar вышел(а) из комнаты: Replaced by new connection
[08:43:31] komar вошёл(а) в комнату
[08:49:10] komar вышел(а) из комнаты: Replaced by new connection
[08:49:11] komar вошёл(а) в комнату
[08:58:40] gds вошёл(а) в комнату
[09:19:06] komar вышел(а) из комнаты: Replaced by new connection
[09:19:10] komar вошёл(а) в комнату
[09:25:16] komar вышел(а) из комнаты: Replaced by new connection
[09:25:17] komar вошёл(а) в комнату
[09:34:13] komar вышел(а) из комнаты: Replaced by new connection
[09:34:14] komar вошёл(а) в комнату
[09:47:17] komar вышел(а) из комнаты: Replaced by new connection
[09:47:18] komar вошёл(а) в комнату
[09:58:32] komar вышел(а) из комнаты: Replaced by new connection
[09:58:34] komar вошёл(а) в комнату
[10:19:33] komar вышел(а) из комнаты: Replaced by new connection
[10:19:33] komar вошёл(а) в комнату
[10:20:23] ftrvxmtrx вышел(а) из комнаты
[10:23:34] komar вышел(а) из комнаты: Replaced by new connection
[10:23:35] komar вошёл(а) в комнату
[10:33:20] komar вышел(а) из комнаты: Replaced by new connection
[10:33:21] komar вошёл(а) в комнату
[10:43:44] komar вышел(а) из комнаты: Replaced by new connection
[10:43:47] komar вошёл(а) в комнату
[10:50:42] komar вышел(а) из комнаты: Replaced by new connection
[10:50:47] komar вошёл(а) в комнату
[10:51:26] <gds> комар летает.
[10:59:28] <ermine> главное не подставиться под укус
[11:02:46] komar вышел(а) из комнаты: Replaced by new connection
[11:02:46] komar вошёл(а) в комнату
[11:12:10] klapaucius вошёл(а) в комнату
[11:12:32] komar вышел(а) из комнаты: Replaced by new connection
[11:12:33] komar вошёл(а) в комнату
[11:13:04] <ermine> у киселева еще есть пример парсенья tiff с помощью итератеев
[11:13:24] <ermine> а вот поискала ||| у него - не нашла явного указания
[11:13:43] <gds> tiff тоже "в одну сторону"
[11:13:55] <gds> но там используются recoverable errors для seek'ов, вроде.
[11:14:48] <ermine> гы
[11:15:17] <ermine> засунуть данные обратно в сокет?
[11:15:48] <ermine> ну значит эта фича должна быть в стриме реализована
[11:16:39] <gds> не, в случае альтернатив укрепился во мнении: если нужны программисту альтернативы, то это должно быть явно, и эти вещи нужно реализовывать специально-обученным комбинатором, который должен сохранять поток, пока не станет ясно, что его можно выбрасывать.
[11:17:57] <ermine> это говорит о том, что итераты - слабохарактерные штучки
[11:18:14] <ermine> т.е. это описание концепции всего лишь
[11:18:18] komar вышел(а) из комнаты: Replaced by new connection
[11:18:19] komar вошёл(а) в комнату
[11:18:34] komar вышел(а) из комнаты
[11:18:42] <ermine> komar: хватит перелетать с жертвы на жертву уже, а то лопнешь
[11:19:33] komar вошёл(а) в комнату
[11:19:57] <gds> ermine: нет, итераты -- это такие штуки, где всё делается явно и надёжно.  Научить их бектрекингу -- вполне реально.  Но я против ненадёжных вещей, поэтому их надо делать явными.  Я бы очень огорчился, если бы итераты неявным образом включили бектрекинг и отожрали бы у меня кучу памяти.
[11:20:27] <gds> overbld: added 14 changesets with 559 changes to 549 files.  Добавил оазис, называется.  Так, а теперь это говно надо скомпилять падвендой...
[11:21:53] <gds> Typhon хитрый, добавил оазис в нужные мне библиотеки, и рано или поздно (а именно, вчера) понадобилось менять то, что генерится из _oasis и не дописывается вне OASIS_{START,STOP} маркеров.  Пришлось изучать.  Заодно мелкую багу нашёл сильвану.
[11:24:23] <ermine> почему это не дописывается?
[11:24:29] <ermine> всё там дописывается
[11:24:59] <gds> ну вот захотел я в состав либы включить ещё один модуль, да не просто включить, а ещё .cmi проинсталлить.
[11:25:35] <gds> впрочем, поздняк метаться.  теперь я тоже модный и гламурный пользователь оазиса.
[11:25:54] komar вышел(а) из комнаты: Replaced by new connection
[11:25:56] komar вошёл(а) в комнату
[11:26:15] <komar> ermine: у меня сеть глючит?
[11:26:55] <ermine> komar: всё утро
[11:27:03] <komar> Бида.
[11:27:15] ftrvxmtrx вошёл(а) в комнату
[11:27:54] <ermine> gds: осталось изучить как избавляются от бэктрекинга, наверное в пользу левой факторизации
[11:28:11] <gds> в хитрых случаях всё равно не избавиться.
[11:28:15] <komar> Угу.
[11:28:16] <ermine> или правой, смотря какой парсер
[11:28:50] <komar> Энивей, без левой факторизации парсер превращается в мегатормоз, так что ее тоже придется осваивать.
[11:28:50] <ermine> gds: например?
[11:29:19] ftrvxmtrx вышел(а) из комнаты
[11:30:06] <ermine> komar: не, бэктрекинг улучшает читабельность кода скорее чем помогает парсить быстренько
[11:30:49] ftrvxmtrx вошёл(а) в комнату
[11:31:13] <komar> Бэктрекинг прежде всего инструмент, без которого невозможно парсить некоторые хитрые штуки вообще. И да, код с бектрекингом читается нагляднее.
[11:31:20] <ermine> но я согласна все жестко факторизовать, тем более что это можно еще и дополнительным кодом строить, только это тоже нетривиально на первый взгляд
[11:31:56] <ermine> komar: давай пример
[11:35:16] komar вышел(а) из комнаты: Replaced by new connection
[11:35:18] komar вошёл(а) в комнату
[11:35:59] <ermine> перед любой точкой возврата бэктрегинка обычно находится точка факторизации, теперь приведите контрпример
[11:36:29] <ermine> (подумавши -- надо бы таки дочитать книжку про парсинг)
[11:40:24] komar вышел(а) из комнаты: Replaced by new connection
[11:40:29] komar вошёл(а) в комнату
[11:42:02] <komar> ermine: хотя, туплю, да. Теоретически — все можно подогнать под левую факторизацию без бектрекинга.
[11:44:34] komar вышел(а) из комнаты: Replaced by new connection
[11:44:37] komar вошёл(а) в комнату
[11:44:39] komar вышел(а) из комнаты
[11:48:17] <gds> я вот тоже думаю, что попытаться можно, и в большинстве разумных протоколов всё получится, но вот уевренности нет.
[11:51:50] komar вошёл(а) в комнату
[11:51:54] komar вышел(а) из комнаты
[11:57:55] komar вошёл(а) в комнату
[12:00:52] komar вышел(а) из комнаты: Replaced by new connection
[12:00:54] komar вошёл(а) в комнату
[12:02:49] komar вышел(а) из комнаты: Replaced by new connection
[12:02:51] komar вошёл(а) в комнату
[12:12:27] komar вышел(а) из комнаты: Replaced by new connection
[12:12:31] komar вошёл(а) в комнату
[12:17:15] komar вышел(а) из комнаты: Replaced by new connection
[12:17:17] komar вошёл(а) в комнату
[12:22:35] <ermine> gds: ты вчера показал как факторизовать случай с недоформатированием в маркдауне, который я решала бэктрахингом
[12:24:06] <ermine> gds: так что видимо таки никаких телодвижений от итератеев для бэктрахинга не надо, так что давай гони тестирование/выкусывание
[12:24:39] komar вышел(а) из комнаты: Replaced by new connection
[12:24:41] komar вошёл(а) в комнату
[12:25:50] komar вышел(а) из комнаты: Replaced by new connection
[12:25:53] komar вошёл(а) в комнату
[12:31:08] <gds> ermine: тестирование фактически будет тем же ||| по механизму: даём чанки тестирующему итерату, а затем, всегда/иногда даём эти же чанки другому итерату.
[12:32:53] <ermine> gds: блин, найдешь везде засады и шарахаешься от них
[12:33:17] <ermine> gds: окей, щас подумаю и может на чонить удачно заменим как бэктнахинг на левофакторизацию :)
[12:40:51] <gds> а вот с выкусыванием урла из текста -- даже не знаю, как жыдь.  схема урла ("http") может быть длинной ведь.
[12:42:55] <ermine> gds: это тестирование парсером
[12:43:26] <ermine> само тестирование могло выглядеть не как true/false, а как Parsed (a, rest)/Failed
[12:43:48] <ermine> где rest - остаток после матчинга
[12:44:16] <gds> ermine: я про случай "heregoessomereallylongurischeme://host/path".  И вот это имя схемы может быть очень большим, в теории.  Но, если не ошибаюсь, rfc разрешает большие имена схем.
[12:45:15] <ermine> gds: а чем это отличается от heads?
[12:45:45] <gds> heads кушают и возвращают количество скушанного.
[12:46:09] <gds> то есть, там хватает lookahead = 1 'el
[12:47:23] komar вышел(а) из комнаты: Replaced by new connection
[12:47:24] komar вошёл(а) в комнату
[12:54:00] <ermine> gds: (рыдая) неужели всегда придется использовать аккумулятор для сбора буковок и кусочков текста?
[12:55:09] <ermine> аккумулятор в виде списка или Buffer.t
[12:55:11] komar вышел(а) из комнаты: Replaced by new connection
[12:55:12] komar вошёл(а) в комнату
[12:55:34] ermine прихлопнула комара
[12:57:09] <gds> ну а какая разница, аккумулятор или нет.
[12:58:11] komar вышел(а) из комнаты: Replaced by new connection
[12:58:12] komar вошёл(а) в комнату
[13:00:56] <ermine> ладно
[13:02:14] <gds> ermine: кстати, можно легко разбить входной поток на "токены" и парсить уже по ним, тоже через итераты, и там всё должно быть легче.
[13:04:21] Typhon вошёл(а) в комнату
[13:04:31] gds вышел(а) из комнаты
[13:10:33] komar вышел(а) из комнаты: Replaced by new connection
[13:10:34] komar вошёл(а) в комнату
[13:15:00] komar вышел(а) из комнаты
[13:21:00] komar вошёл(а) в комнату
[13:23:43] komar вышел(а) из комнаты: Replaced by new connection
[13:23:43] komar вошёл(а) в комнату
[13:36:03] komar вышел(а) из комнаты: Replaced by new connection
[13:36:05] komar вошёл(а) в комнату
[13:42:08] komar вышел(а) из комнаты: Replaced by new connection
[13:42:09] komar вошёл(а) в комнату
[14:08:31] komar вышел(а) из комнаты: Replaced by new connection
[14:08:32] komar вошёл(а) в комнату
[14:14:05] gds вошёл(а) в комнату
[14:18:04] <ermine> gds: а есть итерат, подобный heads, но вместо списка - функция?
[14:18:37] <gds> можно легко налепить.  Фактически, в моём heads вынесено сравнение вроде, дело за малым.
[14:19:40] <ermine> то есть написать еще один итераааат
[14:20:13] <gds> даааа!
[14:20:36] komar вышел(а) из комнаты
[14:20:57] komar вошёл(а) в комнату
[14:22:21] komar вышел(а) из комнаты: Replaced by new connection
[14:22:24] komar вошёл(а) в комнату
[14:24:57] <ermine> gds: это иделогически неправильно, что heads хочет именно список, это ведь чисто калька с х-ля, а там строки и так списки
[14:25:25] <ermine> а пчу там не array или еще какой-нить Set.t
[14:27:43] <ermine> а писать итерат, который на 90% совпадает с имеющимся, но не вызывать его - это наверное экономия процессорного времени
[14:29:34] <gds> между list vs array -- пофиг.  Set.t -- потому что нужна была "последовательность", а не "множество", то есть, важен был порядок элементов.  "функция" -- можно сделать, чо.
[14:30:07] <gds> итераты -- гибкая штука: что хочешь, то и лепишь.  Думая головой, конечно.
[14:30:21] <ermine> ну OrderedSet
[14:30:30] <ermine> хоть Queue.t
[14:32:13] <gds> OrderedSet -- wtf?
[14:32:41] <gds> против Queue то, что у него естественное доставание деструктивно.
[14:33:46] <ermine> ну пишешь сам модуль упорядоченного набора и сам итеришь его для сравнения с инпутом, все последовательности имеют свойство итериться
[14:35:34] <gds> ermine: надо -- напиши свой аналог heads, не вижу проблемы.  Если ты видишь проблему -- опиши, я точно помогу, опционально даже накодю сам.
[14:36:55] <ermine> gds: блин! от всего отвертелся!
[14:37:26] <gds> даже от того, чтобы за тебя ставить задачу, решение которой нужно тебе!  Все мужики козлы!
[14:39:19] komar вышел(а) из комнаты: Replaced by new connection
[14:39:22] komar вошёл(а) в комнату
[14:40:16] <ermine> о, итерат peek уже есть
[14:41:30] <gds> не, ну если есть какая-то последовательность, по которой можно последовательно бродить, то её можно представить как
type sequence 'el = option (unit -> ('el * sequence 'el))
ну например.  Вроде очень общее такое представление.  Вот, если чо, нарисуй heads, который будет по такому бегать.  То есть, брать это и брать функцию сравнения на раввинство, и бежать.  Опционально не количество заматченного возвращать, а само заматченное.  Опционально быть итератом, который возвращает заматченное (т.е. в сторону enumeratee ход конём).
[14:43:52] <ermine> я пока заюзаю peek, сравнить, drop, всё как в лучшем совковом парсере
[14:44:01] <ermine> а потом посмотрю на скорость
[14:44:23] <gds> скорость _такого_ будет отвратительной, тут к бабке не ходи.
[14:48:04] <ermine> а без peek похоже никак получить строку символов, удовлетворяющих предикату, в heads не вижу как "остановиться"
[14:48:25] <ermine> или я туплю в последнее время
[14:49:35] <gds> 1. с итератами все тупят.  2. в heads -- ну да, peek >>= fun [ None -> приплыли | Some x -> если x Тот, то drop 1 >>= fun () -> ... ]
[14:52:28] <ermine> а
[14:53:45] <gds> хотя, если честно, отвратительно это.  Надо брать чанк голыми руками и итерасить его.
[14:54:19] <gds> но это дольше кодить.  Поэтому рекомендую это только в качестве оптимизации, которая после того, как всё работает.
[14:54:53] ermine ржет
[14:55:25] komar вышел(а) из комнаты: Replaced by new connection
[14:55:27] komar вошёл(а) в комнату
[14:56:00] <gds> я смешон :[
[14:56:23] <ermine> gds: ну я выше бубнила про тестирование инпута
[14:56:58] <ermine> не, я пока heads подладю под себя, а дальше гори оно синим пламенем
[14:58:08] komar вышел(а) из комнаты: Replaced by new connection
[14:58:09] komar вошёл(а) в комнату
[15:08:49] komar вышел(а) из комнаты: Replaced by new connection
[15:08:50] komar вошёл(а) в комнату
[15:14:00] <ermine> gds: ну итераты там все такие - или получить один элемент и применить к ней свою функцию, или тупо дропнуть, ничего не применив (в сценарии без peek), спрашивается, за счет чего итераты могут быстро работать?
[15:16:11] <gds> "все такие - или получить один элемент"
ну-ну.  рассмотри break например.  и рассмотри, как он работает с чанками.
[15:17:24] <ermine> ща погляжу
[15:19:25] <ermine> S.break
[15:19:31] <ermine> ужос
[15:21:26] <gds> во, смотри глубже, как S.break работает.
[15:22:55] <ermine> gds: а это точно не костыль? я могу написать в своем модуле функцию test и звать ее S.test для тестирования чанка?
[15:24:45] <gds> изначально апи итератов определено так: тебе дают чанк, а ты там с ним хоть вприсядку.  Но чанк -- subarray, поэтому надо знать его структуру.  Тип там private, то есть, разбирать его можно.  Вот сколько разберёшь -- всё твоё.  Если же видишь, что задача решается без опускания на этот уровень -- peek >>= drop, ну или воруй >>= убивай.
[15:28:31] komar вышел(а) из комнаты: Replaced by new connection
[15:28:32] komar вошёл(а) в комнату
[15:28:45] <ermine> да, напоминание о таинственной структуре subarray слегка убивает желание сейчас в этом копаться
[15:29:02] <gds> private { arr ; ofs ; len }.  Я сорвал покровы!
[15:32:08] komar вышел(а) из комнаты: Replaced by new connection
[15:32:31] komar вошёл(а) в комнату
[15:33:11] <ermine> а там похоже нет интерфейса подставить свой subarray, чтобы можно было подставить свой модуль, в котором делаешь include Subarray и дописываешь свои костыли
[15:34:03] <gds> а зачем это?  Если функции полезные -- присовывай их прямо в либу.  Если специфические -- open Subarray и разбирай x.arr, x.ofs, x.len.
[15:34:48] <ermine> либа уже проинсталлена
[15:34:56] <gds> тогда п.2
[15:35:06] <ermine> ы
[15:35:37] <gds> вообще, итераты загнали меня в лёгкое охреневание -- обычно либы всяко скрывают типы данных, с которыми работают, тут же история обратная: типы данных и являются главным апи.
[15:36:00] <ermine> gds: когда я разбирала Iteratee.hs, то у меня итерат был стрёмя параметрами, два из которых принадлежали стриму
[15:36:24] <ermine> дальше комбинируешь типы как могёшь
[15:45:57] komar вышел(а) из комнаты: Replaced by new connection
[15:45:57] komar вошёл(а) в комнату
[15:51:45] ermine подумала чуток и впала в уныние
[16:00:37] komar вышел(а) из комнаты: Replaced by new connection
[16:00:39] komar вошёл(а) в комнату
[16:05:35] komar вышел(а) из комнаты: Replaced by new connection
[16:05:39] komar вошёл(а) в комнату
[16:06:05] <ermine> интересно, долго ли я проживу, если буду применять алгоритм "брать всё, что не", юзая S.break
[16:10:23] <gds> смотря как часто прерываются "всё, что не".  Вроде проживёшь.
[16:11:40] <ermine> ну скажем я хочу \d+, тогда надо в предикат not \d
[16:11:55] ermine с сомнением смотрит на gds в ожидании подвоха
[16:12:15] <gds> \d* получится сходу.
[16:12:15] komar вышел(а) из комнаты
[16:13:01] komar вошёл(а) в комнату
[16:14:01] <ermine> ну придется проверять это, но все же лучше чем peek >> drop
[16:28:20] <gds> ermine: а если \d+ будет очень большим?
[16:30:04] <ermine> gds: а это чем отличается от итерата break?
[16:30:50] <gds> break в этом вопросе небезопасен: может слишком много прочитать в память.
[16:32:58] <ermine> дак S.break возвращает только из ткущего чанка, который уже есть в памяти
[16:33:03] <ermine> нет?
[16:33:35] <gds> break возвращает прочитанные элементы.  Вот они могут занимать МНОГА.
[16:34:35] <ermine> после S.fold?
[16:35:51] <ermine> мне иногда хотелось иметь такую строку и функцию, которая бы возвращала подстроку этой строки с помощью простого указателя, а не созданием новой строки
[16:36:16] <gds> не, в чистом break, у которого fold-функция -- почти cons.
[16:36:42] <gds> ну вот, под{строки,массивы} так и делают, возвращают как бы указатель.
[16:36:50] <ermine> хорошо, что сегодня тут угрек не шастает, а то бы прокомментировал насчет преждевременной оптимищации
[16:37:44] <ermine> хм, надо посмотреть в String.sub
[16:37:55] komar вышел(а) из комнаты: Replaced by new connection
[16:37:56] komar вошёл(а) в комнату
[16:40:04] <ermine> не, там create & blit
[16:40:14] <ermine> так что мимо
[16:41:52] komar вышел(а) из комнаты
[16:42:18] komar вошёл(а) в комнату
[16:42:26] <gds> с create+blit я как-то пробовал, отсосно получается :)
[16:42:50] <gds> так что не преждевременная.  тем более, что сравнил две имплементации.
[16:43:50] <gds> кстати, про оазис: "It uses the markdown syntax to print it and more precisely the pandoc extension of this syntax."  -- полезно ли знать любителям марка дауна об этом pandoc?
[16:44:48] <Typhon> я тыкал пандок, когда старовики конвертил
[16:45:16] ermine пойдет немного покататься на тракторнй резине
[16:45:17] <Typhon> это х-ль поделие, емнип
[16:51:00] <gds> setup.ml:
> # 21 "/home/gds/dev/ovm/work-ub3/src/oasis/work/src/oasis/OASISGettext.ml"
и они показывают внутренние пути в распространяемых исходниках, и им не стыдно?
[16:51:09] <Typhon> игрек жаловался
[16:51:12] <Typhon> в трекере есть багш
[16:51:16] <Typhon> *баг
[16:51:22] klapaucius вышел(а) из комнаты
[16:52:57] <gds> формально это не баг, а просто стыдоба.
[16:53:22] gds законтачился об oasis setup, setup-dev.  тоже стыдно :[
[16:55:10] <Typhon> setup-dev в публичной либе, в смысле? :-)
[16:55:43] <Typhon> лвтшники хитро отмазались, что мол если дев версия — то ставьте оазис, и setup-dev пользуйте, а в офф версиях мы вам setup сделаем
[16:56:24] <gds> не, вообще, в целом, командочки позапускал, на диффы посмотрел.
[18:07:25] zinid вышел(а) из комнаты
[18:41:25] <ermine> gds: (уф) а можно было бы вернуть тот же чанк, но с другими ofs и len
[18:41:56] <gds> вернуть откуда -- из IE_cont?  Конечно, так и делается всегда.
[18:42:28] <gds> суть в том, чтобы избежать копирования arr
[18:42:43] <ermine> S.break (result (хм, ну если не empty), tail)
[18:47:29] <gds> не понял.
[18:47:58] <ermine> что S.break возвращает в качестве результата - новосозданный массив или нет?
[18:50:29] <gds> подмассива два возвращает, оба массива в них старые.
[18:51:26] <ermine> а
[18:52:50] <ermine> тогда есть смысл часто ездить по чанку, деля на строки \r\n, деля на пробелы, etc
[18:53:09] <ermine> где результат сам чанком становится для другого итерата
[18:53:10] <gds> кстати, я там форсирую забавный инвариант -- пустые подмассивы физически равны.  Помогает как минимум в том, что не остаётся ссылок на использованные массивы, если на них не ссылается ни один непустой подмассив.
[18:54:00] bLaDe вошёл(а) в комнату
[18:56:09] <bLaDe> root@localhost:~/xmpp# ocaml setup.ml -build
I: Running command '/usr/bin/ocamlbuild xmpp.cma xmpp.cmxa xmpp.a test.native -tag debug'
Finished, 0 targets (0 cached) in 00:00:00.
ocamlfind: Package `base64' not found
Failure: Error while running: /usr/bin/ocamlfind query 'base64'.
Compilation unsuccessful after building 0 targets (0 cached) in 00:00:00.
E: Command '/usr/bin/ocamlbuild xmpp.cma xmpp.cmxa xmpp.a test.native -tag debug' terminated with error code 2
root@localhost:~/xmpp#
[18:56:15] <gds> ermine: у тебя есть какой-нибудь критерий, по которому разбивать нужно однозначно и строго?  например, формат представляет собой последовательность строк, и не будет такого, что логическая единица анализа будет занимать более одной строки?  если так, что вполне нормальный подход будет.  только надо учитывать, что массив, который получил итерат, является собственностью енумератора, и он при следующих делишках может его менять.
[18:57:59] <gds> ermine: и вот тут, не исключено, пригодится комбинатор, который будет копировать массив перед передачей, но я не думал об этом пока.
[19:00:26] <gds> ermine: объясняю, почему копирование нельзя сделать автоматически: потому что в этом случае потеряем одну из клёвых гарантий, которые дают итераты: возможность обработать любое количество входных данных в постоянной памяти.
[19:01:24] <ermine> gds: именно, внутри енумератора
[19:03:40] <gds> ermine: _что_ внутри енумератора?
[19:04:26] <ermine> gds: ну щелкать чанк по частям, где части сами чанки!
[19:12:47] <gds> ermine: идея годная, нравится.  только енумераторы обычно не тем занимаются, ну да терминологический нюанс тут, фигня.
Посмотри на enumeratee и на их примеры.  Тут близок sequence, мозготрахный весьма, лично я его только недавно понял.
А у меня пока другие дела появились, займусь ими.  В фоне буду думать об этом.  Может даже вплоть до завтры, кто знает.
[19:15:41] <ermine> ну давай, удачи
[19:20:04] Typhon вышел(а) из комнаты
[19:20:35] Typhon вошёл(а) в комнату
[19:20:42] Typhon вышел(а) из комнаты
[19:22:04] <gds> ocamlguilt -clean
[19:25:59] <bLaDe> ermine: dear Ana, how can i compile this source.  https://github.com/ermine/base64
it have no setup.ml
[19:26:32] <ermine> bLaDe: не собирай, возьми других ботов, их полно
[19:30:50] <komar> ermine: а че это такое?
[19:31:12] <komar> NIH, что ли?
[19:31:33] <bLaDe> ermine: ок, спасибо
[19:37:09] <ermine> komar: где?
[19:38:38] <komar> > Buggy replacement for Cryptokit.Base64 module
[19:39:50] <ermine> komar: почитай багтрекер у cryptokit.base64
[19:40:50] <ermine> komar: или найди где реализована нормальная функция base64
[19:41:32] <ermine> найдесшь - обрадуюсь
[19:42:06] <komar> > Bugs: Displaying results 1‒0 out of 0 total.
[19:42:41] <komar> А в чем поломатость заключается? Чтобы я не напоролся.
[19:43:55] <ermine> она не должна делиться на много строк с помощью \n и из строки не должны выкидываться паддинги ==
[19:44:44] <komar> Паддинги что?
[19:46:07] <ermine> да ты сам base64 оказывается не знаешь, что это такое, а уже кинулся спрашивать про nih, непонятно зачем :)
[19:46:35] <ermine> bas64 строки дополняются в конце строки дополнительными символами =
[19:46:53] <ermine> обычно в почте их отбрасывают
[19:47:06] <ermine> в xmpp они имеют значение
[19:47:40] <ermine> в то же время не все сервера принимают base64 строки, поделенные на подстроки с \n
[19:48:12] <ermine> в extlib и cryptokit одинаково убогие интерфейсы, а авторы их забили на них
[19:48:52] <ermine> а вот моя реализация глючная, но меня это не колышет
[19:50:12] <komar> Как это «непонятно зачем»? Чтобы узнать, зачем кто-то написал еще одну реализацию base64.
[19:50:23] <komar> Вот теперь знаю, что им доверять нельзя. Пичяль.
[19:51:04] <ermine> а при чем тут тогда nih?
[19:52:02] <ermine> если вдуматься, то всё в мире, написанное после 1990 года - nih и кальки с языка на язык программирования
[19:58:54] <komar> Ты так говоришь, как будто nih — это что-то плохое.
[20:09:15] ftrvxmtrx вышел(а) из комнаты
[20:11:14] <ermine> плохое и оскорбительное, да
[20:11:41] <komar> Ты совершенно не понимаешь суть nih'а.
[20:35:48] <gds> это как это понимать? -- http://paste.in.ua/2644/
[20:47:14] ftrvxmtrx вошёл(а) в комнату
[20:48:29] <ermine> а 1.2 ест?
[20:57:23] <ermine> есть num и есть nums
[20:57:46] <gds> 1.2 и 1,2 не ест.
[20:59:13] <ermine> попробуй с мантиссой
[21:03:11] <ermine> да, загадочно
[21:04:29] <ermine> 12 оно ест
[21:06:29] <ermine> gds: судя по mli, оно не знает float, надо ratio знать
[21:06:46] ermine не умеет ratio
[21:09:31] <ermine> # Num.num_of_string "1/2";;
- : Num.num = Num.Ratio <abstr>
[22:10:43] bLaDe вышел(а) из комнаты: Computer went to sleep
[22:42:44] <komar> А я откопал какой-то епик баг то ли в оксигене, то ли в дусе, то ли в окамле, то ли в своих поделках, теперь сижу локализовываю.
[22:48:07] <komar> Итак, есть вебсервер, который отдает странички. Одинаковые. Но раз на миллион (замучался вылавливать) он выдает:
<div class="hl_main"> — на одной странице,
<div class="hl_linehl_main"> — на следующей.
Есть какие-нибудь хитрые способы узнать, что это такое, кроме выкидывания лишнего кода с последующей проверкой, чем я сейчас занимаюсь?
[22:50:30] <komar> Такое ощущение, что или память портится, или где-то в буфер параллельно запись идет.
[22:53:05] <ermine> грепать "_line"?
[22:53:56] <ermine> хотя больше похоже на контакенацию двух классов
[22:54:13] <ermine> а у тебя нет hl_line точно?
[22:54:26] <komar> Есть.
[22:54:48] <komar> Где _line  я вижу, там ничего особенного. К тому же баг разнообразнее:
< <code class="hl_line"><span class="hl_Com"># Vim</span></code>
> <code class="hl_line"><span class="hl_Com"></span></code>
[22:55:28] <ermine> не, если это контакенация, то бага в том, что забыли пробел
[22:55:55] <komar> Э-э, можно поподробнее отсюда?
[22:56:44] <ermine> ну в html можно писать class="h_line hl_main", это список классов
[22:57:01] <komar> Не-не-не.
[22:57:04] <ermine> я не помню как в дусе пишется список строк
[22:57:15] <komar> Сервер выдает разные страницы, а должен одинаковые.
[22:57:22] <ermine> напиши список из одного елемента
[22:58:02] <komar> Так же, только без ;
[22:58:42] <ermine> ну заключи в скобки, может дусе перестанет глючить
[22:59:13] <komar> Нет, это не то. К тому же от пропажи «# Vim» не спасет.
[23:00:08] <ermine> можно еще все заменить на tyxml
[23:00:10] <komar> Вот. А hl_line у меня есть, но он висит не на div'е, а на code, если ты об этом спрашивала.
[23:00:23] <komar> Это хороший вариант, да.
[23:01:23] <ermine> я о том, что в tyxml атрибут класса требует список
[23:01:31] <komar> Блин, баг есть только там, где у меня хайлайтинг. Опять я во всем виноват, что ли?
[23:02:02] <komar> У дуси это просто строка.
[23:03:12] <ermine> кто в крайней хате, которая еще и давно перестала ремонтироваться - явно виноват
[23:03:14] <ermine> :)
[23:04:13] <ermine> лучше все же вылавливать баги в новейшем софте, чем в устаревшем
[23:04:43] ermine скомпилила очередной итерат и задумалась над следующим
[23:05:10] <komar> А из нового оксигена дусю уже выпилили?
[23:06:14] <ermine> из оксигена выкинули и eliom, не то что дусю
[23:06:33] <ermine> дусю теперь знают tyxml и вроде еще eliom
[23:06:50] <komar> Как же оксиген без елиома?
[23:06:58] <komar> Или опять модули переименовали?
[23:07:32] <ermine> нет, теперь стало больше работы по скачиванию, компиляции и установке
[23:07:44] <ermine> всё в отдельности
[23:07:53] <komar> А, ну хосспади.
[23:07:58] <komar> Это уже детали.
[23:08:13] <komar> «Выкинули» — это «более не поддерживается».
[23:30:02] ermine устрашающе смотрит на gds
[23:30:43] <ermine> gds: неужели придется из оксигена получать большой текст и перегонять его в список символов?
[23:31:10] <ermine> шоке
[23:31:52] <komar> Бага починилась запуском нативной версии.
[23:34:06] <ermine> о, есть S.of_string, так что подправим
[23:48:35] <gds> ermine: и ещё есть енумератор, который кормит почти строкой:
enum_pure_1chunk : list 'el -> enumerator 'el 'a
[23:52:09] <ermine> gds: ну вот от него в шоке!
[23:52:49] <ermine> очевидная и очередняя калька с хаскиля
[23:53:03] <ermine> подстрочник
[23:53:20] <gds> я смотрю на него и тоже слегка.  Но потому что раньше портировал полу-бездумно.  "k (Chunk c) >>% IO.return % fst"  =>  "k (Chunk c) >>% fun (i, _s) -> IO.return i", вот как надо.
[23:54:41] <gds> чую, сделаю я "grep fst *", а коммит обзову "the code is the documentation, btches!"
[23:55:49] <ermine> а что fst?
[23:56:07] <gds> ещё можно (Chunk c) заменить на (chunk_of c), но пофиг.  А остальное там ок.  Можно ещё разбить на две функции, одна будет enum_pure_1subarray.
[23:56:07] <bobry> gds: напиши еще "according to an old hacker's tradition ..."
[23:56:11] <ermine> вот % как раз бяка, и %% тоже
[23:56:19] <bobry> как у vttest'a в документации
[23:56:35] <gds> ermine: ну вот, "%" как раз где fst.
[23:57:28] <ermine> от перлизма тоже надо лечиться, а не только от кальки с хаскиля
[23:58:48] ermine метидирует над типами, чота там не компилицо...
[23:58:59] <ermine> а, Lwt.t
[23:59:04] <gds> bobry: ааа, нашёл-почитал, жгут они :)  Однако тут выбора мало, документация будет статьёй с введением, фрикциями и выведением, а статьи подобного плана уже есть.
[23:59:51] <gds> ermine: от х-изма надо лечиться, вот.
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!