понедельник, 11 ноября 2013 г.

Debugging/tracing Drupal 8 tests.

Занялся тестированием тестов под Drupal 8. И осознал, что отладка тестов не так уж и проста. Сложность заключается не в написании, а организации процессов.

  • Укажите путь к основному файлу тестировщику, который с помощью phpunit соберает среду и запускает тест.
  • Желательно запускать от пользователя www-data.
  • Укажите обязательно параметр --url сайта.
  • Если вызапускаете тест с командной строки и хотите трассировать код, необходимо выставить переменную XDEBUG_CONFIG="idekey=netbeans-xdebug".
  • Заметьте, что тесты также выполняют GET/POST запросы к проекту. Трассировка проскакивает код сзапросами, отладка будет неполной. Если вы хотите также провести отладку тех скриптов в параметры также надо добавлять ключ. Проблема в том, что это вызывает мультипоточную отладку в которой очень легко запутаться.

Мой совет - При поиске проблемы в тесте советую создать свой тест с реализацией проблемы.
alias d8_run_tests="sudo -u www-data php /var/www/d8/drupal/core/scripts/run-tests.sh --url http://d8.local --verbose --color --class "
alias xd8_run_tests="sudo -u www-data /home/viktor/sh/d8_run_tests"

http://d8.local/?XDEBUG_SESSION_START=netbeans-xdebug

#!/bin/bash
export XDEBUG_CONFIG="idekey=netbeans-xdebug"
echo $1
php /var/www/d8/drupal/core/scripts/run-tests.sh --url http://d8.local --verbose --color --execute-test $1

xd8_run_tests "Drupal\locale\Tests\LocaleTranslationUi1Test"
or
d8_run_tests "Drupal\locale\Tests\LocaleTranslationUi1Test"

понедельник, 7 октября 2013 г.

DrupalCon Prague 2013: BLOCKS FROM DROP.ORG TO DRUPAL 8 AND BEYOND. Мои комментарии.

В видео рассказывается  про эволюцию блоков в Друпал.
3.00 Что такое блок.
3.30 Использование блоков везде.
46.00 Начинается описание блоков в Друпал 8. То что они построены на системе блоков.

DrupalCon Prague 2013: DRUPAL 8 READY


Рассказывается про Друпал 8.

  • На первых минутах показывается таблица умений для работы с Друпал. Приводится сравнения умений уровня вхождения в разные версии. Что подчеркивает то, что уровень вхождения в Друпал был и остаётся высоким. Отмечаю высокий уровень вхождения расширения системы правильными методами. Но остаётся завлекающей CMS, как быстрой, качественной и гибкой системой построения различных систем без единой строки кода. Упоминается, что новые типы entities построены с учётом schema.org, придерживаясь стандартов общепринятых структур данных для различных целей.
  • 20.00 - Изменения в стеке технологий.
  • 19.30 - Что именно надо хорошо знать со стека PHP технологий.
  • 31.00 - Значимые изменения в Drupal со стороны разработки.
  • 39.00 - Другие новые использованные технологии.

пятница, 27 сентября 2013 г.

SASS LIST likes the dictionary.

Этот код показывает использование словарей :) вложенных массивов и циклов.
$types: text #474747, photo #D86043, photoset #D86043, quote #F19F35, link #57BC8A, chat #4EA8D7, video #77828D, audio #AB7DC2, answer #036564;
@each $type in $types {
     .post-type-#{nth($type, 1)} .post-icon{
        background: nth($type, 2);
    }
}

вторник, 24 сентября 2013 г.

Drupal Camp Lviv 2013. Эволюция Drupal в глазах Middle разработчика. Флейма не избежать.

Доброго дня.
Собираюсь выступить на Drupal Camp Lviv 2013 с темой доклада "Эволюция Drupal в глазах Middle разработчика. Флейма не избежать.". Статья в блоге будет освещать процесс подготовки и проведения, результаты, ссылки на другие источники.

Причина участия: Что не говорите, IT - это бизнес и без маркетинговых технологий никуда. Это всё Public Relations. Желаю получить дополнительный опыт, как докладчик, отточить умения общения с людьми, посмотреть город, отдохнуть, найти новых знакомых.

Тема доклада - обо всём как и ни о чём. С учётом предыдущего опыта тема выбиралась так что бы она была доступна всем, что б получились темы для обсуждения, общение.

Тезисы будут совпадать с планом.

Тезисы:

Друпал для меня.
Предназначение Друпала.
CMF или CMS?
Нода.

Продолжение следует.

среда, 7 августа 2013 г.

Позднее статическое связывание PHP >= 5.3.0


Это интересное простое в реализации свойство, которое предаёт гибкость в ООП. Вроде бы всё просто, но различие схем использования может запутать. Статические свойства ООП используются для работы с классами без инициализации объектов. Инициализированные объекты также могут использовать статические свойства ООП. self::, parent::, static:: помогают использовать статические свойства ООП в PHP. Данные операторы могут ввести себя одинаково. Всё зависит от условий использования. Основное различие опреаторов self::, parent::, static:: это среда(scope) их исполинения. Заметьте, что не только то откуда вызывается статический метод, или свойство но и то какие зависимые свойства классов они используют.
self:: - Среда определения, класс где метод, свойство были объявлены.
parent:: - Среда родительского класса.
static:: - Среда где происходит вызов метода, свойства.

Всё начиналось с перевода документации. Перевести документацию доходчиво не получилось. Материал выложил так, как понял. Примеры смотрите в документации. __CLASS__,  forward_static_call(), get_called_class() помогают в определении среды исполнения

воскресенье, 28 июля 2013 г.

Mulilambda - Элемент функционального программирования в Python

В языке Python, иногда, явно выделяется стиль программирования из-за того, что нету множество вариаций реализации. Написал замудро. Python интерпретируемый язык с динамической типизацией. Какие ещё могут быть ограничения? Наверное это неудобство при переходе с различных технологий сравнимым Python. Немного напрягает отсутствие inline определения анонимных функций. Да lambda функция. Но во многих вариантах она неудобна. Вот ещё один вариант функционального программирования используя lambda где выполняется несколько команд. Буду благодарен, если кто опровергнет данный подход и укажет на более лучший подход функционального программирования в python.
lambda: (
  doFoo('abc'),
  doBar(123),
  doBaz()
)
Real example:

pushButtonShowDialog.clicked.connect(
  lambda: (
    field1.clear(),
    spinBox1.setValue(0),
    diag.show()
  )
)

пятница, 12 июля 2013 г.

Cущности конфигурации в Друпал 8

В Drupal 8 появляется новый тип сущности - сущность конфигурации. Кто работал с Drupal 7 тот знаком с понятиями сущностей. Drupal 8 предостовляет новую концепцию сущности конфигурации, которая схожа с CTools exportable(экспортированный) в Drupal 7. В Drupal 7 CTools exportables используется такими модулями как: Views, Panels, Page Manager, Context, что помогает безболезненно экспортировать конфигурацию для хранения в системах контроля версий кода, размещения проектов на различные уровни разработки проектов.z

четверг, 11 июля 2013 г.

Контроллеры маршрутизации в Drupal8 - Using Drupal 8's new route controllers

Частично Web Services и Context в ядре инициатив традиционные процедуры обратного вызова страниц были сконвертированы в новые обьективные ориентированные контроллеры маршрутов.
Зачем нам понадобился новый компонент Routing?

вторник, 9 июля 2013 г.

Система плагинов в Drupal 8

На всё не хватает времени. Что бы понимать идиологию Друпал надо на него смотреть сверху - необходимо владеть всеми направлениями. Потому успех к Друпал разработчику приходит с опытом. Данная статья - перевод являеться одной из первых страниц документации про плагины. Это вид сверху на систему плагинов. Сама собой система плагинов несложна. Сложно понять её настоящее назначение и место в экоссистеме Друпал. Советую при дальнейшем детальном изучении системы на примерах возращаться к этому переводу и находить ответы на такие вопросы: что это такое, где его место. 

среда, 26 июня 2013 г.

EventDispatcher Drupal 8 Challenging

Эта статья основана на на статье описанной ещё в июле 2012 и проведённого Kyiv Code Sprint в июне 2013. Материал статьи остаётся актульным. Здесь опишем как работает система Event Dispatcher в Drupal 8. Будьте внимательны так как диспетчер в Д8 всеволишь один. Хотя логичнее сделать(для меня) для каждого события свой диспетчер. Наверное это будет сделано в Д9. Так как Д8 производительностью не блестает и подбираеться дата релиза, а работы не початый край. Так же это только начало познаний сложных структур Symfony 2 в Drupal 8.

четверг, 20 июня 2013 г.

Альтернатива drupal_static - cache_key

При кешировании результатов функций с параметрами приходиться генерировать ключ. Данный код подходит почти под все варианты. Только не надо злоупотреблять.

function get_athletes($customer_tid_list, $team_nid_list, $reset=FALSE) {
  static $cache = array();
  $cache_key = crc32(print_r(func_get_args(), 1));
  if (!$reset && array_key_exists($cache_key, $cache)) {
    return $cache[$cache_key];
  }
  ...
  return $cache[$cache_key] = $result;
}

понедельник, 17 июня 2013 г.

Как динамически инициализировать класс РНР с динамическики параметрами.

Как динамически инициализировать класс РНР с динамическики параметрами. Вот решение.
function create_instance($class, $params) {
  $reflection_class = new ReflectionClass($class);
  return $reflection_class->newInstanceArgs($params);
}
Размышление можно просмотреть в полной статье.

четверг, 6 июня 2013 г.

Система управления конфигурацией в Drupal 8

  • “Features в ядре”. 
  • Практический пример миграции конфигурационных данных между проектами.
  • Изменения, касающиеся разработчиков.
  • Функциональная схема системы конфигурации.
  • Дополнительные модули, функционал, который должен войти в ядро.
  • Flame.
  • Всё.

Описание доклада.
Конференция будет проходить 7 - 8 июня в гостинице "Турист", которая располагается по адресу: ул. Р. Окипной, 2 (100 метров от ст. метро «Левобережная»).

понедельник, 3 июня 2013 г.

Удалить муссор, GIT.

Git работает с изменениями, а не с файловой системой(основной принцип, но без неё никуда), проекты живут в фалойвой системе. Часто при длительной работе в ряде различных ситуаций появляються "жирные следы" от "немытых рук" в коде. Надо всё почистить!
git clean -d -x -f  
Очистка рабочего дерева вместе с папками(-d) untracked files (-x) без вопросов (-f) (осторожно - удалится вся ваша работа!!!)
Полезно переодически запускать на рабочем экземпляре проекта.
Всё нужно делать обдуманно, аккуратно.

пятница, 31 мая 2013 г.

JSON stringify

Может для кого-то это и новость. Но я обрадовался. Это одна из вещей меня мучила, теперь сериализация объектов в json объектов можно провести без использользования сторонних библиотек.
JSON.stringify({a: 1, b: "string"}); 
Проверял в Chrome, Firefox. Я долго удивлялся, что JQuery.parseJSON() есть, а вот обратного функционала нету.

Пример jQuery Mobile Dialog

Диалоги используются по тому же принципу, что и страницы. Для того, что бы заработал диалог необходимо. Что бы шаблон диалога находился в DOM документа.
Тогда для вызова необходимо будет выполнить следующий код.

$.mobile.changePage("#myDialog");

Шаблон.

<div id="myDialog" data-role="dialog">
  <div id="myMessage">Message</div>
  <input id="button1" type="button" value="Button 1" data-theme="b" onclick="someJS1();" />
  <input id="button2" type="button" value="Button 2" data-theme="c" onclick="someJS2();" />
</div>

Вот кто-то сделал пример.
See Fiddle

среда, 29 мая 2013 г.

Управление конфигурацией в Drupal 8


Начиная с Drupal 8 вы можете размещать конфигурацию с одной среды(сайта) в другую. Эти возможности заменяют необходимость различных модулей сообщества таких как: Features, Strongarm and Context.

Вы можете управлять настройками на вашем сайте в меню администрирования здесь: Menu > Configuration > Development > Synchronize configuration (http://www.example.com/admin/config/development/sync)


Файлы конфигурации находятся в файловом хранилище (Где-то здесь sites/default/files/config_XXXX/active где XXXX это хэш). Внутри найдёте yaml файлы (.yml) текущей конфигурации вашего сайта.

Пример.
Это простой пример, который демонстрирует, как изменить название сайта в одной среде и перенести в другую среду конфигурирования(сайт).
Установите два экземпляра Drupal 8.


  • Измените название cайта на первом сайте admin/config/system/site-information
  • Скопируйте system.site.yml с директории одного сайта /sites/default/files/config_*/active в директорию конфигурирования другого сайта. /sites/default/files/config_*/staging. (Это можно выполнить в ручную или используя git).
    scp -rp user@domain.com.ua:www/sm/drupal/sites/site/files/config_xpuUZENzSad-ZeZ-6GhxYrFjwuOgYjlsw6LYdLi1xk4/active/some_config.yml ./staging
    
  • На другом сайте убедитесь, что модуль Configuration Manager(Менеджер конфигурирования) включен.
  • На втором сайте перейдите admin/config/development/sync и нажмите Import all(Импортировать всё)

вторник, 28 мая 2013 г.

Notification Alerts как в Android приложениях используя jQuery Mobile Popup

C первого взгляда Notifications в jQuery Mobile не существуют, а использовать Dialogs для простых задач неудобно. Существуют сторонние плагины. По опыту разработки, после кастомизации плагинов приходит необходимость создания своего плагина. Предпочитаю использовать всё, что есть из коробки. jQuery Mobile Popup достаточно гибкий. Вот моя реализации Notifications. Комбинируя свойствами jQuery Mobile можно получить достаточно интересные результаты.
Popup: function(text) {
  var popup = $('div')
    .attr('data-role', 'popup')
    .attr('data-transition', 'flip')
    .attr('data-theme', 'e')
    .attr('data-overlay-theme', 'a')
    .addClass('ui-content')
    .html(text)
    .popup();
  popup.popup('open');
  setTimeout(function(){
    popup.popup('close');
  }, 2000);
},

суббота, 18 мая 2013 г.

Прикрепить HTML редактор к полю формы в Drupal 7,8

Вот стандартное решение.
$form['message'] = array(
  '#type' => 'text_format',
  '#format' => 'full_html',
  '#title' => t('Message'),
  '#required' => TRUE,
  '#rows' => 12,
);

вторник, 14 мая 2013 г.

Использование системы конфигурирования в Drupal 8


Заметка:
Информация в данной статье не отвечает действительности. Для уточнения текущего статуса и информации API Drupal 8 посетите официальное руководство.

Осмотр архитектуры.

Система конфигурирования применяется на трёх архитектурных уровнях.

пятница, 10 мая 2013 г.

PSR-0. Правила организации структуры кода.


Данная статья частично являеться переводом спецификации для автозагрузчиков. Для нас данное руководство может являться документацией по структурированию кода в файловой системе, названиях классов, для того что бы автозагрузчик мог его загрузить

суббота, 4 мая 2013 г.

Symfony в Drupal 8


Если вы работаете на Drupal, тогда вы осознаете, что следующий главный релиз Drupal собирается интегрироваться с более широкой экосистемой PHP. Адаптация к Symfony - действительно большое дело. Не только для Drupal разработчиков, которые должны будут много учить большое количество стабильный компонент для нахождения компромисса. Также это большое дело для Symfony разработчиков, которым предоставляется целая новая платформа для разработки. Взаимно расширяя PHP сообщества Symfony, Drupal. Drupal разработчики могут вносить свой вклад в более низкие уровни. Мы просмотрели, более обширный список Symfony компонент, которые должны появиться в Drupal 8, но мы не в состоянии поддерживать статус этих компонент. Сдесь выложили собраный список компонент Symfony, использованных в Drupal 8.



Данная статья является переводом. Потому текст написанный от перевого лица не мой.

четверг, 25 апреля 2013 г.

Что там делается у меня дома, пока я на работе и наоборот. Или просмотр видео с удаленной камеры.

Я из тех людей, которые любят изобретать велосипед. Но в этот раз решил задачу, используя уже существующие утилиты. Технологии, которые использованы: vlc, vpn, iptables. Для получения конечного результата необходимо решить три задачи.
  • Захват данных.
  • Передача данных.
  • Транспортирование данных.


четверг, 21 марта 2013 г.

Синхронизация сайтов Drupal. Staging в процессе разработки.

Укаждого свой метод синхронизации сайтов, всё зависит от задач. Это частичный перевод отработанной статьи. Данный метод помогает синхронизовать данные с реальным сайтом для  дальнейшей доработки на другом месте. Синхронизация проходит в следующие этапы: обновления кода, обновление базы данных, обновление файлов. Эсли всё настроить и отработать, можно собрать всё в один скрипт. Тогда у нас получится изящное решение синхронизации сайтов в одну команду.

воскресенье, 3 февраля 2013 г.

Новый возможности PHP 5.4

Участвую в разработке одного сервиса построенного на Drupal 6 PHP 5.2.   Время идёт Drupal 6 становится deprecated. Кроме этого проект растёт, объём кода растёт появляется желание начать использовать новые возможности PHP 5.3, хотя бы На официальном сайте рекомендуемая версия PHP 5.3. Разработку провожу под PHP 5.4.Никаких проблем нет пока. Данная версия должна дать прирост по производительности, от чего бы мы не отказались.  Провожу исследования пытаюсь  выявить проблемы на раннем этапе, также, особенности которые бы помогли переубедить заказчика. Хотя чувствую что дело рисковое.