Archive for Июнь, 2010

Сессии в memcached с Zend Framework

// Июнь 30th, 2010 // 7 Comments » // Memcached, Zend Framework

Столкнулся тут с очень странным багом. У нас в проекте реализовано централизованное хранение сессий. Т.е. разные бекэнды хранят сессии в одном месте. Это позволяет автоматически «узнавать» пользователя, вне зависимости от того с какого фронт-энда пришел запрос.
При выключенном кэше сессии хранятся в БД MySQL, при включенном в Memcached. И вот тут то и начались глюки. У нас есть основной движок на ZF, и утилитка на PHP. Утилитке надо производить авторизацию пользователя, а для этого подключаться к memcache и устанавливать session_save_handler().

Вроде делал всё как надо, но получал ошибку:

Zend_Session_Exception: Zend_Session::start() - /vendors/Zend/Cache
/Core.php(Line:310): Error #8 unserialize(): Error at offset 0 of 929 bytes Array in //vendors
/Zend/Session.php on line 493 Call Stack: 0.0006 665616 1. {main}() /utils/session.php:0 0.0464
 2973824 2. Zend_Session::start() /utils/session.php:49

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

Solution

А оказалось всё банально просто. Во-первых надо было устанавливать в утилите такие же переменные окружения для memcache, как и в дивжке:

resources.cachemanager.backend.memcached.ini.allow_failover = 1
resources.cachemanager.backend.memcached.ini.max_failover_attempts  = 20
resources.cachemanager.backend.memcached.ini.chunk_size             = 8192
resources.cachemanager.backend.memcached.ini.hash_strategy          = "standard"
resources.cachemanager.backend.memcached.ini.hash_function          = "crc32"

С помошью кода:

$iniSets = $options['bootstrap']['resources']['cachemanager']['backend']['memcached']['ini'];
foreach ($iniSets as $name => $value) {
    ini_set('memcache.'.$name, $value);
}

Во-вторых, надо было отключить автоматическую сериализацию.

 resources.cachemanager.frontend.block.options.automatic_serialization = false

После этого сессия стала открываться как в основной системе, так и в утилите.

Share

Кроссбраузерные закруглённые уголки

// Июнь 29th, 2010 // No Comments » // CSS, Веб-разработка

Нашел тут интересную статью про методы закругления уголков для разных броузеров.
http://web-standards.ru/articles/cross-browser-rounded-corners/

Share

Импорт картинок из MS Word(.doc)

// Июнь 29th, 2010 // 5 Comments » // Веб-разработка

Очень часто по работе приходится вытаскивать картинки из документов Microsoft Word. Раньше я делал это в лоб: принтскрин, буфер фотошоп. Но когда картинок в документе много, и они отсканены с хорошим разрешением, то такой способ уже не подходит.
А решение оказалось простое.

(далее…)

Share

Web science

// Июнь 28th, 2010 // No Comments » // Веб-разработка

Нашел интересную картинку про Web-science.

Подробнее вот здесь: http://letoosh.habrahabr.ru/blog/90639/#habracut

Share

Веб-приложения реального времени: jSocket,Node.JS, Redis, MQ.

// Июнь 28th, 2010 // No Comments » // Веб-разработка

Приветствую своих читателей. Сегодня мы продолжим начатую ранее тему о веб-приложениях реального времени и поговорим о серверной части. Буквально на днях по аське у меня состоялся разговор по теме онлайн игр и архитектуры движка для реалтайм игры. Оказалось, мы оба думали про одно и то же, а именно, использование NodeJS как сервера для ядра системы, обслуживающего клиентские подключения. Конечно, построить весь технологический стек современной браузерной игры полностью на NodeJS все ещё затруднительно, да и сам процесс написания масштабных приложений на серверном JS еще не изучен. А вот держать комет-подсистему, которая отвечает за мгновенную доставку нужных данных клиентам — для этого Node подходит идеально. Но давайте отложим рассмотрение этой части, здесь тема не на одну статью, а поговорим про создание распределенной системы обмена данными для серверной платформы.

Репост с http://abrdev.com/?p=1121

(далее…)

Share

Ученый доказал, что Бог существует

// Июнь 27th, 2010 // No Comments » // Без рубрики

72-летний польский священник и математик Михаль Геллер получил в Нью-Йорке самую крупную научную премию за работу, которая предоставляет косвенные доказательства существования Бога. Геллер, являющийся также специалистом по космологии и философии, получил за свою работу 820 тыс. евро, сообщает Innovanews.ru.

(далее…)

Share

Пт и Пацаны — Олимпиада

// Июнь 24th, 2010 // 1 Comment » // Без рубрики

Друзья прикольную музыку про олимпиаду сочинили.

PT_I_Patcani_Olimpiada.mp3

Share

PHP Best practice

// Июнь 24th, 2010 // No Comments » // Без рубрики

Здесь я собрал некоторые лучшие практики по PHP, которым следую (ну или буду следовать :-)

Для итерации по массивам, их изменению и фильтрации — учимся использовать array_* функции в пхп. Особенно лямбда-функции:

<?php

$arr = array('that', 'is', 'this');
array_walk($arr, create_function('&$v,$k', '$v = $v . " yeah";');
print_r($arr);

// outputs:
// Array
// (
//   [0] => that yeah
//   [1] => is yeah
//   [2] => this yeah
// )

// А вы бы сделали это циклом? Ай-ай-ай...

?>

Используйте константы для того что никогда не меняется. Они парсятся в самом начале и лежат вообще в другом куске памяти чем обычные переменные. Конструкции вида $str = ‘some’ . STR_CONSTANT и выглядят к тому же лучше. Особо грамотно — перенос строки. Обзывают его по-разному, я же люблю NL (NewLine) или CRLF(CarretReturnLineFeed)

Не забывайте что foreach может и не делать копию массива :)

foreach ($arr as $key => &$val) { ... }
Share

PHP includes caching

// Июнь 24th, 2010 // No Comments » // PHP

Сейчас озадачен проблемой кэширования инклюдов. Взглянул на наш проект, более 150 инклюдов, и это только на Zend Framework. Нашел ссылку про __autoload с кэширование, сейчас копаю в этом направлении.

Осталось понять, как автоматически парсить инклюды в исходном коде и вырезать их…

По сути вот моя проблема.

Возможные ходы по решению:

In order to preserve the API, I extended Zend_Loader and started overwriting functions such as Zend_Loader::_securityCheck(), which runs a regular expression on the name of each file you feed to __autoload/Zend_Loader.

Вот линки по теме:

http://zendframework.ru/anonses/zend-framework-performance

http://till.vox.com/library/post/zendframework-performance.html

http://habrahabr.ru/blogs/webdev/11553/

http://web-blog.org.ua/articles/uskorenie-zf-proektov-s-pomoschiu-autoloadera

Share

phpDocumentor и UTF-8 исходники

// Июнь 24th, 2010 // No Comments » // PHP

Как заставить phpDocumentator понимать русский текст в исходниках на UTF-8:

1. нужно править файл Setup.inc.php. В нем есть метод createDocs, где нужно исправить следующее
- if (stristr($ret, "utf-8") !== "")
+ if (stristr($ret, "utf-8") === false)
{
$ret = utf8_decode($ret);
}

2. Пройтись глобальной заменой по всем (*.*) файлам документатора и заменить
charset=iso-8859-1'/>
на
charset=utf-8'/>

3. Необязательный (у меня и без этого заработало, но возможно это имеет значение при выводе мануала в XML)
Пройтись глобальной заменой по всем (*.*) файлам документатора и заменить
<?xml version="1.0" encoding="iso-8859-1"?>
на
<?xml version="1.0" encoding="utf-8"?>

P.S. Тестировалось на теме HTML:frames:default

Ну и на закуску, готовый плагин для Zend Studio for Eclipse

Share