Pull to refresh
124
0
Роман @rrromka

User

Send message

Apache vs Nginx: практический взгляд

Reading time12 min
Views360K
Apache vs Nginx

Введение


Apache и Nginx — 2 самых широко распространенных веб-сервера с открытым исходным кодом в мире. Вместе они обслуживают более 50% трафика во всем интернете. Оба решения способны работать с разнообразными рабочими нагрузками и взаимодействовать с другими приложениями для реализации полного веб-стека.

Несмотря на то, что у Apache и Nginx много схожих качеств, их нельзя рассматривать как полностью взаимозаменямые решения. Каждый из них имеет собственные преимущества и важно понимать какой веб-сервер выбрать в какой ситуации. В этой статье описано то, как каждый из этих веб-серверов ведет себя при различных условиях.
Читать дальше →
Total votes 89: ↑69 and ↓20+49
Comments184

Изучаем PHP изнутри. Zval

Reading time10 min
Views50K
Эта статья базируется на главе Zvals книги PHP Internals Book, переводом которой на русский язык я сейчас занимаюсь [1]. Книга ориентирована в первую очередь на C-программистов, желающих писать свои расширения для PHP, но, я уверен, что она окажется полезной и для PHP-разработчиков, так как описывает внутреннюю логику работы интерпретатора. В статье я оставил только базовую теорию, которая должна быть понятна всем разработчикам (даже не знакомым с PHP или C). За более полным изложением материала обратитесь к книге.

Задачка для привлечения внимания. Каким будет результат выполнения следующего кода?
$obj1 = new StdClass();
$obj2 = new StdClass();

$obj1->value = 1;
$obj2->value = 1;

function f1($o) {
  $o = 100;
}

function f2($o) {
  $o->value = 100;
}

f1($obj1);
f2($obj2);

var_dump($obj1);
var_dump($obj2);


Ответ
object(stdClass)#1 (1) { [«value»]=> int(1) }
object(stdClass)#2 (1) { [«value»]=> int(100) }

Если вы точно определили ответ и можете объяснить почему он будет именно таким, то, наверное, вы не узнаете из этой статьи ничего нового, иначе — вам определенно стоит прочитать эту статью, чтобы углубить свои знания.
Читать дальше →
Total votes 54: ↑47 and ↓7+40
Comments37

Видеопроигрыватель для сайтов обучающих иностранным языкам

Reading time4 min
Views13K
MediaElement language learning plugins

Некоторое время назад я разработал ряд плагинов для javascript-видеопроигрывателя MedialElement, сейчас выложил их в открытый доступ. Эти плагины расширяют функциональность плейера таким образом, что он может быть использован для просмотра видеороликов обучающих иностранным языкам. Разумеется, и без моих плагинов никто не мешает просматривать обучающие видео в этом проигрывателе, но эти плагины делают процесс просмотра и изучения более комфортным.

За эталон, к которому я стремился при разработке, был взят проигрыватель http://www.yabla.com (не буду скрывать, изначально планировалось склонировать ресурс целиком, но проект не завёлся). Этот проигрыватель обладает следующими особенностями:
  1. навигация по таймлайну осуществляется не с точностью до секунды, а с точностью до предложения. Человеку, изучающему язык по видеороликам, часто приходится проматывать видео назад, чтобы несколько раз переслушать неразборчивую фразу и гораздо удобнее одним кликом переместиться к началу фразы, а не искать её начало несколькими кликами.
  2. Каждая фраза может быть зациклена, чтобы прослушать её многократно.
  3. Разбивка таймлайна на фразы не требует от редактора какой-то особой подготовки: данные о таймингах выбираются из стандартного srt-файла с титрами.
  4. Титры на всех доступных языках выводятся под видеороликом (при желании могут быть скрыты). Эта особенность позволяет, например, показывать пользователю титры на языке оригинала видео и на родном языке пользователя. Клик по слову в титрах ставит видео на паузу и показывает пользователю перевод слова, по которому сделан щелчок.
  5. Таймер показывает не только время от начала видеоролика, но также номер фразы и общее число фраз в ролике.
  6. Скорость проигрывания ролика может быть замедлена или ускорена.
  7. Переход между фразами возможен не только кликом по таймлайну, но и при помощи хоткеев Ctrl + стрелки влево/вправо. Другие горячие клавиши: пробел — зациклить фразу/снять зацикливание, Ctrl + стрелки вверх/вниз — изменение скорости ролика.

Подробности в продолжении
Total votes 41: ↑39 and ↓2+37
Comments5

Пример разработки блога на Zend Framework 2. Часть 3. Работа с пользователями

Reading time10 min
Views27K
Это третья (последняя?) часть статьи, посвященной разработке простого приложения при помощи Zend Framework 2. В первой части я рассмотрел структуру ZendSkeletonApplication, во второй части привел пример разработки простого модуля. Эта часть посвящена работе с пользователями, а также я прикручу к проекту шаблонизатор Twig.

Работа с пользователями


Код написанный в предыдущих частях, позволяет создавать, редактировать и удалять блогпосты всем посетителям сайта. Такой подход неприемлем для любого рабочего сайта, поэтому сейчас настало время решить вопросы регистрации/авторизации и распределения прав доступа к различным возможностям приложения.

Zf Commons


Для Zend фреймворка написано достаточно много модулей, решающих стандартные задачи, найти их можно на специальном сайте: modules.zendframework.com. Вместо разработки своих велосипедов для решения стандартных задач я считаю более правильным использовать/адаптировать под себя готовые решения (по крайней мере готовые решения нужно изучить прежде чем браться за разработку велосипеда).

Среди множества разработчиков модулей выделяется команда ZF Commons, ребятами из этой команды разработан ряд очень полезных модулей, которые мы будем использовать в этом проекте: github.com/ZF-Commons. Рассмотрим некоторые из них, которые необходимы нам на данном этапе.
Читать дальше →
Total votes 20: ↑14 and ↓6+8
Comments9

Пример разработки блога на Zend Framework 2. Часть 2. Модуль MyBlog

Reading time14 min
Views46K
Это вторая из трех частей статьи, посвященной разработке простого приложения при помощи Zend Framework 2. В первой части я рассмотрел структуру ZendSkeletonApplication, а в этой части приведу пример разработки простого модуля. Третья часть будет посвящена работе с пользователями и шаблонизатором Twig.

Установка и настройка дополнительных модулей


Первым делом хочу отметить, что установка стороннего модуля в Zend Framework обычно состоит из примерно таких четырех шагов:
  1. добавляем соответствующую строчку в composer.json, чтобы сообщить Композеру о новом модуле,
  2. выполняем команду php composer.phar update, чтобы Композер загрузил новый модуль и при необходимости перегенерировал автолоад файлы,
  3. добавляем новый модуль в список modules в файле config/application.config.php,
  4. при необходимости, размещаем конфигурационный файл модуля (обычно пример такого файла находится в папке config модуля) в config/autoload и делаем в нем необходимые правки.

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

Давайте начнем с установки простого, но полезного модуля Zend Developer Tools.
Читать дальше →
Total votes 21: ↑18 and ↓3+15
Comments22

Пример разработки блога на Zend Framework 2. Часть 1. ZendSkeletonApplication

Reading time10 min
Views68K
В последние несколько лет моя работа связана с использованием CMS Drupal, но на досуге я изучал и just for fun запускал проекты на питоновских фреймворках Django, Flask и Twisted. Сейчас я решил освоить основы двух-трех популярных PHP-фреймфорков и первыми я решил изучить Zend Framework 2 и Yii.

В процессе ознакомления с Zend Framework 2 я изучил туториал с официального сайта (http://framework.zend.com/manual/2.2/en/user-guide/overview.html), просмотрел документацию фреймворка (http://framework.zend.com/manual/2.2/en/index.html), прочитал книгу Michael Romer “Web development with Zend Framework 2” и собрал собственное тестовое приложение.

Переварив всю эту информацию, я пришел к мысли, что официальный туториал к фреймворку суховат:
  • в нем не рассказывается о работе с пользователями, сессиями и правами доступа,
  • лишь вскользь рассматривается такая основополагающая часть фреймворка как ServiceManager,
  • в качестве интерфейса с базой данных безальтернативно используется паттерн Table Gateway (и соответствующая его реализация в фреймворке),
  • используется встроенный в фреймворк шаблонизатор, который после питоновского Jinja 2 кажется совершенно неудобным и примитивным,
  • и т.д.

В итоге, более-менее удовлетворительное по функционалу приложение я смог создать после прочтения книги.

В этой статье я хочу привести пример разработки простого блога, в ней будет несколько отличий от официального туториала. В первую очередь я постараюсь заострить внимание на тех вопросах, которые во время изучения показались мне недостаточно раскрытыми в официальном туториале. Кроме того я буду использовать некоторые технологии, альтернативные тем, что используются в Zend фреймворке по умолчанию:
  • в качестве шаблонизатора будет использоваться Twig,
  • для работы с БД — Doctrine ORM,
  • для авторизации/аутентификации и распределения прав доступа я буду использовать существующие модули ZfcUser и BjyAuthorize,
  • также я рассмотрю вопросы разработки собственных валидаторов форм, View плагинов и другие.

За деталями добро пожаловать под кат
Total votes 23: ↑22 and ↓1+21
Comments28

Quickpong — разработка сетевой игры на основе фреймворка Twisted

Reading time6 min
Views17K
Разработал и запустил на домене quickpong.com онлайн версию игры Pong. В игре (by design) реализован только режим мультиплейера, то есть игра идет не против искусственного интеллекта, а против другого человека.

Игра представляет из себя клиент-серверное приложение, серверная часть написана на питоновском фреймворке Twisted, клиентская — на флэшовом фреймворке FlashPunk.

Это мой первый опыт разработки асинхронного сетевого приложения, способного обслуживать тысячи одновременных подключений. Далее я расскажу о том, как эта программа работает, с какими проблемами мне пришлось столкнуться при разработке, какие идеи я хотел реализовать и что в итоге осталось нереализованным. Возможно, мой опыт окажется для кого-нибудь полезным.
За подробностями добро пожаловать под кат
Total votes 28: ↑26 and ↓2+24
Comments13

Настройка резервного копирования Linux-сервера за 5 минут

Reading time3 min
Views66K
Передо мной возникла необходимость настроить резервное копирование на новом Linux-сервере, задачка эта оочень важная, но уж больно скучная: нужно написать и отладить скрипты, которые будут архивировать нужные папки (причем желательно делать инкрементальные архивы), базы данных, хранилища subversion, а затем переносить эти архивы на удаленный сервер. По этому я попробовал нагуглить готовое решение для этой задачки и в результате наткнулся на backup-manager — замечательный опенсорсный набор bash-скриптов, позволяющих:
  • архивировать любые папки, в том числе и создавать инкрементальные архивы. В конфиге просто указывается список директорий, которые должны быть скопированы, а также «черный список» файлов, которые копироваться не будут.
  • делать резервное копирование баз данных MySQL. В конфиге указываются логин и пароль mysql-юзера, имеющего доступ к базам, а всю остальную работу backup-manager делает сам.
  • делать резервное копирование svn-репозиториев, причем бэкап делается не копированием папки с хранилищем, а с помощью команды svnadmin dump.
  • шифровать архивы.
  • копировать созданные архивы на удаленные сервера по FTP, SSH или (это самая важная для меня фича) в хранилище Amazon S3, а также записывать их на DVD.

Таким образом, один этот этот набор скриптов решил абсолютно все мои задачи, связанные с резервным копированием. Настраивается все это хозяйство не более чем за пять минут, так как в конфигурационном файле каждый параметр имеет подробные комментарии, так что проблем с настройкой возникнуть ни у кого не должно.
Читать дальше →
Total votes 85: ↑74 and ↓11+63
Comments45

Оригинальный новогодний спецэффект для сайтов

Reading time1 min
Views13K
Нашел интересный ява-скриптовый спецэффект, которым под Новый Год можно украсить страницы сайта. Нет, это не доставшие всех снежинки, это ёлочная гирлянда, лампочки которой весело лопаются при наведении на них курсора мыши. Почти что пупырчатый полиэтилен :)

Посмотреть на результат работы скрипта можно на странице автора. Там же, если заглянуть в исходники, можно легко разобраться как подключить его к своей странице. Также, до старого нового года, результат работы скрипта в условиях приближенных к боевым можно увидеть на моем Зеруте. Скачать гирлянду, вместе со снежинками, можно со страницы www.schillmania.com/projects/snowstorm.
Total votes 23: ↑10 and ↓13-3
Comments5

Темизация Drupal

Reading time1 min
Views6.5K
CMS Drupal часто ругают за однообразность и узнаваемость дизайнов, которые используются на Друпал-сайтах. То что за данным сайтом стоит Друпал можно определить не только URL-адресам специфического вида, узнаваемым путям к папкам модулей и главной странице в виде списка последних опубликованных документов, но и по стандартной двух-трехколоночной структуре сайта, наличии стандартных форм авторизации и поиска, облаков тегов, списков новых документов и других часто используемых блоков.

Однако все эти упреки не оправданы, к Друпалу, при должном умении, можно прикрутить дизайн и верстку любой сложности. До неузнаваемости можно «темизировать», то есть изменить внешний вид, любой html-код, создаваемый Друпалом: все стандартные формы, блоки, документы и списки.

В ноябрьском номере журнала PC Magazine/RE опубликована моя статья о «темизации» Друпала, в ней рассказано о трех этапах темизации, которые покрывают собой практически 100% задач, связанных с изменением внешнего вида сайта:
  • разработка общего шаблона для всех страниц сайта и «кастомных» шаблонов для избранных страниц;
  • разработка различных шаблонов для разных типов документов и списков;
  • изменение внешнего вида форм (поиск, авторизация и любые другие стандартные и создаваемые внешними модулями формы).

Кроме того, в последнем разделе рассказано об основах Forms API Друпала.
Total votes 54: ↑48 and ↓6+42
Comments22

Швабрашвабр2

Reading time1 min
Views2.2K
Разработал и выложил в открытый доступ вторую версию своей «социальной» сборки Друпала — Швабрашвабр.

К старым возможностям системы:
  • система блогов и коллективных блогов,
  • система рейтингования материалов, комментариев и «карма» (репутация) пользователей,
  • система распределения прав доступа к ресурсам сайта на основе кармы.

Добавил ряд новых фишек:
  • персональные и общие фотогалереи,
  • система статусов (в стиле Фейсбука и Твиттера),
  • персональные гостевые книги (в стиле стены во вКонтакте),
  • списки друзей и посетителей.

По моему мнению в социальных сетях основной сущностью сайта, вокруг которой строится взаимодействие посетителей, является не контент (записи в блогах, фотографии и т.п.), а пользователи, по этому в этой сборке я уделил максимальное внимание кастомизации профилей пользователей. Примеры таких кастомизированных профилей можно увидеть по ссылкам: Заказчик, Исполнитель, Лошадь.

Дистрибутив сборки, подробная инструкция и скринкасты (6 роликов почти на полтора часа) для самостоятельной настройки сайта с аналогичным функционалом доступны на Швабрешвабр.
Total votes 113: ↑86 and ↓27+59
Comments22

История одного проекта

Reading time3 min
Views669


В ноябре прошлого в мужском журнале «Максим» была опубликована карикатура зарубежного автора, скрывающегося под ником the rut. Эта работа меня в себя просто влюбила, автор несколькими штрихами сумел передать сложные эмоции персонажей и при этом весь юмор был сосредоточен именно в рисунке и его восприятии читателем, а не в тексте, который сопровождает изображение.

Покопавшись в рунете, я не сумел найти работ этого автора, переведенных на русский язык, и в порыве энтузиазма за день собрал на Друпале сайтик, на котором стал выкладывать собственноручные переводы карикатур этого автора и его товарищей. Сайт получил название therut.ru в честь автора, чьи работы легли в основу проекта. К сожалению, работ the rut'а хватило всего на две недели публикаций, а бросать начатый проект не хотелось, поэтому я начал искать другие источники карикатур, при этом двумя основными критериями выбора для меня стали:
  • карикатура должна быть уникальной в пределах рунета, то есть, самый простой вариант, необходимо найти и перевести работу зарубежного автора.
  • юмор должен быть сосредоточен в рисунке, а не в тексте, за текстовыми шутками читатели предпочтут пойти на баш.орг. Причем подразумевается, что юмор рисунка — это не только смешно отрисованное событие, но и оригинальный стиль или обаятельные персонажи, участвующие в действии.

Продолжение истории
Total votes 43: ↑35 and ↓8+27
Comments33

Tagnetic — холодильник тэгов, плагин для jQuery

Reading time1 min
Views1.8K
tagnetic.jpg В ответ на флэш-скрипт от Ray Tanck, реализующий облако тэгов, стилизованное под доску с магнитами, я написал плагин для jQuery, который создает облако тэгов, стилизованное под холодильник с налепленными на него магнитами :)

Плагин автоматически заменяет облако на холодильник, а в случае, если у пользователя выключен ява-скрипт, то ему будет показано стандартное облако тэгов.

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

Тестировал работу в ФФ 2 и 3, ИЕ 6 и 7, опере 9.60, Сафари и Гугл Хроме. К сожалению, в ИЕ 6 из-за использования IE PNG Fix скрипт заметно тормозит. Сейчас работаем над созданием новых скинов (хочу преобразовать холодильник в доску или забор с налепленными на него объявлениями-тэгами) и над оптимизацией графики.

Интересно мнение хабраюзеров о полезности этой работы, а также о возможных глюках.

Upd. С подачи nikel303 сделал пример, в котором магниты можно перетаскивать.
Total votes 58: ↑48 and ↓10+38
Comments56

24 апреля в Москве пройдет первый семинар по Drupal

Reading time1 min
Views588
Это первый семинар в России посвящённый исключительно теме работы с CMS Drupal.

Цель семинара — ознакомление с возможностями и введение в архитектуру CMS Drupal.

Целевая аудитория — любые заинтересованные лица, выбирающие CMS/CMF для своих проектов. Теоретическое изложение дополняется короткими мастер-классами по созданию популярных разновидностей сайтов.

Докладчики семинара — участники сообщества drupal.ru.

Программа семинара:

  1. Начало в 14:00 (МСК).
    Введение в CMS, opensource и проект Drupal.
    Возможности Drupal «из коробки»; полезные дополнительные модули; демонстрация создания сайта-визитки.
    Основы Drupal: концепция расширяемых документов-нодов и таксономия.
    Решение типовых задач на примерах: персональный блог, сайт-визитка, сайт социальной сети.
    Перерыв — 30 мин.
    Возможности хостинга .masterhost для работы Drupal.
    SEO в Drupal.
    Погружение в архитектуру — работа с нодами и построение форм, программирование без программирования под CCK+Views.
    Ответы на поступившие при регистрации вопросы.
    Окончание в 19:00.

    Семинар бесплатный, но обязательно требуется предварительная регистрация. Помещение предоставленное для семинара может вместить до 50 человек, поэтому мы просто не сможем принять всех желающих. Для регистрации следует заполнить анкету. После принятия анкеты с вами свяжется менеджер.

    Upd: регистрация на семинар прекращена.
Total votes 36: ↑33 and ↓3+30
Comments30

Fotonotes для Drupal 6. Заметки для фотографий в стиле Flickr.com

Reading time1 min
Views902
Fotonotes – скрипт предназначенный для создания «заметок» на картинках: выделяете участок фотографии, оставляете для этого участка комментарий и, в дальнейшем, при наведении на него курсора будет отображаться ваш комментарий. Таким образом очень удобно отмечать знакомых на коллективных фото или узлы на сложных схемах. Эта фича активно используется, например, на Flickr.com.

Теперь Fotonotes доступен в виде модуля для CMS Drupal 6.
Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments17

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Date of birth
Registered
Activity