Большое обновление Deployer

12 July 2014

Последнюю неделю активно занимался развитием инструмента для деплоя Deployer. Также обновил сайт и написал более хорошую документацию.

Deployer

Flyspeck — простой DI на JavaScript

29 April 2014

Нужен был простой контейнер внедрения зависимостей на JavaScript. Реализовал похожим на Pimple.

Пример использования:

// Создаём контейнер.
var c = new Flyspeck();

// Устанавливаем строковое значение.
c.set('name', '...');

// Устанавливаем объект.
c.set('config', {
    server: '...'
});


// Создаём сервис возвращающий экземпляр пользователя.
// Экземпляр будет создан только при первом обращении.
c.set('user', function (c) {
    return new User(c.get('name'));
});


// Переопределяем пользователя. Первый аргумент переопределяемый экземпляр, второй - контейнер.
c.extend('user', function (user, c) {
    return new ProxyUser(user);
});

// Ещё пример.
c.set('app', function (c) {
    return new Application(c.get('config'), c.get('user'));
});

// Создовать что-то новое нет необходимости, можно работать с объектом.
c.extend('app', function (app, c) {
    app.setSomething();
    return app;
});

// Получаем все сразу.
var app = c.get('app');

Правильное сравнение PHP фреймворков

22 March 2014

В интернете существует огромное количество различных сравнений фреймворков.

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

Одной из мер качества кода может быть цикломатическая сложность. Я решил сравнить популярные фреймворки с помощью этой меры. А так же посмотреть развитие этих фреймворков в динамике.

На графике отображено изменение отношения цикломатической сложности к количеству методов для всех релизов соответствующих фреймворков. Для подсчёта цикломатической сложности воспользовался замечательной библиотекой Себастьяна Бергмана phploc.

На графике видно, что Symfony слегка выигрывает у ZF по качеству. Laravel же скачет между ними, но в общем тоже держится на хорошем уровне. CakePHP стал гораздо лучше, чем когда он появился, однако похоже нашёл свою асимптоту. Yii же пока не показывает хороших результатов.

PurePHP — NoSQL база данных на чистом PHP

19 March 2014

На PHP создано куча разных штук: веб-сервер, контроллер квадрокоптера и даже GUI. Я решил пополнить список странных штук и создать NoSQL базу данных на чистом PHP.

Готовый результат выложен на GitHub: elfet/purephp

Посмотрим что умеет эта “база данных”…

Создание чата на PHP

16 March 2014

Пять лет назад я написал похожую статью, однако с того времени PHP и браузеры шагнули далеко вперёд. В этой статье мы создадим современный чат с применением WebSocket.

Что понадобится?

  • PHP 5.5.x
  • Composer - менеджер зависимостей.
Кстати, если вы работаете на Windows, то вам для разработки на PHP не нужно ничего больше (никаких "денверов"). PHP имеет встроенный сервер, который отлично подходит для разработки.

Подсветка кода с Google Code Prettify

22 November 2013

Для потсветки кода на StackOverflow используется библиотека Google Code Prettify. Но у вас она не будет работать точно так же как на StackOverflow. Вы не можете указать комментарий с кодом для уточнения языка: <!-- language: lang --> - работать не будет. Для того что бы библиотека заработала нужно у тега pre указать классы class="prettyprint lang-scm".

Однако это не удобно если вы используете Markdown.

<!-- lang: code -->

    you code goes here

Следующий мой скрипт исправляет это неудобство.

Обновление Deployer

20 November 2013

Новое обновление для deployer включает в себя небольшое изменения в архитектуре для упрощения тестирования. Тесты выполнаются на Travis-CI: Build Status

А так же новую возможность: групповое подключение к нескольким серверам. Если у вас несколько серверов (например тестовый, девелоперский и т.д.) вы можете подключиться ко всем сразу и выполнить деплой на всех.

task('connect', function () {
    connect('test.server.com', 'user', 'password', 'test');
    connect('test_two.server.com', 'user', 'password', 'test');
    connect('dev.server.com', 'user', 'password', 'dev');
    connect('server.com', 'user', 'password', 'prod');
});

task('upload', function () {
    upload('/home/user', '/home/server');
});

task('everythere', 'Deploy everythere', ['connect', 'upload']);

Теперь выполнив php deploy everythere можно загрузить код на все сервера. По умолчанию, функции cd, run, upload выполняются на всех серверах.

Переход от WordPress к Jekyll

19 November 2013

Решил обновить свой блог и перейти от использования WordPress к Jekyll.

Как оказалось сделать это было достаточно просто (если бы не парочка новых багов в jekyll на данный момент). Для переноса постов есть куча импортеров (я воспользовался каким-то написанным на C#).

Самое сложное было перейти к использованию для подсветки кода pygments. Пришлось вручную заменить все теги на новые.

Код моего блога доступен тут.

Для проверки того что блог будет успешно собираться, подключил Travis-CI. Почему-то GitHub в случае ошибки не присылает само сообщение об ошибке и непонятно что именно сломалось.

Так же обновил дизайн блога на более простой и лаконичный. Кстати, фото Сатурна настоящее.

Обновление Silicone Skeleton

08 November 2013

Обновил Silicone Skeleton. Теперь Silicone это независимый набор полезных компонентов. А все настройки находятся в Silicone Skeleton.

Это позволит в каждом приложении подключить только то что нужно.

Silicone Skeleton предоставляет всю ту же базовую функциональность: регистрация и авторизация пользователей, классы-контроллеры, Doctrine ORM, роуты через анатации, веб консоль с профилированием запросов и т.д.

« Старые Страница 1 из 3
Система Orphus