Home
Objective Caml
ocaml@conference.jabber.ru
Суббота, 18 июля 2009< ^ >
f[x] установил(а) тему: Камль -- http://caml.inria.fr | Логи -- http://chatlogs.jabber.ru/ocaml@conference.jabber.ru/ | Верблюды грязи не боятся!
Конфигурация комнаты

GMT+4
[00:01:30] sevenov вошёл(а) в комнату
[00:29:00] <ygrek> что-то камлобилд не осилил собрать sulci-svn, до линковки допинался, а там не смог правильно расставить cmo
[00:30:57] <ygrek> я неудачник?
[00:32:45] <ermine> там не доточено
[00:33:19] <ermine> так что там только make запускать
[00:33:52] <ermine> это я неудачнег, после перехода на гит ocamlmakefile выкинула совсем
[00:34:47] <ygrek> ясно
[00:34:53] ermine уже не помнит, на чем там ocamlbuild затыкалось
[00:41:14] <ermine> ygrek: а с какой целью собираешь, если не секрет?
[00:41:29] <ygrek> а зачем SELECT name FROM SQLITE_MASTER WHERE type='table' AND name='%s' ?
[00:42:02] <ygrek> хочу заменить весь динамический sql на параметризированный и пропихнуть патч
[00:42:36] <ermine> а не нашла другого способа узнать есть ли таблица (еще в sqlite2)
[00:42:49] <ygrek> настоящиая цель - посмотреть как мой генератор пригодится в дикой природе, а не в рафинированной теплице
[00:42:59] <ygrek> IF NOT EXISTS там нет?
[00:43:41] <ygrek> сейчас sqlite2 уже не актуально?
[00:44:09] <ermine> ну в этом svn уже sqlite3 используется
[00:44:19] <ermine> я уже давно на sqlite2 забила
[00:44:30] <ygrek> ок
[00:45:38] <ermine> а if not exists это все же pl/gpsql имхо
[00:46:25] <ermine> pl/pgsql
[00:46:40] <ygrek> sqlite> create table if not exists z (x INT);
[00:46:54] <ermine> о
[00:47:32] <ermine> пашет?
[00:48:30] <ygrek> конечно
[00:48:48] <ermine> кста у меня там в sqlite_util.ml осталась бага в функции escape
[00:52:11] <ermine> http://chatlogs.jabber.ru/devel@conference.jabber.ru/2009/07/15.html#23:26:29.995590
[00:55:09] <ygrek> да, я это видел, собственно это меня и сподвигло :)
[00:55:15] <ygrek> escape не нужен
[01:11:52] ygrek вышел(а) из комнаты
[02:06:21] <gds> эээ. я вот знаю выражение "танчики клеить". так чо, вы на окамле sql клеите?
[02:08:00] <gds> предполагал, что переменные привязки (bind variables, placeholders) есть везде.
[04:22:19] john вошёл(а) в комнату
[05:27:21] sevenov вышел(а) из комнаты
[05:28:43] john вышел(а) из комнаты
[10:40:01] ygrek вошёл(а) в комнату
[10:46:33] ermine вышел(а) из комнаты
[10:47:14] sevenov вошёл(а) в комнату
[10:57:53] ermine вошёл(а) в комнату
[11:32:26] <ermine> gds: да вот мне тоже очень интересно, во что это выльется
[11:46:17] <ygrek> ну plugin_talkers готов -- на пробу (дольше разбирался как его с OCamlMakefile подружить)
[12:07:25] <ygrek> http://ygrek.org.ua/p/sqlgg/demo/sulci/
[12:15:48] ermine вышел(а) из комнаты
[12:31:11] ermine вошёл(а) в комнату
[12:41:36] ermine вышел(а) из комнаты
[12:42:21] ermine вошёл(а) в комнату
[12:43:41] <ygrek> протестить не получается т.к. sulci при старте валится..
Raised at file "list.ml", line 169, characters 16-25
Called from file "muc.ml", line 62, characters 10-73
Called from file "muc.ml", line 332, characters 24-53
Called from file "hooks.ml", line 173, characters 4-30
Called from file "sulci.ml", line 92, characters 8-14
18/07/2009 11:40:09 sulci.ml: Not_found
18/07/2009 11:40:09 Probably it is a bug, please send me a bugreport
[12:47:22] sulci_sqlgg вошёл(а) в комнату
[12:47:28] <ygrek> о
[12:49:02] <ygrek> re
[12:49:03] <ermine> а шо такой длинный трэкбэк?
[12:49:11] <ygrek> talkers
[12:49:11] <sulci_sqlgg> ygrek: Нет таких болтунов.
[12:49:19] <ygrek> talkers %
[12:49:19] <sulci_sqlgg> ygrek: Нет таких болтунов.
[12:49:47] <ermine> talkers
[12:49:48] <sulci_sqlgg> ermine: Нет таких болтунов.
[12:49:51] <ygrek> ermine: какой был :)
[12:50:31] <ermine> а как строишь такой лог, кстати? он выглядит привлекательнее моего
[12:50:57] <ermine> talkers ermine
[12:50:57] <sulci_sqlgg> ermine: Нет таких болтунов.
[12:51:12] <ermine> получает пустой список от sql
[12:51:51] <ygrek> да, я сам SELECT забыл
[12:52:04] sulci_sqlgg вышел(а) из комнаты
[12:52:24] <ygrek> Printexc.print_backtrace stderr
[12:52:28] <ygrek> это в 3.11 появилось
[12:52:56] <ermine> хм
[12:53:06] <ygrek> ну и собирать с дебажной инфой
[12:54:08] <ermine> а оно в нативе работает?
[12:54:33] <ygrek> угу
[12:54:50] <ermine> замечательно
[12:55:26] <ermine> а то вон то моё not found - это на самом верху словило экспшн, а где оно появилось, поди догадайся
[12:56:32] sulci_sqlgg вошёл(а) в комнату
[12:56:43] <ygrek> talkers
[12:56:44] <sulci_sqlgg> Болтун Слов /me Фраз Эфф.
ermine 20 0 3 6.7
ygrek 10 0 4 2.5
[12:57:01] <ygrek> q
[12:57:04] <ygrek> talkers
[12:57:04] <sulci_sqlgg> Болтун Слов /me Фраз Эфф.
ermine 20 0 3 6.7
ygrek 10 0 4 2.5
[12:57:33] sulci_sqlgg вышел(а) из комнаты
[12:57:43] sulci_sqlgg вошёл(а) в комнату
[12:57:45] <ygrek> q
[12:57:47] <ygrek> talkers
[12:57:48] <sulci_sqlgg> Болтун Слов /me Фраз Эфф.
ermine 20 0 3 6.7
ygrek 11 0 5 2.2
[12:57:49] <ygrek> q
[12:57:51] <ygrek> talkers
[12:57:51] <sulci_sqlgg> Болтун Слов /me Фраз Эфф.
ermine 20 0 3 6.7
ygrek 12 0 6 2
[12:57:57] <ygrek> работает
[12:58:07] <ermine> а почему там escape не нужно?
[12:58:28] <ygrek> потому что это prepared statement
[12:58:44] <ermine> хм
[12:59:25] <ermine> ты патч там уже обновил? :)
[12:59:26] <ygrek> sqlite сам квотит
[12:59:34] <ygrek> в этом и цимес
[12:59:53] <ygrek> момент
[13:02:37] <ermine> хм, для каждого плугина рисовать module
[13:03:13] <ygrek> можно всё в один сложить
[13:03:25] <ygrek> вопрос в том как будет удобней
[13:03:59] <ermine> ага, я разберусь, спасибо, осталось добыто чудо-пупер sqlgg
[13:04:12] <ermine> а какая у него лицензия?
[13:05:31] <ygrek> ахм. пока никакой :) я думаю. можно просто взять сгенеренные файлы и положить в репо (я так на работе делаю чтобы не таскать зависимости)
[13:06:01] <gds> так что, "миr снова спасён"? :]
[13:06:11] <ygrek> наверное bsd
[13:07:28] <ygrek> gds: в процессе, миr сделал всё чтобы его спасти было очень сложно :)
[13:08:49] <ermine> gds: ты еще под вяндой не пробовал его собирать?
[13:09:44] <gds> ermine: вчера попробовал, в полубессознательном состоянии. какая-то фигня с cryptokit, плюнул, пошёл спать. Сегодня продолжу.
[13:11:04] <ermine> там есть свои сишние биндинги кажись
[13:11:30] <ermine> если проблема в этом
[13:11:51] <gds> свои -- в смысле?
[13:12:12] <ermine> ну он не пюре камло код
[13:13:52] <gds> ога, это видел. В общем, как продолжу, отпишу сразу.
[13:21:37] sulci_sqlgg вышел(а) из комнаты
[13:23:19] sulci_sqlgg вошёл(а) в комнату
[13:23:44] sulci_sqlgg вышел(а) из комнаты
[13:24:33] sulci_sqlgg вошёл(а) в комнату
[13:26:41] <ygrek> патч обновил
[13:27:05] ermine скачала
[13:28:45] <ermine> а дай плиз ссылку на sqlgg :)
[13:28:57] <ermine> в гугле какая-то бредятина
[13:29:16] <ermine> а, под пунктом 5
[13:29:52] <ygrek> на той странице где патч есть ссылка :)
[13:30:47] <ermine> действительно
[13:34:10] sulci_sqlgg вышел(а) из комнаты
[13:41:18] <ermine> ygrek: а почему параметр через @, а не $?
[13:42:23] <gds> во всяких mysql тоже @. в оракле -- :. каждый удовлетворяет свои потребности как он хочет, видимо так :)
[13:56:42] sceptic вышел(а) из комнаты
[14:29:43] ermine хачит макефиле deriving'a
[14:30:26] <ermine> аффтар deriving - латентный линуксоид :)
[14:31:02] <gds> ничего, он умрёт.
[14:33:53] <ermine> этого мало
[14:33:56] <ermine> Error: Error while linking /usr/local/lib/ocaml/camlp4/camlp4lib.cma(Camlp4):
Reference to undefined global `Dynlink'
[14:34:47] <ermine> жалко, камлобилда оно не использует
[14:42:23] gds вышел(а) из комнаты
[14:43:00] <ermine> а теперь куда deriving девать? там инсталла нэту
[14:56:25] <ermine> File "sql.ml", line 5, characters 2-86:
Error: Unbound module Show
[14:56:35] <ermine> ygrek: а шойта это?
[14:58:11] <ermine> а, все тот же deriving
[14:58:51] sceptic вошёл(а) в комнату
[15:04:57] <ermine> я сломалась на
File "_none_", line 1, characters 0-1:
Error: Files listMore.cmo
and /usr/local/lib/ocaml/site-lib/deriving/deriving.cma(Enum)
make inconsistent assumptions over interface Enum
[15:13:19] ygrek вышел(а) из комнаты
[15:13:34] ygrek вошёл(а) в комнату
[15:14:43] <ygrek> сорри, уходил
[15:15:00] <ygrek> Enum из deriving'а надо убрать
[15:15:05] <ygrek> конфликт с extlib
[15:20:12] <ermine> а
[15:22:00] <ygrek> там этот deriving почти не используется, для отладки
[15:23:59] <ermine> выкинула только интерфейсы enum, та же ругалка, видимо надо перекомиливать deriving
[15:24:28] <ermine> ну оно требует deriving
[15:30:23] gds вошёл(а) в комнату
[15:53:30] abiogenesis вошёл(а) в комнату
[16:02:12] <ygrek> > а почему параметр через @, а не $?
как параметры задаются на входе - мой произвол - я выбрал как в sqlite
а на выходе - как требует (враппер) БД - пока есть ? (для jdbc) и @ для всего остального
[16:03:42] <ygrek> > а теперь куда deriving девать? там инсталла нэту
бинарник в PATH, а либу можно в myocamlbuild.config :
deriving=/home/ygrek/work/contrib/deriving/deriving-0.1.1-ocaml-3.11.0/lib/
[16:06:33] <ermine> ну это-то ладно
[16:08:15] ermine налила себе в стакан кока-колы и обнаружила, что это квас
[16:13:27] <abiogenesis> подскажите, как получить список целых чисел от a до b. то решение, которое в Developing applications with Objective CAML, не работает уже для b = 2000000
[16:15:24] <ermine> а зачем список?
[16:15:57] <ermine> лучше использовать stream от функции с каунтером
[16:17:18] <ygrek> let make a b = let rec loop acc = function 0 -> acc | x -> loop (x+a-1::acc) (x-1) in loop b;;
[16:17:48] <ermine> нудно
[16:17:50] <ygrek> а на практике конечно лучше его не создавать вообще
[16:18:22] <ermine> ygrek: как все же скампилить sqlgg? :)
[16:18:38] <ygrek> на чём ты остановилась? ;)
[16:18:41] <ermine> я похоже сходу не уговорю deriving увидеть extlib
[16:18:56] <ermine> ну на enum
[16:19:22] <ygrek> deriving/lib/Makefile
[16:19:27] <ermine> если конечно enum в deriving и extlib взаимозаменяемы
[16:19:50] <ygrek> удали строку
enum.ml enum.mli \
[16:19:56] <ygrek> и пересобери
[16:20:06] <ygrek> они не заменяемы -- это разные модули с одним названием
[16:20:07] <ermine> этого мало
[16:20:10] <ygrek> давний косяк
[16:20:14] <ygrek> этого достаточно
[16:20:31] <ygrek> после этого всё ок
[16:21:30] <ermine> хм, и правда
[16:24:04] <ermine> теперь sqlgg собрался, как ни странно
[16:24:40] <ygrek> пинать автора deriving который явно забил --> http://code.google.com/p/deriving/issues/detail?id=1
[16:25:26] <ermine> та ну иво
[16:27:31] <ermine> интересный метод генерации version
[16:28:31] <ygrek> чтобы не зависеть от внешних утилит
[16:29:18] <ermine> ну я тут недавно жаловалась что приходится вручную набивать дату в version
[16:29:31] <sceptic> юзай git descrbe
[16:29:33] <sceptic> describe
[16:30:13] <ygrek> о
[16:30:21] <ygrek> оно само таги смотрит
[16:30:23] <ygrek> красота
[16:30:30] <sceptic> ты про describe?
[16:30:36] <ermine> ану это класть тэг на каждый чих
[16:30:46] <sceptic> Почему на кажый чих
[16:31:01] <sceptic> ты попробуй ;) она сама прафиксы от коммитов добавлят
[16:31:04] <ermine> а как часто?
[16:31:06] sceptic вышел(а) из комнаты
[16:31:18] <ermine> а у ygrek это git rev-parse HEAD
[16:31:28] <ermine> там дикая строчка выдается
[16:31:38] <ermine> как и все имена коммитов
[16:32:47] sceptic вошёл(а) в комнату
[16:33:02] <sceptic> 0.1-15-gbc0d например так
[16:33:22] <ygrek> 0.2.2-61-gfe16aab
[16:33:23] <sceptic> что означает, что это 15 коммит после того как был воткнут тэг.
[16:33:30] <ygrek> угу, очень удобно получается
[16:33:33] <ygrek> буду использовать
[16:34:32] <ermine> а теперь прикинь что sulci выдает такую же строчку в версии клиента
[16:34:50] <ermine> ты про describe?
[16:34:51] <sceptic> я вот такую штуку для autotools использую. очень удобно получается: m4_define([VERSION_NUMBER], m4_esyscmd([git describe --abbrev=4 | tr -d '\n']))
[16:35:52] <sceptic> ну делай так: git describe --abbrev=0
[16:36:04] <sceptic> правда в этом смысла мало. имхо
[16:36:40] <ygrek> ermine: так по релизнутым версиям оно будет давать только имя тега (ты же ставишь теги на релизы, не так ли?)
[16:38:16] <ermine> ага
[16:47:33] <ygrek> ermine: insert_or_update можно во многих случаях переложить на базу
[16:47:38] <ygrek> INSERT OR REPLACE
[16:47:53] <ygrek> и UNIQUE INDEX по нужным колонкам
[16:55:31] <ermine> а когда последнее нужно?
[16:57:07] <ygrek> критерий OR REPLACE это нарушение constraint
[16:57:16] <ygrek> этот unique index и есть constraint
[16:58:10] <ygrek> т.е. для plugin_seen например
CREATE UNIQUE INDEX IF NOT EXISTS gr_index ON greeting (jid, room);
INSERT OR REPLACE INTO greeting (jid, room, msg) VALUES;
и всё
[16:58:59] <ermine> шикарно
[17:00:14] <ygrek> только это смена схемы таблицы - если надо сохранить предыдущий таблицы то им надо дропнуть и пересоздать индекс
[17:01:53] <ermine> ну это уже не страшным выглядит
[17:03:55] <ermine> только я пока не займусь sql, у меня потроха сульци и так уже разворочены и выворочены
[17:04:59] <ygrek> ну я сейчас ещё патч нарисую :)
[17:08:12] <ermine> да, там схема работы с sqlite из-за моих экзекуций не должна поменяться
[17:10:36] <ermine> больше всего проблем доставляет плагин маркова, это самая тормозная часть - там для поиска нужных пар слов фраз надо перебирать записи таблицы
[17:13:01] DiGiTAL_CuRSe вошёл(а) в комнату
[17:15:22] DiGiTAL_CuRSe вышел(а) из комнаты
[17:16:52] <ygrek> посмотрю, prepared stmt'ы могут положительно влиять на скорость
[17:19:03] DiGiTAL_CuRSe вошёл(а) в комнату
[17:19:07] DiGiTAL_CuRSe вышел(а) из комнаты
[17:19:18] DiGiTAL_CuRSe вошёл(а) в комнату
[17:29:07] <gds> "insert or replace" -- штука нестандартная для sql.
[17:30:55] <ygrek> угу
[17:30:58] <ygrek> но у нас sqlite
[17:31:06] <ygrek> а на стандарте вообще далеко не уедешь
[17:31:20] <ygrek> даже autoincrement key не создашь
[17:34:36] <gds> а вот вопросами ddl лучше не заниматься библиотеке, работающей с sql. Самое бОльшее (и самое адекватное, имхо) -- для ddl использовать функцию, выполняющую данный sql-оператор.
[17:35:30] <gds> иначе от разных видов субд будет только натёртая попа, ад, страдания и телепузики.
[17:38:35] <ygrek> не понял
[17:39:07] <ygrek> про поддержку разных субд -- согласен
[17:42:05] <gds> sql делится (условно) на запросы, data manipulation language (insert/update/delete), data definition language (alter table, create or replace type) и просто разные управляющие штуки (set a=@b, alter session, commit).
запросы и dml -- разумно поддерживать в библиотеке, занимающейся sql, всяко улучшать и типизировать средствами языка. с ddl и прочими -- стандартизировать что-либо смысла никакого. поэтому и специальным образом поддерживать особо смысла нет.
[17:43:06] <gds> (а не-"специальным образом" -- просто выполнение любого sql-оператора, который кушает бд)
[17:44:22] <ermine> в pgocaml кроме препарей есть модульность нетворка, в смысле можно подменивать функции работы с сетью
[17:44:39] <ermine> чтобы менять на lwt
[17:44:56] <ermine> я все же хочу поменять в сульце треды на lwt, когда их допилят
[17:45:17] <ermine> как это сочетать с кодом из sqlgg?
[17:46:33] <ygrek> gds: мне для типизации dml нужен ddl, поэтому я его и парсю
[17:46:53] <gds> собственно, почему люди при выборе между модной типизированной штукой, умеющей автоматически и корректно делать всякие штуки с бд, и между штукой, которая умеет простой sql, выбирают последнее -- потому что бд меняются, потому что необходимость надеяться на прослойку. недальновидное решение, но всё же.
[17:47:06] <ygrek> ermine: что именно? lwt? а ты разве используешь pgocaml в sulci?
[17:47:50] <ermine> ygrek: мне понравилась технология в pgocaml
[17:47:57] <ygrek> gds: думаю дело не в этом, а в том что модные штуки скрывают sql и многие вещи делают не эффективно
[17:48:00] <ermine> я его в сульце не использую
[17:48:27] <ermine> мысль в том, чтобы засунуть запрос к базе в lwt-тред
[17:48:30] <gds> ygrek: тебе-то -- понятно, что ddl нужен для dml, парсить всё что угодно нужно. Но я твой комментарий про автоинкремент понял в контексте "надо создавать такую таблицу", т.е. ошибся.
[17:48:52] <ygrek> насчёт БД меняются.. это имхо 1% случаев
[17:49:02] <ygrek> часто ли в проекте меняют БД?
[17:49:04] <gds> ermine: про lwt-треды -- будешь страдать :) Этим и плохи lwt всякие.
[17:49:07] <ermine> а это надо чоб "сокет" db был неблокируемый
[17:49:34] <gds> ygrek: в проекте -- почти никогда бд не меняются. Но среди пользователей библиотеки есть люди, использующие разные бд.
[17:49:46] <ermine> gds: ну так или иначе страдать
[17:50:11] <gds> конкретная бд меняется. в sqlite какой-нибудь в следующей версии добавят/изменят синтаксис (или чего похуже), я про это.
[17:51:09] <ygrek> (не успеваю писать)
gds: да, есть такое, и от этого никуда не денешься
[17:51:24] <ygrek> эволюция
[17:51:40] <ygrek> генератор тоже может эволюционировать
[17:51:41] <ermine> gds: камло тоже замучало при переходе от версии к версии
[17:51:50] <ermine> чо ты про какую-то бд
[17:52:14] <ygrek> т.е. сейчас я например для каждого нового проекта обнаруживаю что что-то не поддерживается - дописываю
[17:52:18] <gds> ermine: рассмотри вариантец. (хотел его реализовать для своей lwt, которую задумал лет 5 назад, причём кроссплатформенно и эффективно.) сишный хелпер, который обрабатывает очередь запросов (опционально в разных тредах, ну или средствами библиотеки *sql'я. Для lwt будет ситуация сильно не хуже.
[17:53:29] <ygrek> ermine: модуль который генерит sqlgg параметризуется модулем для доступа к БД. Специально так. Не знаю насколько можно будет lwt туда вкрутить.
[17:55:42] <ermine> ygrek: удобстава зависят от того, какой выходной тип у функций Ж)
[17:55:51] <ygrek> вот именно это меня и смущает :(
[17:56:13] <ermine> хотя как панацея используется мутабельности
[17:56:46] <ygrek> Будет use-case, будем посмотреть.
[17:57:03] <ermine> ага
[17:57:14] <ermine> у тебя под рукой есть lwt из darcs?
[17:57:25] <ermine> все же надо проверить "мою" багу
[17:59:05] <ermine> ваще ни у кого не стоит lwt из darcs?
[17:59:11] <ygrek> неа
[17:59:14] <ermine> хотя наверное пофиг какой версии
[17:59:36] <ermine> ygrek: никакого?
[17:59:49] <ygrek> давай darcs clone команду
[17:59:52] <ygrek> и код
[18:00:30] <ermine> ocsigen.org/darcs/lwt
[18:02:29] <ermine> код yo.jabber.ru/~ermine/ltest.ml
[18:04:25] <ygrek> мееееедленный этот darcs
[18:04:55] <ermine> лучше б они перешли на гит
[18:05:39] <ygrek> error: sys/signalfd.h: No such file or directory
[18:05:42] <ygrek> ы?
[18:06:08] <ermine> а ты на какой операционке? :)
[18:06:22] <ermine> это же линуксное г-но
[18:06:56] <ygrek> линукс
[18:07:01] <ermine> какой?
[18:07:06] <ermine> ядро
[18:07:22] <ygrek> это libc6 обновлять надо
[18:07:43] <ygrek> debian stable
[18:07:49] <ygrek> это мне влом
[18:07:52] <ermine> впрочем там можно какой-нить HAVE_SIGNALFD_H, без signalfd его можно скомпилить
[18:08:19] abiogenesis вышел(а) из комнаты
[18:08:53] <ermine> посмотри в сишный код в начало
[18:09:19] <ygrek> вижу, но у меня он нигде и не задефайнен
[18:09:42] <ygrek> а, враги, они его из myocamlbuild.ml подставляют
[18:09:54] <ermine> а man signalfd есть?
[18:10:26] <ygrek> есть..
[18:10:36] <ygrek> короче я этот автодетект вырезал
[18:11:45] <ermine> у меня на фре этот автодетект правильно работает :)
[18:13:48] <ygrek> react?
[18:13:56] <ygrek> требует
[18:14:23] <ermine> ну такой же ужас как deriving
[18:14:40] <ygrek> аргх
[18:17:01] <ermine> та в гугле находится и быстро собирается
[18:18:25] <ygrek> так, мне пора бежать уже. вечером проверю
[18:19:01] <ermine> оке
[19:58:05] john вошёл(а) в комнату
[20:45:09] john вышел(а) из комнаты
[22:21:37] ygrek вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!