26 марта 2014 г.

Symfony2 расширяем JMSJobQueueBundle

Так уж сложилось (такова архитектура приложения, которое я разрабатываю), что мне не хватало возможностей JMSJobQueueBundle. Поэтому пришлось подумать как добавить необходимые мне возможности.

Что мне нужно?
Мне нужна возможность выполнять команды в разных окружениях. JMSJobQueueBundle, к сожалению, пока такого не позволяет (хотя компонент Symfony  Process позволяет это сделать очень просто). По этому поводу я уже создал issue, и если разработчик его сделает, то эта статья будет неактуальной.

Значит что сделал я.

В первую очередь я расширил сам бандл. Подробнее об этом можно почитать в документации Symfony.

Собственно я создал бандл, имя которого совпадает с текущим, и указал родителя
namespace Netberry\JobQueueBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class NetberryJobQueueBundle extends Bundle
{
    public function getParent()
    {
        return 'JMSJobQueueBundle';
    }
}
 После этого в новый бандл добавил следующую команду
namespace Netberry\JobQueueBundle\Command;
use JMS\JobQueueBundle\Entity\Job;
use Netberry\JobQueueBundle\Entity\Environment;
use Symfony\Component\Process\ProcessBuilder;
class RunCommand extends \JMS\JobQueueBundle\Command\RunCommand
{
    const COMMAND = 'jms-job-queue:run';
    /**
     * @var Job
     */
    protected $job;
    /**
     * @param Job $job
     * @throws \LogicException
     */
    protected function startJob(Job $job)
    {
        $this->job = $job;
        parent::startJob($job);
    }

    /**
     * @return ProcessBuilder
     */
    protected function getCommandProcessBuilder()
    {
        $pb = parent::getCommandProcessBuilder();
        /** @var Environment $Env */
        $Env = $this->job->getRelatedEntities()->first();
        if(!$Env) {
            $Env = new Environment('common', 'common');
        }

        $pb->setEnv('SYMFONY__APP', $Env->getApp());
        $pb->setEnv('SYMFONY__HOST', $Env->getHost());

        return $pb;
    }
}
Постарался обойтись минимальными изменениями.

Но проблема в том, что в оригинальной команде вышеописанные методы приватные (private) и поэтому их можно только переопределить, но нельзя расширить. Поэтому пока пришлось изменить код оригинальной команды, что есть очень плохо и совершенно не правильно (но другого варианта я пока не нашел).
В вышеуказанном issue, я попросил автора бандла подумать и об этом. Посмотрим, что он придумает.



22 марта 2014 г.

Ubntu 13.10 & PhpStorm 7 - проблемы с горячими клавишами в русской раскладке

Т.к., я работаю программистом, в один прекрасный день мне пришлось спрыгнуть с винды на линкус. Я перешел на ubuntu.
В то время я перешел на ubuntu 13.04. Эта ось мне очень понравилась. Для разработки лучше не придумаешь.

Позже пришлось перейти на ubuntu 13.10,  а вот тут то  и пришлось по плеваться. Ubutnu 13.10 выпустили достаточно сырой.
Основная проблема с которой пришлось столкнуться - это проблема смены раскладки (думаю описывать ее нет смысла, т.к. весь инет пестрит сообщениями об этой проблеме и путями ее решения). В итоге разработчики исправили эту проблему, но не до конца.

Лично у меня проявление проблемы осталось в том, что в PhpStorm 7 не работали hot keys (Ctrl+C, Ctrl+V, Ctrl+Z ...) в русской раскладке. Для многих это не является проблемой, т.к. остаются рабочими клавишами Ctrl+Insert, Shift+Insert? но это дело привычки.

В силу того, что я очень долго просидел на винде, руки привыкли именно к сочетаниям клавиш через Ctrl. И было очень сложно работать при наличии таких багов.

Но вот сегодня, чисто случайно, мне удалось найти решение этой проблемы.

Собственно его я сейчас и опишу, возможно кому-то пригодится, да и себе сохраню на будущее.

Решить данную проблему помогает патч для Java - https://github.com/zheludkovm/LinuxJavaFixes.

Собственно нужно загрузить себе этот патч, а затем в файле phpstorm.vmoptions (или phpstorm64.vmoptions) добавить следующую строку
             -javaagent:[path]/LinuxJavaFixes-1.0.0-SNAPSHOT.jar

У меня файлы phpstorm.vmoptions & phpstorm64.vmoptions находятся в каталоге /home/dimon/Programs/PhpStorm-133.679/bin. Собственно у вас это будет каталог, в который установлена IDE PhpStrom.

Вот и все. Проблема решена.

Вообще, ubuntu 13.10 это очень неудачная версия на мой взгляд.
Будем ждать 14.04 и надеяться что там эти косяки будут исправлены.

И напоследок. Для размещения своих проектов я использую сервера от DigitalOcean. Классно они все сделали, все очень просто и удобно.
Если вы разрабатываете под web, очень рекомендую обратить внимание на этот сервис.

Реферальная ссылка и  для противников реферальных программ прямая ссылка









6 сентября 2013 г.

2 сентября 2013 г.

Acer Liquid Galant Duo

Аппаратный WIPE

> Выключите телефон, затем нажмите и удерживайте кнопку питания, пока не почувствуете вибрацию смартфона и/или пока не откроется экран с логотипом Acer. Нажмите и удерживайте кнопки увеличения и уменьшения громкости. Нажимая кнопку увеличения громкости, выберите "Чистая загрузка: Да. Для подтверждения нажмите кнопку камеры."

acer-club.ru/topic/12492-%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC-%D0%B5%D1%81%D0%BB%D0%B8-%D0%BA%D0%BE%D0%BC%D0%BC%D1%83%D0%BD%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80-%D0%BD%D0%B5-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B6%D0%B0%D0%B5/page__st__30

1 сентября 2013 г.

Замена хостинга на digitalocean.com

Пришло время и мне понадобились различные плюшки в виде доступа по ssh к серверу и git.
Необходимо было выбрать что-то недорогое и удобное.
Лучше чем Digital Ocean я ничего не нашел. Сервер настраивается быстро. Установка четкая и продуманная. Цены приемлемые.
У Digital Ocean обширное комьюнити. Есть много полезных статей и туториалов. В принципе, если английский вам не чужд, решение любой проблемы можно найти в статьях.

Кратко по установке:

Настройка имени хоста (добавление домена)

Лично у меня при установке по всем рекомендациям никаких проблем не возникло. Все завелось с первого раза. Надеюсь что и у вас все получится без проблем.

И напоследок совет. Если у вас нет необходимости в постоянно включенном сервере, то можно сэкономить немного денег. Для этого (все действия выполняются в панели управления DigitalOcean):
1. Выключаем сервер - для этого заходим в свой дроплет и выключаем его (Power Off).
2. Переходим в раздел Images и создаем Snapshot своего дроплета.
3. Удаляем дроплет.
За хранение Snapshot Digital Ocean берет 2 цента в месяц за гигабайт. И больше никакая плата не берется. Восстановить дроплет из снимка дело 1 минуты. 

Внимание!!!
Ссылки на Digital Ocean в статье реферальные. Если Вам помогла эта заметка переходите по этим ссылкам. 
Если вам эта заметка не помогла, можете смело идти по прямой ссылке.