Sunday, August 3, 2008

Redeclare PHP function

Unfortunatly we cannot easy redeclare (override) functions in PHP. But sometimes we extreamly need this. For example we have our class to deal with gettext:

class Translate
{
public static function _($text)
{
// ... do some stuff
return $result;
}
}

And we dont want to use its huge call
Translate::_('message to translate');

We want to use shortcut like
_('message to translate');

But, ooops! PHP already has '_' function, and first our idea is "override it!". Sorry, there is no native tools to redeclare function. Some extensions save us: APD or runkit.
// use override_function
override_function('_', '$text', 'return Translate::_($text);');
// or runkit_function_redefine
runkit_function_redefine('_', '$text', 'return Translate::_($text);');


There are some alternatives: give another name to your function, for example ;-)
function t($text)
{
Translate::_($text);
}

Monday, February 18, 2008

PDT vs Zend Studio

Недавно мне захотелось посмотреть что за зверь Zend Studio for Eclipse, уж слишком много про него последнее время говорят.

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

Пока качалось, посмотрел список того, чем напичкали Eclipse, чтобы превратить его в Zend Studio. Эту информацию можно посмотреть на странице, где проводится сравнение с PDT (PHP Development Tools). Кстати, для себя открыл новость: оказывается, что PDT тоже Зендовский продукт, раньше я не обращал на это внимание. По сути Zend Studio это просто напичканный дополнительными плагинами, раздутый почти в два раза, PDT. Лично для себя, на первый взгляд, не нашел ничего полечного, чего бы не было в моем любимом PDT и было добавлено в Студию. В любом случае, Eclipse всегда можно «прокачать» плагинами для достижения необходимого эффекта :-)

Все скачалось. Поставил, запустил, создал проект, попытался поработать. Первым же делом в глаза бросился жуткий баг: когда печатаешь код и открыт Outline view, набор текста получается заторможенный. Причем это баг PDT, хотя я его у PDT не замечал, а тут он проявился. Жутко неудобно работать, а отключать аутлайн не хочется, по тому как я его активно использую. Хотя, судя по тому, что информация об этом баге исчезла с сайта PDT, его исправили. Собственно поработал со Студией я совсем немного, и, не найдя для себя ничего полезного, снова запустил чистый PDT.

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

Tuesday, February 12, 2008

goodScotchWhiskey to GOOD_SCOTCH_WHISKEY

Yesturday I wrote some PHP snippet to convert camel-style names (e.g. goodScotchWhiskey) to upper-case-style constant names (e.g. GOOD_SCOTCH_WHISKEY).

function _camelToUpper($name)
{
return strtoupper(join('_', array_slice(
preg_split('{(?=[A-Z])}s', ucfirst($name)), 1
)));
}

Saturday, December 1, 2007

Фото с концерта Norther

Вот дошли руки выложить фото с концерта Norther в виде альбома на Пикасе.

Monday, November 26, 2007

Plan B, Norther

В пятницу, 23-го ноября, как и полагалось, состоялся концерт Нортера в Плане Б. Не буду долго и нудно рассказывать как все прошло, те кто был итак все знает все, а тем кто не смог туда попасть я сожалею, потому что это надо было послушать. Скажу лишь, что мне удалось попасть на саунд-чек, послушать спокойно свою любимую команду и пофотаться.

Я и Петри на саунд-чеке.


Слушаю чек


Уже во время концерта, около бара: Кирюха, Леха, Денис и я.


Как начался концерт зал был полон, и сфотаться с группой было проблематично, но мне удалось залезть на лестницу и еще раз сфотаться с Петри. Заодно и афтограф замутил.


А, приблизительно, вот так Нортер смотрелся на сцене.


Поделюсь еще одной приятной новостью: Петри сказал, что их следующий альбом выходит в феврале :-)

Thursday, November 22, 2007

В предвкущении концерта Norther

Очень жду я завтрашнего концерта Нортера. Последние две недели кроме них ничего не слушаю. Вот сегодня залез на YouTube и вытащил оттуда пару клипов.

Released (с альбома 2002 года Dreams Of Endless War). Это, вроде их первый клип. Качество видео, правда, не фонтан, но песня чумовая!



Mirror of Madness (c одноименного, недавно распробованного мной, альбома 2003 года)



Death Unlimited (одна из моих любимах песен с одноименного, самого замыленного мной, альбома 2004 года)



Frozen Angel (с их последнего EP альбома 2007 года No Way Back)

Monday, November 12, 2007

IE, select, z-index: танцы с бубном

Сегодня столкнулся с офигенной корявостью Эксплорера. Задача, как казалось была тривиальной: надо было в начале загрузки файлов на сервер закрыть экран полупрозрачной пеленой, чтобы пользователь не тыкал куда не надо. Решение, упрощенно, было такое: создавался div с "position: absolute", покрывающий рабочую область, затем он выдвигался вперед за счет z-index, и устанавливалась прозрачность. Потом, при завершении загрузки элемент скрывался. Все бы не чего, но Internet Explorer, как обычно отличился. Наблюдался обалденный эфект, через "пелену" выступали все элементы select. Их невозможно было задвинуть на задний план при помощи изменения значения z-index.

Суть проблемы заключается в том, что IE по-особому работает с z-index. Он считается в пределах одного контейнера, а если элементы принадлежат разным контейнерам, то их z-index никак не будет пересекаться. Я перерыл кучу топиков в поисках решения проблемы, в основном советовали просто поместить элементы в один контейнер и расставить им нужный z-index, но этот вариант мне не подходил, так как эти элементы располагались в разных местах документа и никак не зависели друг от друга.

Спустя около четырех часов копания, я наткнулся на сногсшибательное решение! Это просто магия, шаманство, танцы с бубном. Как до такого решения можно дойти самостоятельно я не представляю, это надо перелистать весь MSDN как минимум! Вот так должен выглядеть ваш div, чтобы никакие select'ы в Эксплорере не пролезали через него:

<style>
.select-free {
position:absolute;
z-index:10;/*any value*/
overflow:hidden;/*must have*/
width:33em;/*must have for any value*/;
}
.select-free iframe {
display:none;/*sorry for IE5*/
display/**/:block;/*sorry for IE5*/
position:absolute;/*must have*/
top:0;/*must have*/
left:0;/*must have*/
z-index:-1;/*must have*/
filter:mask();/*must have*/
width:3000px;/*must have for any big value*/
height:3000px/*must have for any big value*/;
}
</style>
<div class="select-free">
your content here
<!--[if lte IE 6.5]><iframe></iframe><![endif]-->
</div>


Ребята с HedgerWow.com, респект вам и уважуха!