Миграция на Grunt v0.4

Предисловие

18 февраля вышел релиз Grunt v0.4.0, с чем всех и поздравляю. Если вы еще не знакомы с Грантом - прошу пройти на официальный сайт или почитать ознакомительную статью на Хабре. Вкратце, Грант позволяет автоматизировать склеивание и минификацию js-файлов, запуск тестов, проверку кода с помощью JSHint и многое другое.

Данная статья — история миграции одного приложения с Гранта v0.3.9 на вышедшую v0.4.0. Версии несовместимы и переезд оказался не таким простым делом, как я изначально предполагал. Полная инструкция по миграции на английском находится здесь, она подробнее чем мое описание.

Зачем я использую Grunt

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

Читать дальше »

CasperJS — тестирование админки, спрятанной за двойной авторизацией

В процессе модификации одной админки я быстро пришел к решению покрывать тестами все изменения и выбрал для этих целей (почему — тема отдельной статьи) CasperJS.

После установки и запуска пробных тестов решение задачи казалось очевидным.

casperjs test.js
PASS 5 tests executed in 1.053s, 5 passed, 0 failed.

Однако, у админки своя специфика, необходимо преодолеть двойную авторизацию для доступа к контенту:

Читать дальше »

Оператор запятая

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

Вводная

var a = (10, 7, 5); // 5
// оператор запятая выполняет все операнды (слева направо)
// и возвращает значение последнего оператора.

Оператор запятая имеет наименьший приоритет из всех операторов:

(function() {
    return 5 * 2 + 3,  22; // 22
})();
Читать дальше »

Оператор тильда

Подсмотрено здесь. В JavaScript есть оператор тильда (побитовое НЕ), выполняющий для целых чисел фактически -(n + 1):

~0 // -1
~1 // -2
~-1 // 0
Читать дальше »

Профилирование обработчиков событий в jQuery

Давно использую jQuery для инициализации различных интерфейсов. В качестве контекста использую window. Простой пример:

jQuery(function($) {
    var _win = $(window);
    var EVENT_INIT_SOMETHING = 'init_something';

    // Где-то есть файлик с инициализацией нужного интерфейса по событию
    _win.one(EVENT_INIT_SOMETHING, function(e, data) {
        console.log(e, data);
    });

    // И где-то есть вызов, по которому инициализируется интерфейс
    _win.trigger(EVENT_INIT_SOMETHING, {});
});
Читать дальше »

Изменение метода интерполяции изображения в CSS

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

Читать дальше »

Установка Django на CentOS 6

Данная статья о установке и настройке Django на отдельно взятом VPS.

На руках были следующие карты:

Читать дальше »

Hello, world!

Православный первый пост правильного бложика.