Упрощаем регистрацию с Gravatar
Всем уже давно известен сервис Gravatar, который упрощает процесс работы с аватарами. Как для пользователей, так и для сайтов. Можно не загружать каждый раз своё фото на новый сайт, сайт может получить ваше фото из Gravatar по вашему email. Это удобно пользователю, потому что можно поменять своё изображение в одном месте и оно сменится везде. Удобно и сайтам, нет необходимости имплементировать процесс загрузки файлов. Конечно, в какой-то степени это затрагивает вопрос о безопасности, но у вас всегда есть право не использовать то или иное решение. Итак, об аватарках, думаю, знают многие. Но Gravatar также позволяет получить по email базовую информацию о пользователе.
читать далее >>
Опубликовано в PHP, 150 просмотров
Тестирование регулярных выражений в RegExr
Иногда попадаются такие инструменты, которыми начинаешь пользоваться сам и хочется рассказать о них другим. На этот раз это не совсем новый инструмент, это обновление старого, которое вывело его на новый уровень. Речь пойдет об инструменте для изучения, написания и тестирования регулярных выражений RegExr. До этого выглядел он так, и если честно, то пользоваться им было крайне неудобно.
читать далее >>
Как документировать API
Многие разработчики до сих пор создают документацию своих API в Word или Excel. Да и сам я когда-то так делал. Пока, не нашел такой инструмент как Apiary. Вкратце, он позволяет оформить страницу API, расписать всё по полочкам, предоставить доступ другим пользователям, а самое интересное - тестировать свои API-методы.
читать далее >>
Опубликовано в API, 240 просмотров
Серверная архитектура Tuffle
Как я и обещал в предыдущих статьях, расскажу читателям о серверной архитектуре проекта Tuffle. Но написали мы ее изначально для Хабра, поэтому по правилам сообщества я не могу ее полностью выложить здесь. Так что читайте эту статью на Хабре.
читать далее >>
Опубликовано в Tuffle, 130 просмотров
Запуск задачи CRON каждые 30 секунд
CRON как планировщик задач в UNIX-системах знаком почти каждому программисту, особенно, использующему LAMP стек. Обычно, вся работа с CRON заключается в настройке задач, а именно периодичности выполнения. Время запуска команды указывается с точностью до минуты. Но что делать, если нам нужно запускать команду 2 раза за одну минуту, т.е. через каждые 30 секунд? Или же еще чаще?
читать далее >>
Опубликовано в Linux, 208 просмотров
GitHub и самый продуктивный день
Всем нравятся красивые графики. Поэтому иногда я люблю заходить на GitHub в свои репозитории и смотреть их графики по количеству коммитов, количеству новых файлов и т.д. А тут мне захотелось узнать в какой день я делаю больше всего коммитов. Скорее всего, это и можно назвать самым продуктивным днем. Итак, напишем скрипт, который поможет это сделать.
читать далее >>
Опубликовано в PHP, 157 просмотров
Становимся диджеем на php и icecast
Я всегда любил формат радио, потому что он включает в себя такой фактор как случайность, который мне всегда нравился. А также в последнее время я увлекаюсь чайной культурой, так что это и послужило узкой темой радиостанции. Я поставил себе цель - сделать нон-стоп онлайн радиостанцию. Так как мой блог подразумевает технические обсуждения, то приступим. Под катом кратко о процессе создания Радио "ЧАЙ".
читать далее >>
Tuffle - продукт года 2013 в Беларуси?
Belarusian IT Awards - это открытая беларуская премия, которая позволяет молодым компаниям заявить о себе. Так вот в одной из номинаций, “Продукт года”, участвует наш проект Tuffle. Мы уже прошли в финал и стоим в списке из четырех компаний, основанных в 2013 году.
читать далее >>
Опубликовано в Tuffle, 175 просмотров
PHP: Правильный путь
На днях я наткнулся на замечательную карманную книгу для PHP разработчиков "PHP: The Right Way". Скорее, она будет более полезна новичкам. Чем именно? По интернету разбросано огромное количество материла по PHP, но многое уже устарело или не приводит к написанию качественного кода. В этой книге присутствуют основные актуальные сведения с ссылками на проверенные ресурсы. На самом деле, сначала я хотел перевести ее, форкнуть репозиторий, благо лицензия это позволяет. Но оказалось, что перевод уже есть. Нет только русской книги в форматах для электронных книг, но так как используется Markdown в русском форке, то это не составит труда.
читать далее >>
Опубликовано в PHP, 486 просмотров
Как я разрабатывал сервис воспоминаний
Речь пойдет про мой основной проект Tuffle.com, который я и наша команда разрабатываем уже год. Думаю, из этого выйдет целый цикл статей, так как проделано и делается многое. Начну с представления проекта, основных концепций, подходах. И со временем будем углубляться в техническую сторону.
читать далее >>
Опубликовано в Tuffle, 464 просмотра
User Timing API
Есть такой проект - HTML5Rocks. Многие о нем знают, чуть меньше его читают. А попадаются там очень интересные материалы. Один из них я захотел перевести для русского читателя. Речь пойдет о новой технологии - User Timing API. Оригинал на английском.
читать далее >>
Опубликовано в JavaScript, 672 просмотра
Валидация длины строки в Foundation
Frontend одного моего мини-проекта основан на Foundation фреймворке. Не хочу здесь заводить спор о том, почему не Twitter Bootstrap, а хочу рассказать про валидаторы в этом инструменте. А именно написание своего валидатора.
читать далее >>
Опубликовано в Foundation, 790 просмотров
Скролл-загрузка в Tumblr теме
Я использую словосочетание скролл-загрузка, хотя часто это называют “бесконечный скроллинг”. Что это такое? Это подгрузка следующей порции контента, когда скролл приближается к концу страницы (или другое условие). Главное - он нас избавляет от ненужных лишних кликов по кнопкам “Далее”. И я считаю это весомым плюсом. Хотя есть и минусы. Клиент становится более нагруженным. И в некоторых случаях придется пожертвовать футером, если скролл вертикальный, так как до него пользователь может никогда не добраться. Google использует такой подход в Картинках. Странно, почему он не сделал так в WEB-поиске. А в статье просто небольшой how-to, как это сделать в Tumblr.
читать далее >>
Опубликовано в Tumblr, 2592 просмотра
Поворот видео в PHP по EXIF-данным
Видео, записанные с поворотом устройства часто так и отображаются при загрузке на сайт. Некоторые программы (или операционные системы) поворачивают их при проигрывании. Делают они это исходя из метаданных файла (например, в iPhone). Но в Windows видео будет проигрываться так, как оно записано. Поэтому при загрузке видео на ваш сайт нужно видео вручную перевернуть, чтобы гарантировать нужное положение на всех устройствах.
читать далее >>
Опубликовано в FFMPEG, 361 просмотр
Удаление стилей в contenteditable при вставке
В HTML5 есть такой атрибут contenteditable, который позволяет изменять содержимое DOM элементов. Но, по-моему, он совсем еще не готов к использованию, хотя идея классная. Например, при копировании какого-то форматированного текста и вставке в contenteditable, остаются стили и форматирование. Естественно, почти всегда это является проблемой.
читать далее >>
Опубликовано в HTML5, 989 просмотров
Автоматическое сжатие JS / CSS на сервере
От размера JS и CSS файлов (и не только их, но рассмотрим их как основные) зависит время загрузки страницы. И если мы уж говорим о производительности, то нужно сделать размер этих файлов минимальным. Конечно, их размер в основном зависит от требований и логики, которую они выполняют. Но опустим этот этап. Программисты любят покрывать свои классы JSDoc, писать потрясающие стихи-комментарии и ставить кучу пробелов.
читать далее >>
Опубликовано в JavaScript, 365 просмотров
Как MongoDB помогает MySQL считать
Начиная разрабатывать приложение в качестве хранилища данных вы выбираете MySQL. И круто! MySQL есть и будет хорошей , а главное, стабильной СУБД еще долгие годы. Но вот ваше приложение растет, безобидные SELECT COUNT уже заметно тормозят систему. Но не стоит сразу же переписывать систему на NoSQL, поверьте, будет не лучше. Давайте лучше при помощи NoSQL (в этой статье я буду использовать MongoDB) поможем разгрузить кое-какие части системы. Итак, сказ о том, как помочь MySQL считать.
читать далее >>
Опубликовано в MongoDB, 562 просмотра
Контроль памяти в JavaScript
Как и обычно, статья начинается с общих заезженных слов, что WEB уже не тот что был пару лет назад, и всё больше ответственности и логики переносится на Front-end. Например, в Tuffle.com Порядка 30 JS-файлов, а так как приложение асинхронное, то нужно как-то ими управлять. Об этом и пойдет речь.
читать далее >>
Опубликовано в JavaScript, 1715 просмотров
Изменение URL без перезагрузки страницы
С развитием WEB понятие о странице немного изменилось. Для конечного пользователя улучшением производительности и комфорта путешествия по сайту, для разработчиков - немного иной реализацией. Понятно, что страница целиком состоит из множества элементов, большая часть которых не изменяется при переходе на новую страницу. Зачем заставлять пользователя смотреть по 100 раз как рендерится один и тот же документ?
читать далее >>
Опубликовано в HTML5, 8693 просмотра
Инкрементное резервное копирование
Это небольшой tutorial о том, как правильно и экономно делать резервное копирование (backup) данных на сервере.
читать далее >>
Опубликовано в Linux, 743 просмотра
Импорт фотографий к себе на сайт из Facebook, Vkontakte и Instagram.
Сейчас рассмотрим, как импортировать фотографии из Facebook, Vkontakte и Instagram к себе на сайт, красиво и охуенно, используя API этих сервисов. Представленный код написан для Zend Framework 1.* приложения, но вы можете его использовать где угодно с небольшими изменениями. Посмотреть процесс в действии вы можете на Tuffle.com (на странице создания воспоминания).
читать далее >>
Опубликовано в PHP, 6011 просмотров
Конвертация видео для HTML5 в ffmpeg
С расцветом HTML5 использование flash видеопроигрывателей считается моветоном. HTML5 video куда более приятней и удобней. Но у каждого браузера свои интересы и стандарты, из этого вытекает проблема с форматами видео. Но пользователь этого знать не должен. Под катом инструкция о том как подготовить видео файл для просмотра в HTML5 плеере.
читать далее >>
Опубликовано в FFMPEG, 3042 просмотра
Markdown разметка
Сейчас существует очень много "облегченных" языков разметки: BBCode, Wiki, Textile. Но самым "облегченным", на мой взгляд, языком является Markdown. За последнее время он стал очень популярным в связи с использованием на таких гигантах как GitHub и Stackoverflow.
читать далее >>
Опубликовано в PHP, 484 просмотра
DataFixures: миграции для тестовых данных
Всегда, перед тем как запустить приложение в свет, разработчики / тестировщики / заказчики работают с какими-то тестовыми данными (пользователи, заказы и т.д.). Перед запуском на каком-то сервере (test, demo ...) им нужно собрать SQL с общей структурой базы, включить в этот SQL необходимые данные, выполнить всё это на сервере. Мне нравится как к этому делу подошли Symfony 2 и Doctrine 2.
читать далее >>
Опубликовано в Symfony2, 1481 просмотр
Тестирование web-приложений с использованием Selenium и PHPUnit
Кратко, Selenium - это инструмент для тестирования web-приложений. Он позволяет тестировать сайт “от лица пользователя” на уровне операций браузера, таких как клики, ожидание загрузки, поиск элементов на странице. Selenium устанавливается как http-сервер, написанный на java, который умеет управлять браузером и делать в нем различные действия.
читать далее >>
Опубликовано в PHP, 955 просмотров
Производительность ORDER BY RAND() LIMIT
Для получения нескольких случайных записей из таблицы я всегда использовал всем известную конструкцию ORDER BY RAND() LIMIT. На днях я столкнулся с проблемой в производительности этого запроса. Таблица содержала более миллиона строк. И мне нужно было срочно найти решение. Под катом альтернативный вариант выбора нескольких случайных строк.
читать далее >>
Опубликовано в MySQL, 531 просмотр
Лицензия PhpStorm для open source проекта
Я пользуюсь PhpStorm и люблю этот продукт. Но всё время пользовался взломанной версией. На их сайте можно получить лицензию для open source проекта, но для этого нужно иметь страницу проекта. В этой статье я расскажу как получить такую лицензию на 1 год имея лишь активный репозиторий на GitHub и Demo страницу.
читать далее >>
Опубликовано в PHP, 309 просмотров
FULL OUTER JOIN
На практике я столкнулся с ситуацией, когда нужно было выбрать данные из двух связанных сущностей при помощи полного соединения. К сожалению, MySQL пока не поддерживает FULL OUTER JOIN. Ниже приведен пример эмуляции этого вида JOIN.
читать далее >>
Опубликовано в MySQL, 344 просмотра
Полезные запросы в MySQL
В этой статье собраны некоторые, на мой взгляд, интересные и полезные запросы в MySQL. Список будет пополняться в будущем.
читать далее >>
Опубликовано в MySQL, 1432 просмотра
Введение в Zend Framework 2
На подходе уже 2-я версия Zend Framework. Некоторые уже спешат переписывать и рефакторить свои сайты, используя пространства имен, менеджеры событий. Под катом хорошая презентация доклада Валерия Рабиевского с "Zend framework day".
читать далее >>
Опубликовано в Zend Framework, 211 просмотров
Планировщик событий в MySQL
Начиная с версии 5.1 в MySQL появился планировщик событий, позволяющий выполнять различные действия в определенное время. Из этого следует то, что часть функционала можно перенести из Cron на сам MySQL.
читать далее >>
Опубликовано в MySQL, 898 просмотров
Nginx для статики, Apache для динамики
Как известно, Nginx славится тем, что хорошо справляется с отдачей статических файлов (css, js, изображения). Делается это за счет какого-то хитрого кэширования. Но с обработкой динамического содержания лучше работает Apache. Имеем: сайт на PHP, Apache. Нужно настроить сервер так, чтобы Nginx отдавал статику, а остальным занимался Apache.
читать далее >>
Опубликовано в Nginx, 297 просмотров
Cubique - datagrid для Zend Framework и jQuery
Все началось с того, что я разрабатывал один проект с использованием Zend Framework и jQuery. В панели администратора нужно было выводить данные из различных таблиц MySQL. Хотелось сделать это красиво, удобно, гибко, с AJAX и т.д. Поиск в Google выдал огромное количество библиотек для отображения табличных данных. Но, к сожалению, везде была кривая серверная сторона и не было подходящих решений для Zend Framework. Под катом Cubique — инструмент для отображения данных для Zend Framework с функциями сортировки, поиска, сделанный на jQuery, основанный на AJAX.
читать далее >>
Опубликовано в Zend Framework, 246 просмотров
Apache Bench - простая утилита для тестирования нагрузки
Apache Bench (ab) - простой инстурмент для тестирования нагрузки веб-сервера. Данная утилита входит в стандартную сборку Apache и даже имеется почти во всех готовых сборках, таких как Denwer, WAMP, XAMPP. Очень проста в использовании и гибко настраиваемая.
читать далее >>
Опубликовано в Apache, 1856 просмотров
Drag & Drop
Возможность Drag & Drop в браузерах была уже давно реализована средствами Javascript. Сейчас же можно сделать Drag & Drop без сторонних библиотек (jQuery UI), а при помощи нативных возможностей браузера. Под катом я расскажу как это делается.
читать далее >>
Опубликовано в HTML5, 313 просмотров
Командная строка в PhpStorm
PhpStorm — IDE от хорошо зарекомендовавшей себя компании по производству ПО для разработчиков. Цель любой IDE — создать комфортные условия для быстрой и качественной разработки. И в создании этих условий вам может помочь Command Line Tool, позволяющий делать быстро шаблонные действия. К сожалению, сейчас доступны команды только для Zend Framework и Symfony. В этой статье я помогу вам настроить командную строку на свой лад (Custom Framework).
читать далее >>
Опубликовано в PHP, 1391 просмотр
Защита от CSRF в Zend Framework
CSRF (Сross Site Request Forgery) — вид web-атак, использующий недостатки протокола HTTP. Если жертва заходит на сайт, созданный злоумышленником, от её лица тайно отправляется запрос на другой сервер (например, на сервер платёжной системы), осуществляющий некую вредоносную операцию (например, перевод денег на счёт злоумышленника). Для осуществления данной атаки, жертва должна быть авторизована на том сервере, на который отправляется запрос, и этот запрос не должен требовать какого-либо подтверждения со стороны пользователя, который не может быть проигнорирован или подделан атакующим скриптом.
читать далее >>
Опубликовано в Zend Framework, 6846 просмотров
Web-сервис на Zend_Soap
Web-сервис — компонент, предоставляющий Internet-клиентам набор функций API или web-методов. Основная задача web-сервисов — обеспечение межпрограммного взаимодействия. В отличие от традиционного web-приложения, у web-сервиса нет пользовательского интерфейса (GUI). Вместо этого у него есть программный интерфейс, то есть web-сервис предоставляет функции (web-методы), которые могут быть вызваны удаленно. Web-сервис не предназначен для обслуживания конечных пользователей. Его задача — предоставление услуг другим приложениям, будь то web-приложения, приложения с графическим пользовательским интерфейсом или консольные приложения.
читать далее >>
Опубликовано в PHP, 1425 просмотров
HTML5 Local Storage
Local storage (локальное хранилище) — база данных на стороне клиента, содержащая пары ключ-значение. Надеюсь, что в ближайшем будущем эта технология станет стандартом в веб-разработке.
читать далее >>
Опубликовано в HTML5, 1662 просмотра