<rmcreative>

RSS
  1. Плавная анимация в браузере

    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. Заменяйте на реальный контент как только анимация закончена.
    Комментировать
  2. 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 комментариев
  3. Как хранить упорядоченный список в базе данных

    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 комментариев
  4. YiiGist - каталог расширений Yii

    4 февраля 2015

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

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

    http://yiigist.com/

    Как вам?

    20 комментариев
  5. История 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 комментариев
  6. С 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
    

    Читаем

    10 комментариев
  7. Yii 2.0.2

    13 января 2015

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

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

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

    10 января 2015

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

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

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

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

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

    10 комментариев
  9. 2014

    26 декабря 2014

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

    Читаем

    14 комментариев
  10. YiiFeed

    26 декабря 2014

    Запустили YiiFeed. Проект выдаёт премодерируемую выжимку новостей о фреймворке Yii на английском. Ленту можно читать через RSS или в браузере, в том числе мобильном. После регистрации каждый может предлагать свои новости.

    Вживую посмотреть проект можно по адресу http://yiifeed.com/.

    Если он пока не открывается, можно прописать в свой hosts 82.196.4.167 yiifeed.com.

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

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

    Так как проект некоммерческий и скрывать в нём нечего, код был немного причёсан и выложен в открытый доступ на GitHub. Критика в виде issue и pull request очень приветствуется.

    В планах тегирование записей, поиск по тегу (как в этом блоге), RSS по тегу, голосование и комментарии.

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