РЕКЛАМА
Code style. Выравнивание массива в PhpStorm
19 сентября 2014 Code Style 3 комментария 10065 просмотров
Важным критерием качества кода является его читаемость, так называемая некомпьютерная красота. Код может быть красивым в плане использования алгоритма, в плане изящного решения вопроса производительности. А может быть красивым просто внешне, и это немаловажно. Сейчас мы рассмотрим массивы, с которыми очень часто сталкиваемся в чужом коде, и тратим драгоценное время для прочтения этого массива.
Symfony2. Разные сессии для Prod и Test на одном домене
17 сентября 2014 Symfony2 2 комментария 734 просмотра
Очень популярным вариантом тестирования проекта перед релизом является его установка на боевом сервере, но с тестовыми настройками, к которым относятся: тестовая база данных, вывод ошибок, поддомен. Например, вы устанавливаете Prod-версию на домен example.com, а тестовую версию на test.example.com. В таком случае может возникнуть такая ситуация, когда сессии с Prod-окружения доступны на Test, и наоборот.
Древовидные структуры данных в MySQL (топик-ссылка)
7 сентября 2014 MySQL 254 просмотра
Создание модели для хранения иерархических данных - совсем непростая задача. Что же мы подразумеваем под иерархическими данными? Представьте, что вам необходимо организовать список продуктов по категориям. Например, у вас будет несколько основных категорий: продукты, оборудование, электроника. А далее вам потребуется разбить их на подкатегории, а те в свою очередь, на более узкие категории. На бумаге всё выглядит довольно просто, а вот в таблице СУБД (система управления базами данных) дело обстоит совсем по другому. В этой статье я попробую рассказать об основной идее этой модели и когда её следует применять. Начну с объяснения более простой иерархической модели, а далее перейдём к модели вложенных множеств.
Официальная документация по Markdown
4 сентября 2014 Проекты 0 комментариев 3693 просмотра
Markdown стал уже довольно популярным инструментом, позволяющим писать легко читаемый текст, который также автоматически может быть сконвертирован в HTML. Но до недавнего времени так и не было официальной документации, хотя я всегда пользовался шпаргалкой создателя Markdown, Джона Грубера.
Instagram API. /users/user-id/media/recent и count
4 сентября 2014 API 0 комментариев 392 просмотра
Недавно обнаружил такой баг в одном из своих проектов. Сервис должен был получать последние 50 фотографий из Instagram-аккаунта пользователя за последние 3 месяца. Для этого я использовал метод /users/user-id/media/recent, полагаясь на официальную документацию. Я решил, что 50 объектов - это не так уж и много, поэтому передал параметр count=50. Unit-тесты не покрыли то место, если у пользователя есть больше N(~36) фотографий в Instagram за последние 3 месяца. Заметил это только чуть позже, когда кейс сработал.
Принцип открытости / закрытости (топик-ссылка)
2 сентября 2014 PHP 257 просмотров
Должен признаться, когда впервые увидел академическое определение принципа открытости/закрытости, его смысл был для меня удивительно ясен. Я отбросил из определения весь технический жаргон, и принцип читался как заклинание, которое мы слышали раньше много раз: «Не ломай ядро».

Ну, правда, здесь существует некоторая двусмысленность высказывания, так как есть по крайней мере два общих подхода к поддержанию «ядра» в полной сохранности, позволяющие аккуратно расширять его функциональные возможности. Первый подход (вот почему я использовал намеренно термин «расширение») — Наследование. Наследование является, пожалуй, самым переоцененным приемом для повторной реализации. Такой процесс легко осуществим, но здесь существует определенный риск разрушить хрупкую иерархию моделей. Второй подход называется Композиция. Подход не так прост, как наследование, но это тоже довольно аккуратный способ расширить программный модуль, не меняя его.
Релиз PHP 5.6.0
28 августа 2014 PHP 0 комментариев 1058 просмотров
Сегодня вышел PHP 5.6.0. Ура! Сейчас разработчики работают над PHP 7 и PHPNG, пока мы осваиваем новые возможности новой версии. Пока серверы с моими проектами обновлять не буду, но новые проекты несомненно попробую написать в PHP 5.6.0. Дальше я опишу новые возможности топовой версии PHP.
Senior PHP Developer. Упрощенный T9 алгоритм
28 августа 2014 PHP 4 комментария 757 просмотров
Представьте, что вы сейчас проходите собеседование на должность PHP Senior Developer. Очень вероятно, что вас могут попросить реализовать какой-то упрощенный алгоритм, вложившись в определенное время. В нашем случае - это 45 минут. А алгоритмом будет реализация упрощенного алгоритма T9. В реальных приложениях T9 использует дерево-словарь, но алгоритм наш проще, он должен просто вернуть всевозможные слова, основываясь на данных, введенных пользователем.
Git pre-commit хук в Windows
17 августа 2014 Git 1 комментарий 884 просмотра
Сегодня прочитал статью про использование хуков в Git. Очень удачный пример выбрали авторы SitePoint’а, а именно, проверка синтаксиса во всех измененных/добавленных PHP-файлах перед коммитом. Так как коммиты я делаю с Windows-машины, то решение автора для меня не сработало - автор использует Linux. А потом оказалось, что все ищут решения того, как сделать это в Windows.
error.log рассылка
12 августа 2014 PHP 0 комментариев 774 просмотра
Не все ошибки может отследить разработчик, многие появляются в процессе использования ПО, в зависимости от окружения и т.д. Для меня очень важно отслеживать такие возможные баги, особенно на этапе запуска проекта. Я сильно не ухищрялся, просто периодически просматривал содержимое error.log файлов. Но проектов, которые приходится поддерживать, становится всё больше, на многих из них развернуто по несколько серверов. В итоге для меня эта операция стала довольно трудоемкой. Естественно, это дело нужно автоматизировать.
Постраничная выборка для динамических данных
22 июля 2014 PHP 2 комментария 931 просмотр
Я уже давно внес в свой стиль программирования негласное правило о том, что все перечисления, будь это таблицы или списки, картинки или комментарии, должны загружаться порциями и поддерживать постраничную загрузку. Дело в том, что потом добавить этот функционал бывает гораздо сложнее, нежели чем сделать это сразу. Особенно на этапе разработки этим многие пренебрегают. Основным способом сделать постраничную загрузку является имплементация limit-offset подхода. Сейчас мы будем говорить о данных, возвращаемых из базы, соответственно, примеры я тоже буду строить отталкиваясь от этого. Но limit-offset, естественно, применим и для других случаев. Но что будет, если у нас высока вероятность появления новых данных? Возьмем для примера новости. Например, у нас на данный момент 20 новостей, а мы выводим по 10. Вывели первые 10 новостей, но еще до того как мы перешли к следующим десяти новостям, у нас появилась еще одна новость. Каждая новая запись будет смещать новости, и в результатах 2-й страницы мы увидим дубликат последней записи из первой выборки.
Задача по автоматическому расположению фигур в игре "Тетрис"
17 июля 2014 JavaScript 5 комментариев 861 просмотр
Я решил подкинуть читателям моего блога небольшую задачу по поиску и реализации лучшего алгоритма. Все знают игру "Тетрис". Представьте, что вместо вас в эту игру играет компьютер. Так вот, задачей будет описать алгоритм, который будет правильно размещать фигурки, таким образом, чтобы не было пустых мест. Я сделал на JSFiddle простой UI для тестирования алгоритма. Всё, что вам нужно - это реализовать одну функцию. Но стойте, для начала я объясню правила.
po.js — супер простая утилита для i18n
11 июля 2014 Lab 0 комментариев 796 просмотров
Пополнил свой аккаунт на GitHub еще одной мини-библиотекой. po.js позволяет использовать один файл перевода под проект (и для backend, и для JS). Точнее один файл под каждый язык.

Описание я опубликовал на Хабре
Страница на GitHub
Адаптивная верстка с Restive.JS
10 июля 2014 JavaScript 5 комментариев 1111 просмотров
Недавно нашел один интересный плагин, пока в Enterprise проектах его не использовал, но уже хотелось бы. Моя статья на Хабре про Restive.JS
Ожидающая функция
30 июня 2014 JavaScript 3 комментария 4592 просмотра
Когда-то я написал очень простую функцию, которая казалась мне костылем в том уже не помню каком проекте. Но она хорошо выполняла свою обязанность. Тогда я называл ее ожидающей функцией, а JavaScript называл ее fnDelay. Дело в том, что в приложении может быть функционал, который срабатывает после изменения какого-нибудь состояния. Но это изменение происходит (или может гипотетически происходить) так часто, что функционал будет срабатывать очень много раз, хотя на самом деле нам необходимо выполнить его только для уже измененного состояния (или еще для нескольких промежуточных). Иначе может быть чувствительная проблема в производительности вашего приложения. Ну ладно, достаточно пустых слов, разберем конкретный пример.
Добавлены аватарки в комментарии
27 июня 2014 Новости 12 комментариев 1196 просмотров
Я как-то писал про то что можно попытаться получить аватарку пользователя через сервис Gravatar по email. А потом подумал, а почему бы так не сделать такое у себя в комментариях. Так как email для комментария обязателен, то для каждого мы можем запросить аватарку. К сожалению, не все указывают свой действительный email, в таких случаях Gravatar возвращает дефолтное изображение. Чтобы протестировать, можете отправить комментарий и посмотреть, что из этого выйдет.
Gifffer. Делаем gif-анимацию управляемой
26 июня 2014 JavaScript 3 комментария 3941 просмотр
На днях наткнулся в GitHub на один очень интересный репозиторий. Инструмент, разрабатываемый болгарским программистом, решает одну маленькую, но очень назойливую проблему. А именно, он позволяет остановить циклическое автопроигрывание гифок на веб-странице. Теперь у меня появилось желание использовать gif! Инструмент называется Gifffer, а под катом я опишу как просто с ним работать и покажу маленькое демо.
Беларусь.Яндекс.Деньги
25 июня 2014 Деньги 14 комментариев 2469 просмотров
Думаю, многие из читателей этого блога занимаются фрилансом, а для многих это и один из основных способов заработка. Конечно же, Яндекс.Деньги являются не единственным вариантом для работы с электронными деньгами, но в странах СНГ довольно популярным. Но, к великому сожалению, в России каждый день вводят новые законодательства. И случилось так, что с 16 мая 2014 года все электронные денежные переводы в другие страны должны быть идентифицированы, точнее, вы должны доказать свою "неанонимность", подтвердив это своим паспортом. Но форма принимает только русский паспорт. Что же делать, когда вы из Беларуси, но не можете сделать ни один перевод?
Обновление блога
22 июня 2014 Новости 6 комментариев 1369 просмотров
Здравствуйте, уважаемые читатели блога. Так сложилось, что пишу я сюда что-то не часто, но уже в коллекции свободных знаний целых 50 статей! Да и блог становится более-менее популярным. В связи с этим было решено его немного обновить. Как вы могли заметить, поменялся дизайн, простите уж за мой минимализм. Но кроме дизайна хотелось бы отметить небольшие нововведения по функционалу.
Javascript. Узнаем ID клиента в VK и FB
15 июня 2014 JavaScript 11 комментариев 4536 просмотров
Наверное, многие замечали (особенно те, у кого не установлена блокировка рекламы в браузере), как на сторонних сайтах нам показывают стилизованные под ВКонтакте сообщения, где указывается ваше имя из VK и ваше фото. Да, порой это раздражает, но давайте посмотрим на это не как пользователи, а как разработчики. Ведь полезная функция, не так ли? Конечно, если использовать это в разумных целях. Можно упростить регистрацию, сделать социальную интеграцию и еще много всего, что уже является особенностью вашего проекта.
Установка Composer в OpenServer
26 мая 2014 PHP 6 комментариев 3798 просмотров
Composer - это инструмент для сборки проектов и управления зависимостями в PHP. Представьте, когда ваш проект написан на Zend Framework, использует Doctrine в качестве ORM, работает с сокетами при помощи Ratchet и т.д. Скорее всего, вам будет непросто создать один загрузчик, без конфликтов, чтобы всегда был доступ к какому-то классу. Composer же собирает все эти зависимости по заданным условиям. Всё, что вам нужно - это правильно описать файл-конфигуратор composer.json. Но статья пойдет не совсем об этом, так как хорошими людьми написано уже достаточное количество хорошего материала на эту тему.
Tuffle на Android
6 мая 2014 Tuffle 9 комментариев 4469 просмотров
Многие нас спрашивают, когда же будет приложение для Android. Мы уже разработали приложение для iOS, которое пока еще тестируется в Великобритании. И плавно подходим к разработке нового приложения для Android. По этому случаю решили запустить кампанию по сбору средств на Boomstarter, русском аналоге Kickstarter.
Упрощаем регистрацию с Gravatar
16 апреля 2014 PHP 1 комментарий 2319 просмотров
Всем уже давно известен сервис Gravatar, который упрощает процесс работы с аватарами. Как для пользователей, так и для сайтов. Можно не загружать каждый раз своё фото на новый сайт, сайт может получить ваше фото из Gravatar по вашему email. Это удобно пользователю, потому что можно поменять своё изображение в одном месте и оно сменится везде. Удобно и сайтам, нет необходимости имплементировать процесс загрузки файлов. Конечно, в какой-то степени это затрагивает вопрос о безопасности, но у вас всегда есть право не использовать то или иное решение. Итак, об аватарках, думаю, знают многие. Но Gravatar также позволяет получить по email базовую информацию о пользователе.
Тестирование регулярных выражений в RegExr
14 апреля 2014 Regexp 1 комментарий 1552 просмотра
Иногда попадаются такие инструменты, которыми начинаешь пользоваться сам и хочется рассказать о них другим. На этот раз это не совсем новый инструмент, это обновление старого, которое вывело его на новый уровень. Речь пойдет об инструменте для изучения, написания и тестирования регулярных выражений RegExr. До этого выглядел он так, и если честно, то пользоваться им было крайне неудобно.
Как документировать API
10 апреля 2014 API 4 комментария 2559 просмотров
Многие разработчики до сих пор создают документацию своих API в Word или Excel. Да и сам я когда-то так делал. Пока, не нашел такой инструмент как Apiary. Вкратце, он позволяет оформить страницу API, расписать всё по полочкам, предоставить доступ другим пользователям, а самое интересное - тестировать свои API-методы.
Серверная архитектура Tuffle
7 апреля 2014 Tuffle 1 комментарий 2060 просмотров
Как я и обещал в предыдущих статьях, расскажу читателям о серверной архитектуре проекта Tuffle. Но написали мы ее изначально для Хабра, поэтому по правилам сообщества я не могу ее полностью выложить здесь. Так что читайте эту статью на Хабре.
Запуск задачи CRON каждые 30 секунд
4 апреля 2014 Linux 5 комментариев 2706 просмотров
CRON как планировщик задач в UNIX-системах знаком почти каждому программисту, особенно, использующему LAMP стек. Обычно, вся работа с CRON заключается в настройке задач, а именно периодичности выполнения. Время запуска команды указывается с точностью до минуты. Но что делать, если нам нужно запускать команду 2 раза за одну минуту, т.е. через каждые 30 секунд? Или же еще чаще?
GitHub и самый продуктивный день
3 апреля 2014 PHP 1 комментарий 1430 просмотров
Всем нравятся красивые графики. Поэтому иногда я люблю заходить на GitHub в свои репозитории и смотреть их графики по количеству коммитов, количеству новых файлов и т.д. А тут мне захотелось узнать в какой день я делаю больше всего коммитов. Скорее всего, это и можно назвать самым продуктивным днем. Итак, напишем скрипт, который поможет это сделать.
Становимся диджеем на php и icecast
1 апреля 2014 Проекты 1 комментарий 1359 просмотров
Я всегда любил формат радио, потому что он включает в себя такой фактор как случайность, который мне всегда нравился. А также в последнее время я увлекаюсь чайной культурой, так что это и послужило узкой темой радиостанции. Я поставил себе цель - сделать нон-стоп онлайн радиостанцию. Так как мой блог подразумевает технические обсуждения, то приступим. Под катом кратко о процессе создания Радио "ЧАЙ".
Tuffle - продукт года 2013 в Беларуси?
18 марта 2014 Tuffle 1 комментарий 1291 просмотр
Belarusian IT Awards - это открытая беларуская премия, которая позволяет молодым компаниям заявить о себе. Так вот в одной из номинаций, “Продукт года”, участвует наш проект Tuffle. Мы уже прошли в финал и стоим в списке из четырех компаний, основанных в 2013 году.
PHP: Правильный путь
2 февраля 2014 PHP 13 комментариев 5185 просмотров
На днях я наткнулся на замечательную карманную книгу для PHP разработчиков "PHP: The Right Way". Скорее, она будет более полезна новичкам. Чем именно? По интернету разбросано огромное количество материла по PHP, но многое уже устарело или не приводит к написанию качественного кода. В этой книге присутствуют основные актуальные сведения с ссылками на проверенные ресурсы. На самом деле, сначала я хотел перевести ее, форкнуть репозиторий, благо лицензия это позволяет. Но оказалось, что перевод уже есть. Нет только русской книги в форматах для электронных книг, но так как используется Markdown в русском форке, то это не составит труда.
Как я разрабатывал сервис воспоминаний
1 февраля 2014 Tuffle 5 комментариев 1783 просмотра
Речь пойдет про мой основной проект Tuffle.com, который я и наша команда разрабатываем уже год. Думаю, из этого выйдет целый цикл статей, так как проделано и делается многое. Начну с представления проекта, основных концепций, подходах. И со временем будем углубляться в техническую сторону.
User Timing API
31 января 2014 JavaScript 9 комментариев 4501 просмотр
Есть такой проект - HTML5Rocks. Многие о нем знают, чуть меньше его читают. А попадаются там очень интересные материалы. Один из них я захотел перевести для русского читателя. Речь пойдет о новой технологии - User Timing API. Оригинал на английском.
Валидация длины строки в Foundation
16 января 2014 Foundation 2 комментария 2249 просмотров
Frontend одного моего мини-проекта основан на Foundation фреймворке. Не хочу здесь заводить спор о том, почему не Twitter Bootstrap, а хочу рассказать про валидаторы в этом инструменте. А именно написание своего валидатора.
Скролл-загрузка в Tumblr теме
10 января 2014 Tumblr 6 комментариев 4239 просмотров
Я использую словосочетание скролл-загрузка, хотя часто это называют “бесконечный скроллинг”. Что это такое? Это подгрузка следующей порции контента, когда скролл приближается к концу страницы (или другое условие). Главное - он нас избавляет от ненужных лишних кликов по кнопкам “Далее”. И я считаю это весомым плюсом. Хотя есть и минусы. Клиент становится более нагруженным. И в некоторых случаях придется пожертвовать футером, если скролл вертикальный, так как до него пользователь может никогда не добраться. Google использует такой подход в Картинках. Странно, почему он не сделал так в WEB-поиске. А в статье просто небольшой how-to, как это сделать в Tumblr.
Поворот видео в PHP по EXIF-данным
23 декабря 2013 FFMPEG 2 комментария 1580 просмотров
Видео, записанные с поворотом устройства часто так и отображаются при загрузке на сайт. Некоторые программы (или операционные системы) поворачивают их при проигрывании. Делают они это исходя из метаданных файла (например, в iPhone). Но в Windows видео будет проигрываться так, как оно записано. Поэтому при загрузке видео на ваш сайт нужно видео вручную перевернуть, чтобы гарантировать нужное положение на всех устройствах.
Удаление стилей в contenteditable при вставке
30 ноября 2013 HTML5 7 комментариев 2342 просмотра
В HTML5 есть такой атрибут contenteditable, который позволяет изменять содержимое DOM элементов. Но, по-моему, он совсем еще не готов к использованию, хотя идея классная. Например, при копировании какого-то форматированного текста и вставке в contenteditable, остаются стили и форматирование. Естественно, почти всегда это является проблемой.
Автоматическое сжатие JS / CSS на сервере
30 ноября 2013 JavaScript 1 комментарий 1799 просмотров
От размера JS и CSS файлов (и не только их, но рассмотрим их как основные) зависит время загрузки страницы. И если мы уж говорим о производительности, то нужно сделать размер этих файлов минимальным. Конечно, их размер в основном зависит от требований и логики, которую они выполняют. Но опустим этот этап. Программисты любят покрывать свои классы JSDoc, писать потрясающие стихи-комментарии и ставить кучу пробелов.
Как MongoDB помогает MySQL считать
24 ноября 2013 MongoDB 5 комментариев 2061 просмотр
Начиная разрабатывать приложение в качестве хранилища данных вы выбираете MySQL. И круто! MySQL есть и будет хорошей , а главное, стабильной СУБД еще долгие годы. Но вот ваше приложение растет, безобидные SELECT COUNT уже заметно тормозят систему. Но не стоит сразу же переписывать систему на NoSQL, поверьте, будет не лучше. Давайте лучше при помощи NoSQL (в этой статье я буду использовать MongoDB) поможем разгрузить кое-какие части системы. Итак, сказ о том, как помочь MySQL считать.
Контроль памяти в JavaScript
8 ноября 2013 JavaScript 12 комментариев 3684 просмотра
Как и обычно, статья начинается с общих заезженных слов, что WEB уже не тот что был пару лет назад, и всё больше ответственности и логики переносится на Front-end. Например, в Tuffle.com Порядка 30 JS-файлов, а так как приложение асинхронное, то нужно как-то ими управлять. Об этом и пойдет речь.
Изменение URL без перезагрузки страницы
1 ноября 2013 HTML5 46 комментариев 27425 просмотров
С развитием WEB понятие о странице немного изменилось. Для конечного пользователя улучшением производительности и комфорта путешествия по сайту, для разработчиков - немного иной реализацией. Понятно, что страница целиком состоит из множества элементов, большая часть которых не изменяется при переходе на новую страницу. Зачем заставлять пользователя смотреть по 100 раз как рендерится один и тот же документ?
Инкрементное резервное копирование
23 октября 2013 Linux 6 комментариев 2546 просмотров
Это небольшой tutorial о том, как правильно и экономно делать резервное копирование (backup) данных на сервере.
Импорт фотографий к себе на сайт из Facebook, Vkontakte и Instagram.
6 июля 2013 PHP 6 комментариев 9380 просмотров
Сейчас рассмотрим, как импортировать фотографии из Facebook, Vkontakte и Instagram к себе на сайт, красиво и охуенно, используя API этих сервисов. Представленный код написан для Zend Framework 1.* приложения, но вы можете его использовать где угодно с небольшими изменениями. Посмотреть процесс в действии вы можете на Tuffle.com (на странице создания воспоминания).
Конвертация видео для HTML5 в ffmpeg
20 февраля 2013 FFMPEG 3 комментария 5853 просмотра
С расцветом HTML5 использование flash видеопроигрывателей считается моветоном. HTML5 video куда более приятней и удобней. Но у каждого браузера свои интересы и стандарты, из этого вытекает проблема с форматами видео. Но пользователь этого знать не должен. Под катом инструкция о том как подготовить видео файл для просмотра в HTML5 плеере.
Markdown разметка
12 ноября 2012 PHP 4 комментария 2230 просмотров
Сейчас существует очень много "облегченных" языков разметки: BBCode, Wiki, Textile. Но самым "облегченным", на мой взгляд, языком является Markdown. За последнее время он стал очень популярным в связи с использованием на таких гигантах как GitHub и Stackoverflow.
DataFixures: миграции для тестовых данных
2 ноября 2012 Symfony2 0 комментариев 3868 просмотров
Всегда, перед тем как запустить приложение в свет, разработчики / тестировщики / заказчики работают с какими-то тестовыми данными (пользователи, заказы и т.д.). Перед запуском на каком-то сервере (test, demo ...) им нужно собрать SQL с общей структурой базы, включить в этот SQL необходимые данные, выполнить всё это на сервере. Мне нравится как к этому делу подошли Symfony 2 и Doctrine 2.
Тестирование web-приложений с использованием Selenium и PHPUnit
10 июля 2012 PHP 3 комментария 4210 просмотров
Кратко, Selenium - это инструмент для тестирования web-приложений. Он позволяет тестировать сайт “от лица пользователя” на уровне операций браузера, таких как клики, ожидание загрузки, поиск элементов на странице. Selenium устанавливается как http-сервер, написанный на java, который умеет управлять браузером и делать в нем различные действия.
Производительность ORDER BY RAND() LIMIT
15 мая 2012 MySQL 4 комментария 2427 просмотров
Для получения нескольких случайных записей из таблицы я всегда использовал всем известную конструкцию ORDER BY RAND() LIMIT. На днях я столкнулся с проблемой в производительности этого запроса. Таблица содержала более миллиона строк. И мне нужно было срочно найти решение. Под катом альтернативный вариант выбора нескольких случайных строк.
Лицензия PhpStorm для open source проекта
6 апреля 2012 PHP 1 комментарий 1530 просмотров
Я пользуюсь PhpStorm и люблю этот продукт. Но всё время пользовался взломанной версией. На их сайте можно получить лицензию для open source проекта, но для этого нужно иметь страницу проекта. В этой статье я расскажу как получить такую лицензию на 1 год имея лишь активный репозиторий на GitHub и Demo страницу.
FULL OUTER JOIN
2 марта 2012 MySQL 0 комментариев 1522 просмотра
На практике я столкнулся с ситуацией, когда нужно было выбрать данные из двух связанных сущностей при помощи полного соединения. К сожалению, MySQL пока не поддерживает FULL OUTER JOIN. Ниже приведен пример эмуляции этого вида JOIN.
Полезные запросы в MySQL
21 декабря 2011 MySQL 0 комментариев 3565 просмотров
В этой статье собраны некоторые, на мой взгляд, интересные и полезные запросы в MySQL. Список будет пополняться в будущем.
Введение в Zend Framework 2
17 декабря 2011 Zend 0 комментариев 1390 просмотров
На подходе уже 2-я версия Zend Framework. Некоторые уже спешат переписывать и рефакторить свои сайты, используя пространства имен, менеджеры событий. Под катом хорошая презентация доклада Валерия Рабиевского с "Zend framework day".
Планировщик событий в MySQL
15 декабря 2011 MySQL 0 комментариев 2305 просмотров
Начиная с версии 5.1 в MySQL появился планировщик событий, позволяющий выполнять различные действия в определенное время. Из этого следует то, что часть функционала можно перенести из Cron на сам MySQL.
Nginx для статики, Apache для динамики
12 декабря 2011 Nginx 3 комментария 1761 просмотр
Как известно, Nginx славится тем, что хорошо справляется с отдачей статических файлов (css, js, изображения). Делается это за счет какого-то хитрого кэширования. Но с обработкой динамического содержания лучше работает Apache. Имеем: сайт на PHP, Apache. Нужно настроить сервер так, чтобы Nginx отдавал статику, а остальным занимался Apache.
Cubique - datagrid для Zend Framework и jQuery
18 октября 2011 Lab 10 комментариев 6473 просмотра
Все началось с того, что я разрабатывал один проект с использованием Zend Framework и jQuery. В панели администратора нужно было выводить данные из различных таблиц MySQL. Хотелось сделать это красиво, удобно, гибко, с AJAX и т.д. Поиск в Google выдал огромное количество библиотек для отображения табличных данных. Но, к сожалению, везде была кривая серверная сторона и не было подходящих решений для Zend Framework. Под катом Cubique — инструмент для отображения данных для Zend Framework с функциями сортировки, поиска, сделанный на jQuery, основанный на AJAX.
Apache Bench - простая утилита для тестирования нагрузки
12 октября 2011 Apache 7 комментариев 7411 просмотров
Apache Bench (ab) - простой инстурмент для тестирования нагрузки веб-сервера. Данная утилита входит в стандартную сборку Apache и даже имеется почти во всех готовых сборках, таких как Denwer, WAMP, XAMPP. Очень проста в использовании и гибко настраиваемая.
Drag & Drop
1 октября 2011 HTML5 4 комментария 1654 просмотра
Возможность Drag & Drop в браузерах была уже давно реализована средствами Javascript. Сейчас же можно сделать Drag & Drop без сторонних библиотек (jQuery UI), а при помощи нативных возможностей браузера. Под катом я расскажу как это делается.
Командная строка в PhpStorm
23 сентября 2011 PHP 4 комментария 6201 просмотр
PhpStorm — IDE от хорошо зарекомендовавшей себя компании по производству ПО для разработчиков. Цель любой IDE — создать комфортные условия для быстрой и качественной разработки. И в создании этих условий вам может помочь Command Line Tool, позволяющий делать быстро шаблонные действия. К сожалению, сейчас доступны команды только для Zend Framework и Symfony. В этой статье я помогу вам настроить командную строку на свой лад (Custom Framework).
Защита от CSRF в Zend Framework
16 сентября 2011 Zend 4 комментария 18441 просмотр
CSRF (Сross Site Request Forgery) — вид web-атак, использующий недостатки протокола HTTP. Если жертва заходит на сайт, созданный злоумышленником, от её лица тайно отправляется запрос на другой сервер (например, на сервер платёжной системы), осуществляющий некую вредоносную операцию (например, перевод денег на счёт злоумышленника). Для осуществления данной атаки, жертва должна быть авторизована на том сервере, на который отправляется запрос, и этот запрос не должен требовать какого-либо подтверждения со стороны пользователя, который не может быть проигнорирован или подделан атакующим скриптом.
Web-сервис на Zend_Soap
13 сентября 2011 PHP 1 комментарий 3175 просмотров
Web-сервис — компонент, предоставляющий Internet-клиентам набор функций API или web-методов. Основная задача web-сервисов — обеспечение межпрограммного взаимодействия. В отличие от традиционного web-приложения, у web-сервиса нет пользовательского интерфейса (GUI). Вместо этого у него есть программный интерфейс, то есть web-сервис предоставляет функции (web-методы), которые могут быть вызваны удаленно. Web-сервис не предназначен для обслуживания конечных пользователей. Его задача — предоставление услуг другим приложениям, будь то web-приложения, приложения с графическим пользовательским интерфейсом или консольные приложения.
HTML5 Local Storage
10 сентября 2011 HTML5 9 комментариев 4271 просмотр
Local storage (локальное хранилище) — база данных на стороне клиента, содержащая пары ключ-значение. Надеюсь, что в ближайшем будущем эта технология станет стандартом в веб-разработке.