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

GMT+4
[01:29:50] Ой вошёл(а) в комнату
[01:31:01] Ой вышел(а) из комнаты: QIP Infium: Спокойное общение
[04:20:49] daapp вошёл(а) в комнату
[08:17:20] sevenov вышел(а) из комнаты: Replaced by new connection
[08:17:22] sevenov вошёл(а) в комнату
[08:18:42] john вышел(а) из комнаты
[08:19:50] john вошёл(а) в комнату
[08:27:40] gds вышел(а) из комнаты
[08:59:33] gds вошёл(а) в комнату
[09:06:21] iNode вошёл(а) в комнату
[09:59:20] gds вышел(а) из комнаты
[09:59:30] gds вошёл(а) в комнату
[10:22:36] f[x] вошёл(а) в комнату
[10:24:18] <f[x]> ой, генератор кода по xml схеме?
[10:25:01] Typhon вошёл(а) в комнату
[10:28:46] f[x] обкладывается генераторами со всех сторон - скоро весь код будет машинка сама писать :)
[10:40:46] <gds> f[x]: как понял, там речь про генератор xml парсера-генератора по asn.1-подобной схеме.
[10:45:12] <f[x]> ну asn подобная схема для xml это dtd/xsd/relaxng
[10:47:38] Mon вошёл(а) в комнату
[10:50:01] Mon вышел(а) из комнаты
[10:50:11] Mon вошёл(а) в комнату
[10:54:53] Mon вышел(а) из комнаты
[10:55:49] <f[x]> на удивление для камля ничего подобного нету (?)
[10:57:02] Mon вошёл(а) в комнату
[11:03:50] <gds> всякие ber есть, вручную чото пишут.
[11:04:19] <f[x]> не, не то
[11:04:29] <f[x]> он поймёт только то что сам сгенерил
[11:05:04] <f[x]> а взять схему которая описывает произвольный xml и сгенерить код который валидную xml преобразует в камлевые данные
[11:05:11] <f[x]> так же как json-static например
[11:07:07] <f[x]> ermine: можно параметры в sqlite использовать чтобы такого <Bad SQL: SELECT counter FROM words WHERE word1='' AND word2='''проверка''''> не было. Я бы заимплементил если б знал где сульцевое репо.. (У меня естественно эгоистичная цель потестить генератор)
[11:14:42] <gds> > валидную xml преобразует в камлевые данные
всякие ocamlduce -- не то?
[11:17:54] <gds> f[x]: а что именно хочешь заимплементить?
[11:17:59] <f[x]> не знаю, они более мощные видимо
[11:18:15] <f[x]> у них xml как first-class value/type
[11:19:15] <f[x]> использование параметров для данных в sql query, а не построение sql в рантайме
[12:30:27] <ermine> f[x]: pgocaml рулит
[12:30:46] <ermine> но в sqlite наверное нету prepare/query
[12:30:51] <f[x]> есть
[12:30:54] <f[x]> и очень удобные
[12:31:01] <f[x]> по сравнению с тем же postgres
[12:31:17] <gds> ermine: pgocaml требует подсоединения к базе и наличия схемы, в этом его серьёзный недостаток.
[12:31:23] <f[x]> pgocaml конечно круто, но завязано на pg
[12:32:24] <ermine> gds: а мне удобно - еще на этапе компиляции ругаться на неверный sql
[12:32:38] <f[x]> а у меня генератор не завязанный на бд
[12:32:53] <ermine> gds: в противном случае это ошибка в рантайме, про которую ты вчера плевался :)
[12:34:04] <ermine> у тебя - это где?
[12:34:48] ermine как обычно лень перечитывать хистори выше
[12:35:15] <f[x]> http://ygrek.org.ua/p/sqlgg
[12:35:44] <f[x]> но он ещё из стадии "works for me" не вышел
[12:35:49] <f[x]> а может и не выйдет
[12:36:56] <ermine> там у тебя препроцессор небось и не используется, с подстановкой параметров и верификацией типов
[12:38:15] <f[x]> препроцессор нет, но в планах прикрутить, а подстановка параметров и проверка типов это как раз основной point ради чего всё затевалось
[12:39:10] <ermine> это все же имело бы смысл если бы таргет умеет prepare/query
[12:39:34] <gds> реляционка и фп/императивщина/ооп -- разные штуки. думал срастить их ещё давно, но убеждаюсь, что реляционку со стороны программы правильнее рассматривать как штуку, сигнатурой которой является текст на sql, а имплементацией -- непосредственно бд.
ещё можно почитать http://en.wikipedia.org/wiki/Object-relational_impedance_mismatch
[12:39:35] <ermine> все серверные бд умеют, а файловые - хз
[12:40:05] <f[x]> файловые это кто (кроме sqlite)?
[12:40:42] <sevenov> Хех, тут на erlang@cjr только недавно прекратили срать на тему orm, баз данных и ооп )
[12:41:08] <ermine> не знаю, наверное других можно не брать в расчет как не сумевших вылезти на гребень информационных технологий, чтобы их заметили
[12:41:09] <f[x]> gds: это не ORM
[12:41:27] <f[x]> на входе - обычный sql
[12:42:44] <f[x]> на выходе код который принимает фиксированное число параметров для подстановки в query, выполняет query и возвращает результат в виде итерации по туплам/рекордам (статически типизированным)
[12:43:28] <gds> f[x]: а что делать с внешними (вне проги) изменениями структуры бд?
[12:43:52] <f[x]> схема всех участвующих таблиц нужна
[12:44:57] <f[x]> я просто использую описание таблиц (CREATE и пачка ALTER'ов) сдампленные из mysql'я (они и так нужны в проекте для deployment'а)
[12:46:30] <ermine> легкая задача?
[12:46:42] <ermine> пропарсить create
[12:46:54] <f[x]> гыгы :)
[12:47:07] <f[x]> если бы дело ограничивалось стандартом - то да
[12:47:48] <f[x]> ну правда и так токенов слишком много, неприятно
[12:48:25] <f[x]> а учитывая что каждая БД норовит простейшие операции делать по разному..
[12:48:51] <ermine> поэтому уж лучше pgocaml
[12:48:55] <f[x]> поэтому и works for me что я парсю то что мне надо
[12:49:47] <ermine> а вот если в описании типа участвует custom type - то вообще вилы
[12:49:51] <f[x]> ermine: кому лучше
[12:49:58] <f[x]> что такое custom type?
[12:50:22] <ermine> create type aaa (...)
[12:50:42] <f[x]> ну я его тоже могу распарсить :)
[12:50:47] <f[x]> (в принципе могу)
[12:51:59] <ermine> та наверное можно все распарсить, только слишком много крови надо на поддержку кучи реализаций - pg, mysql, etc, если по уму делать
[12:52:48] <ermine> а у тебя как делается вставка параметров? не через $var?
[12:52:59] <ermine> хотя при отсутствии препроцессора
[12:53:15] <ermine> sprintf?
[12:53:23] <f[x]> ermine: а мне не надо строго делать поддержку каждого типа
[12:53:37] <f[x]> мне достаточно объединение синтаксиса всех БД
[12:54:06] <f[x]> какой нафиг sprintf?
[12:54:17] <f[x]> параметры запроса
[12:54:18] <ermine> а как?
[12:54:25] <f[x]> SELECT * FROM x WHERE z=@id;
[12:54:46] <ermine> и чем подставляешь?
[12:55:02] <ermine> через ^?
[12:56:03] <f[x]> http://sqlite.org/lang_expr.html#varparam
[13:04:49] ermine проскроллила в поисках "окончательного" кода
[13:05:33] <f[x]> ты в курсе что такое параметры prepared запроса?
[13:06:36] <ermine> ну это в prepare
[13:06:57] <f[x]> ну так это оно и есть
[13:07:12] <ermine> строку парсит сам pg или какая еще бд
[13:07:41] <ermine> у тебя же ни prepare, ни препроцессора же?
[13:07:59] <f[x]> я думаю я не понимаю твою терминологию
[13:08:19] <f[x]> препроцессор - ты имеешь ввиду camlp4?
[13:08:29] <f[x]> у меня его нет
[13:08:53] <f[x]> я сам себе препроцессор (sql -> caml/c#/etc)
[13:09:48] <ermine> я вот и спросила у тебя, как ты склеиваешь строки
[13:09:58] <f[x]> я ничего не склеиваю
[13:10:07] <f[x]> prepare - это что? SQL PREPARE? в явном виде я его не использую. Большинство (все) api предоставляют функции stmt=prepare(sql); bind(stmt,param1,valu1); execute(stmt)
[13:10:55] <ermine> мы наверное про эмуляцию верхней части sql prepare
[13:11:12] <f[x]> не понял
[13:12:45] <f[x]> http://sqlite.org/c3ref/stmt.html
[13:13:01] <f[x]> такое же есть и в mysql/pg/sqlserver/etc
[13:14:42] <ermine> недавно в Caml Weekly News я видела новость про объекты в sqlite
[13:32:07] sevenov вышел(а) из комнаты
[13:59:39] john вышел(а) из комнаты
[14:09:15] sevenov вошёл(а) в комнату
[14:11:20] daapp вышел(а) из комнаты
[14:12:22] <sevenov> хммм. Странное твариться с сульцей. В конфе он не видит jid а-ля room@server/nick
[14:12:27] <sevenov> *творится
[14:13:28] <sceptic> ermine: А как скоро можно будет новую sulci попробовать?
[14:16:31] <ermine> хз :)
[14:17:36] sevenov вышел(а) из комнаты: Replaced by new connection
[14:17:37] sevenov вошёл(а) в комнату
[14:21:43] <sevenov> Агрх!
[14:21:45] <sevenov> let jid_s =
match item.jid with
| None -> ""
| Some j -> string_of_jid j
in
[14:22:01] <sevenov> Вот почему item.jid -- None ?
[14:22:04] <sevenov> в muc
[14:23:13] <ermine> учи xmpp
[14:23:39] <ermine> ты видишь мой нативный джид?
[14:34:41] <sevenov> ermine, неа, я вижу только room jid
[14:34:57] <sevenov> есть же bare jid, full jid и room jid
[14:35:09] <sevenov> вот где в сульце room jid? )
[14:35:34] <sevenov> http://xmpp.org/extensions/xep-0045.html#terms судя по xep'у
[14:39:45] <ermine> в from в аргументах функции
[14:40:24] <ermine> а эта функция, что выше ты привел - ищет нативный джид участника
[14:40:41] <sevenov> ну я так и понял, да.
[14:40:51] <sevenov> ага, спасибо
[15:36:01] <f[x]> кто-нмбудь ExtLib.IO.from_in_channel использует?
[15:41:07] <ermine> а что там особенного?
[15:41:26] <ermine> а вот кто-нибудь использует Lwt_chan.open_connection?
[15:42:03] <ermine> он у меня валится при коннектах на удаленные сервера
[15:45:51] <f[x]> имхо там бага
[15:46:17] <f[x]> по спеке объект возвращает End_of_file, а IO ловит No_more_input
[15:46:58] <f[x]> с ocamlnet'овским in_obj_channel не получается использовать
[15:49:30] <ermine> у меня с ocamlnet скорее чаще возникают ситуации неловимых экспшнов
[15:50:27] <f[x]> я fcgi использую -- всё ок
[15:51:05] <ermine> а пчу не ocsigen? :)
[15:52:11] <gds> кстати, в ocsigen уже научились удобным образом разграничивать работу программиста и верстальщика?
[15:53:32] <ermine> ты про css?
[15:53:46] <ermine> или форматирование через таблицы?
[15:54:07] <ermine> второе уже отживает свой век
[15:54:17] <f[x]> ermine: постепенно, изначально я это на плюсах должен был писать :)
[15:54:35] ermine и сама не очень знает, как нонче верстают в продвинудых домах
[15:55:55] <gds> я про то, что выше уровнем, чем css (не шрифты, не цвета). и тоже не знаю, как верстают культурные люди.
[15:57:35] <ermine> точно не таблицами
[16:01:14] <gds> верю. Однако, если бы я делал какую-нибудь штуку для себя, то таблицами оформил бы.
Тем не менее, вопрос остаётся. Та html, которую получает браузер, явно содержит не просто переменные программы, перечисленные в определённом порядке и с указаниями классов css. И эту html надо как-то генерировать. Можно из ocsigen алгебраическими типами данных, не спорю, но вопрос о разделении работы таки остаётся.
[16:03:11] <ermine> gds: я пользую в основном elinks и замечаю что он раскладывает объекты на странице иначе чем firefox, а это из-за подхода к css
[16:11:19] <ermine> точнее elinks никак не смотрит в css
[16:13:03] <f[x]> :)
[16:14:51] ermine почесала мозги (не только свои) и пошла имплементять то, о чем вчера тут говорилось
[16:16:29] <gds> апи на sum types?
[16:17:37] <ermine> поменьше sum, поменьше!
[16:18:36] <ermine> а то match строить в виде
match a with
| A -> ага, обработать
| B | C | D | F | G | ....... -> raise Error
[17:31:15] gds вышел(а) из комнаты
[17:42:40] Typhon вышел(а) из комнаты: Replaced by new connection
[17:42:41] Typhon вошёл(а) в комнату
[17:48:32] iNode вышел(а) из комнаты
[18:15:40] Typhon вышел(а) из комнаты
[18:21:32] john вошёл(а) в комнату
[18:39:41] f[x] вышел(а) из комнаты: Computer went to sleep
[19:21:41] john вышел(а) из комнаты: Replaced by new connection
[19:21:42] john вошёл(а) в комнату
[19:36:21] <ermine> от сумы не уйти
[19:37:26] sceptic вышел(а) из комнаты: Replaced by new connection
[19:37:30] sceptic вошёл(а) в комнату
[20:34:20] john вышел(а) из комнаты
[20:34:23] john вошёл(а) в комнату
[20:39:50] sevenov вышел(а) из комнаты
[20:41:30] sevenov вошёл(а) в комнату
[20:46:10] john вышел(а) из комнаты
[20:52:45] sevenov вышел(а) из комнаты: Replaced by new connection
[20:52:46] sevenov вошёл(а) в комнату
[21:00:14] sevenov вышел(а) из комнаты: Replaced by new connection
[21:03:31] sevenov вошёл(а) в комнату
[21:05:07] gds вошёл(а) в комнату
[21:41:00] sevenov вышел(а) из комнаты
[21:41:29] sevenov вошёл(а) в комнату
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!