Снова Глобальный День Drupal, или пилим Награды

В пятницу 15 марта мировое Drupal-сообщество проводит Глобальный День Изучения. Drupal-клуб присоединяется к событию с программой под кодовым названием “Пилим награды”*.

На этот раз мы будем заниматься некоммерческим opendata-проектом – “Награды.by”. Основная цель этого проекта – агрегировать и удобно представлять большие массивы открытой информации о наградах Беларуси конечным пользователям. Сейчас есть определённая проблема в том, что госорганы не выкладывают информацию в машиночитаемом виде. А без возможности обработки гигантских массивов данных машинами, очень трудоемко, да и не хватает времени изучать все отчёты. grecja last minute

Основная задача
В процессе разработки проекта возникла необходимость написания модуля для обработки входящих данных. Поэтому мы будем проектировать и реализовывать будущий модуль, который позволит адаптировать информацию перед помещением её в базу данных. По готовности отправим этот модуль в репозиторий drupal.org. Другие участники Глобального Дня смогут присоединиться к более простым задачам по этому проекту.

В данном случае мы работаем с технологиями git, jail shell, ssh-ключами, интенсивно используем модули views, dataviz и feeds.

Приглашаем всех друпалеров (любого уровня подготовки) к участию. Беларусскому оpendata-движению необходим импульс. В Глобальный День мы хотим придать более выразительную форму этому движению.

*Разогрев уже в среду на традиционной встрече Клуба. Начало в 19:00.

Основной День!
Пятница – 15 марта, начало – 19:00.
Адрес: ул. Захарова 77а, ком 2б (5 подъезд дома, металлическая дверь с почтовым ящиком, подвальный этаж, на окне табличка “Фаланстер”)
Телефон: +375 29 1274267

Немного истории
Drupal-клуб начал участие в Глобальных Днях с прошлого года. Эти события проходят под эгидой Drupal-ассоциации – организации, призванной развивать Drupal-сообщество по всему миру. По ссылке – интересный отчёт Ассоциации, где упоминаются и наши события. На каждом Дне мы ставили определённую задачу. Первый раз мы рассказывали новичкам, как установить Drupal. На втором – собирали блог Пиратского центра. На третьем, который проходил во время Drupal-cлёта, мы создали проект niekropali.by. Сейчас работаем над проектом Награды.By.

Трудности и успехи в практической разработке

Вечером в среду мы соберемся в Drupal-клубе и будем делиться опытом из практики.
Memcache, Apache Benchmark, Gnuplot, Mothership – разложим непростые понятия по полочкам.

В первой части cделаем обзор возможностей для оптимизации сайта на drupal:
– тонскости интеграции drupal c memcache;
– использование Apache Benchmark для тестирования производительности;
– функции Gnuplot – утилиты для построения графиков зависимости времени, потраченного на запрос от системы кэширования.

Во второй – рассмотрим основные настройки, недостатки и преимущества темы Mothership.

Встречаемся в Drupal-клубе 9 апреля в 19.00 по традиции на базе Фаланстера.

Встреча планируется насыщенной и без новых знаний никто не уйдет!

Чистый HTML вывод записей через Views с использованием Display Suite

Задача: Сделать максимально чистый HTML вывод записей через Views

В этой небольшой записи покажу несколько шагов: как избавиться от всех ненужных слоёв вo Views. Это особенно необходимо при создании адаптивных к различным устройствам (планшетники, смартфоны, ноутбуки) темам. В данном примере используется связка Display Suite и Views (в FORMAT Show: Display Suite).

Часть 1. Display Suite
Не забудьте включить модуль-расширение Display Suite Extras. Он даёт возможность настраивать вывод полей очень гибко.
Например, вы хотите избавиться от многочисленных слоёв-обёрток. Включаете режим Enable Field Templates (здесь /admin/structure/ds/list/extras)

и в настройкай конкретного Views Mode вы можете делать чудеса, выбирая, тот или иной режим. Самый гибкий режим expert.

Также, выбрав конкретный шаблон, есть возможность удалить ненужные обёртки.

Просто копируем отсюда sites/all/modules/ds/layouts/[chosen_template]/[chosen_template].tpl.php (полезная ссылка ) в вашу тему sites/all/themes/[you_theme]/templates/ этот шаблон и удаляем там всё, что необходимо.

Часть 2. Views
Прежде всего используем возможности самого Views.

Далее нам необходимо избавиться от обёрток генерируемых шаблонами Views. Ниже чудесная картинка для просветления:

Взята отсюда:

Смотрим, какие шаблоны использует наш Views здесь:

Идём в sites/all/modules/views/theme. Выбираем, тот шаблон, который нам необходим и копируем его в тему sites/all/themes/[you_theme]/templates/
Далее удаляем из него все ненужные слои:

Также, если Views генерирует блок, может понадобиться необходимость выгрести (или переименовать) слои-обёртки из блока. Здесь самое сложное – определить название шаблона views–block–[views_machine_name]-block.tpl.php

Делаем копию из block.tpl.php (может лежать в теме, если нет – забирайте с родного модуля блоков) в views–block–[views_machine_name_block]-block.tpl.php

Таким образом, получаем красивый вывод записей Views.

PS
В Drupal всегда есть несколько решений одной и той же задачи. Некоторые предлагают формат: Semanticviews и Semantic Field. Интересно послушать альтернативные способы темизации.

Тестирование систем кэширования Drupal

Не так давно передо мной возникла задача подбора системы кэширования для небольшого (но постоянно расширяющего свой функционал) сайта на Drupal 7.
Сайт не является интернет-магазином, но и не визитка – словом, достаточно тяжелый для shared-хостинга. Производительности, полученной при использовании стандартного кэширования в базе данных, оказалось мало, поэтому я начал поиски среди contibuted-решений.

Кандидаты
На просторах drupal.org были обнаружены следующие модули:

Memcache
Модуль для интеграции Drupal c memcache.
Memcached – open-source система для кэширования объектов различных типов в оперативной памяти.

Достоинства:
+ легко масштабируется

Недостатки:
– не подойдет для использования на shared хостинге, так как нужно добавлять расширение в php и запускать демон memcached

Filecache
Модуль, позволяющий выполнять кэширование в системный файл, находящийся в папке с Drupal.

Достоинства:
+ пойдет на shared хостинге, так как не надо настраивать сервер

Недостатки:
– так как используется локальная файловая система, то масштабировать такое решение принципиально невозможно

APC
Этот модуль используется для интегрирования Drupal с Alternative PHP Cache. APC используется для кэширования и оптимизации кода PHP.

Достоинства:
+ развивающийся проект, более производительный, чем eaccelerator
+ можно использовать не только для кэширования кода, но и для кэширования статических страниц

Недостатки:
– не подойдет для использования на shared хостинге, так как нужно добавлять расширение в php

Mongo
MongoDB – NoSQL база данных, использование которой дает существенный выигрыш в производительности при кэшировании данных по сравнению со стандартной БД. Модули для интеграции mongo c drupal позволяют закэшировать страницы, блоки, содержимое полей, сессии пользователей… много чего!

Достоинства:
+ Активно развивающийся проект с богатым функционалом
+ Легко масштабируется

Недостатки:
– Не подойдет для shared-хостинга, так как требуется скачать, установить и запустить mongoDB

Redis
Redis – еще одно хранилище типа ключ-значение

Достоинства:
+ легко масштабируется

Недостатки:
– не подойдет для shared-хостинга, так как требуется скачать, установить и запустить
– в readme модуля написано, что его не рекомендуется использовать в production-версиях, так как он находится в стадии разработки

Authcache
Модуль, который заменяет стандартную систему кэширования Drupal. Более подробное описание смотрите на страницах документации модуля.

Достоинства:
+ интегрируется со всеми вышеперечисленными кэширующими модулями, предоставляющими стандартный интерфейс
+ дает возможность тонкой настройки объектов кэширования

Недостатки:
– для полноценного использования потенциала модуля при кэшировании темы или кастомных блоков необходимо лезть в код

Varnish
Модуль, дающий возможность интегрировать Drupal c Varnish. Varnish слушает 80 порт сервера и проверяет наличие на странице контента, подлежащего кэшированию. В случае, если имеется контент, требующий использования apache, Varnish перенаправляет запрос на порт, использующйся web-сервером.

Достоинства:
+ большой прирост производительности на статических страницах

Недостатки:
– необходима настройка apache – не подойдет на shared хостингах

Методика
Решения тестировались на сервере Ubuntu 10.04 с apache + mod_php, установленном на локальной виртуальной машине с одноядерным процессором и 1 Гб оперативной памяти. Сервер был сконфигурирован в соответствии с Запросы отправлялись с другой локальной виртуальной машины, таким образом, время соединения не влияет на результаты тестов, при том что нагрузка на тестирующую систему (Apache Benchmark) не влияет на тестирующую систему. Для отображения результатов был использован gnuplot.

Методика тестирования – три тура запросов, каждый по 1000 запросов, с конкуренцией между 1, 3, 10 запросами соответственно. Запросы посылалиcь на главную страницу сайта от имени анонимуса. На главной странице находилось 3 блока views, 2 меню среднего размера и, собственно, содержимое главной страницы, изобилующее картинками и javascript.

Кэширующие бэкэнды настраивались с примерно одинаковыми настройками – 64 Мб используемой ОЗУ, где это возможно. В качестве темы на сайте использовалась mothership.

Результаты
На последующих графиках изображены сравнительные результаты тестирования модулей при нагрузке в 3 конкурирующих запроса.

Drupal cache

Из графика отчетливо видно, что использование стандартного кэша позволяет ускорить работу вашего сайта (что очевидно) и то, что кэширование php с помощью APC более эффективно, нежели использование eAccelerator.

На этом графике показаны результаты использования стандартного алгоритма кэширования Drupal с различными бэкэндами. Memcache и Filecache ведут себя похожим образом, ненамного обгоняя вариант с использованием БД. Правда, memcache – едиственный вариант из изображенных на графике, который можно масштабировать, тем самым увеличивая производительность. Высокая производительность APC вызвана тем, что была в настройках была включена опция загрузки страницы вовсе без обращения к базе данных. Такое решение подойдет малым сайтам в пару статических страниц, которые находятся на небольшом сервере без необходимости в масштабировании.

На этом графике показаны результаты использования решений на основе NoSQL. Выводы делайте сами.

Authcache

В данном режиме стандартный алгоритм кэширования Drupal был заменен на Authcache. В результате мы получили существенный прирост производительности – около 30 миллисекунд на запрос. Важно отметить, что на shared хостинге реально получить такой результат, используя связку authcache + filecache.

Победители

Здесь были сведены решения, показавшие лучшие результаты, при этом позволяющие масштабирование. Как видим, Redis и Authcache обгоняют Mongo, но авторы модуля Redis не рекомендуют его использовать на production. Решение на основе Varnish оказалось самым быстрым, правда, дело в том, что Varnish позволяет кэшировать страницы только для анонимных пользователей и требует нетривиальной настройки.

Итоги
С учетом таких параметров как функциональность, стабильность, быстродействие, я бы порекомендовал:

Authcache и FileCache для shared хостингов. Таким образом можно получить всего около 15 ms на обработку запроса
APC для сжатия кода php, mongoDB/Varnish для крупных сайтов

Весна. Завершение Drupal-сезона

Заключительная встреча третьего сезона Drupal-клуба состоится в среду, 17 апреля, в 19:00 на базе Фаланстера. Приятно проводим время с Drupal.

На повестке дня добавление статей о Drupal-клубе в беларусскую и русскую википедии, так же создание статьи о Drupal в беларусской википедии. Торжественный перевод с английской википедии уже происходит. После перевода будем его адаптировать. Структурируем материал вместе и дополняем актуальными и интересными фактами.

Пишем историю. Делаем паузу. Идём с новыми открытиями в новый сезон.

Drupal-день. Следующее поколение

В детской библиотеке имени Островского 15 ноября впервые прошел Drupal-день для школьников. Молодёжная организация “Фаланстер” знакомила пришедших с open source системой и обучала работе с ней.

Мероприятие начиналось в 15:00 часа, и ровно к этому времени заинтересованные в изучении Drupal заполнили медиа-класс библиотеки. Класс представлял собой небольшое помещение с 8-9 рабочими машинами, на которые заранее был установлен XAMPP для работы c CMS Drupal (512 MB оперативной памяти могло существенно замедлить установку во время практики). Перед началом пришлось даже согнать нескольких школяров, игравших в танчики.

Заинтересованных в изучении, как создать свой сайт, пришло около 20 человек: были и пяти- и шестиклассники от кружка по программированию с учительницей, были ученики старших классов, и несколько уже не школьников. Уровень знаний был разный: ребята помладше еще не были знакомы с системами управления контентом и на кружке изучали только flash, когда как некоторые из ребят постарше уже пробовали работать или с Drupal, или с другими CMS, а кто-то пришел со своими горячими drupal-вопросами.

Ведущая ознакомила с общим планом проведения дня: З часа времени состояли из пятиминутного рассказа про “Фаланстер”, теоретического и практического блоков. Небольшая презентация организации акцентировала внимание на текущих и прошедших проектах.

Дальше следовала общая информация про open source ПО на примере Drupal и примеры drupal-сайтов. В основном теоретическом блоке доступно раскрывался процесс установки Drupal с начала: разворачивание системы, структурные единицы сайта и работа с ними. Интерес у участников вызвала локализация системы на русский язык.

К 16:00 часам перешли к практике. Все, кто взял с собой ноутбуки смогли устанавливать Drupal на них, те, кто не взял – использовали компьютеры медиа-класса. Готовых к практике поделили на группы. Таким образом проходила более персональная работа. Участникам было предложено придумать свой сайт и начать его конструировать.

“В первую очередь хочется отметить огромную роль подобных событий и подчеркнуть их значение в развитии человека и общества. О проводимом мероприятии могу сказать, что оно оставило только приятные впечатления. Организаторам удалось достичь поставленной перед собой цели. Я уверен, что всем, кто посетил эту встречу, было предоставлено достаточно информации, чтобы понять основные возможности Drupal”, – Геннадий.

Уровень энергии большинства был высокий: каждый старался побыстрее установить программы, лучше разобраться в них, быстро исправить возникающие ошибки. Команду “Фаланстера” буквально разрывали на части: каждому нужна была помощь или подсказка. Пришедшие осваивали Drupal налету.

Ближе к 18:00 начали презентацию результатов встречи, оценивали проделанную Drupal-работу: учительница кружка по программированию минимально изучила возможности добавления картинок на сайт и добавила их в неограниченном количестве, девушка-библиотекарь поработала с views и начала делать сайт про лис, несколько парней старших классов и студенты углубились в темизацию и не только подобрали оригинальные темы, но и начали менять в них элементы на свои.

На протяжении Drupal-дня был проведён конкурс: что объединяет Drupal и Linux? что такое кеш? что нужно делать, если на сайте что-то не работает? какие в Drupal два самых сложных слова на “Т”? Ребята не успевали опускать руки, отвечали верно, сходу, крича, перебивая друг друга, чем и заслужили drupal-блокноты и наклейки, многие из которых были сразу же наклеены на ноутбуки. А в завершении конкурса лучший приз – книга “Drupal 7” от kv.by – достался кружку по программированию.

“Drupal-день прошел просто прекрасно: мы смогли сначала познакомиться с теорией данной системы, а потом и сделать сайт своими руками (конечно же в присутствии опытных пользователей данной системы)! Это дало нам прекрасную возможность начать свое развитие в данной области интернет-технологий” ,- Илья, БГУ Факультет Прикладной Математики и Информатики, 1 курс.

“Вирус” Drupal запущен и в школьное поколение, теперь ребята будут изучать open source систему смолоду!