РЕКЛАМА
Постраничная выборка для динамических данных
22 июля 2014 PHP 0 комментариев 34 просмотра
Я уже давно внес в свой стиль программирования негласное правило о том, что все перечисления, будь это таблицы или списки, картинки или комментарии, должны загружаться порциями и поддерживать постраничную загрузку. Дело в том, что потом добавить этот функционал бывает гораздо сложнее, нежели чем сделать это сразу. Особенно на этапе разработки этим многие пренебрегают. Основным способом сделать постраничную загрузку является имплементация limit-offset подхода. Сейчас мы будем говорить о данных, возвращаемых из базы, соответственно, примеры я тоже буду строить отталкиваясь от этого. Но limit-offset, естественно, применим и для других случаев. Но что будет, если у нас высока вероятность появления новых данных? Возьмем для примера новости. Например, у нас на данный момент 20 новостей, а мы выводим по 10. Вывели первые 10 новостей, но еще до того как мы перешли к следующим десяти новостям, у нас появилась еще одна новость. Каждая новая запись будет смещать новости, и в результатах 2-й страницы мы увидим дубликат последней записи из первой выборки.
Задача по автоматическому расположению фигур в игре "Тетрис"
17 июля 2014 JavaScript 5 комментариев 75 просмотров
Я решил подкинуть читателям моего блога небольшую задачу по поиску и реализации лучшего алгоритма. Все знают игру "Тетрис". Представьте, что вместо вас в эту игру играет компьютер. Так вот, задачей будет описать алгоритм, который будет правильно размещать фигурки, таким образом, чтобы не было пустых мест. Я сделал на JSFiddle простой UI для тестирования алгоритма. Всё, что вам нужно - это реализовать одну функцию. Но стойте, для начала я объясню правила.
po.js — супер простая утилита для i18n
11 июля 2014 Lab 0 комментариев 89 просмотров
Пополнил свой аккаунт на GitHub еще одной мини-библиотекой. po.js позволяет использовать один файл перевода под проект (и для backend, и для JS). Точнее один файл под каждый язык.

Описание я опубликовал на Хабре
Страница на GitHub
Адаптивная верстка с Restive.JS
10 июля 2014 JavaScript 5 комментариев 316 просмотров
Недавно нашел один интересный плагин, пока в Enterprise проектах его не использовал, но уже хотелось бы. Моя статья на Хабре про Restive.JS
Ожидающая функция
30 июня 2014 JavaScript 1 комментарий 3140 просмотров
Когда-то я написал очень простую функцию, которая казалась мне костылем в том уже не помню каком проекте. Но она хорошо выполняла свою обязанность. Тогда я называл ее ожидающей функцией, а JavaScript называл ее fnDelay. Дело в том, что в приложении может быть функционал, который срабатывает после изменения какого-нибудь состояния. Но это изменение происходит (или может гипотетически происходить) так часто, что функционал будет срабатывать очень много раз, хотя на самом деле нам необходимо выполнить его только для уже измененного состояния (или еще для нескольких промежуточных). Иначе может быть чувствительная проблема в производительности вашего приложения. Ну ладно, достаточно пустых слов, разберем конкретный пример.
Добавлены аватарки в комментарии
27 июня 2014 Новости 11 комментариев 358 просмотров
Я как-то писал про то что можно попытаться получить аватарку пользователя через сервис Gravatar по email. А потом подумал, а почему бы так не сделать такое у себя в комментариях. Так как email для комментария обязателен, то для каждого мы можем запросить аватарку. К сожалению, не все указывают свой действительный email, в таких случаях Gravatar возвращает дефолтное изображение. Чтобы протестировать, можете отправить комментарий и посмотреть, что из этого выйдет.
Gifffer. Делаем gif-анимацию управляемой
26 июня 2014 JavaScript 1 комментарий 853 просмотра
На днях наткнулся в GitHub на один очень интересный репозиторий. Инструмент, разрабатываемый болгарским программистом, решает одну маленькую, но очень назойливую проблему. А именно, он позволяет остановить циклическое автопроигрывание гифок на веб-странице. Теперь у меня появилось желание использовать gif! Инструмент называется Gifffer, а под катом я опишу как просто с ним работать и покажу маленькое демо.
Беларусь.Яндекс.Деньги
25 июня 2014 Деньги 13 комментариев 418 просмотров
Думаю, многие из читателей этого блога занимаются фрилансом, а для многих это и один из основных способов заработка. Конечно же, Яндекс.Деньги являются не единственным вариантом для работы с электронными деньгами, но в странах СНГ довольно популярным. Но, к великому сожалению, в России каждый день вводят новые законодательства. И случилось так, что с 16 мая 2014 года все электронные денежные переводы в другие страны должны быть идентифицированы, точнее, вы должны доказать свою "неанонимность", подтвердив это своим паспортом. Но форма принимает только русский паспорт. Что же делать, когда вы из Беларуси, но не можете сделать ни один перевод?
Обновление блога
22 июня 2014 Новости 6 комментариев 700 просмотров
Здравствуйте, уважаемые читатели блога. Так сложилось, что пишу я сюда что-то не часто, но уже в коллекции свободных знаний целых 50 статей! Да и блог становится более-менее популярным. В связи с этим было решено его немного обновить. Как вы могли заметить, поменялся дизайн, простите уж за мой минимализм. Но кроме дизайна хотелось бы отметить небольшие нововведения по функционалу.
Javascript. Узнаем ID клиента в VK и FB
15 июня 2014 JavaScript 2 комментария 803 просмотра
Наверное, многие замечали (особенно те, у кого не установлена блокировка рекламы в браузере), как на сторонних сайтах нам показывают стилизованные под ВКонтакте сообщения, где указывается ваше имя из VK и ваше фото. Да, порой это раздражает, но давайте посмотрим на это не как пользователи, а как разработчики. Ведь полезная функция, не так ли? Конечно, если использовать это в разумных целях. Можно упростить регистрацию, сделать социальную интеграцию и еще много всего, что уже является особенностью вашего проекта.
Установка Composer в OpenServer
26 мая 2014 PHP 5 комментариев 1046 просмотров
Composer - это инструмент для сборки проектов и управления зависимостями в PHP. Представьте, когда ваш проект написан на Zend Framework, использует Doctrine в качестве ORM, работает с сокетами при помощи Ratchet и т.д. Скорее всего, вам будет непросто создать один загрузчик, без конфликтов, чтобы всегда был доступ к какому-то классу. Composer же собирает все эти зависимости по заданным условиям. Всё, что вам нужно - это правильно описать файл-конфигуратор composer.json. Но статья пойдет не совсем об этом, так как хорошими людьми написано уже достаточное количество хорошего материала на эту тему.
Tuffle на Android
6 мая 2014 Tuffle 4 комментария 1250 просмотров
Многие нас спрашивают, когда же будет приложение для Android. Мы уже разработали приложение для iOS, которое пока еще тестируется в Великобритании. И плавно подходим к разработке нового приложения для Android. По этому случаю решили запустить кампанию по сбору средств на Boomstarter, русском аналоге Kickstarter.
Упрощаем регистрацию с Gravatar
16 апреля 2014 PHP 1 комментарий 1215 просмотров
Всем уже давно известен сервис Gravatar, который упрощает процесс работы с аватарами. Как для пользователей, так и для сайтов. Можно не загружать каждый раз своё фото на новый сайт, сайт может получить ваше фото из Gravatar по вашему email. Это удобно пользователю, потому что можно поменять своё изображение в одном месте и оно сменится везде. Удобно и сайтам, нет необходимости имплементировать процесс загрузки файлов. Конечно, в какой-то степени это затрагивает вопрос о безопасности, но у вас всегда есть право не использовать то или иное решение. Итак, об аватарках, думаю, знают многие. Но Gravatar также позволяет получить по email базовую информацию о пользователе.
Тестирование регулярных выражений в RegExr
14 апреля 2014 Regexp 1 комментарий 798 просмотров
Иногда попадаются такие инструменты, которыми начинаешь пользоваться сам и хочется рассказать о них другим. На этот раз это не совсем новый инструмент, это обновление старого, которое вывело его на новый уровень. Речь пойдет об инструменте для изучения, написания и тестирования регулярных выражений RegExr. До этого выглядел он так, и если честно, то пользоваться им было крайне неудобно.
Как документировать API
10 апреля 2014 API 2 комментария 1514 просмотров
Многие разработчики до сих пор создают документацию своих API в Word или Excel. Да и сам я когда-то так делал. Пока, не нашел такой инструмент как Apiary. Вкратце, он позволяет оформить страницу API, расписать всё по полочкам, предоставить доступ другим пользователям, а самое интересное - тестировать свои API-методы.
Серверная архитектура Tuffle
7 апреля 2014 Tuffle 1 комментарий 1335 просмотров
Как я и обещал в предыдущих статьях, расскажу читателям о серверной архитектуре проекта Tuffle. Но написали мы ее изначально для Хабра, поэтому по правилам сообщества я не могу ее полностью выложить здесь. Так что читайте эту статью на Хабре.
Запуск задачи CRON каждые 30 секунд
4 апреля 2014 Linux 4 комментария 1071 просмотр
CRON как планировщик задач в UNIX-системах знаком почти каждому программисту, особенно, использующему LAMP стек. Обычно, вся работа с CRON заключается в настройке задач, а именно периодичности выполнения. Время запуска команды указывается с точностью до минуты. Но что делать, если нам нужно запускать команду 2 раза за одну минуту, т.е. через каждые 30 секунд? Или же еще чаще?
GitHub и самый продуктивный день
3 апреля 2014 PHP 1 комментарий 678 просмотров
Всем нравятся красивые графики. Поэтому иногда я люблю заходить на GitHub в свои репозитории и смотреть их графики по количеству коммитов, количеству новых файлов и т.д. А тут мне захотелось узнать в какой день я делаю больше всего коммитов. Скорее всего, это и можно назвать самым продуктивным днем. Итак, напишем скрипт, который поможет это сделать.
Становимся диджеем на php и icecast
1 апреля 2014 Проекты 1 комментарий 640 просмотров
Я всегда любил формат радио, потому что он включает в себя такой фактор как случайность, который мне всегда нравился. А также в последнее время я увлекаюсь чайной культурой, так что это и послужило узкой темой радиостанции. Я поставил себе цель - сделать нон-стоп онлайн радиостанцию. Так как мой блог подразумевает технические обсуждения, то приступим. Под катом кратко о процессе создания Радио "ЧАЙ".
Tuffle - продукт года 2013 в Беларуси?
18 марта 2014 Tuffle 1 комментарий 591 просмотр
Belarusian IT Awards - это открытая беларуская премия, которая позволяет молодым компаниям заявить о себе. Так вот в одной из номинаций, “Продукт года”, участвует наш проект Tuffle. Мы уже прошли в финал и стоим в списке из четырех компаний, основанных в 2013 году.
PHP: Правильный путь
2 февраля 2014 PHP 6 комментариев 1464 просмотра
На днях я наткнулся на замечательную карманную книгу для PHP разработчиков "PHP: The Right Way". Скорее, она будет более полезна новичкам. Чем именно? По интернету разбросано огромное количество материла по PHP, но многое уже устарело или не приводит к написанию качественного кода. В этой книге присутствуют основные актуальные сведения с ссылками на проверенные ресурсы. На самом деле, сначала я хотел перевести ее, форкнуть репозиторий, благо лицензия это позволяет. Но оказалось, что перевод уже есть. Нет только русской книги в форматах для электронных книг, но так как используется Markdown в русском форке, то это не составит труда.
Как я разрабатывал сервис воспоминаний
1 февраля 2014 Tuffle 5 комментариев 1023 просмотра
Речь пойдет про мой основной проект Tuffle.com, который я и наша команда разрабатываем уже год. Думаю, из этого выйдет целый цикл статей, так как проделано и делается многое. Начну с представления проекта, основных концепций, подходах. И со временем будем углубляться в техническую сторону.
User Timing API
31 января 2014 JavaScript 0 комментариев 1155 просмотров
Есть такой проект - HTML5Rocks. Многие о нем знают, чуть меньше его читают. А попадаются там очень интересные материалы. Один из них я захотел перевести для русского читателя. Речь пойдет о новой технологии - User Timing API. Оригинал на английском.
Валидация длины строки в Foundation
16 января 2014 Foundation 2 комментария 1368 просмотров
Frontend одного моего мини-проекта основан на Foundation фреймворке. Не хочу здесь заводить спор о том, почему не Twitter Bootstrap, а хочу рассказать про валидаторы в этом инструменте. А именно написание своего валидатора.
Скролл-загрузка в Tumblr теме
10 января 2014 Tumblr 6 комментариев 3452 просмотра
Я использую словосочетание скролл-загрузка, хотя часто это называют “бесконечный скроллинг”. Что это такое? Это подгрузка следующей порции контента, когда скролл приближается к концу страницы (или другое условие). Главное - он нас избавляет от ненужных лишних кликов по кнопкам “Далее”. И я считаю это весомым плюсом. Хотя есть и минусы. Клиент становится более нагруженным. И в некоторых случаях придется пожертвовать футером, если скролл вертикальный, так как до него пользователь может никогда не добраться. Google использует такой подход в Картинках. Странно, почему он не сделал так в WEB-поиске. А в статье просто небольшой how-to, как это сделать в Tumblr.
Поворот видео в PHP по EXIF-данным
23 декабря 2013 FFMPEG 2 комментария 835 просмотров
Видео, записанные с поворотом устройства часто так и отображаются при загрузке на сайт. Некоторые программы (или операционные системы) поворачивают их при проигрывании. Делают они это исходя из метаданных файла (например, в iPhone). Но в Windows видео будет проигрываться так, как оно записано. Поэтому при загрузке видео на ваш сайт нужно видео вручную перевернуть, чтобы гарантировать нужное положение на всех устройствах.
Удаление стилей в contenteditable при вставке
30 ноября 2013 HTML5 7 комментариев 1506 просмотров
В HTML5 есть такой атрибут contenteditable, который позволяет изменять содержимое DOM элементов. Но, по-моему, он совсем еще не готов к использованию, хотя идея классная. Например, при копировании какого-то форматированного текста и вставке в contenteditable, остаются стили и форматирование. Естественно, почти всегда это является проблемой.
Автоматическое сжатие JS / CSS на сервере
30 ноября 2013 JavaScript 0 комментариев 910 просмотров
От размера JS и CSS файлов (и не только их, но рассмотрим их как основные) зависит время загрузки страницы. И если мы уж говорим о производительности, то нужно сделать размер этих файлов минимальным. Конечно, их размер в основном зависит от требований и логики, которую они выполняют. Но опустим этот этап. Программисты любят покрывать свои классы JSDoc, писать потрясающие стихи-комментарии и ставить кучу пробелов.
Как MongoDB помогает MySQL считать
24 ноября 2013 MongoDB 5 комментариев 1183 просмотра
Начиная разрабатывать приложение в качестве хранилища данных вы выбираете MySQL. И круто! MySQL есть и будет хорошей , а главное, стабильной СУБД еще долгие годы. Но вот ваше приложение растет, безобидные SELECT COUNT уже заметно тормозят систему. Но не стоит сразу же переписывать систему на NoSQL, поверьте, будет не лучше. Давайте лучше при помощи NoSQL (в этой статье я буду использовать MongoDB) поможем разгрузить кое-какие части системы. Итак, сказ о том, как помочь MySQL считать.
Контроль памяти в JavaScript
8 ноября 2013 JavaScript 10 комментариев 2634 просмотра
Как и обычно, статья начинается с общих заезженных слов, что WEB уже не тот что был пару лет назад, и всё больше ответственности и логики переносится на Front-end. Например, в Tuffle.com Порядка 30 JS-файлов, а так как приложение асинхронное, то нужно как-то ими управлять. Об этом и пойдет речь.
Изменение URL без перезагрузки страницы
1 ноября 2013 HTML5 43 комментария 14331 просмотр
С развитием WEB понятие о странице немного изменилось. Для конечного пользователя улучшением производительности и комфорта путешествия по сайту, для разработчиков - немного иной реализацией. Понятно, что страница целиком состоит из множества элементов, большая часть которых не изменяется при переходе на новую страницу. Зачем заставлять пользователя смотреть по 100 раз как рендерится один и тот же документ?
Инкрементное резервное копирование
23 октября 2013 Linux 6 комментариев 1599 просмотров
Это небольшой tutorial о том, как правильно и экономно делать резервное копирование (backup) данных на сервере.
Импорт фотографий к себе на сайт из Facebook, Vkontakte и Instagram.
6 июля 2013 PHP 6 комментариев 7896 просмотров
Сейчас рассмотрим, как импортировать фотографии из Facebook, Vkontakte и Instagram к себе на сайт, красиво и охуенно, используя API этих сервисов. Представленный код написан для Zend Framework 1.* приложения, но вы можете его использовать где угодно с небольшими изменениями. Посмотреть процесс в действии вы можете на Tuffle.com (на странице создания воспоминания).
Конвертация видео для HTML5 в ffmpeg
20 февраля 2013 FFMPEG 3 комментария 4527 просмотров
С расцветом HTML5 использование flash видеопроигрывателей считается моветоном. HTML5 video куда более приятней и удобней. Но у каждого браузера свои интересы и стандарты, из этого вытекает проблема с форматами видео. Но пользователь этого знать не должен. Под катом инструкция о том как подготовить видео файл для просмотра в HTML5 плеере.
Markdown разметка
12 ноября 2012 PHP 4 комментария 1378 просмотров
Сейчас существует очень много "облегченных" языков разметки: BBCode, Wiki, Textile. Но самым "облегченным", на мой взгляд, языком является Markdown. За последнее время он стал очень популярным в связи с использованием на таких гигантах как GitHub и Stackoverflow.
DataFixures: миграции для тестовых данных
2 ноября 2012 Symfony2 0 комментариев 2835 просмотров
Всегда, перед тем как запустить приложение в свет, разработчики / тестировщики / заказчики работают с какими-то тестовыми данными (пользователи, заказы и т.д.). Перед запуском на каком-то сервере (test, demo ...) им нужно собрать SQL с общей структурой базы, включить в этот SQL необходимые данные, выполнить всё это на сервере. Мне нравится как к этому делу подошли Symfony 2 и Doctrine 2.
Тестирование web-приложений с использованием Selenium и PHPUnit
10 июля 2012 PHP 3 комментария 2685 просмотров
Кратко, Selenium - это инструмент для тестирования web-приложений. Он позволяет тестировать сайт “от лица пользователя” на уровне операций браузера, таких как клики, ожидание загрузки, поиск элементов на странице. Selenium устанавливается как http-сервер, написанный на java, который умеет управлять браузером и делать в нем различные действия.
Производительность ORDER BY RAND() LIMIT
15 мая 2012 MySQL 4 комментария 1556 просмотров
Для получения нескольких случайных записей из таблицы я всегда использовал всем известную конструкцию ORDER BY RAND() LIMIT. На днях я столкнулся с проблемой в производительности этого запроса. Таблица содержала более миллиона строк. И мне нужно было срочно найти решение. Под катом альтернативный вариант выбора нескольких случайных строк.
Лицензия PhpStorm для open source проекта
6 апреля 2012 PHP 1 комментарий 785 просмотров
Я пользуюсь PhpStorm и люблю этот продукт. Но всё время пользовался взломанной версией. На их сайте можно получить лицензию для open source проекта, но для этого нужно иметь страницу проекта. В этой статье я расскажу как получить такую лицензию на 1 год имея лишь активный репозиторий на GitHub и Demo страницу.
FULL OUTER JOIN
2 марта 2012 MySQL 0 комментариев 791 просмотр
На практике я столкнулся с ситуацией, когда нужно было выбрать данные из двух связанных сущностей при помощи полного соединения. К сожалению, MySQL пока не поддерживает FULL OUTER JOIN. Ниже приведен пример эмуляции этого вида JOIN.
Полезные запросы в MySQL
21 декабря 2011 MySQL 0 комментариев 2454 просмотра
В этой статье собраны некоторые, на мой взгляд, интересные и полезные запросы в MySQL. Список будет пополняться в будущем.
Введение в Zend Framework 2
17 декабря 2011 Zend 0 комментариев 703 просмотра
На подходе уже 2-я версия Zend Framework. Некоторые уже спешат переписывать и рефакторить свои сайты, используя пространства имен, менеджеры событий. Под катом хорошая презентация доклада Валерия Рабиевского с "Zend framework day".
Планировщик событий в MySQL
15 декабря 2011 MySQL 0 комментариев 1486 просмотров
Начиная с версии 5.1 в MySQL появился планировщик событий, позволяющий выполнять различные действия в определенное время. Из этого следует то, что часть функционала можно перенести из Cron на сам MySQL.
Nginx для статики, Apache для динамики
12 декабря 2011 Nginx 3 комментария 821 просмотр
Как известно, Nginx славится тем, что хорошо справляется с отдачей статических файлов (css, js, изображения). Делается это за счет какого-то хитрого кэширования. Но с обработкой динамического содержания лучше работает Apache. Имеем: сайт на PHP, Apache. Нужно настроить сервер так, чтобы Nginx отдавал статику, а остальным занимался Apache.
Cubique - datagrid для Zend Framework и jQuery
18 октября 2011 Lab 3 комментария 3224 просмотра
Все началось с того, что я разрабатывал один проект с использованием Zend Framework и jQuery. В панели администратора нужно было выводить данные из различных таблиц MySQL. Хотелось сделать это красиво, удобно, гибко, с AJAX и т.д. Поиск в Google выдал огромное количество библиотек для отображения табличных данных. Но, к сожалению, везде была кривая серверная сторона и не было подходящих решений для Zend Framework. Под катом Cubique — инструмент для отображения данных для Zend Framework с функциями сортировки, поиска, сделанный на jQuery, основанный на AJAX.
Apache Bench - простая утилита для тестирования нагрузки
12 октября 2011 Apache 3 комментария 3444 просмотра
Apache Bench (ab) - простой инстурмент для тестирования нагрузки веб-сервера. Данная утилита входит в стандартную сборку Apache и даже имеется почти во всех готовых сборках, таких как Denwer, WAMP, XAMPP. Очень проста в использовании и гибко настраиваемая.
Drag & Drop
1 октября 2011 HTML5 4 комментария 809 просмотров
Возможность Drag & Drop в браузерах была уже давно реализована средствами Javascript. Сейчас же можно сделать Drag & Drop без сторонних библиотек (jQuery UI), а при помощи нативных возможностей браузера. Под катом я расскажу как это делается.
Командная строка в PhpStorm
23 сентября 2011 PHP 2 комментария 2316 просмотров
PhpStorm — IDE от хорошо зарекомендовавшей себя компании по производству ПО для разработчиков. Цель любой IDE — создать комфортные условия для быстрой и качественной разработки. И в создании этих условий вам может помочь Command Line Tool, позволяющий делать быстро шаблонные действия. К сожалению, сейчас доступны команды только для Zend Framework и Symfony. В этой статье я помогу вам настроить командную строку на свой лад (Custom Framework).
Защита от CSRF в Zend Framework
16 сентября 2011 Zend 0 комментариев 11483 просмотра
CSRF (Сross Site Request Forgery) — вид web-атак, использующий недостатки протокола HTTP. Если жертва заходит на сайт, созданный злоумышленником, от её лица тайно отправляется запрос на другой сервер (например, на сервер платёжной системы), осуществляющий некую вредоносную операцию (например, перевод денег на счёт злоумышленника). Для осуществления данной атаки, жертва должна быть авторизована на том сервере, на который отправляется запрос, и этот запрос не должен требовать какого-либо подтверждения со стороны пользователя, который не может быть проигнорирован или подделан атакующим скриптом.
Web-сервис на Zend_Soap
13 сентября 2011 PHP 1 комментарий 2188 просмотров
Web-сервис — компонент, предоставляющий Internet-клиентам набор функций API или web-методов. Основная задача web-сервисов — обеспечение межпрограммного взаимодействия. В отличие от традиционного web-приложения, у web-сервиса нет пользовательского интерфейса (GUI). Вместо этого у него есть программный интерфейс, то есть web-сервис предоставляет функции (web-методы), которые могут быть вызваны удаленно. Web-сервис не предназначен для обслуживания конечных пользователей. Его задача — предоставление услуг другим приложениям, будь то web-приложения, приложения с графическим пользовательским интерфейсом или консольные приложения.
HTML5 Local Storage
10 сентября 2011 HTML5 8 комментариев 2931 просмотр
Local storage (локальное хранилище) — база данных на стороне клиента, содержащая пары ключ-значение. Надеюсь, что в ближайшем будущем эта технология станет стандартом в веб-разработке.