Итерация по периоду времени в php
Неоднократно приходилось работать на php со списком дат (по дням, к примеру) если есть начало и конец периода ($dateStart, $dateEnd). Например, для того, чтобы синхронизировать с бекендом рабочие/выходные дни для DatePicker из jQueryUi. Или, если нужно выводить отчеты по дням.
Предлагаю несколько вариантов решения этой задачи, как наиболее очевидным способом, так и более изящным (как мне показалось).
Symfony Widgets Bundle
Widgets Bundle - a bundle for easy widgets management. (Supports only widgets which require only client-side code for displaying). Includes both client side (for displaying) and admin side (adds admin classes and has a SonataAdminBundle dependency) functionality.
Can be used (for example) for adding counters, banners, advertising network codes (google adsense, etc).
Was created during this blog has been developing.
Caching Symfony controller
During developing this blog I invented one more bicycle for Caching Symfony controller. But first of all lets see how did this task arose.
For example, I have a list of categories, archives and tags on a sidebar. It is relatively easy to get last one (one query), but much harder to get list of categories and archives. For getting categories, we need to select trees (categories can be nested) and using subqueries inside queries get number of articles in every category (result is a little bit monster). For getting the archives list, we need iterate over all articles and gather list of years/months. All this actions isn't very sophisticated, but it is better to avoid them.
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 - левый верхний край изображения. Также там есть несколько опциональных параметров, но мы не будем их сегодня использовать.SEO в Wordpress или как я выводил сайт из "поисковой ямы"
У Wordpress есть несколько популярных плагинов для SEO: All in One SEO Pack и WordPress SEO by Yoast. Первый несколько популярней (был на момент написания заметки), но в нем найден ряд существенных недостатков (к счастью, не фатальных).
Кастомизация формы входа (на примере FOSUserBundle)
Самый проcтой способ кастомизации формы входа FOSUserBundle - использовать механизм наследования бандлов. (С предположением, что в будущем придется модифицировать не только форму входа). Покажем пример такой кастомизации с использованием bootstrap.
Фикстуры. AliceBundle
В предыдущей заметке мы познакомились с фикстурами в Symfony framework, а также с DoctrineFixturesBundle. Хотелось бы сделать обзор еще одного полезного бандла для работы с фикстурами - AliceBundle (обертка вокруг компонента alice).
Фикстуры. DoctrineFixturesBundle
Фикстуры (англ. fixtures) - очень полезный инструмент для разработки. По сути, это просто набор тестовых данных, которые используются в dev-режиме. Для prod режима обычно не используются (для прода обычно используют Data Migrations).
Для работы с фикстурами в Symfony существует несколько удобных бандлов. Первый, базовый - DoctrineFixturesBundle, которому и посвящена эта заметка.
Роджер Пенроуз - Новый ум короля
Эта книга стала для меня своего рода находкой. Но сначала немного "поэзии". =)
Так уж случилось, что я люблю сложное чтиво. Правда, тут следует быть очень осторожным, так как "сложное чтиво" бывает уровня Коэльо (да простят меня все его поклонницы, но тут сложно (для меня) подобрать другой яркий пример), а бывает таким, которое тебя действительно меняет, причем в лучшую сторону, в сторону меньшей энтропии (это уже сказано под впечатлением книги Пенроуза). В чем же разница?