<rmcreative>

RSS
  1. Twitter Bootstrap 2.0

    3 февраля

    Обновился один из лучших UI-фреймворков на сегодняшний день. Позволяет до поры до времени забыть про UI приложения и сфокусироваться на его функционале. При этом стандартный UI выглядит лучше, чем многие завершённые проекты.

    В комплекте сетка, базовый CSS для текста, таблиц, форм и кнопок, набор значков, отдельные элементы интерфейса и даже JavaScript-плагины. Всё это кроссбраузерно и кроссдевайсово. Можно использовать LESS, так что работать с набором довольно удобно.

    Пробуем

    4 комментария
  2. Визуализация данных на JavaScript, d3.js

    28 января

    Какое-то время назад коллеги обратили моё внимание на библиотеку d3.js, предназначенную для визуализации данных. По началу я подумал, что это очередная штуковина для построения графиков, ну или, как максимум, библиотека для работы с векторной графикой. На деле всё оказалось несколько интересней.

    Последовательность работы сводится примерно к следующему:

    1. Получаем данные, которые будем визуализировать. Формат, в общем-то не важен, но удобней всего работать с JSON.
    2. Привязываем данные к DOM-контейнеру при помощи data.
    3. Используем селектор enter, которые выбираем ещё несуществующие представления для каждого элемента данных. Например, это могут быть столбики в графике.
    4. Для каждого выбранного создаём столбик.

    На словах это выходит немного запутанно. Код более красноречив:

    d3.select("body").selectAll("p") // выбрали все p внутри body
      .data([4, 8, 15, 16, 23, 42]) // привязали к выборке данные
      .enter() // будем создавать элементы, если их ещё нет
      .append("p") // это будет элемент p
        .text(function(d){ // используем наши данные для задания текста
           return "I'm number " + d + "!";
        });

    Результатом будет шесть элементов p с номерами, соответствующими переданным данным. Подобно тексту можно задавать и другие свойства, CSS, атрибуты… да всё что угодно. В результате можно получить очень интересные визуализации прилагая к этому минимум усилий. Это главная идея и возможность библиотеки. Остальное предназначено для удобной манипуляции данными, работы с SVG, созданию анимации, AJAX, работы с цветом, проекции значений на разные координатные системы и даже работы с гео-API. Всё вместе позволяет создавать очень интересные интерактивные визуализации.

    Пробуем и пользуемся

    Да, изучение рекомендую начинать с главной страницы. Пониманию основной идеи помогает вот эта интерактивная страница.

    Ну и небольшая визуализация от меня. Количество постов в месяц за всё время существования этого блога.

    5 комментариев
  3. YiiTalk, эпизод 2

    24 января

    Сегодня вместе с Юрием Беляковым записался в подкасте YiiTalk, первом русскоязычном подкасте про Yii. Говорили про меня, про Yii и его развитие, немного про вторую версию и программирование в целом.

    Слушаем на podfm или на rpod

    11 комментариев
  4. Схема обработки ошибок в Yii

    22 января

    На хабре в блоге Yii за время моего отпуска появился подробный разбор того, как работает обработка ошибок в Yii. Если по каким-то причинам пропустили — рекомендую.

    Читаем

    2 комментария
  5. Yii 1.1.9

    1 января

    Вышла стабильная версия Yii 1.1.9. В данном релизе около 60 улучшений и исправленных ошибок.

    Полный список изменений можно посмотреть в соответствующем файле. Перед обновлением с более ранних версий важно ознакомиться с инструкциями.

    Русскоязычная документация, как обычно, находится в полностью актуальном состоянии. Кроме того, поправлены все найденные на момент релиза опечатки. Спасибо всем, кто использует Orphus на yiiframework.ru.

    Рассмотрим наиболее интересные изменения.

    Более удобный способ определения through в отношениях ActiveRecord

    Опция though была добавлена в версии 1.1.7, но синтаксис был не слишком удобен, так что было решено сделать его более явным. В текущей версии используется следующий синтаксис:

    'comments'=>array(self::HAS_MANY,'Comment',array('key1'=>'key2'),'through'=>'posts'),

    В приведённом выше array('key1'=>'key2'):

    • key1 является ключом, определённым в отношении, котрое указано в through (в нашем случае это posts).
    • key2 является ключом, определённым в модели, на которую указывает отношение (в нашем случае это Comment).

    through можно использовать как для HAS_ONE, так и для HAS_MANY.

    Подробнее данная возможность описана в разделе Реляционная Active Record полного руководства.

    Поддержка групп условий в Model::relations()

    Теперь можно использовать группы условий при определении отношений модели:

    'recentApprovedComments'=>array(self::BELONGS_TO, 'Post', 'post_id', 
        'scopes' => array('approved', 'recent')),

    При использовании лишь одной группы условий её можно указать как строку.

    Возможность сделать JOIN между моделями по заданным ключам

    В данной версии стало возможым создание отношений по заданной паре PK->FK не опираясь на схему данных. Это означает, что можно, например, задать следующее отношение для модели Day:

    'jobs'=>array(self::HAS_MANY, 'Job', array('date' => 'target_date')),

    В данном случае Day может содержать несколько Jobов. При этом они не связаны привычным образом. Мы задали ключ в виде array('fk'=>'pk'), то есть на выходе мы получим SQL вроде

    SELECT * FROM day t
    JOIN job ON t.date = job.target_date
    

    Возможность перекрыть классы ядра при помощи Yii::$classMap

    Начиная с 1.1.5 в Yii была возможность заранее импортировать классы и использовать их без явного импорта или include. Теперь используя тот же самый подход можно перекрыть классы ядра.

    8 комментариев
  6. 2011

    28 декабря 2011

    Подходит к концу 2011-ый. Год получился определённо интересный:

    • Написано более 150 постов. Многие, подозреваю, были полезны.
    • Добавил RSS для комментариев, подписку без комментирования и кнопочки социальных сервисов.
    • Попробовал размещать баннеры в сайдбаре. Желающих особо не нашлось, поэтому там разместились мои проекты и другие качественные ресурсы. Впрочем, затею я не оставил, так что пишите, если есть что разместить.
    • Не стал вести блог на английском. Может, в следующем году, а может и не надо…
    • Yii стал ещё более популярным. Произошло это немного раньше, чем планировалось.
    • Yii пережил релиз Symfony 2.0. Причём, как-то неожиданно легко.
    • Выпустили три релиза Yii и ещё один будет до конца года.
    • Начата работа над Yii2.
    • Русскоязычное сообщество Yii окончательно окрепло. Особо активные участники провели несколько отличных beer party.
    • Перешёл из Murano Software в CleverTech на позицию Tech Lead. Соответственно, сменил Java на PHP и хорошенько пощупал Yii в боевых условиях.
    • Научился понимать около 18 диалектов английского.
    • Прочитал доклады на CodeFest, DevConf и ещё один секретный в Воронеже.
    • Познакомился со многими интересными людьми.
    • Издал книгу по Yii.
    • Дочке исполнился год. Очень очень радует.

    Всех с наступающим! Пусть следующий год будет не менее интересным.

    13 комментариев
  7. jQuery contextMenu

    19 декабря 2011

    Контекстное меню в виде плагина для jQuery с довольно гибким API.

    • Триггерится как угодно.
    • Можно управлять пунктами на ходу.
    • Можно встраивать элементы форм в меню… да и вообще что угодно из HTML.
    • Куча callback-ов практически на все действия.
    • Поддержка вложенных меню.
    • Поддержка клавиатуры.
    • Все стили задаются через CSS.

    Пользуемся

    4 комментария
  8. Прощай, IE6

    16 декабря 2011

    Microsoft уже давно отзывается о древнем IE6 не очень хорошо. Даже сайт специальный запустили. Но это, в общем, не новость. Новость в том, что слухи о автоапдейтах IE подтвердились, да ещё как подтвердились!

    Обновляться самостоятельно будут не только новые версии браузера, как ранее предполагалось. Windows позаботится об автоматическом обновлении старых версий на последние доступные для обновляемой ОС (для XP верхняя планка — IE8, для остальных её пока нет).

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

    13 комментариев
  9. Не дать загружать страницу в iframe

    15 декабря 2011

    Вот таким вот способом можно попортить жизнь тем, кто вздумал грузить вашу страницу в iframe:

    if((self.parent && !(self.parent===self)) && (self.parent.frames.length != 0)){
      self.parent.location=document.location;
    }

    Если верно помню, встречено на Яндексе образца 2009 года.

    11 комментариев
  10. Как работать с миграциями

    14 декабря 2011

    Что такое миграции, думаю, многие знают. Если нет, идея неплохо описана в документации Yii. Чтобы эффективно работать с миграциями и не выслушивать много матюков от членов команды, необходимо придерживаться нескольких простых правил:

    • Не использовать модели. В идеале вообще ничего из основного кода не использовать. Код меняется, миграции новые разработчики запускают с первой по последнюю при том, что код у них свежий.
    • Если миграция ушла в репозиторий и запускалась при этом нормально, исправлять её нельзя. Считайте, что вся команда её уже применила. Корректировки в этом случае делаются новой миграцией.
    • Если миграция ушла в репозиторий и не запускалась при этом нормально, её необходимо поправить и как можно быстрее (именно ту миграцию, которая не применяется).
    • Если используется MySQL, указывайте engine и collation. Умолчания не сервере могут отличаться.
    • Ни в коем случае не стоит лезть в базу руками в обход миграций.
    3 комментария