ErlaNGinE

13/12/2009

Обновление тестового сервера

Filed under: Uncategorized — dmi @ 01:53

Неожиданно обнаружил, что на тестовом сервере не работает поиск/редактор записей. Накатил на него обновления за последние пол-года. Их было не особо много, но поменялись некоторые внутренние механизмы.

Внешне:

  • Теперь можно посмотреть на работу шаблонов (первый тип записи “Шаблон”).
  • Поля и значения можно перетаскивать Drag-n-Drop.
  • Кроме того, ищет по имени поля или по паре поле/значение. Можно попробовать “Тип/Запись” или “Место/Санкт-Петербург”

Внутри:

  • Загрузка частей интерфейса единым запросом (chunks).
  • Инициализация CouchDB через CouchUp.

P.S. Хорошая для меня новость: код совместим с CouchDB 0.10, который можно брать прямо из поставки Debian Squeeze.

10/09/2009

CouchUp: из файловой системы — в CouchDB

Filed under: CouchDb, Erlang — dmi @ 22:54

Увы, проект ErlaNGinE решил немного отлежаться на полке :-)
Частично тому виной моя новая работа, частично — необходимость очередного пересмотра концепций (хи-хи).

Однако, недавно заглянув в исходники, я обнаружил, что последним коммитом была одна общеполезная штуковина, о которой хочу здесь рассказать:

При создании базы CouchDB мне понадобилось в map-скриптах парсить контент несколькими сложными способами. Для этого я написал небольшую библиотеку парсеров, которую требовалось включать в код скриптов. Соответственно, при ее обновлении требовалось обновлять и скрипты. (more…)

14/04/2009

CouchDB и UTF-8 в ответах сервера

Filed under: CouchDb — dmi @ 11:14

Я внес в dev@couchdb.apache.org предложение о кодировании Unicode в ответах сервера CouchDB в формате UTF-8 вместо \uXXXX, используя новую возможность mochiweb/mochijson2.

Ниже ответ Chris Anderson на мое предложение.

Если кто-нибудь имеет полезные мысли по заданным вопросам, пожалуйста сообщите :-)
(сюда, или прямо в рассылку)

(more…)

CouchDB revised

Filed under: CouchDb — dmi @ 01:13

ErlaNGinE окончательно переполз на CouchDB 0.9. Последним сдался демонстрационный сервер.

Хочется заметить, что упоминавшиеся недостатки старой версии, в новой, так или иначе, устранились:

  • аттачи больше не теряются при модификации основного документа,
  • map-reduce, при необходимости, может быть вынесен на отдельный сервер и там распараллелен методом “на коленке” ;) — сдается мне, это было и в 0.8.x, просто я недочитал… :)
  • кодирование utf в формат \uXXXX в ответах сервера я победил самолично (остлось протолкнуть патчик разработчикам CouchDB)

Обратите внимание, что:

  • при преходе к 0.9 изменился формат базы данных. Предлагают конвертироваться питон-скриптами.
  • изменилось место хранения view: /db/_design/DESIGN/_view/VIEW

Попутно отмечу, что  недрах ErlaNGinE работает модифицированный ECouch. Из вкусностей:

  • недоделанный rfc4627.erl заменен на engejson.erl — бинарный парсинг, нормальный юникод и укороченная запись JSON. (Сторонники традицонного “struct” могут просто заменить вызовы engejson на mochijson2 и все будет работать),
  • http-запросы переведены в бинарный формат (mochijson2 парсит бинарный JSON),
  • появился отдельный, оптимизированный запрос для получения бинарных аттачей,
  • несколько переработан код в сторону сокращения избыточности.

21/03/2009

mochijson2.erl: utf8 вместо \uXXXX

Filed under: AJAX, CouchDb, Erlang — admin @ 15:10

Поправил mochijson2.erl на предмет упоминавшегося мной ранее косяка с кодированием всего юникода (как двух-байтного, так и UTF-8), а также непечатных символов (<32) в виде \uXXXX.

И если для непечатных символов это хорошо и правильно, то кириллицу это неоправданно раздувает в 3 раза, кроме того, делает неудобной отладку по JSON трафику :-)

С учетом того, что decode/1 и без лишнего вмешательства правильно декодирует \uXXXX, Unicode и UTF-8 во внутренний Unicode, с этим патчем, любой юникод, полученный во всех доступных видах, на выходе encode/1 будет представлен в форме UTF-8.

P.S. Проверил CouchDb 0.9: с моим патчем начал нормально отдавать utf-8.

P.P.S. Патч включен в официальный mochijson2.erl как опциональное поведение. Теперь можно делать так:

Encode = mochijson2:encoder([{utf8, true}]),
Encode(json()).

13/03/2009

Еще один JSON формат для Erlang

Filed under: AJAX, Erlang — admin @ 15:40

До сих пор использовал вариант mochijson2, в котором атом struct, используемый для обозначения объекта заменен на obj (так писать короче).

Вдруг подумалось, что можно от него и вовсе отказаться и, на ряду с JSON array, представлять объект разновидностью списка. А именно:

  • если erlang-список представляет собой proplist() (а точнее, первый элемент списка - тупл {key(), value()}), то это — JSON объект,
  • в остальных случаях (когда первый элемент списка — скаляр или список), это — JSON array
  • пустой объект кодируется как {empty}

(more…)

03/03/2009

gen_server и Mnesia транзакции

Filed under: ErlaNGinE, Erlang — admin @ 13:29

Делая очередной модуль (адресную книжку), который по сути реализует логическую обвязку Mnesia-таблички, задумался вот над чем:

С одной стороны, для модуля желательны элементы gen_server: фаза инициализации (проверить доступность таблицы, создать, при необходимости), желание иметь автоматический code_change для запуска процедуры конвертации таблицы в новый формат, и т.д.

А с другой стороны, преимущества использования handle_call и dirty_* доступа к Mnesia вместо прямых обращений к ee транзакционному механизму неочевидны и “умничать” до появления реальной нагрузки смысла нет. Т.о., получается, что серверных функций, как таковых, модуль не выполняет — в его API нет ни одной функции, заканчивающейся вызовом gen_server:call.

Помучившись данной темой, реализовал как gen_server без handle_call, но остался вопрос: оправдано ли здесь применение gen_server behavior или лучше подойдет что-нибудь другое?

20/02/2009

Использование подгружаемых HTML модулей

Filed under: AJAX, ErlaNGinE — admin @ 18:24

Обнаружил, что весь HTML интерфейс ErlaNGinE можно удобно разбить на компоненты - блоки, умещающиеся в один div, и содержащие HTML-код и JavaScript-обвязку. Такими компонентами можно представить логин, навигатор документов, редактор и пр.

Написал функцию insert(Id, Url) в модуле enge.js, которая позводяет загрузить код из Url, разделить на HTML и JavaScript, HTML вставить внутрь элемента Id, а JavaScript выполнить… ну и плюс хуки на обработку вставленного HTML и на завершение последнего insert-a.

То, что получилось, описано здесь:  http://wiki.github.com/dmi/erlangine/html-modules-with-insert

Думаю, изобрел колесо ;-) Но получившиеся модули достаточно удобно “функционализируются” в “черные ящики”.

11/02/2009

CouchDb

Filed under: CouchDb, Erlang — admin @ 12:05

Немного о CouchDb, которая применяется для хранения документов в ErlaNGinE и ее особенностях, обнаруженных на практике… (more…)

29/01/2009

Долой HTTP! ;-)

Filed under: ErlaNGinE — Tags: — admin @ 12:03

Под таким одиозным заголовком я буду писать о первой концепции ErlaNGinE (их несколько, остальные — пока в очереди). (more…)

Older Posts »

Powered by WordPress