ru en

Caching Symfony controller

При разработке этого блога пришлось изобрести очередной велосипед - Caching Symfony controller. Но сначала о том, как вообще возникла подобная задача.

Например, у меня на сайдбаре есть список категорий, список архивов и теги. Если последние получить относительно просто (одна выборка), то категории и архивы сложнее. Для получения категорий нужно выбрать деревья (категории могут быть вложенными) и подзапросами получить количество заметок в категориях (довольно монстроузно получилось, посмотреть можно здесь). Для архивов нужно пройтись по всем заметкам и составить список годов/месяцев. Действия не слишком сложные, но все равно можно избавится от их выполнения на каждом запросе.

Pencil

Pencil - удобный open-source бесплатный инструмент прототипирования для создания mockup'ов. Подходит для создания любых пользовательских интерфейсов, но мы будем рассматривать создание веб интерфейсов.

Может быть установлен как плагин до firefox, либо как standalone приложение (в таком случае firefox у меня все равно поставился по зависимостях).

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

Разберемся с установкой и покажем пример использования.

Повышение производительности веб-сервера: ставим nginx перед apache

В одной из заметок мы описали как настроить nginx + php-fpm. Но nginx можно использовать и немного по другому. Например, если нету желания полностью отказываться от apache, но ускорить работу веб сервера хочется. (Возможно, у вас реализована сложная система редиректов, которую не хотите портировать на nginx).

В таком случае возможное решение - использовать nginx только для отдачи статики (картинок, css, js и т.д. файлов). Остальные же запросы (к php движку, к примеру) перенаправим по прежнему к apache (подразумевается, что у вас уже настроен сайт для работы с последним). Для этого настроим nginx для отдачи статики, все остальные запросы по прежнему проксируем к apache. (В таком случае можно обойтись без php-fpm).

Локализация числовых/денежных данных

При разработке более-менее крупного проекта возникает проблема с локализацией числовых/денежных данных. В этой заметке расскажу о мучениях при использовании Symfony framework, Sonata Admin Bundle и клиентской части. Но сначала о сути проблемы, так как на первый взгляд она не очень очевидная.

Итак, допустим у нас есть проект, который на стороне сервера (php/шаблонизатор) рендерит числовые/денежные данные. Они должны отображаться в соответствии с установленной локаллю. Пользователь может вводить данные (в своем представлении). При этом данные могут обрабатываться еще и на клиентской части (javascript). К примеру, в большинстве стран Европы, кроме Великобритании и Ирландии десятичный разделитель запятая, в Великобритании и Ирландии - точка. Естественно, что пользователь с Германии будет вводить данные с раздилителем - запятою.

Гении и аутсайдеры. Почему одним все, а другим ничего - Малкольм Гладуэлл

О книге Малкольма Гладуэлла "Гении и аутсайдеры. Почему одним все, а другим ничего" я узнал случайно, из комментариев geektimes. Решил высказать свое впечатление, написав коротенький обзор.

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

Во первых, говорится об огромном влиянии среды на великих личностей. Нет, не подумайте, что им просто повезло. На самом деле, просто недостаточно только обладать необходимым набором личностных качеств, также как и недостаточно просто попасть в благоприятную среду. Все это должно произойти одновременно. Автор анализирует личности Билла Гейтса, Билла Джоя и других, наводит исторические примеры.

Паттерны проектирования (Design patterns). Часть 1: Порождающие и структурные

О паттернах проектирования слышали все программисты. Хотя... Исходя из количества стебов над php-разработчиками и видя некоторые куски кода, возможно некоторые из них (php-шников) понятия не имеют, что это такое.

Поворот изображения на html5 canvas

Возможно, вы уже знаете что есть удобный метод canvas context drawImage:

context.drawImage(image, x, y);
где image - это DOM изображение (или другой canvas), x, y - левый верхний край изображения. Также там есть несколько опциональных параметров, но мы не будем их сегодня использовать.