<rmcreative>

RSS
  1. Yii 2 собирается разделить репозиторий

    21 марта

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

    UPD: отклик был положительный, разделили.

    Читаем

    17 комментариев
  2. Слайды с Dump 2015

    21 марта

    Dump прошёл отлично. Отличный уровень организации, классные стенды, интересные доклады.

    На этот раз я рассказывал про HHVM, а не про Yii. Прошло хорошо.

    Слайды

    Комментировать
  3. yii2-shop, код с мастер класса в Екатеринбурге

    10 марта

    Немного привёл в порядок и выложил код с мастер класса в Екатеринбурге. В нём отражена попытка создать витрину магазина на основе шаблона advanced.

    https://github.com/samdark/yii2-shop

    12 комментариев
  4. HTTP/2

    3 марта

    17 февраля 2015 вторая версия HTTP стала кандидатом на стандарт и уже поддерживается в Chrome (--enable-spdy4), Firefox, IE 11.

    Изменения, по сравнению с 1.1, значительные и серьёзно повлияют на веб-разработку в целом.

    HTTP/2 основан на SPDY. То есть используется одно TCP соединение для передачи в обе стороны нескольких запросов-ответов. Передаваемое при этом, включая заголовки, представляется в сжатом бинарном виде. В дополнение сервер может заранее отсылать не связанные с открытой страницей ресурсы в кэш браузера.

    То есть такие техники как спрайты, сжатие и сборка CSS/JS в один файл, отдельный домен без cookie для ресурсов, несколько доменов для ресурсов, становятся не нужны и даже вредны. Правильно будет отдавать ресурсы мелкими порциями только когда они реально нужны. То есть чтобы для каждой отдельно взятой страницы количество загружаемых ресурсов было минимальным.

    12 комментариев
  5. Yii 2.0.3

    2 марта

    Точно в срок вышел релиз PHP фреймворка Yii версии 2.0.3. В данную версию вошли около 50 улучшений и исправлений.

    Подробнее можно почитать в анонсе на хабре.

    2 комментария
  6. Как поставить расширение на Yii 2.0 без Composer

    24 февраля

    Не первый раз спрашивают, как поставить расширение Yii 2.0 без Composer. Отвечаю.

    Ставить будем yii2-imperavi-widget.

    • Идём в https://github.com/vova07/yii2-imperavi-widget/releases, забираем архив.
    • Смотрим его composer.json.
    • Там у нас есть секция autoload, в ней упоминание PSR-4 и vova07/imperavi.
    • Распаковываем файлы в vendor/vova07/imperavi.
    • В vendor/composer/autoload_psr4.php добавляем:
    'vova07\\imperavi\\' => array($vendorDir . '/vova07/imperavi'),
    • В vendor/yiisoft/extensions.php добавляем:
    'vova07/imperavi' => array (
        'name' => 'vova07/imperavi',
        'version' => '2',
        'alias' => array (
            '@vova07/imperavi' => $vendorDir . '/vova07/imperavi',
        ),
    ),

    Всё это делает за вас Composer. Лучше изучите его и не теряйте время.

    14 комментариев
  7. Буду на Dump 2015 в Екатеринбурге

    23 февраля

    20 марта 2015 буду в Екатеринбурге на конференции Dump. Расскажу в секции «serverside light» про HHVM: зачем он Facebook, как он развивался, как устроен, можно ли использовать и насколько безболезненно. Также упомяну про HACK, phpng и другие занятные штуки.

    Вообще программа интересная, должно быть круто.

    Записывайтесь

    4 комментария
  8. Плавная анимация в браузере

    20 февраля

    Добиться плавной анимации при наличии тучи DOM-элементов, да ещё и когда в анимируемом контейнере грузятся картинки и какой-нибудь Google Maps, оказалось не просто. Путь был довольно долг и тернист. Приведу только рецепт:

    1. Не используйте jQuery.animate(). Он тормоз.
    2. Вместо него используйте Velocity.js.
    3. Если возможно, анимируйте только transform: translate, transform: scale, transform: rotate, opacity.
    4. Включайте аппаратное ускорение для анимируемого слоя. Делайте это сразу в CSS, приправьте чёрной магией.

    Если и после этого не помогло:

    1. Попробуйте уменьшить количество DOM-элементов в анимируемом контейнере.
    2. Не стартуйте несколько анимаций единовременно.
    3. Если контент в контейнер подгружается динамически, рисуйте во время анимации эмуляцию контента, как это делает, например, Facebook. Заменяйте на реальный контент как только анимация закончена.
    Комментировать
  9. popstate, webkit и старый Chrome

    20 февраля

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

    Не тут-то было! Оказывается, Safari и старые Chrome вызывают лишнее событие popstate при начальной загрузке страницы. Chrome это в современных своих версиях поправил, а вот в актуальном Safari проблема есть.

    Изучение кода pjax и гугление дало много разных решений. Вот правильное (код для jQuery, но без него будет примерно оно же):

    $(window).load(function() {
        setTimeout(function() {
            $(window).on('popstate', function (e) {
                    // работаем
            });
        }, 0);
    });

    Идея в том, чтобы зарегистрировать наш обработчик после того, как начальное событие popstate всплывёт. Всплывает оно по load, поэтому вешаем обработчик на него. setTimeout с задержкой 0 нужен для того, чтобы обработчик был последним.

    4 комментария
  10. Как хранить упорядоченный список в базе данных

    15 февраля

    Время от времени мне прилетают в почту занятные вопросы. Последний про хранение упорядоченного списка в базе данных.

    Имеется возможность загрузки фото в альбомы. Нужно реализовать возможность упорядочивать фото в пределах альбома. Автор уже хранит порядок в поле order, но его напрягает, что при перетаскивании какой-либо из картинок нужно обновлять order у фотографий всего альбома.

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

    Если же операция достаточно частая, можно схитрить и хранить order как decimal. В этом случае при вставке или перемещении фото между двумя другими необходимо обновить только order непосредственно перемещаемой записи.

    Если мы перемещаем фото C и засовываем его между фото A и фото B, то значение order для него вычисляется как

    C.order = A.order + (B.order - A.order) / 2;
    

    UPD: из за ограничений точности следует проверять, влезет ли в базу очередное значение. Если нет — пересчитывать order. Даже несмотря на то, что от пересчётов мы не избавились, их частота сократилась для худшего случая на порядок.

    8 комментариев