Как стать автором
Обновить
148
0
viperet @viperet

Пользователь

Отправить сообщение

phpFastCGI: настоящий FastCGI для PHP

Время на прочтение2 мин
Количество просмотров10K
— Добрый день. Вы наверняка уже наслышаны о протоколе FastCGI, он связывает Веб-сервер и сервер приложений, его реализации есть во множестве языков. Однако, в PHP реализация FastCGI до недавних пор была представлена лишь патчем PHP-FPM, который фактически не давал прироста производительности перед mod_php, поскольку он, вопреки идеологии FastCGI, перезапускает скрипт каждый раз заново. Идеология FastCGI подразумевает единовременную инициализацию приложения при запуске (подгрузку нужных классов, соединение с базой данных, и т.д.), и выполнение запросов один за другим.
phpFastCGI — правильная реализация FastCGI, которая позволяет добиться немыслимой производительности.
Разработка идёт очень активно, и новые фичи появляются очень быстро.
Страничка проекта — phpfastcgi.googlecode.com
Пример простого приложения — code.google.com/p/phpfastcgi/source/browse/trunk/example.php
В действии пример можно увидеть здесь — ya-tv.ru/phpfastcgid (может переодически лежать, это нормально, идёт тестирование). Страничка-пример легко выдерживает 5,000 запросов в секунду всего на 20-ти воркерах.
Проект пока в стадии тестирования и живёт только в SVN.
Приглашаю всех заинтересовавшихся принять в нем посильное участие!
$ svn checkout phpfastcgi.googlecode.com/svn/trunk phpfastcgi

Читать дальше →
Всего голосов 80: ↑74 и ↓6+68
Комментарии197

Загрузка браузером нескольких файлов

Время на прочтение5 мин
Количество просмотров30K
Если нужно дать пользователю возможность загрузки нескольких файлов, традиционное решение на данный момент — использовать для этой цели Flash (реже — Java applet или ActiveX). В случае, если соответствующий плагин недоступен, пользователю, как правило, показывают стандартный HTML-элемент для загрузки файла.

Последнюю ситуацию можно улучшить, если использовать встроенную в браузеры возможность множественной загрузки файлов. Из всех браузеров сейчас данную возможность не поддерживает только Internet Explorer (впрочем, мы ещё не видели девятую версию, может там что-то изменится), остальные браузеры — Opera 9 и выше (а так же версии 3.5—6.05), Firefox 3.6+, Chrome 3.0.191.0+ и Safari 4.0.1+ такую возможность предоставляют.

Достаточно написать что-то вроде
Copy Source | Copy HTML
  1. <form enctype="multipart/form-data" method="post">
  2.    <input type="file" min="1" max="9999" name="file[]" multiple="true" />
  3.    <input type="submit" name="submit" />
  4. </form>
PHP оказался готов к такой конструкции (именно для него в параметре «name» стоят квадратные скобки), он просто разложит загружаемые файлы по элементам массива $_FILES, если только мы не используем «Оперу».

К сожалению, «Опера» (ещё с версии 3.5) отправляет, при использовании мультизагрузки, файлы в контейнере «multipart/mixed», который PHP не понимает.

Я попробовал исправить эту ситуацию.
Читать дальше →
Всего голосов 119: ↑107 и ↓12+95
Комментарии67

MongoDB или как разлюбить SQL

Время на прочтение6 мин
Количество просмотров66K
Введение

Коллеги, при разработке приложений, мы каждый день сталкиваемся с потребностью в гибком хранении информации (обновлении, поиске по ней, и т.д.). Класс продуктов, которые решают этот круг задач, как все мы знаем — Базы данных. Но что это такое в нашем понимании? У многих «база данных» твердо ассоциируется с MySQL, таблицами и SQL-запросами. И это устраивает до определенного момента. Действительно, реляционные базы данных дают массу преимуществ в работе: поскольку данные имеют сильную связанность, не нужно контролировать целостность базы данных. Используя простой под-запрос можно выбрать количество комментариев к каждому посту в блоге. Используя JOIN нетрудно делать сложные связанные выборки и получать данные сразу о нескольких сущностях.
Читать дальше →
Всего голосов 129: ↑122 и ↓7+115
Комментарии99

CKEditor файловый менеджер

Время на прочтение4 мин
Количество просмотров27K
В связи с выходом новой версии популярного и весьма функционального WYSIWYG редактора, пришлось сделать небольшой файл менеджер.

Причиной тому послужило отсутствие по умолчанию стандартного файл менеджера, есть конечно CKFinder но он на платной основе.
Поискав разные альтернативы решил потратить время на создание простенького но своего файл менеджера на манер CKFinder'а, что вам и представляю.
Пришлось поискать как интегрировать его с редактором, документации мало, но в конце концов вроде получилось :)

Возможности: Загрузка нескольких файлов, создание папок, транслит закачиваемых файлов, переименование, хотя чего перечислять стандартно всё :)
Общий стиль на манер CKFinder в гамме ACDSee 3
Читать дальше →
Всего голосов 37: ↑36 и ↓1+35
Комментарии36

Подводные камни при использовании кэширования в nginx

Время на прочтение10 мин
Количество просмотров57K
В web-сервер и reverse-proxy nginx встроены очень мощные возможности по кэшированию HTTP-ответов. Однако в ряде случаев документации и примеров не хватает, в результате не все получается так легко и просто, как хотелось бы. Например, мои конфиги nginx-а местами написаны кровью. Этой статьей я попробую немного улучшить ситуацию.

В этой статье: а) подводные камни при полностраничном кэшировании; б) кэширование с ротацией; в) создание динамического «окна» в закэшированной странице.

Я буду предполагать, что вы используете связку nginx+fastcgi_php. Если вы применяете nginx+apache+mod_php, просто замените имена директив с fastcgi_cache* на proxy_cache*

Если выбирать, кэшировать ли страницу на стороне PHP или на стороне nginx, я выбираю nginx. Во-первых, это позволяет отдавать 5-10 тыс. запросов в секунду без каких-либо сложностей и без умных разговоров о «высокой нагрузке». Во-вторых, nginx самостоятельно следит за размером кэша и чистит его как при устаревании, так и при вытеснении нечасто используемых данных.

Кэширование всей страницы целиком


Если на вашем сайте главная страница хоть и генерируется динамически, но меняется достаточно редко, можно сильно снизить нагрузку на сервер, закэшировав ее в nginx. При высокой посещаемости даже кэширование на короткий срок (5 минут и меньше) уже дает огромный прирост в производительности, ведь кэш работает очень быстро. Даже закэшировав страницу всего на 30 секунд, вы все равно добьетесь значительной разгрузки сервера, сохранив при этом динамичность обновления данных (во многих случаях обновления раз в 30 секунд вполне достаточно).
Читать дальше →
Всего голосов 91: ↑87 и ↓4+83
Комментарии83

парсим сайты легко и непринуждённо вместе с phpQuery

Время на прочтение3 мин
Количество просмотров111K
Привет хабр, думаю у некоторых из вас возникала потребность стянуть что нибудь нужное с какова нибудь сайта. Но писать тонны функций, чтобы вытащить фразу, это очень муторно, долго и не продуктивно.
Представляю вашему вниманию phpQuery. Это php вариант известного javascript фраемворка — jQuery.
Автор постарался на славу и портировал почти всё что нам нужно.
  • Selectors
  • Attributes
  • Traversing
  • Manipulation
  • Ajax
  • Events
  • Utilities
  • Plugin ports

Давайте посмотрим что она умеет.
Поехали
Всего голосов 42: ↑38 и ↓4+34
Комментарии35

jQTouch выпускает новую версию мобильной доброты

Время на прочтение1 мин
Количество просмотров2.8K
Мы писали о jQTouch, основанном на jQuery iUI-подобном наборе средств, созданном Давидом Канедою (David Kaneda).

Сегодня они выпустили новую версию, которая улучшает их расширяемую систему нижеследующим:
  • Улучшенный переход к 3D-перевороту (improved 3D flip transition)
  • События обратного вызова (callback events) для всех переходов между страницами, сильных тычков (swipe events), изменений ориентации
  • Прилагаются демонстрации: Часы, To-do, Главное функциональное демо
  • Темы: в настоящее время есть темы Apple и jQTouch (серого цвета)
Читайте далее о том, как начать действовать, и об API обратного вызова.

[jQTouch]
Всего голосов 35: ↑24 и ↓11+13
Комментарии14

Партиционирование таблиц в mySQL

Время на прочтение4 мин
Количество просмотров178K
Начиная с версии 5.1 mySQL поддерживает горизонтальное партицирование таблиц. Что это такое? Партиционирование (partitioning) — это разбиение больших таблиц на логические части по выбранным критериям.. На нижнем уровне для myISAM таблиц, это физически разные файлы, по 3 на каждую партицию (описание таблицы, файл индексов, файл данных). Для innoDB таблиц в конфигурации по умолчанию – разные пространства таблиц в файлах innoDB (не забываем, что innoDB позволяет настраивать индивидуальные хранилища на уровне баз данных или даже конкретных таблиц).

Как это выглядит?

Читать дальше →
Всего голосов 96: ↑96 и ↓0+96
Комментарии84

Как сделать favicon в png

Время на прочтение1 мин
Количество просмотров119K
Знаете, фавикончики в ico это как-то прошлый век =) Давайте будем модными, современными и все такое. Короче, берем иконку в png (да-да, с прозрачностью и всеми делами), сохраняем в размере 16×16, на сайте (в блоке <head>, ага) подключаем так:

<link rel="icon" type="image/png" href="favicon.png" />

Особенно под впечатлением владельцы айфонов и точей, т.к. для них мы делаем красивую иконюшку размером 57×57 (можно кстати и больше, но это стандартный размер иконки на ланч-скрине), подключая ее так:

<link rel="apple-touch-icon" href="apple-touch-favicon.png"/>

Над записью витает дух уже почти сгнившего трупа IE6, который вообще не знает о чем это все, ну да и фиг с ним =) Все, изыди.

UPD: Спасибо хабраюзеру NickyX3 за интересное уточнение:
Автор забыл указать, что иконда для springboard тачей и яблофонов будет в таком варианте закруглена по углам и на нее будет наложен блик автоматически самоим девайсом. Для избежания этого (совсем красивая кастом иконка) вместо apple-touch-icon следует написать apple-touch-icon-precomposed.
Всего голосов 182: ↑145 и ↓37+108
Комментарии53

Нулевой символ внутри тега

Время на прочтение1 мин
Количество просмотров1.6K
Старый баг дороже новых двух?

Сделал для себя интересное открытие, оказывается строчку

<\0b>text</b> — где \0 — символ с кодом 0

IE интерпретирует как нормальный тег bold со всеми вытекающими, тоже самое касается тегов <script> <style> и прочих.

Это в свою очередь значит, что удаление потенциально опасных элементов с помощью str_replace, preg_replace (PHP), s/<script/.../i (Perl, sed) и прочих replace() функций для других языков не даст желаемых результатов.

Тоже самое касается и фильтрации по «белым» спискам которые попросту могут не посчитать последовательность <\0b>text</b> тегом.

К счастью Firefox, Opera и Safari так не считают. Разработчики, будьте бдительны при фильтрации пользовательских данных!
Всего голосов 130: ↑120 и ↓10+110
Комментарии80

Социальный словарь — учим английский вместе!

Время на прочтение1 мин
Количество просмотров1.4K
Дело было так: однажды я понял, что мой словарный запас английского языка довольно скуден, а это очень мешает в жизни и работе, ведь большинство интересующей меня информации (мануалы, блоги, статьи) написано на английском языке. Значит надо срочно учить слова! Но учить все подряд, по алфавиту — не самое удачное решение, ведь большинство текстов чуть менее, чем полностью состоит из ограниченного числа слов. Это большинсто глаголов, предлоги и определенный ряд существительных. Таким образом, если мы сделаем выборку из достаточно большого количества сайтов различной тематики, то сможем узнать, какие слова и части речи используются чаще всего.
Так и родился этот сервис — Социальный словарь

Наверное, правильнее назвать его «минисервисом», т.к. состоит он всего из пяти страниц, а написан за несколько дней.
Суть его работы очень простая — пользователи добавляют ссылки на англоязычные сайты. Система парсит эти сайты и собирает некую статистику. После некоторого времени работы, когда объем накопленной информации будет достаточно велик, можно подводить итоги и составлять чарты самых популярных слов, которые можно смело учить :)

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

Буду очень рад прочесть любую критику или пожелания.

Социальный словарь
Всего голосов 54: ↑45 и ↓9+36
Комментарии53

Простой цифровой термометр своими руками

Время на прочтение3 мин
Количество просмотров172K
Наткнулся недавно в интернете на интересный материал, идея заинтересовала, но после сборки отказалась корректно работать, погуглив дальше наткнулся на другой вариант, который и представляю.

Простой цифровой термометр с подключением через COM-порт.


Читать дальше →
Всего голосов 111: ↑108 и ↓3+105
Комментарии148

Установка и настройка VPN сервера с биллинговой системой AbillS на Ubuntu 7.10

Время на прочтение7 мин
Количество просмотров18K
Наверно всем известно, что ситуация с ценами на интернет в Москве и по России разительно отличается.
Для сравнения в Тольятти (Самарская область) безлимитный доступ на скорости 512кбит/с на месяц обходится в сумму 2300р.
В столице за эту же сумму можно наверно взять уже 20Мбит.

Так вот, как бы это дико не звучало, но я собираюсь, для уменьшения расходов, делиться этим каналом (512кбит/с) еще с несколькими людьми в локальной домовой сети =)

Провайдер дает доступ к интернету через свой VPN сервер.

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

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

Конфигурация сервера: Pentium III 1000MHz, SDRAM 512Mb

Для уменьшения нагрузки на серве, было решено не использовать сжатие и шифрование, в связи с этим в клиентах требуется дополнительно снять галочку «требовать шифрование» в настройках VPN в Windows

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

Читать дальше →
Всего голосов 22: ↑20 и ↓2+18
Комментарии68

Обработка пользовательких видео

Время на прочтение3 мин
Количество просмотров4.4K
Некоторое время я занимался (и занимаюсь до сих пор) веб-проектом, где необходимо было добавить фичу для загрузки пользовательских видео-роликов. Собственно, какие могут быть пользовательские видео? Очень разного качества и разнообразных форматов. Начиная от обычных flash файлов, которые представляют наименьшую проблему, до различных записей с телефонов. Встала задача — сделать демона, который бы занимался обработкой очереди загруженных файлов и выполнял следующие функции:
— Конвертирование видео в flash формат (FLV), ипользуя VP6 кодек
— Обновление метаинформации видеофайла
— Создание thumbnails из видео
— Дальнейшии манипуляции с БД

Конкретно в этой статье я рассмотрю варианты обработки уже сконвертированного в формат flash видео-ролика. Итак приступим.
Читать дальше →
Всего голосов 78: ↑74 и ↓4+70
Комментарии33

Opera 9.5+Mac, решение проблем со шрифтами

Время на прочтение1 мин
Количество просмотров1.7K
Наверняка многие пользователи mac os x сталкивались с проблемами отображения русских шрифтов. Например, пробелы между буквами. Пример и одно из решений проблемы — под катом.
Читать дальше →
Всего голосов 18: ↑15 и ↓3+12
Комментарии27
12 ...
8

Информация

В рейтинге
Не участвует
Откуда
Чернигов, Черниговская обл., Украина
Дата рождения
Зарегистрирован
Активность