Друзья, хотим рассказать вам о нашем сервисе ШДМка.
рф и некоторые подробности его изготовления.
Под катом статья про воздушные шары, CouchDB, Lisp и пару картинок.
Праздники уже не за горами и, возможно, кто-то из вас найдет идею для подарка.
Многие видели, как клоуны лепят собак из воздушных шаров.
Очень мило и очень смешно.
Возможно, кто-то даже пытался крутить шарики самостоятельно.
Сегодня из воздушных шаров изготавливают невероятное количество красивых вещей.
Проведенный фестивали и просто интересные события.
Мы создали сайт-каталог аэродизайнеров (и постепенно дизайнеров стали так называть), и главное на сайте — фотографии работ аэродизайнеров.
От других сайтов-каталогов мы отличаемся наличием блокнота, который простой пользователь заполняет и отправляет дизайнеру в свой город/регион.
Дизайнер, однако, может отправить клиенту письмо и с заполненным блокнотом.
Расскажу о технической составляющей сайта, так как в процессе разработки я обнаружил несколько интересных вещей, либо плохо описанных в документации, либо это описание приходилось собирать по крупицам на форумах.
Лисп
Сайт написан на Common Lisp (реализация SBCL).Выбор языка обусловлен удобством кодирования и большей количество библиотек .
Под наши нужды были доработаны только две библиотеки, и то очень незначительно; остальное работало из коробки.
Код сайта компилируется непосредственно в машинный код, соответственно производительность сайта высокая.
Хочется верить, что это утверждение выдержит проверку хабраэффектом :)
CouchDB
CouchDB используется в качестве хранилища данных.Здесь хранятся фотографии и миниатюры к ним, а также информация о пользователях.
CouchDB включает в себя довольно удобную среду управления данными.
Футон , у которого есть один недостаток — весь JS-код, который используется для управления базой данных (представления, функции списков и т. д.), сериализуется в строку и практически невозможно редактировать в самой среде.
Для решения этой проблемы воспользуйтесь утилитой приложение для дивана .
CouchApp
Это небольшая утилита Python, которая позволяет создавать автономные приложения на CouchDB. Утилита генерирует код приложения по шаблону и, что самое важное, позволяет загрузить приложение в CouchDB одной командой.При этом само приложение имеет древовидную структуру файловой системы, где код разных элементов, например представлений или вспомогательного кода, располагается в разных папках.
В обычном человеческом облике.
Кроме того, утилита позволяет добавлять в приложение CouchApp разные элементы — представления, списки и т. д. — по мере разработки.
Например вот так:
Здесь check-user — это имя сгенерированного представления.couchapp generate view check-user
Утилита создает каталогviews/check-user, который будет содержать шаблоны для функций карты и сокращения.
Обновление функций
Поскольку в CouchDB данные никогда не перезаписываются, а только добавляются в базу, очень важным элементом работы является наличие ревизии документа.Практически любой доступ к документу для записи требует знания версии документа.
Это не всегда удобно.
У CouchDB есть функции обновления (функции обновления), позволяющие манипулировать документами на стороне сервера (не загружая их на клиент), не зная их ревизии.
В документации этот момент описан достаточно скромно, но в то же время функции обновления позволяют делать интересные вещи: function(doc, req) {
if (!doc) {
doc = {
_id: req.id,
type: 'idGenerator',
count: 0
};
}
doc.count++;
return [doc, '"' + doc.count + '"'];
}
Данный фрагмент кода увеличивает поле счетчика документа при каждом вызове функции.
Вот как на CouchDB реализован генератор последовательных чисел.
Вызов функции, кстати, осуществляется следующим образом: curl -X POST http://localhost:5984/database/_design/view-doc/_update/generateOrderNo/counterDoc
Здесь view-doc — проектный документ в базе данных,generorderNo — функция обновления, counterDoc — документ в базе данных.
Вызывая вышеуказанную функцию, мы каждый раз увеличиваем поле в документе и сразу получаем значение этого числа.
Аналог поля с автоинкрементом для SQL.
CouchApp, однако, не умеет генерировать функции обновления, однако, если вручную создать каталог обновлений и поместить в него функцию вышеуказанного контента, то приложение легко загружается в CouchDB.
Подмена кода
CouchDB не позволяет функциям просмотра использовать какой-либо библиотечный код. CouchApp решает эту проблему очень, на мой взгляд, элегантно.
В коде функции отображения (или функции сокращения) можно указать конструкцию function (doc) {
.
// !code vendor/myapp/common.js .
}
и в то место кода, где встречается эта строка, будет вставлено содержимое файла common.js, расположенного в соответствующей папке приложения.
Хоть это и не самое красивое решение, но оно позволяет написать общий код один раз.
Рамки
В качестве основы для интерфейса был выбран фреймворк.Чернила .
Имеет интересную внутреннюю структуру и расширенный функционал.
Кроме того, фреймворк развивается довольно быстро.
Заключение
В общем, когда захотите отпраздновать, подумайте о воздушных шарах.Особенно в пятницу в четверг вечером перед праздником.
Ну а аэродизайнеров, которые смогут устроить этот праздник, можно найти на нашем сайте.
На главной странице есть ссылка на страницу с дизайнерами вашего региона.
Если окажется, что там никого нет, можно нажать кнопку «Я хочу, чтобы они были!» кнопка.
и мы пригласим авиадизайнеров из ваших городов по вашему интересу.
Чтобы привлечь внимание, на картинке изображен талисман FreeBSD из воздушных шаров, логотип CouchDB и один из логотипов Lisp из кофе.
Напоследок несколько предпраздничных ссылок: Воздушный шар-талисман FreeBSD Geeklatte.com, IT-рисунки на кофе
Спасибо за внимание!
Критика и предложения приветствуются.
Теги: #balloons #CouchDB #Lisp #NoSQL #FreeBSD #занимаюсь пиаром
-
Секрет Разблокировки Myspace
19 Oct, 24 -
Слово
19 Oct, 24 -
С Днём Тестировщика!
19 Oct, 24 -
Транспорт И Платежные Терминалы
19 Oct, 24 -
18 Ошибок, Которые Убивают Стартапы
19 Oct, 24 -
Самсунг Форум 2010
19 Oct, 24 -
[Научная Фантастика] Cloudbass
19 Oct, 24