<rmcreative>

RSS
  1. Как поставить расширение на Yii 2.0 без Composer

    24 февраля 2015

    Не первый раз спрашивают, как поставить расширение 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/src'),
    • В vendor/yiisoft/extensions.php добавляем:
    'vova07/imperavi' => array (
        'name' => 'vova07/imperavi',
        'version' => '2',
        'alias' => array (
            '@vova07/imperavi' => $vendorDir . '/vova07/imperavi/src',
        ),
    ),

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

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

    23 февраля 2015

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

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

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

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

    20 февраля 2015

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

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

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

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

    20 февраля 2015

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

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

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

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

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

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

    15 февраля 2015

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

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

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

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

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

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

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

    8 комментариев
  6. YiiGist - каталог расширений Yii

    4 февраля 2015

    До этого момента у Yii не было нормального каталога пакетов. Команда Yii занимается новой версией сайта, но пока не всё готово и релизить нельзя. Официально мы рекомендовали использовать packagist.org и искать там "yii". Это более-менее работало, но было не совсем удобно. Думаю, поэтому сообщество запустило неофициальный проект YiiGist.

    YiiGist позволяет зайти используя GitHub и пометить один или несколько репозиториев как пакет Yii 1 или Yii 2. Все помеченные пакеты доступны в каталоге. Есть поиск, информация вытягивается как из GitHub, так и из packagist.

    http://yiigist.com/

    Как вам?

    20 комментариев
  7. История Yii

    2 февраля 2015

    Prado

    В июне 2004-го Qiang Xue релизнул первую версию фреймворка PRADO. Вдохновение он черпал из Apache Tapestry, Borland Delphi и Microsoft ASP.NET.

    Примерно в это же время Zend затеяли конкурс по переходу на PHP5, известный также как gophp5. Qiang переписал фреймворк на PHP 5 и выиграл конкурс.

    В то время проект хостился на SourceForge. В середине 2005 Wei Zhuo помог с i18n и l10n, что вылилось в версию 2.0.

    В мае 2005 было решено переписать проект, включив в него новые фишки Microsoft ASP.NET 2.0. В апреле 2006 была выпущена версия 3.0. Начиная с неё команда занималась, по большей части, качеством кода и его стабильностью.

    PRADO всё ещё жив и используется относительно активно.

    Yii

    В октябре 2006 Qiang анонсировал альфу Yii на форумах PRADO.

    Третьего декабря 2008 вышла версия 1.0.0. Много всего было взято из PRADO: ActiveRecord, i18n, l10n и так далее. Также вдохновение черпалось из RoR (соглашения и некоторые фичи AR), symfony1 (фильтры и плагины) и Joomla (модули и перевод сообщений).

    Yii 1.0.0 был гораздо быстрее остальных фреймворков, обладающих сходной функциональностью и сообщество быстро разрослось.

    В январе 2010 вышел Yii 1.1, давший нам построитель форм, реляционные запросы AR, готовый каркас для unit-тестов и многое другое.

    Я присоединился к команде в 2010. В конце года мы начали обсуждать Yii 1.2 не прекращая разрабатывать 1.1. В мае 2011 было решено перейти на новые версии PHP и поправить архитектурные ошибки. То есть делать сразу 2.0. Был сделан первый коммит в тогда ещё секретный репозиторий.

    В мае 2013 код был выложен на всеобщее обозрение. В октябре 2014 состоялся первый стабильный релиз Yii 2.0.

    6 комментариев
  8. С Yii 1.1 на Yii 2.0, часть 3: приложения

    13 января 2015

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

    В 2.0 шаблоны, как и всё остальное, ставятся через Composer. Ничего предварительно скачивать не нужно. Команда напоминает команду из 1.1, разве что указывается из какого пакета ставить шаблон:

    composer global require "fxp/composer-asset-plugin:1.0.0"
    composer create-project --prefer-dist yiisoft/yii2-app-basic my/dir/basic
    

    Читаем

    8 комментариев
  9. Yii 2.0.2

    13 января 2015

    Выпустили версию 2.0.2, являющуюся патч-релизом и полностью обратно совместимую. В неё вошли около 40 исправлений и мелких улучшений.

    Полный анонс читайте на хабре

    8 комментариев
  10. Когда стоит писать комментарии в коде

    10 января 2015

    Бытует мнение, что писать комментарии к коду не нужно. Пошло оно, скорее всего, от высказывания одного из отцов программирования — Брайана Кернигана: «Don’t comment bad code, rewrite it». Как всегда, находятся фанатики, которые странно воспринимают авторитетные высказывания и никогда не пишут комментарии принципиально. Это неправильно.

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

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

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

    Бывает, что переписать нелогичный код нельзя. Например, при разработке под Android частенько приходится делать совершенно нелогичные на первый взгляд штуки для того, чтобы починить приложение под одной конкретной моделью телефона, которая почему-то работает не так, как описано в официальной документации. В этом случае комментарии в коде оправданы полностью. Без них ваши же коллеги просто удалят «ненужные» строчки, удостоверившись, что на их телефонах всё и без них работает как надо.

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