Pull to refresh
-2
0
webportal @webportal

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

Send message

AzaThread — многопоточность для PHP с блэкджеком

Reading time6 min
Views18K
В сети гуляет довольно много решений для эмуляции многопоточности в php. Чаще всего они основываются на форках, но есть и вариации на тему с использованием curl, proc_open и т.п.

Все встреченные варианты по тем или иным причинам меня не устроили и пришлось написать свое решение.
Набор требований у меня был следующий:
  • Использование форков;
  • Синхронный режим с сохранением интерфейса при отсутствии необходимых расширений;
  • Многократное использование дочерних процессов;
  • Полноценный обмен данными между процессами. Т.е. запуск с аргументами и получение результата по завершении;
  • Возможность обмена событиями между дочерним процессом-«потоком» и основным процессом во время работы;
  • Работа с пулом потоков с сохранением многократного использования, передачи аргументов и получения результатов;
  • Обработка ошибок выполнения;
  • Таймауты на выполнение работы, ожидание работы потоком, инициализацию;
  • Максимум производительности;

В результате получилась библиотека AzaThread (старое название — CThread).
Подробности
Total votes 156: ↑146 and ↓10+136
Comments66

Ускоряем Drupal: Pressflow + Nginx + Varnish

Reading time7 min
Views21K
Данная статья достаточно подробно показывает, как можно перейти на разработку сайтов Друпал с серьезной стрессоустойчивостью и возможностью обрабатывать большой трафик.

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

Довольно долго для разработки я использовал связку Drupal + Nginx с настройками сервера по умолчанию:

server {
listen 62.xxx.xx.xx:80;
server_name mysite.com www.mysite.com;
rewrite>^(/manager/.*)$>https://$host$1>permanent;
location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/) {
proxy_pass 62.xxx.xx.xx:8080;
proxy_redirect mysite.com:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass mysite.com:8080;
proxy_redirect mysite.com:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
root /home/pathto/drupal613;
access_log /home/httpd-logs/mysite.com.access.log;
error_page 404 = @fallback;
}
location @fallback {
proxy_pass 62.xxx.xx.xx:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}


Читать дальше →
Total votes 55: ↑46 and ↓9+37
Comments38

SITH — техника CSS3 для плавной смены изображения

Reading time2 min
Views17K
Доброго времени суток, Хабр!

Хотел бы рассказать Вам, каким образом я добился плавной смены цветов иконок при наведении на них курсора. Подобная проблема часто встречается на Facebook. Если иконка представляет собой синий силуэт на белом фоне, то при наведении курсора оба цвета меняются местами, причём происходит это мгновенно и выглядит немного резко. Мои эстетические чувства были задеты, и я разработал своё решение.

Не встретив на просторах Интернета чего-либо подобного, я взял на себя ответственность назвать этот метод SITH (Soft Image Transition on :Hover) — плавный переход изображения при наведении.

SITH - CSS3 Soft Image Transition on :Hover

Под хабракатом Вы найдёте полное описание техники, весь код, несколько скриншотов и ссылку на демонстрационную версию.
Читать дальше →
Total votes 140: ↑119 and ↓21+98
Comments48

Traits в php 5.4. Разбираем детали реализации

Reading time8 min
Views53K
Совсем недавно вышла первая beta php 5.4, а пока я писал топик подоспела и вторая. Одно из нововведений в 5.4 – это traits (типажи). Предлагаю разобраться во всех деталях в том, что же типажи из себя представляют в php.

Простой пример типажа, чтобы не заглядывать в Википедею:
//определение типажа
trait Pprint 
{
    public function whoAmI()
    {
        return get_class($this) . ': ' . (string) $this;
    }
}

class Human 
{
    use Pprint; //подключаем типаж, ключевое слово use

    protected $_name = 'unknown';
    
    public function __construct($name)
    {
        $this->_name = $name;
    }

    public function __toString()
    {
        return (string) $this->_name;
    }   
}

$a = new Human('Nikita');
echo $a->whoAmI(), PHP_EOL; //=> Human: Nikita

Как видно, к классу Human было добавлено поведение из типажа Pprint.

Но во всём есть свои детали.
О них далее
Total votes 163: ↑155 and ↓8+147
Comments102

Drupal Bundle Inherit — модуль для наследования типов сущностей

Reading time3 min
Views2.8K

Общая идея


Идея разработки данного модуля была (как это часто бывает) продиктована острой в нём необходимостью.

Представьте, что вы организуете интернет магазин (или любой другой проект в котором планируется создавать много различных типов содержимого). Предположим, что в качестве программного комплекса Вы выбрали связку Drupal 7 + Commerce. Commerce дает возможность создавать разные типы продуктов. Это полезно, когда Вы торгуете разными категориями товаров, для каждой из которых характерны какие-то свои данные. Например для мониторов Вы скорее всего захотите указать тип матрицы, а для процессоров неплохо будет указать тактовую частоту.
Читать дальше →
Total votes 28: ↑25 and ↓3+22
Comments29

Silex — микрофреймворк от создателей Symfony2

Reading time4 min
Views62K
Почти год назад я опубликовал статью о микрофреймворке под названием 'fat-free', написанном на PHP. Тогда этот фреймворк и сама статья вызвали некоторый интерес, поэтому я решил сделать обзор еще одного PHP микрофреймворка в стиле популярного Sinatra — Silex project.
image
Созданный в известной в РНР кругах Sensio Labs, не менее известным Fabien Potencier — автором одного из самых популярных на сегодня PHP фреймворков — Symfony, Silex является облегченной версией ожидаемого армией фанатов (к которым осмелюсь отнести и себя) Symfony2.

Для своей работы Silex использует ключевые компоненты Symfony2 в связке с несложной реализацией шаблона проектирования “Внедрение зависимостей” в виде сервис-контейнера Pimple, который позволяет максимально просто отделить логические части кода друг от друга — сделать их независимыми.

Как и у Symfony2 — у Silex интуитивно понятный API, что делает процесс разработки достаточно приятным и позволяет практически в несколько шагов добавлять свой функционал в сам фреймворк.
Читать дальше →
Total votes 92: ↑87 and ↓5+82
Comments72

Как выучить любой язык за 3 месяца?

Reading time6 min
Views99K
Перевод статьи Тима Ферриса из его блога.

image

(Учебник Дзюдо Окано Исао, который я использовал для изучения японской грамматики)

Изучение языка не должно быть сложным.

Принципы когнитивной нейронауки и управления временем могут быть применены для достижения свободного владения языком на разговорном уровне (в данном случае определяется как 95%+ процентов понимания и 100% выразительных возможностей) в течение 1-3 месяцев.

Время прочтения: 15 минут
Total votes 207: ↑186 and ↓21+165
Comments134

Масштабируемость реляционных БД

Reading time2 min
Views9.8K

Q:


В Facebook используют MySQL зная, что он плохо масштабируется (или здесь какая-то особая магия?). Я хотел спросить, из каких соображений они выбрали MySQL? Используют ли JOIN'ы? И не планируют ли перейти на другую БД?


A:


Отвечает Adam D'Angelo, бывший CTO Facebook, сейчас он развивает свой стартап Quora:
  1. Если разбивать данные по разным серверам на уровне приложения, то масштабируемость MySQL не такая уж и большая проблема. На 2008 год, в Facebook [1] у нас было 1800 MySQL серверов для которых требовалось всего два администратора. Конечно, вы не сможете сделать JOIN с данными с разных серверов, но NoSQL-базы вам тоже этого не позволят. Нет никаких данных о том, что в Facebook используют Cassandr'у как основное хранилище, и, кажется, что единственное, для чего она там нужна — это поиск по входящим сообщениям. [2]

Читать дальше →
Total votes 78: ↑74 and ↓4+70
Comments34

Ваша почта на qTrack

Reading time3 min
Views2.5K
Недавно мы выпустили обновление, позволяющее создавать собственные почтовые ящики на qTrack для получения входящей почты.
Напомню, что qTrack это online-сервис для управления проектами и задачами, распространяемый по модели SaaS, который отличается от традиционных трекеров тесной интеграцией с почтой. Кстати, базовые возможности qTrack предоставляются бесплатно без ограничений по сроку.

image

Чтобы лучше понять суть новых возможностей, немного расскажу о концепции сервиса и уже имеющихся возможностях по работе с почтой. Очень часто, при управлении проектом, отношения с заказчиком (управление требованиями) живут отдельной жизнью (в почте) от управления выполнением задач (в трекере). Это приводит к дублированию и искажению информации, двойной работе и просто потери обращений от клиента и вопросов к нему. Поэтому, концепция qTrack заключается в объединении Заказчика и Исполнителя. И именно поэтому qTrack тесно интегрирован с почтой, позволяя участникам (особенно Заказчику) работать с сервисом используя свою обычную почту, даже не заходя в интерфейс qTrack.
Читать дальше →
Total votes 16: ↑11 and ↓5+6
Comments16

Что интересного нам расскажет EXPLAIN EXTENDED?

Reading time6 min
Views13K
Большинство разработчиков на MySQL знакомы с командой EXPLAIN, однако значительно меньше людей знают о команде EXPLAIN EXTENDED, появившуюся ещё в MySQL 4.1, и ещё меньше умеют ею пользоваться.

EXPLAIN EXTENDED умеет показывать, что же конкретно делает с Вашим запросом оптимизатор MySQL. Для разработчика может быть совсем не очевидно, насколько сильно может отличаться написанный им запрос от того, который в действительности будет выполнен сервером. Этот процесс называется механизмом перезаписи запросов (query-rewrite), и он является частью любого хорошего SQL-оптимизатора. Команда EXPLAIN EXTENDED добавляет дополнительные предупреждения (warnings) к выводу команды EXPLAIN, в том числе и переписанный SQL-запрос.
Читать дальше →
Total votes 63: ↑60 and ↓3+57
Comments29

XML + CSS = счастье

Reading time4 min
Views12K
Возрадуйтесь, дети мои, ибо пришёл я к вам с миром и богатыми дарами. Нет, я не принёс вам того, чего вы не видели. И даже не принёс того, чего вы не имели. От чистого сердца вручаю вам то, что всегда лежало у вас под ногами, но вы не замечали того, брезгливо перешагивая, пробегая мимо по своим, несомненно самым важным, делам.

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

Примеси! Я же знаю, вы так устали без наследования. Приходится внедрять лишние классы в элементы или даже, переходить на тёмную сторону силы — копипастить по чёрному.

Отныне! Ваша душа будет чиста как у младенца. Руки в золоте как у царевичей. Дети послушными и приветливыми.

а теперь приступим к съёмкам порева
Total votes 128: ↑98 and ↓30+68
Comments53

Разработка с использованием WEB SQL DB и Local Storage

Reading time5 min
Views7K
Совсем недавно на хабре был пост, посвященный работе с WEB SQL DB. Одно из полезных применений локальных баз данных – работа в оффлайн режиме. Кроме этого, я покажу еще один вариант работы, когда вместо sql используется local storage, который поддерживается уже большим количеством браузеров.
Читать дальше →
Total votes 28: ↑24 and ↓4+20
Comments8

Ubuntu: маленькие удобства для веб-разработчика

Reading time5 min
Views20K
Я установила себе Ubuntu второй системой примерно полгода назад. А за пару недель до выхода 10.04 отказалась от дабл-бута и перенесла Windows с фотошопом на виртуальную машину. Потому что фотошоп — это единственное, чего, к сожалению, не хватает для полноценной работы в Ubuntu. Зато в ней есть множество приятных мелочей, которых мне всегда сильно не хватало в Windows. Именно об этих полезных мелочах я и хочу рассказать.
Эта статья ни разу не претендует на исчерпывающее описание всех достоинств и недостатков Ubuntu с точки зрения веб-разработчика.
Я ни в коем случае не утверждаю, что в природе не существует аналогичных приспособлений под Windows. Но я — человек ленивый, а для Windows все, даже Putty, надо искать, скачивать, устанавливать… а за многое из найденного — еще и платить. В то время как в Ubuntu все это доступно прямо «из коробки».
Я еще не дошла до глубокого изучения прелестей консоли и конфигов. Меня пока чарует своими возможностями графический интерфейс.
Вряд ли эта статья будет полезна знатокам линукса, пользующимся консолью «с закрытыми глазами». Скорее она для таких как я новичков, а также для тех, кто еще решает — «А нужно ли мне это?»
Итак,
Total votes 251: ↑216 and ↓35+181
Comments283

Вытаскиваем кучу паролей из пиринговых сетей

Reading time3 min
Views12K
Появилась эта задумка уже давно — с тех самых пор, когда узнал про wand.dat. До недавнего времени всё никак не доходили руки.

Итак, что у нас есть
  1. Браузер Opera. Хранит он все запомненные пароли от сайтов в файле wand.dat в открытом виде. Правда в открытом только в том случае, если не стоит мастер-пароль, который конечно же никто не ставит. Что заставило разработчиков сохранять пароли в незашифрованном виде, если нет мастер-пароля? Неизвестно. Логичней было бы форсированно не сохранять пароли вообще, пока пользователь-таки не установит мастер-пароль.
  2. Direct Connect. «Частично централизованная файлообменная (P2P) сеть». Пользователь расшаривает папки/файлы на своём компьютере, заходит на хабы, качает/раздаёт. Поиск работает в пределах подключенных хабов. Уникальность файлов определяется через Tiger Tree Hashing. Люди, которым нечего расшаривать (на многие хабы не пускают без минимальной шары в 10-15 ГБ), расшаривают Program Files, Windows, ну и иже с ними.
  3. /dev/hands. Ну а без этого никак.

Под хабракатом много текста
Total votes 75: ↑52 and ↓23+29
Comments36

Альт Линукс 5.0 Ковчег. Нужно ли что-то еще?

Reading time2 min
Views2.6K
Несмотря на то, что коробочная версия вышла только на днях, программный продукт уже успел набрать популярность, так как бесплатная полнофункциональная версия уже давно доступна для загрузки на FTP.

Альт Линукс 5.0 Ковчег — это комплект из двух дистрибутивов, Сервера и Рабочей станции.

Читать дальше →
Total votes 69: ↑47 and ↓22+25
Comments87

Только 10% программистов способны написать двоичный поиск

Reading time2 min
Views83K
Дональд Кнут (известный тем, что его книги никто не читает) пишет, что хотя первый двоичный поиск был опубликован в 1946 году, первый двоичный поиск без багов был опубликован только в 1962.

Алгоритм двоичного поиска похож на то, как мы ищем слово в словаре. Открываем словарь посередине, смотрим в какой из половин будет нужное нам слово. Допустим, в первой. Открываем первую часть посередине, продолжаем половинить, пока не найдем нужное слово.

С массивами так: есть упорядоченный массив, берем число из середины массива, сравниваем с искомым. Если оно оказалось больше, значит искомое число в первой половине массива, если меньше — во второй. Продолжаем делить оставшуюся половину, когда находим нужное число возвращаем его индекс, если не находим возвращаем null.

Так вот я это к чему...
Total votes 167: ↑141 and ↓26+115
Comments538

Инструменты для визуализации логов профайлера xdebug

Reading time2 min
Views22K
Наверное многие php разработчики используют профайлер xdebug для поиска узких мест в приложениях. Но просто смотреть логи очень не удобно, поэтому были созданы инструменты для их визуализации. Об этих инструментах я и хочу коротко рассказать.

Webgrind

Webgrind это набор php скриптов, которые можно установить на локальный или удаленный веб сервер. Дальше все просто до неприличия — закачиваем файл лога и смотрим статистику.
image
Самый очевидный плюс Webgrind'а это кроссплатформенность и простота установки.
Показывает список функций которые вызывались, количество вызовов (Invocation Count), общеё время потраченное на вызов (Total Self Cost) и общее время потраченное на выполнение (Total Inclusive Cost).
Можно скрыть php функции. Можно перейти внутрь функции, чтобы увидеть развернутую статистику.
Читать дальше →
Total votes 47: ↑42 and ↓5+37
Comments26

TeamWox — подарок малому бизнесу!

Reading time2 min
Views11K
Здравствуйте, дорогие хаброчитатели!

Наша компания не бросает слов на ветер и не отклоняется от «линии партии». Это значит, что последовательное движение навстречу клиенту продолжается. Выпуск бесплатной полнофункциональной версии TeamWox – очередной шаг на этом пути. (Вкратце о возможностях продукта и его назначении мы уже писали. Онлайн демо-версия позволит вам быстро ознакомиться с продуктом).

Данная версия имеет единственное ограничение – количество пользователей не должно превышать 10 человек. Во всём остальном она не отличается от версии с неограниченным количеством пользователей. Возможности – максимальные, затраты – нулевые.

TeamWox: бесплатная система управления для малого бизнеса



Читать дальше →
Total votes 49: ↑32 and ↓17+15
Comments103

Делаем поиск детских садов и школ по-настоящему удобным. Прикладное использование Яндекс Карт

Reading time3 min
Views2.3K
Последние несколько месяцев мы работали над проектом Osvita.com.ua — образование в Украине. Среди прочих разделов 2 были посвящены дошкольному и школьному образованию — «Школы» и «Детские сады», выбор которых для большинства обусловлен территориальным расположением — чем ближе к дому, тем лучше. При этом все каталоги сделаны по принципу: вот вам 500 садиков с адресами и телефонами — ищите. Делать очередной бестолковый клон совсем не хотелось.

Хотелось так: ввести адрес и найти все сады в нужном радиусе от дома, да ещё и отсортированные по удаленности, да ещё и увидеть на карте.

И все оказалось вполне реальным. Вот что получилось: (тестовый адрес: г. Киев, ул. Луначарского, 1/2).

image

Как получилось под хабракатом
Читать дальше →
Total votes 40: ↑37 and ↓3+34
Comments46

Список полезных инструментов для php разработчика

Reading time10 min
Views148K
PHP один из самых широко используемых языков для создания вебсайтов. PHP фреймворки, такие как Zend, CakePHP, CodeIgniter и т.д и open source классы и библиотеки упростили разработку.
Независимо от того, являетесь ли вы опытным разработчиком или новичком, инструменты, которые вы используете, имеют прямое влияние на вашу продуктивность. Здесь собран список действительно полезных утилит и расширений для PHP разработчиков, которые помогут ускорить разработку, и улучшит итоговое качество кода.
Читать дальше →
Total votes 214: ↑200 and ↓14+186
Comments131

Information

Rating
Does not participate
Location
Набережные Челны, Татарстан, Россия
Date of birth
Registered
Activity