ru IT-специалист Игорь Негруца Блог о современных технологиях в вебе. Fri, 23 Jun 2017 11:28:25 +0300 Zend_Feed_Writer 1.10.1 (http://framework.zend.com) http://www.igor-negrutsa.info igor.negrutsa@gmail.com (Игорь Негруца) Игорь Негруца igor.negrutsa@gmail.com Игорь Негруца Symfony2 + FOSUserBundle. Перенос пользователей с изменением процедуры шифрования пароля. Есть проект, который вы хотите перенести на Symfony2. Перед вами стоит задача переноса пользователей из старой базы в новую. Вы можете столкнутся с проблемой шифрования паролей.

Какие есть варианты решения?

Вариант 1
...]]> Fri, 25 Nov 2011 12:41:48 +0200 http://igor-negrutsa.info/blogs/category/6/id/16 http://igor-negrutsa.info/blogs/category/6/id/16 igor.negrutsa@gmail.com (Игорь Негруца) http://igor-negrutsa.info/blogs/category/6/id/16#comments Игорь Негруца Есть проект, который вы хотите перенести на Symfony2. Перед вами стоит задача переноса пользователей из старой базы в новую. Вы можете столкнутся с проблемой шифрования паролей.

Какие есть варианты решения?

Вариант 1
Меняем всем пользователям пароли и делаем рассылку уведомлений.

Плюсы:

  1. Подходил для задач любой сложности (алгоритм шифрования неизвестен).

Минусы:

  1. Необходимо объяснить клиентку, а ему это может не понравится.
  2. Пользователи будут не в восторге.
  3. Реализовать процедуру изменения пароля.
  4. Реализовать рассылку писем.

Вариант 2
О нем ниже ))

Плюсы:

  1. Нет минусов первого варианта.

Минусы:

  1. Надо знать алгоритм шифрования.

 

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

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

На стандартный компонент я навесил FOSUserBundle, который решает задачи: авторизации, регистрации, восстановления пароля, logout, просмотр профиля и еще некоторые. И он добавляет нашей сущности User важное свойство algorithm, которое позволит хранить в базе пароли зашифрованные разными алгоритмами.

 

Ближе к коду.

Для начала нам необходимо создать свою процедуру шифрования.
По умолчанию используется Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder
Его и будем расширять.

Реализуем свой Acme\UserBundle\Security\Encoder\MessageDigestPasswordEncoder

 
<?php

namespace Acme\UserBundle\Security\Encoder;

use Symfony\Component\Security\Core\Encoder;


class MessageDigestPasswordEncoder extends Encoder\BasePasswordEncoder
{
    private $algorithm;
    private $encodeHashAsBase64;

    /**
     * Constructor.
     *
     * @param string  $algorithm          The digest algorithm to use
     * @param Boolean $encodeHashAsBase64 Whether to base64 encode the password hash
     * @param integer $iterations         The number of iterations to use to stretch the password hash
     */
    public function __construct($algorithm = 'sha512', $encodeHashAsBase64 = true, $iterations = 5000)
    {
        $this->algorithm = $algorithm;
        $this->encodeHashAsBase64 = $encodeHashAsBase64;
        $this->iterations = $iterations;
    }

    public function encodePassword($raw, $salt)
    {
        if (!in_array($this->algorithm, hash_algos(), true)) {
            throw new \LogicException(sprintf('The algorithm "%s" is not supported.', $this->algorithm));
        }

       /*Ключевой момент*/
        if ($this->algorithm === 'sha1') {
            return hash('sha1', $raw);
        }

        $salted = $this->mergePasswordAndSalt($raw, $salt);
        $digest = hash($this->algorithm, $salted, true);

        // "stretch" hash
        for ($i = 1; $i < $this->iterations; $i++) {
            $digest = hash($this->algorithm, $digest.$salted, true);
        }

        return $this->encodeHashAsBase64 ? base64_encode($digest) : bin2hex($digest);
    }

    public function isPasswordValid($encoded, $raw, $salt)
    {
        return $this->comparePasswords($encoded, $this->encodePassword($raw, $salt));
    }
}

В моем случае, пароли шифровались с помощью sha1.
Важно! В базе для всех пользователей, обновите поле algorithm, установив в него название вашего алгоритма (у меня sha1).

Добавляем новый сервис в service.xml

 
<parameters>
   <parameter key="acme_user.security.encoder.digest.class">
       Acme\UserBundle\Security\Encoder\MessageDigestPasswordEncoder
   </parameter>
</parameters>

<service id="acme_user.security.encoder" class="%acme_user.security.encoder.digest.class%"></service>

В security.yml определяем новую процедуру шифрования для нашей сущности.

 
security:
    encoders:
        Acme\UserBundle\Entity\User: acme_user.security.encoder

Теперь, старые пользователи смогут пройти аутентификацию.

А если у нас в базе пароли хранятся в открытом виде или нас не устраивает алгоритм шифрования и мы хотим надежнее? То читаем ниже )) 
P.S. Еще я хотел привести пароли к стандартному процессу шифрования sha512 + salt + 5000 итераций на хэширование.

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

Создадим свой обработчик
P.S. В нем можно решить задачу редиректа пользователей в зависимости от роли на нужную страницую.


<?php

namespace Acme\UserBundle\Service;

use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;

class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface
{
    protected $container;

    protected $security;

    public function __construct(ContainerInterface $container, SecurityContext $security)
    {
        $this->container = $container;
        $this->security = $security;
    }

    public function onAuthenticationSuccess(Request $request, TokenInterface $token)
    {
        $user = $this->security->getToken()->getUser();
        if ($user->getAlgorithm() === 'sha1') {
             $password = $request->get('_password');
             $salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);

             $user->setPlainPassword($password);
             $user->setSalt($salt);

             $userManager = $this->container->get('fos_user.user_manager');
             $userManager->updateUser($user);
        }
        $response = new RedirectResponse('/');

        return $response;
    }

}

По умолчанию, установить свойство salt нельзя. Т.е. $user->setSalt($salt); - выдаст ошибку. Исправляем, добавляя нужный метод в нашу сущность.

Acme\UserBundle\Entity\User


    /**
     * @param $salt should be formed by this formula base_convert(sha1(uniqid(mt_rand(), true)), 16, 36)
     */
    public function setSalt($salt)
    {
        $this->salt = $salt;
    }
 

Добавляем новый сервис в service.xml


<parameters>
    <parameter key="acme_user.service.login_success_handler.class">
        Acme\UserBundle\Service\LoginSuccessHandler
    </parameter>
</parameters>

<service id="acme_user.service.login_success_handler" class="%acme_user.service.login_success_handler.class%">
    <argument type="service" id="service_container"></argument>
    <argument type="service" id="security.context" />
</service>

В security.yml определяем свой обработчик для успешной аутентификации.


firewalls:
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle #не обязательно
                success_handler: acme_user.service.login_success_handler

Теперь, после прохождения аутентификации, пароли будет перешифрованы на sha512 + salt + 5000 итераций на хэширование (все зависит от настроек).

В итоге, мы все сделали красиво и решили задачу в стиле symfony2 way избавившись от наследия старой базы и увеличили безопасность.

Большое спасибо ondrowan за помощь.

]]> 14
Тренинг и Symfony Camp UA 2011 28 октября и 29 октября мы с коллегами посетили тренинг "Symfony2: от Новичка до Ниндзя" и Symfony Camp UA 2011, проходившие в Киеве.

Основные цели поездки - знакомство Symfony2, тимбилдинг...]]>
Thu, 10 Nov 2011 12:59:38 +0200 http://igor-negrutsa.info/blogs/category/3/id/15 http://igor-negrutsa.info/blogs/category/3/id/15 igor.negrutsa@gmail.com (Игорь Негруца) http://igor-negrutsa.info/blogs/category/3/id/15#comments Игорь Негруца 28 октября и 29 октября мы с коллегами посетили тренинг "Symfony2: от Новичка до Ниндзя" и Symfony Camp UA 2011, проходившие в Киеве.

Основные цели поездки - знакомство Symfony2, тимбилдинг и, конечно, общение. Самое приятное, что цели были достигнуты, время было потрачено не зря. Очень рад был встретить членов русского комьюнити по Zend FrameworkСтепануКириллуАлександру и другим большой привет! ))

Из нашей компании поехало 5 человек, знаком с Symfony2 был только я )) Ехать с коллегами в поезде было очень весело.

День первый

Тренинг мне понравился. Узнал несколько интересных моментов по организации бизнес-логики, формам, безопасности и конечно BDD. Профит у тех, кто не был знаком с Symfony2 думаю, получился намного выше. Особо хочу выделить тренера. Константин очень опытный разработчик и у него можно многому научиться. Рекомендую всем приглядывать за тем, что он делает на гитхабе.

Не обошлось и без ложки дегтя. Помещение для тренинга не очень подходило. Людям приходилось ставить ноуты на дополнительные стулья, а мышками водить по пуфиками и быльцам кресел. Так как мы немного опоздали, то с трудом нашли себе места и розетки. С количеством людей, явно перебор. Пришлось сидеть очень далеко и проектор было плохо видно, да и освещение было скудным. Отсутствие интернета и не возможность докачать нужное, не позволили реализовать проект на 100%, да и навряд успели бы :) Материала было много, а Константин был слишком шустрым )). Большинство в итоге закрыло ноуты и просто слушали.

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

После тренинга у всех появилось желание делать проекты на Symfony2, а это главное )). Цель была достигнута.
Организаторам большое спасибо, думаю это был их первый опыт, и в следующий раз все пройдет на высшем уровне.

Уставшие, но довольные, мы отправились искать нашу гостиницу недалеко от места проведение конференции. Забронировали номера мы в NyvkyPlaza. Отель нам очень понравился. Отличные номера, фойе с диванами и креслами, где можно было посидеть, поговорить, сыграть в карты и выпить пива, так же был ресторан и бесплатный wi-fi. А особенно порадовало наличие сауны )). Сауна у нас была на 23:30, купили пива, заказали пиццу и отлично провели время, общаясь и отдыхая. Не хватало только бильярда, но наличие очешуительной джакузи это компенсировало. Полный рееелаааакс. И хотя спать легли примерно в 3 утра, но это того стоило.

День второй :)

В этот раз мы не опоздали и заняли хорошие места в четвертом ряду.

Symfony2 Service Container: Inject me, my friend
Кирилл Чебунин
Отличный доклад. Кирилл мне очень нравится как докладчик и его манера подачи материала не дает заснуть )) Рассказывал легко и интересно. Начал с основ и копнул довольно глубоко. Очень практичный доклад.

TestGuy – эмулируем вашего тестировщика на PHP
Боднарчук Михаил
Тема для меня интересная. Отличное решение. Михаил рассказывал просто и без заморочек. Ему явно не хватало опыта на борьбу с троллями, но на помощь пришел Константин и быстренько всех уделал )).

Практическое применение Symfony. Мобильные приложения
Алексей Денисюк и Вячеслав Энис
Противоречивый доклад, вызвал ярое обсуждение в твиттере. Информация для меня была интересной, хотя к Symfony2 отношения не имела )).

Подведу итог первой половины конфы высказыванием своего коллеги

ITrofimenko Ivan Trofimenko
"Первый доклад взорвал мозг, второй доклад взорвал аудиторию, а третий же взорвал твиттер. что дальше?"

Перерыв на обед

Обед у нас был в компании Степана и Кирилла. Хорошая еда и отличная компания, ну чего еще желать.


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

Twig – что за … ?
Александр Демченко
Один из трех докладчиков, которых я в писал в графу “Лучшие” )) и один из организаторов. В докладе он озвучил мысли многих людей, который не работали с шаблонизаторами или давно перестали. Думаю, многие решили использовать твиг или хотя бы к нему присмотреться. Так же для новичков было много полезной инфы.

Symfony2. На чем можно сэкономить время при разработке?
Степан Танасийчук
Очень живо и интересно ввел в Symfony2 и познакомил с полезными практиками и бандлами, по пути рассказывая занимательные истории )) Степан как всегда был на высоте. Один из лучших докладов от отличного докладчика.

В конце был обмен опытом и ответы на вопросы. В следующий раз надеюсь, эта часть будет длиннее.

Организация была на твердую четверку. Единственное в следующем году надо зал попросторнее, а то некоторые не влезли. Большое спасибо организатором! Следующую конфу буду ждать с нетерпением.

P.S. Серьезных и глубоких тем по Symfony2 я не ждал. Релиз был недавно и реальных кейсов еще маловато.

Но это еще не конец )) Затем человек 20-30 отправилось на афтепати, которое прошло в пабе "Бочка". Очень неудачное место, пришлось разбиться на 3 стола, слышно было только людей сидящих рядом. Возможность общения - минимальная. Лучше бы запланировать афтепати заранее и не далеко от места проведения, в месте без лишней музыки и шума. Шведский стол, большие столы, невозможность усесться, но с возможностью свободного общения и перемещения между столами. Немного посидев, я с коллегами отправился гулять по вечернему Киеву.

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

День третий

Гуляние по Киеву, посещение парков, храмов и торговых центров, а в перерывах кафешки и кофейни. Сопровождалось наше гуляние, различными холиварными темами и фотосъемками.
В поезде активно делились впечатлениями и обсуждали конференцию, Symfony2, NoSQL, highload и др. технические темы.

Всем понравилось и все довольны.

Ссылки на фотки, презентации и фидбеки
P.S. На фотках я в розовой футболке с надписью ...Google... ))

]]>
12
Все на Zend Framework Day Zend Framework Day12 ноября, в Киеве, пройдет конференция "Zend Framework Day" - посвященная популярному PHP фреймворку Zend Framework. Среди докладчиков непосредственные разработчики компонент Zend Framework. Событие соберет лучших...]]> Thu, 13 Oct 2011 16:46:32 +0300 http://igor-negrutsa.info/blogs/category/5/id/14 http://igor-negrutsa.info/blogs/category/5/id/14 igor.negrutsa@gmail.com (Игорь Негруца) http://igor-negrutsa.info/blogs/category/5/id/14#comments Игорь Негруца Zend Framework Day12 ноября, в Киеве, пройдет конференция "Zend Framework Day" - посвященная популярному PHP фреймворку Zend Framework. Среди докладчиков непосредственные разработчики компонент Zend Framework. Событие соберет лучших PHP и Zend Framework специалистов из Украины, России, Белоруссии и других стран СНГ.

С текущим списком тем и докладчиков можно ознакомиться на странице.

Событие будет интересно не только тем, кто использует Zend Framework, но и всем веб-разработчикам и PHP программистам в частности.

Место проведения — отель "Казацкий", г. Киев, ул. Михайловская 1/3 (Площадь Независимости).

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

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

Сайт конференции - http://frameworksdays.com/event/zend-framework-day-2011
Наши новости в twitter - http://twitter.com/fwdays
Наша страница в facebook – http://facebook.com/fwdays

]]>
9
Конференция Symfony Camp UA 2011, 29 октября 2011, Киев Конференция Symfony Camp UA 2011

Конференция Symfony Camp UA 2011 посвящена разработке web-приложений с...]]> Wed, 21 Sep 2011 10:01:20 +0300 http://igor-negrutsa.info/blogs/category/5/id/13 http://igor-negrutsa.info/blogs/category/5/id/13 igor.negrutsa@gmail.com (Игорь Негруца) http://igor-negrutsa.info/blogs/category/5/id/13#comments Игорь Негруца Конференция Symfony Camp UA 2011

Конференция Symfony Camp UA 2011 посвящена разработке web-приложений с использованием PHP Framework Symfony. Основная тема конференции – это новая версия фреймворка Symfony 2. Это третья по счету конференция, которая состоится 29 октября 2011 года в Киеве. Для участия необходимо пройти регистрацию. Конференция Бесплатная!

Программа конференции еще формируется. Все желающие выступить с докладом на Symfony Camp UA могут подать заявку на сайте 2011.symfonycamp.org.ua.

Вы можете выбрать одну из предложенных ниже тем докладов или предложить свою:

- Doctrine 2 (ORM, ODM, MongoDB) / Propel 1.6
- Twig
- Form + Validation
- Symfony2 Security
- Symfony CMF
- Silex
- Dependency Injection и Symfony2 Service Container
- Ускоряем разработку с Symfony2
- Разработка высоконагруженных сайтов с Symfony2
- Оптимизация frontend (Caching, Assetic)
- Админка для Symfony2
- Unit and Functional Testing c Symfony2
- Перенос проекта с 1.x на 2

Подробности и новости:

Сайт конференции: 2011.symfonycamp.org.ua
RSS-канал: feeds.feedburner.com/symfonycampua
Twitter: @symfonycampua
Twitter хеш тег: #sfcampua

 

P.S. Очень хочу поехать и поеду ))

]]> 9
Отзыв о книге - «PHP. Объекты, шаблоны и методики программирования» Мэтт Зандстра «PHP. Объекты, шаблоны и методики программирования» Мэтт Зандстра    Эта книга - один из лучших трудов, которые я читал по PHP5....]]> Tue, 28 Jun 2011 15:35:59 +0300 http://igor-negrutsa.info/blogs/category/3/id/12 http://igor-negrutsa.info/blogs/category/3/id/12 igor.negrutsa@gmail.com (Игорь Негруца) http://igor-negrutsa.info/blogs/category/3/id/12#comments Игорь Негруца «PHP. Объекты, шаблоны и методики программирования» Мэтт Зандстра    Эта книга - один из лучших трудов, которые я читал по PHP5. Единственное о чем я жалею, что не прочитал ее раньше, когда только начинал работать PHP разработчиком и серьезно погружаться в мир ООП.

    Автор изложил методики объектно-ориентированного программирования и проектирования с точки зрения программиста на PHP. В книге он собрал и переработал колоссальный объем материала  об ООП, шаблонах проектирования и шаблонах корпоративного уровня, а так же знакомит с проф. инструментами разработчика.
    В главе  "Объекты и методологии проектирования"  автор учит базовым принципам и описывает практические решения ООП.
    В части 3 "Шаблоны" автор описывает шаблоны проектирования, самые распространённые  из них: Factory, Facade, Decorator, Strategy, Observer и т.д. Зная эти и другие шаблоны, можно научиться писать более гибкий и понятный код, а так же формируется язык коммуникаций между программистами. В главе "шаблоны корпоративного уровня" читатель сможет познакомится с Front Controller-ом, Template View и Domain Model, а так же рекомендую обратить особое внимание на шаблоны баз данных. Знакомство с этими шаблонами позволит лучше понимать внутреннее устройство фреймворков, и даст знания для разработки собственных архитектур.
    В последней части автор знакомит с инструментами профессиональных разработчиков. Я бы выделил Phing - для развертывания PHP-приложений и PHPUnit2 для тестирования кода.
    Книга позволяет задуматься над принципами и методами правильной и качественной разработки. Автор изложил все в очень легкой и  доступной форме, сосредоточившись на главном. Весь материал сопровожден хорошими примерами и не сложными UML диаграммами.
    На самом деле языки программирования и фреймворки не играют решающей роли и их важность относительна, главное принципы. И автору удается на тонком уровне настроить читателя на истинный  путь)).

    Книга достойна, занять свое место на полке или в book-reader-е. Она будет особо полезна junior-ам и middle-ам, но и опытные разработчики найдут в ней что-то интересное, восстановят в памяти какие-то моменты и систематизируют свой опыт.
    После прочтения появляется ясное понимание,  в каком направлении двигаться и что изучать дальше. Я бы рекомендовал отправиться читать Кента Бека «Implementation Patterns», затем «Приемы объектно-ориентированного проектирования. Паттерны проектирования» от GoF и Мартина Фаулера «Архитектура корпоративных приложений».

Ссылки на ресурсы по паттернам:

Чуть не забыл про Хабр Совершенный код.

P.S. Желаю удачного изучения!     

]]>
22
Обзор инструментов для построения графиков. Довольно часто в проектах, необходимо строить графики различной сложности. Не так давно, снова представилась возможность решить эту задачу.

Обзор не претендует на полноту, это всего лишь мое виденье ситуации, так же он рассчитан на новичков. За гранью осталось еще...]]> Mon, 09 May 2011 11:46:12 +0300 http://igor-negrutsa.info/blogs/category/4/id/11 http://igor-negrutsa.info/blogs/category/4/id/11 igor.negrutsa@gmail.com (Игорь Негруца) http://igor-negrutsa.info/blogs/category/4/id/11#comments Игорь Негруца Довольно часто в проектах, необходимо строить графики различной сложности. Не так давно, снова представилась возможность решить эту задачу.

Обзор не претендует на полноту, это всего лишь мое виденье ситуации, так же он рассчитан на новичков. За гранью осталось еще много библиотек и фреймворков.

Библиотеки и фреймворки, которые предоставляют возможность для построения графиков, условно можно поделить по следующим способам реализации:

В свою очередь, все они делятся на: серверные, клиентские и сервисы.

  • К серверным относятся: jpgraph, ezcomponents, pChart.
    Всю работу по обработке данных и формированию графиков берет на себя сервер.
    На выходе получаем картинку либо флэшку.
  • К клиентским относятся: jqPlot, Sencha(ExtJs), Dojo, YUI, amCharts, Open Flash Chart 2.
    Всю работу по обработке данных и формирования графиков берет на себя клиент.
    На выходе получаем флэшку либо canvas.
  • К сервисам у нас относится только Google Chart.
    Всю работу по обработке данных и формированию графиков берет на себя сторонний сервис, возвращая нам уже готовый результат.


Серверные

Плюсы:

  • Легкая возможность изменения исходного кода.
  • Богатый функционал и гибкая возможность настройки.
  • Легко добавить кэширование или отложенное формирование графиков.

Минусы:

  • Нагрузка ложится на сервер, при большом кол-ве графиков и слабом сервере придется искать другие варианты.


Клиентские

Плюсы:

  • Всю работу выполняет клиент, что снимает нагрузку с сервера.
  • Красивый внешний вид графиков.
  • Конфигурация и настройка с помощью JavaScript.

Минусы:

  • При построении сложных графиков может не хватить функционала и параметров конфигурирования. Связано с молодостью существующих решений.
  • Сложность изменения кода. Особенно если это flash, так как не все знают flash и далеко не все хорошо владеют JavaScript-ом.
  • Нагрузка ложится на клиента.


Сервисы

Плюсы:

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

Минусы:

  • При построении сложных графиков может не хватить функционала и параметров конфигурирования. Связано с молодостью существующих решений.
  • Нет возможности повлиять на исходный код.
  • Сервис может быть перегружен и не доступен для взаимодействия с ним.
  • Ограничения на кол-во обращений.


Кратко о библиотеках

  • jpgraph - очень мощная библиотека. Много примеров и полная документация + API. Ее возможности и гибкость настроек впечатляют. Но внешний вид графиков не на высоте. Для специфичных графиков придется купить лицензию. Удручает, что разработчики сконцентрировались на развитии Pro версии, но надеюсь, и Free версии уделят внимание.
  • ezcomponents - работа с графиками является одной из возможностей данного фреймворка. Хорошая документация и много примеров. Основной плюс - это возможность получить на выходе, как картинку, так и флэшку, что позволяет сделать графики очень красивыми. Легко интегрируется в Zend Framework благодаря автозагрузчику. Из минусов - это относительная молодость, что сказывается на функционале и гибкости настроек. К сожалению фреймворк видимо забросили, последний релиз был в марте 2010.
  • pChart - спасибо MasKarAl за комент. Фреймворк активно развивается, красивые графики, хорошая документация и наличие примеров. Обязательно попробую использовать в одном из проектов.
  • jqPlot - очень интересное решение. Является плагином к Jquery, возможности впечатляют. С документацией и примерами все ок. На выходе выдает canvas, для IE хак от гугла. Из минусов - это относительная молодость, что сказывается на функционале и гибкости настроек.
  • Sencha(ExtJs) - фреймворк как всегда продолжает радовать и поражать своим функционалом и красотой. Работа с графиками является одной из возможностей. И хотя компонент очень молодой, его функционал впечатляет. Примеры и API на уровне.
  • Dojo - работа с графиками является одной из возможностей фреймворка. Примеры и документация впечатляют своей скудностью. Надеюсь, в дальнейшем все изменится.
  • YUI - работа с графиками является одной из возможностей фреймворка. Довольно неплохая документация. Есть примеры, описывающие все возможности. На выходе флэшка, т.е. графики красивые. В плане возможностей и настроек, все на уровне.
  • amCharts - полностью на флэше. Графики впечатляют своей красотой. Довольно много примеров и нормальная документация. Но, либо в графиках будет ссылка на сайт создателей, либо покупка лицензии.
  • Open Flash Chart 2 - довольно интересная библиотека, сделанная на флэше. Не плохая документация, есть много примеров с кодом. Но графики не дотягивают до красоты amCharts. Последнее обновления было в 2009 году. Продукт скорее всего не развивается.
  • Google Chart - есть примеры и дока, проект активно развивается. Но возможностей пока маловато.


Вывод

Я отдаю свое предпочтение:

  • Из серверных: ezcomponents (люблю красивые графики).
  • Из клиентских: (jqPlot или Sencha(ExtJs)) или amCharts.
  • Из сервисных (тут выбор не большой):Google Chart.
]]> 9
Список докладов и финальная регистрация ZFConf 2011 Логотип ZendFramework Conference

Список докладов и финальная регистрация ZFConf 2011

Основные подготовительные работы по конференции закончены. Доклады...]]> Fri, 06 May 2011 10:15:08 +0300 http://igor-negrutsa.info/blogs/category/5/id/10 http://igor-negrutsa.info/blogs/category/5/id/10 igor.negrutsa@gmail.com (Игорь Негруца) http://igor-negrutsa.info/blogs/category/5/id/10#comments Игорь Негруца Логотип ZendFramework Conference

Список докладов и финальная регистрация ZFConf 2011

Основные подготовительные работы по конференции закончены. Доклады сформированы. Среди спикеров представители KnpLabs, Magento, JetBrains, Sphinx и других известных компаний.

Открыта финальная регистрация!

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

Пожалуйста, обратите внимание на то, что изменилось место проведения! Мероприятие будет проходить на прошлогодней площадке — в актовом зале ЛГТЦ (Ленгипротранс-Центр), по адресу: Московский пр., 143, ст. м. «Электросила». Кофе-брейки и обсуждения на флипчартах будут проходить в фойе.

Cписок докладов:

Стоимость участия в мероприятии составит 1500 руб. В данную сумму входит: участие в самой конференции, кофе-брейки (от внешней кейтеринг-компании), пакет материалов участника и доступ к профессиональным видеозаписям докладов (после мероприятия). Доступно множество способов оплаты.

Торопитесь, количество мест ограничено!

Обязательно следите за последними новостями:
RSS-канал: feeds.feedburner.com/zfconf
Twitter: @zfconf
Группа ВКонтакте: vkontakte.ru/club14951507

Организатор: компания Wizartech
Партнеры: сообщество zendframework.ru и конференция ZFConf Ukraine

P.S. Поехать на конференция в этом году не смогу, но обязательно приобрету видео.

]]> 4
Создание приложения для Facebook Недавно писал приложение для Facebook. Тема актуальная, решил составить небольшую шпору(основные моменты), пригодится как мне, так и другим.

Отдельно хочу поблагодарить Hillel, за помощь с Facebook API, без него мне было бы намного...]]> Mon, 02 May 2011 12:23:17 +0300 http://igor-negrutsa.info/blogs/category/4/id/9 http://igor-negrutsa.info/blogs/category/4/id/9 igor.negrutsa@gmail.com (Игорь Негруца) http://igor-negrutsa.info/blogs/category/4/id/9#comments Игорь Негруца Недавно писал приложение для Facebook. Тема актуальная, решил составить небольшую шпору(основные моменты), пригодится как мне, так и другим.

Отдельно хочу поблагодарить Hillel, за помощь с Facebook API, без него мне было бы намного сложнее.


Приложение

Для создания приложения идем сюда.

http://www.facebook.com/apps/application.php?id=[APPLICATION_ID] - Ссылка на приложение.

http://apps.facebook.com/[MY_APP_NAME] -  Ссылка на само приложение

http://www.facebook.com/[MY_APP_NAME] - После того как у приложения будет 25 фанов

Вкладка "Web Site"
Aдрес сайта где будет осуществляться аутентификация, базовый домен - чтобы позволить аутентификацию во всех его под доменов.

Вкладка "Facebook Integration"
Для интеграции приложения как iframe. Бронируем желаемый урл, указываем адрес для iframe(место нахождения приложения)

в "Advanced":

  • Deauthorize Callback - при удалении приложения будет послан POST запрос, но в новом API могут быть проблемы.
  • JSON Encoding Empty Arrays - Enabled
  • Canvas Session Parameter - Enabled. Чтобы Graph API работал.


Ссылки


Дополнительно

Ширины iframe не должна быть больше 760px. Это стандарт Facebook!

По дефолту высота iframe-а маленька, чтобы по высоте не было ограничение, необходимо использовать FB.Canvas.setAutoResize:

window.fbAsyncInit = function() { // ... FB.Canvas.setAutoResize(1); // обновлять каждую X секунд };

Но могут быть проблемы в некоторых браузерах, что бы их обойти:


function sizeChangeCallback(heightLength) {
    FB.Canvas.setSize({width: 760, height: heightLength});
}
 
$(document).ready(function() {
    setTimeout(function() {
        sizeChangeCallback($.getDocHeight());
    }, 1);
});
 
$.getDocHeight = function(){
    return Math.max(
        $(document).height(),
        $(window).height(),
        /* For opera: */
        document.documentElement.clientHeight
    );
};

Важно, когда работаешь с iframe, то во всех ссылках должен быть атрибут target со значением _top!

Очень осторожно с длинными ID!


$fbId = 100000926675492;
$id = (int) $fbId;
echo $id; // outputs 1203122724;

Поддержка fbml в соответствии определенному dtd:


<html xmlns:fb="http://www.facebook.com/2008/fbml">

Инициализация JS SDK:


<div id="fb-root"></div>
<script type="text/javascript">
      window.fbAsyncInit = function() {
          FB.init({
              appId   : 'getAppId(); ?>',
              session : , // don't refetch the session when PHP already has it
              status  : true, // check login status
              cookie  : true, // enable cookies to allow the server to access the session
              xfbml   : true // parse XFBML
          });
          // whenever the user logs in, we refresh the page
          FB.Event.subscribe('auth.login', function() {
              window.location.reload();
          });
          FB.Canvas.setAutoResize(1);
      };
      (function() {
          var e = document.createElement('script');
          e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
          e.async = true;
          document.getElementById('fb-root').appendChild(e);
      }());
  </script>
 

Альтернативное подключение jQuery


<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
    google.load("jquery", "1"); // 1.4.3
</script>

На Faceboo есть проблема с синхронизацией между серверами и с обновлением информации! Это необходимо учесть.
Так же API часто обновляется и что то может ломаться.

Есть проблема с cookies внутри iframe - решение на хабре

]]> 4
Отзыв о ZFConf Ukraine & MageConf     Спустя неделю выкроил время для написания отчета о конференции ZFConf Ukraine 2010.
Для меня - это была первая профессиональная конференция и нормальная поездка в Киев. Компанию в путешествии мне составил мой коллега и друг
Mon, 06 Dec 2010 14:16:23 +0200 http://igor-negrutsa.info/blogs/category/5/id/8 http://igor-negrutsa.info/blogs/category/5/id/8 igor.negrutsa@gmail.com (Игорь Негруца) http://igor-negrutsa.info/blogs/category/5/id/8#comments Игорь Негруца     Спустя неделю выкроил время для написания отчета о конференции ZFConf Ukraine 2010.
Для меня - это была первая профессиональная конференция и нормальная поездка в Киев. Компанию в путешествии мне составил мой коллега и друг Артем Кузнецов.
    Дорога до Киева была легкой и приятной, по приезду в Киев вкусно позавтракали в Челентано и отправились в отель. Отель выбрали Экотель "Нивки"  -  его рекомендовали организаторы. Нам повезло, хоть время въезда было в 12. 00, но нас пустили в 9.00. Мы успели еще немного отдохнуть. Номер был просто отличным, за 460 грн, двухместный за 1.5 суток. В номере был нормальный интернет и комп с убунтой, мелочь но приятно. К 11 часам мы отправились в  "Экспо Плаза"  в 5 мин. ходьбы от отеля.
    Место конечно специфичное,  огромная территория на которой можно было бы устроить какие нибудь соревнования. Почти сразу познакомился с Александром Стешенко и его женой, а так же с Виктором Фараздаги. Дальше было знакомство с Александром Махометом и со Степаном Танасийчуком.
    Очень удобно было организовано кафе с печеньками, пирожками, кофе и чаем, так же были столики для вкушения  еды. Удалось получить футболку с логом Мадженто, буду дома носить. Так же мадженто раздавали и др. подарки. Улыбнула панель на которой крутилась реклама мадженто. Теперь жду когда появится фильм, судя из рекламы, он должен затмить Аватара.Из минусов могу отметить только отсутствие гардероба, было очень не удобно таскать куртку, хорошо что еще сумки в руках не было. Залов было 4,  тут особо сказать нечего, стандартные залы. Ед. экран был слишком низким и с 5 ряда было плохо видно низ презентации.

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

    Первый доклад на котором я был назывался "Встречайте Zend Framework 2.0" от  Александра Веремьева, одного из основных разработчиков Zend Framework. Доклад был явно полезен для всего сообщества и хоть я не узнал много нового (спасибо Виктуру Фараздаги и его подкастам :) ), но сам Александр был мне очень интересен.


    Следующий доклад который я очень хотел послушать был "Эволюция ZF: архитектура, шаблоны, рефакторинг" от Виктора Фараздаги. Виктор излагал все очень активно и четко, ему удалось уложить очень много информации  в 50 мин. Он выложился на все 120%. Информация была очень полезной и интересной. Походу доклада я сделал много заметок. Это был один из лучших докладов и он оправдал все мои ожидания. Доклад на 5+.

    Затем я покинул поток ZF и пошел на поток Mix, где послушал доклад "Применение Scrum и Kanban для разработки web-приложений". Докладчика звали Кирилл Климов. Доклад был очень полезным и слушать его было легко, почерпнул много полезной информации и понял, что давно пора просмотреть все что у меня есть по Agile. Улыбнул звездун, который сидел рядом со мной и судил о докладчиках и потоках по ноутам на которых запускались презентации.
Я променял “Юнит тестирование в Zend Framework 2.0” на “Scrum и Kanban”, так как методологии разработки для меня сейчас более актуальны чем юнит тестирование. Но доклад о юнит тестировании я недавно посмотрел и он был очень интересным и полезным.

    Настало время обеда :)

Пирожками и печеньками сыт не будешь и мы отправились на поиски еды... Немного купили в магазине, а потом обнаружили "Форнетти" и затарились слойками и пиццами. Вернувшись в "Экспо Плаза"  сытно пообедали.

    После обеда я вернулся на поток ZF, который уже больше не покидал.
Настало время доклада Кирилла Мокевнина "Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социальной сети starlook.ru". Очень полезный и практичный доклад. Но больше всего понравился докладчик, Кирилл был на 5+.

    Следующим был доклад Валерия Рабиевского "Doctrine 2". После доклада я понял, что буду применять Доктрину 2 в своей работе. Спасибо за это докладчику. У Валерия это был первый публичный доклад и справился он очень хорошо, доклад получился очень интересным и познавательным.

    Настало время последнего доклада, его я тоже очень хотел послушать.
Кирилл Чебунин рассказал о "Чуть сложнее чем Singleton: аннотации, IOC, АОП". Кирилл был на уровне, доклад получился отменным на твердую 5. Узнал много интересного, а так же почерпнул несколько идей, теперь жду обещанной реализации :)

Вывод
    Все доклады и докладчик были на уровне. Я не зря потратил время и деньги компании (спасибо Шефу). Из моего отзыва понятно какие доклады я считаю самыми интересными и познавательными. Так же во время конференции удалось познакомится и пообщаться со многими интересными людьми из которых: Александра Веремьева, Кирилла Мокевнин, Кирилл Чебунин и многие другие. У всех кого не упомянул прошу прощение.
    Все презентации и видео докладов можно скачать с официального сайта конференции.
Организаторам большущее спасибо, все было на уровне, вы молодцы!

А дальше было не менее интересно :)

    Мы направились в кафе, где очень хорошо поужинали, и хотя организаторы навряд задумывались об вегетарианцах, но я наелся, так я даже на свадьбах не ел :). На этом вечер не закончился.  Мы отправились в центр Киева, где нашли уютный паб и хорошо провели время за неформальными беседами и знакомством. Жаль, но нам  с Артемом пришлось уйти пораньше, так как надо было еще добраться до отеля. Уставшие, но довольные мы вернулись в отель и завалились спать.

    На следующий день мы проснулись пораньше и отправились гулять по Киеву. Посетили Андреевский спуск и зашли позавтракать в "Пузату Хату", завтрак получился отличным. Затем спустились к Днепру и прогулялись от Днепра до Крещатика на котором завалились в кофейню и отведали местного Латте с Чизстейком.
    Затем было самое интересное, мы созвонились со Степаном Танасийчуком и присоединились к ним и другим гостям города на экскурсию по Киеву. Посетили какой то парк, Арку Дружбы Народов и покатались на машинках. Было весело, интересно и познавательно. Было много классных фоток, которые я надеюсь увидеть.Но самое ценное - это конечно общение с умными, позитивными и интересными людьми. После такого общение чувствуешь прилив сил и одухотворение. К сожалению нам пришлось уйти пораньше, так как надо было заехать в гостиницу забрать вещи и затем на поезд домой. Парни и девченки - вы были супер!
Ед. чего мне не хватило в этой поездки, это конечно общения неформального и по техническим вопросам.  Надеюсь в следующий раз удастся пообщаться больше и познакомится с теми с кем не удалось.
    Еще раз спасибо всем с кем удалось приятно провести время. Организаторам конференции огромнейший респект и отдельное спасибо Артему за компанию, вместе нам было весело :).

    Забрав в отеле вещи мы поехали на вокзал, где поужинали в Челентано. Сытые и довольные отправились на поезд. Назад в Донецк мы везли море положительных эмоций и впечатлений! На самом деле, я не могу вспомнить не одного отрицательного момента в поездке.

Поездка удалась на все 100%!

]]>
17
Совместная конференция ZFConf Ukraine & MageConf image 27го ноября в в Киеве пройдет бесплатная, международная, совместная конференция ZFConf Ukraine & MageConf. Цель конференции - объединить лучших специалистов PHP и Zend...]]> Fri, 12 Nov 2010 10:08:35 +0200 http://igor-negrutsa.info/blogs/category/5/id/7 http://igor-negrutsa.info/blogs/category/5/id/7 igor.negrutsa@gmail.com (Игорь Негруца) http://igor-negrutsa.info/blogs/category/5/id/7#comments Игорь Негруца image 27го ноября в в Киеве пройдет бесплатная, международная, совместная конференция ZFConf Ukraine & MageConf. Цель конференции - объединить лучших специалистов PHP и Zend Framework Украины, России и других стран СНГ.

ZFConf Ukraine – первая в Украине конференция по Zend Framework, проводится в партнерстве с ZFConf Russia и сообществом zendframework.ru. ZFConf Russia была первой конференцией по Zend Framework и прошла в марте этого года в Санкт-Петербурге, Россия, собрав более 200 участников из России, Беларуси, Украины, Литвы и других стран СНГ

Конференция MageConf впервые прошла в мае 2010 года в Киеве. Это была первая конференция из серии PHP and Zend Framework в Украине. Ее посетили более 150 специалистов.

Конференция пройдет 27 ноября, в Киеве
Титульный спонсор конференции – компания Magento
Место: КиевЭкспоПлаза, ул. Салютная 2б, 3 павильон
Время: 27 ноября 2010 г. (с 11:00 до 19:00)
Длительность: 1 полный день
Формат: доклады в три потока и обсуждения на флипчарте (в перерывах)
Язык докладов: русский
Стоимость участия: бесплатно
Потоки: Zend Framework, PHP, Magento.

Аудитория: Разработчики ПО и специалисты по Project Management с Украины, России и близлежащих стран СНГ. Ожидаемое количество участников – 500 человек.

Доклады

1. Встречайте Zend Framework 2.0
Александр Веремьев / Zend Framework Core команда (Zend Technologies)

2. Эволюция ZF: архитектура, шаблоны, рефакторинг
Виктор Фараздаги / Component Maintainer и Contributor ZF 2.0 (4C)

3. Юнит тестирование в Zend Framework 2.0
Ростислав Михайлив / Chief Developer / Software Architect (Gadu-Gadu)

4. Хранение, обработка и отдача статики с использованием \Zend \File. Опыт социальной сети starlook.ru
Кирилл Мокевнин / Senior developer (undev)

5. Чуть сложнее чем Singleton: аннотации, IOC, АОП
Кирилл Чебунин / Senior PHP Developer (Альпари)

6. Doctrine 2
Валерий Рабиевский / Team leader (stfalcon.com)

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

Регистрация
Регистрируясь на одну конференцию, вы автоматически получаете доступ и на другую.

Если у вас есть предложения, или вы хотите быть спонсором, для связи с нами используйте контакты

Регистрируйтесь и следите за обновлениями на http://zfconf.org.ua

 

P.S. Я еду!!! :)

]]>
10