29 апреля 2012 г.

Чтиво на выходные 29 апреля - 1 мая

Python

Django теперь на гитхабе!

Сравнение дизайна аналогичных продуктов на python и ruby не в пользу первых. Dear Python, Why Are You So Ugly?

Галопом по европам, как Yandex использует Python и Django.


Client-side

Презентация Вячеслава Олиянчука на тему правил хорошего тона в CSS. Причеши свой CSS, наконец!

Неплохое flash/html5 приложение для мультизагрузки файлов и Django app к нему.

Как заставить динамический сайт работать по БЭМ.

Интервью с javascript-гуру Дагом Крокфордом.

Работаем с навигацией каретки в RIA. Надеюсь, до такого низкого уровня вам не суждено опуститься, но если вдруг захочется хардкора, то вперд.

Подборка движков javascript-шаблонизации.


Разное

РИФ + КИБ. Выложены видео-материалы конференции.

Гугло-диск или dejà vu?

6-ти дневная неделя под урчание котэ или шум дождя?

Ну, и напоследок, Opera TV browser.

28 апреля 2012 г.

fc.tape — js-библиотека для простой анимации спрайтов

Пару недель назад нами была представлена javascript-библиотека fc.tape (пост на Хабре), которая предназначена для управления анимацией спрайтов (склеенных кадров).

Эта библиотека используется в наших проектах, например, в TNK Racing Team. Она предоставляет low-, medium- и high level API для управления анимацией.

Для использования fc.tape вам понадобятся jQuery (1.6+), jQuery UI (1.8+), компоненты Core и Widget. Создать спрайт из отдельных файлов изображений можно утилитой convert, входящей в пакет ImageMagick.

Вчера fc.tape была обновлена до версии 0.2 и вот список изменений:

  • появилась новая настройка loop для управления зацикливанием анимации;
  • для методов windTo, stepInTo и setPosition позиция, на которую нужно перейти, задаётся в форматах 15 или '30%' (параметра isRelative теперь нет);
  • настройка gradually переименована в smooth;
  • починена демонстрационная страница.

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

23 апреля 2012 г.

Промо-сайт крутой бритвы от Panasonic

В нашем портфолио появилась ещё одна работа — промо-сайт бритвы от Panasonic «5 лезвий». Концепция и дизайн, а также 3D-рендеры были созданы студией Nile.

В этом проекте перед нами стояла задача разработать сайт, основным элементом которого является крутящаяся бритва. Её анимацию нужно было реализовать без использования Flash. Результат можно посмотреть на http://5blades.panasonic.ru/.

При переходе к каждой из семи технологий бритва меняет ракурс, а описание выбранной технологии появляется сбоку. У вращения бритвы есть особенность: если тянуть за саму бритву, то она воспринимает движение мыши по горизонтали, а если тянуть за ползунок на дугообразном «прогресбаре», то бритва чувствительна к движению по этой дуге. Если посетитель доведёт ползунок до промежуточного состояния, то бритва самостоятельно займёт ближайшее положение.

В этом проекте был использован backbone.js, что позволило сделать javascript-код модульным.

21 апреля 2012 г.

Чтиво на выходные 21-22 апреля

Python

Андрей Светлов рассказал о том, что реализация импорта в Python 3.3 переписана на чистый Питон и что в этом хорошего.

Опубликованы расписания EuroPython 2012 и DjangoCon Europe 2012.

Добрый самаритянин Michael Feoktistov сделал торрент-раздачу всех видео с последнего PyCon US. Несмотря на то, что они все есть на YouTube, вероятно кому-то будет полезно просто выкачать их в разрешении 480p.

Большая статья про интерпретаторы, виртуальные машины и скорость выполнения кода (англ.).


Webdev

Чудесный наброс «PHP: a fractal of bad design» на тему почему PHP — унылое говно. Кому больше нравится на русском, есть перевод на Хабре. Мы, кстати, осознанно отказались от использования PHP в студии в конце 2010 года и полностью перешли на Python ;)

Яндекс запустил новую версию API Карт под номером 2.0. Быстрее, красивее, не нужны API-ключи, поддержка мобильной платформы, кластеризация из коробки. 26 апреля в четверг команда Карт устраивает APIшник, где расскажет про все новинки и можно будет пообщаться с разработчиками.

На базе LESS ребята из Twitter сделали RECESS — инструмент для проверки, сжатия и компиляции кода.

Концепт новой революционной IDE LightTable собирает деньги на Kickstarter.

Свежий доклад от Яндекса про масштабируемые javascript-приложения (к слову, 5-го мая в Киеве пройдёт Яндекс.Субботник, ещё не поздно зарегистрироваться)

Расставляем точки. В чём же разница между URI и URL?

19 апреля 2012 г.

Django in Depth (James Bennett)

Продолжаем новый формат и повышаем планку. На этот я предлагаю вам потратить 3 часа своей жизни ради интереснейшего доклада с PyCon US 2012 - Django in Depth, это дополненная современными реалиями версия одноименного доклада с PyCon US 2010, от того же докладчика. Докладчика, к слову, зовут James Bennett, который помимо основной работы в Mozilla успевает быть контрибьютором и релиз-менеджером Django, да и вообще стоял у истоков его создания. Доклад, в целом, рассчитан на разработчиков с опытом, повествование построено снизу вверх, то есть с глубинных процессов внутри Django - на поверхность. И несмотря на свою длину, интересен до последней минуты.

Обязательно к просмотру всем, кого интересует какие механизмы работают внутри Django и почему. Ну и, конечно, советы от Django-гуру не повредят вашему мастерству :)

Видео (3 часа 5 минут)



По существу, в докладе освещены такие темы:

1. ORM
  • архитектура Django 1.4;
  • как работает Django ORM, вся цепочка от database backend до model;
  • менеджеры, кастомные QuerySet-классы;
  • корректная работа в несколькими БД (роутинг, шардинг);
  • трюки с переопределением методов модели .save() и .delete();
  • абстрактные и прокси- модели;
  • Q- и F- выражения.

2. Формы
  • кастомные виджеты/мультивиджеты;
  • валидаторы;
  • динамическое создание форм;
  • медиа-файлы.

3. Шаблоны
  • как работает загрузчик шаблонов;
  • low-level работы шаблонизатора;
  • темплейт-теги и их парсер;
  • что есть контекст на самом деле и как происходит рендеринг.

А также:
  • request/response;
  • URL resolution;
  • handlers;
  • views (в том числе любимые нами class-based);
  • middlewares;
  • админка (оговорены некоторые возможности кастомизации, что можно и что не стоит переопределять).

Ну и некоторые факты с доклада, для затравки:
  • "Oracle is weird" (Джеймс о базе данных, неоднократно упрекнул её в "магичности");
  • имплементация класса Query занимает 1900 строк кода, это один из самых сложных и загадочных (here be dragons) модулей во всём Django;
  • Query.__str__() возвращает скомпилированный SQL-запрос;
  • QuerySet.exists() намного эффективней обычной булевой проверки;
  • "Just don't use classmethods, use managers". Аргументы не до конца ясны, но смысл в том, что нужно описывать действия над моделью на уровне менеджера модели. Видимо потому, что менеджер имеет больше отношения к объекту типа queryset, чем classmethod и концептуально вписывается в архитектуру ORM (что тоже не аргумент, но поверим опытному дядьке). Обсуждение вопроса на 51-й минуте видео.

14 апреля 2012 г.

Чтиво на выходные 14-15 апреля

Django, Python

Facebook купил Instagram за 1 млрд. $ и многие с удивлением узнали что сервис использует Django Framework. Вообще интересно почитать про архитектуру Инстаграма в их технологическом блоге. И, конечно, на Insight IT по-русски.

Вышли версии Python 2.6.8/2.7.3/3.1.5/3.2.3 c багфиксами, в том числе закрыли нашумевшую дырку с атакой на хэш-таблицу. Обратите внимение, что фикс по-умолчанию отключён.

На Хабре недавно появилась статья из двух частей о декораторах в Python. Таких было уже предостаточно, но эта, судя по всему, самая доходчивая. Всё, что вы хотели знать, но боялись спросить.

Несколько русскоязычных видео-уроков по новым фичам Django 1.4. Пока доступно 3 урока, автор обещает выкладывать новые раз в неделю, по использованию методов ORM prefetch_related, bulk_create и админки.

Зарелизился Pycharm 2.5

Javascript

Мы зарелизили небольшую jQuery-библиотеку fc.tape, с помощью которой мы анимируем спрайты: сайт гоночной команды ТНК, страница команды Future Colors. Пост на Хабре.

Раз, два, три, четыре, пять - на Nettuts Backbone опять.

Быстрый вводный курс в Underscore - библиотеки, которая расширяет возможности функционального программирования в JS (и которая, заодно, является вечным спутником Backbone).

И ещё раз про Backbone. Благодаря стараниям некоторых хабровчан, он, наконец, обзавёлся русскоязычной документацией. Будем надеяться, что это немного снизит порог вхождения в технологию для тех, кому английский даётся с трудом.

Webdev

Трюк с псевдоселектором :target. Позволяет динамически стилизировать блок, если его id и hash в адресной строке совпадают.

Небольшой How To по работе с HTML5 File System API.

БЭМ продолжает покорять сердца и обзаводится своими фан-клубами. Один из них разработал толковый и доступный каждому сайт с описанием самой методологии.

Познавательная презентация об адаптивном веб-дизайне от Mail.ru. Недавний редизайн главной страницы сделал её адаптивной и им точно есть что сказать по этому поводу.

Дизайн

Создатели 5∞px.com сделали крутые страницы с Terms of Use их сервиса понятные для обычных людей, а не только с юридическим образованием.

Разное

Теперь можно оставить заявку на утилизацию бытовой электроники в Москве, вам никуда ехать не нужно — за ней приедут и заберут, бесплатно.

Любопытное видео от Linux Software Foundation о том, как создаётся и где используется Linux в наши дни.

12 апреля 2012 г.

Testing and Django (Carl Meyer)

В дополнение к субботней рубрике попробуем новый формат: рекомендации самых интересных выступлений с PyCon, DjangoCon и других конференций. Ребята будут советовать самые любопытные и полезные на их взгляд видео, которые точно стоит посмотреть.

Карл Майер (один из django core developers) делится своими соображениями о best practices тестирования django-приложений. Доклад рассчитан на опытную аудиторию, знакомую как с django, так и с основыми принципами тестирования.

Слайды
Видео (47:15)



Вот ключевые моменты доклада:
  • как правильно запускать тесты django или 14 секунд из жизни, которые не вернуть;
  • как правильно организовать обнаружение тестов (test discovery) и избавиться от беспомощных импортов в tests/__init.py;
  • почему надо выделять из сложных методов модели части, взаимодействующие с БД в отдельные методы;
  • зачем нужен factory_boy и почему нужно срочно выбросить фикстуры в помойку;
  • как лучше всего юнит-тестировать вьюхи;
  • чем WebTest лучше стандартного django.test.Client;
  • когда какие типы тестов использовать (юнит, интеграционные. с использованием селениума);
  • пара новых фич Django 1.4 в примерах (override_settings и in-browser testing);
  • тестируем примеры из документации;
Предлагаю обсудить презентацию в комментариях.

8 апреля 2012 г.

Moscow Django Meetup #2


Предисловие


MoscowDjango #2 прошёл 5-го апреля, через 5 дней после KyivPy #6, на котором я также имел честь побывать. Тот факт, что с докладом выступит мой коллега Илья Барышев (@coagulant) лишний раз подогревал интерес к событию. И после рабочего дня мы всей командой поехали по указанному в анонсе адресу.

7 апреля 2012 г.

Чтиво на выходные 7-8 апреля

Django

Якоб Каплан-Мосс делится своим видением, как может быть улучшен auth.User, скорее всего в Django 1.5 будет улучшена модель пользователя.

Батарейка tddspry, расширяющая возможности тестирования Django-проектов с помощью nose и twill. Представляет собой набор различных хелперов и тест-кейсов, и позволяет, например, осуществлять автоматический поиск тестов по всему проекту (не обязательно складывать их в папку test внутри приложения), использует twill вместо django.test.Client и умеет делать некоторые другие, не менее полезные в тестировании вещи.

Набор полезных Mixin’ов Braces для class-based views для Django 1.3+

Webdev

Legit - «Git с человеческим лицом», надстройка над git, добавляющая кучу полезных комманд, облегчающих ежедневную рутину. Например:
sync [<branch>]
Syncronizes the given branch. Defaults to current branch. Stash, Fetch, Auto-Merge/Rebase, Push, and Unstash. You can only sync published branches.
Правильное вычисление рейтинга продукта на основе данных пользовательского голосования. Может показаться странным, но индекс популярности != (количество положительных оценок) - (количество негативных оценок).

Javascript

Backbone patterns, как видно из названия, коллекция паттернов, рекоммендаций и соглашений по использованию Backbone.js.

Одним велосипедом меньше - гибкий и функциональный пагинатор для Backbone.js

Каждый четверг яндексоиды делятся своими наборами ссылочек про вёрстку, js и дизайн, не пропускайте.

Консоль для CofeeScript под Хром: CoffeeConsole


Администрирование

Очень толковый набор рецептов и best practices для Fabric, популярного инструмента автоматизации деплоя (и не только) ваших проектов.

Досуг

Fallout 1 раздают бесплатно в течении 48-ми часов, до 8 апреля 20:00 (по Москве) http://www.gog.com/en/gamecard/fallout

6 апреля 2012 г.

Что нового в Django 1.4


Моя презентация с прошедшего 5 апреля Django Meetup #2.
Она подводит итог под серией Django Days, вот список всех постов:

Django days или обзор новинок Django 1.4


  1. ORM
  2. Безопасность и Формы
  3. Тестирование
  4. Админка
  5. Структура проекта (manage.py)
  6. Структура проекта (свои шаблоны)
  7. Шаблоны
  8. Таймзоны

4 апреля 2012 г.

Воскресшая вёрстка

Случалось ли вам поддерживать вёрстку, которая уже прошла этап оживления? Если да, то наверняка возникало желание посмотреть, какой она была первоначально, до оживления. Мы практикуем такой метод:

В комментарии к вёрстке блока, в css-файле, прописывается не только название блока, но и его разметка в формате ZenCoding. Если вам потребовалась разметка, просто скопируйте строчку и преобразуйте её в HTML (например, в PyCharm'е ZenCoding поддерживается из коробки).

/**
 * @section     Элемент списка
 * article.item.js-item>((header.item__header>((div.item__image>img)+(span.item__favorite>span.favorite)+(h1.item__title>a)+div.item__subtitle))+(div.item__expand>span.item__expand-icon.js-item__expand)+section.item__content.js-item__content)
 */

.item {...}
.item__header {...}
.item__image {...}
.item__favorite {...}
.item__title {...}
.item__subtitle {...}
.item__expand {...}
.item__expand-icon {...}
.item__content {...}

Вот так в данном примере будет выглядеть разметка:

<article class="item js-item">
    <header class="item__header">
        <div class="item__image"><img src="" alt=""></div>
        <span class="item__favorite"><span class="favorite"></span></span>
        <h1 class="item__title"><a href=""></a></h1>
        <div class="item__subtitle"></div>
    </header>
    <div class="item__expand">
        <span class="item__expand-icon js-item__expand"></span>
    </div>
    <section class="item__content js-item__content"></section>
</article>