среда, 16 июня 2010 г.

Regexp to replace placeholders at string (замена плейсхолдеров в строке на элементы массива)

Довольно часто встречается задача подстановок каких-либо значений из ассоциативного массива  в определённые места в строке. Думаю, многие повседневно сталкиваются с ней при формировании персонализированных email-писем, формировании мультиязычных сообщений пользователю с подстановками из личных данных и других повседневных задачах.
Задача замены плейсхолдеров, или так называемых меток-заполнителей, в строке на соответствующие элементы ассоциативного массива может быть решена несколькими способами, но, на мой взгляд, самый элегантный способ - при помощи preg-а (регулярных выражений).
Допустим, у нас есть ассоциативный массив с подстановками $placeholders, и строка $str c метками-заполнителями вида {var_name}, в которой нужно произвести замену на соответствующие значения из массива. Решение на PHP будет выглядеть следующим образом:
$placeholders = array("name"=>"User", "link"=>"http://webaurum.blogspot.com");
$str = "Hello {name}, you are here {link}";
echo preg_replace('~\{\w+\}~e', '@$placeholders$0', $str);
echo preg_replace( '/\{(\w+)\}/e', '@$placeholders["\\1"]', $str);
Две последние строки абсолютно идентичны по функциональному назначению, я их просто привёл для примера, может кому-то будет понятнее второй вариант. Обе последние строки вернут результат:
Hello User, you are here http://webaurum.blogspot.com
Реализация работает быстро и элегантно, использую во многих собственных проектах.

понедельник, 17 мая 2010 г.

ICANN разрешила в domain names кириллицу и другие алфавиты. А как же совместимость?!

Новые правила позволят использовать в доменных именах 100 тысяч новых символов. В ICANN новые правила наименования доменов называют крупнейшим техническим изменением Интернета за все время его существования. Но это изменение к лучшему ли?
Россия, по-моему, одна из первых начала регистрировать домены в зоне .РФ. Зашёл на правительственный сайт http://правительство.рф и уже это нововведение вызвало у меня улыбку.
Домен-то написан кириллицей, но все внутренние линки остались латиницей. =) Бред, имхо, всю затею и удобство свели на нет. Смешно смотрится адрес вида http://правительство.рф/staff/.

Ещё меня заинтересовало - как будут работать все современные браузеры с кириллицей в адресной строке. Проверил во всех основных, что у меня стояли на рабочем компьютере. Оказалось что нормально варит только Opera 10.53, не корёжит символы и отображает во всех URL-ах нормальное написание. Тот же Firefox и остальные собратья при вводе в адресную строку заветного адреса вели себя ненормально, но открыть сайт смогли. Firefox при вводе "правительство.рф" затем заменил этот адрес на ненормальный "http://xn--80aealotwbjpid2k.xn--p1ai/#", но сайт открыл успешно. А Google Chrome и вовсе неправильно отреагировал. Получив адрес "правительство.рф" он сразу пошёл искать его в поисковике гугл, вместо того, чтобы просто открыть этот адрес. Там, нажав на первой странице результатов поиска на соответствующей ссылке, я уже смог попасть на требуемый сайт.

Самое главное, что меня расстроило, это нюансы разработки сайтов и другого ПО, при таком нововведении. Представьте сколько проблем будет в заготовленных скриптах определения корректности введенного e-mail или валидации URL. Попробуйте в практически любой подобный скрипт внести русские символы. С мобильными устройствами тоже проблемы: не все смогут попасть на заветные сайты, так как вообще не предусмотрена возможность ввода символов отличных от латиницы. Вся интернациональность ломается на корню, люди с других стран, просто не смогут зайти на ваш сайт, даже зная язык, потому что у них на клавиатуре нет таких символов. А как же старые стандарты и реализации? Тот же RFC 2821 (Simple Mail Transfer Protocol), www.ietf.org/rfc/rfc2821.txt, что, тоже переписывать и создавать новые стандарты?!

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

вторник, 11 мая 2010 г.

Странное поведение query builder-а Kohana

Не перестаю удивляться всяким мелочам и неприятностям из Kohana PHP 5 Framework. Я сравнительно недавно на него перешёл, до того использовал в основном CodeIgniter. Как известно, Кохана зародилась как форк от CodeIgniter, из-за недостаточно быстрого развития и исправления ошибок в CI. Вокруг Kohana образовалось своё новое, мощное, комьюнити, которое все время единогласно твердит что наш framework лучше чем CI, меньше ошибок, более оптимизированный, быстрый… но не так это всё, на практике, увы.
Я всё больше и больше разочаровываюсь в их документации, в отсутствии обратной совместимости от версии к версии в большинстве модулей. Это из того, что я уже могу с уверенностью сказать, после полутора месяцев её использования. Думаю, что ситуация исправится в ближайшее время в лучшую сторону, но главное чтобы у этого фреймворка были свои сторонники и не разбегались уже приобретённые.
Яркий пример, который я только что поймал, на ровном месте – это использование метода update() из query builder. Использовал такую вот нехитрую конструкцию:

$db->update("news", Array('status'=>0));

Куда уже проще запрос?! – Необходимо поставить всем элементам таблицы News статус равный 0. Но Кохана завалилась, с ошибкой:

> ttm/system/libraries/drivers/Database/Mysql.php [392]:
There was an SQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 - UPDATE `news` SET `status` = 0 WHERE


Понятное дело, но зачем where сюда приплели, если даже нет условия? Мне нужно сделать Update для всех элементов таблицы.
Решение тут, конечно, простое – использовать условие-пустышку, но неприятный осадок всё-таки остался:

$db->where('status', 1)->update("news", $data);

Я использую не самую свежую версию KOHANA_VERSION = 2.3.2, но не думаю что ситуация сильно поменялась в следующих. Боюсь обновляться, чтобы проект не завалился где-то в другом месте на финишной стадии разработки =)

воскресенье, 25 апреля 2010 г.

Медиаплеер Uppod, сервис создания плееров для сайта

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

Так как мои познания во Flash и ActionScript скудны, пришлось искать бесплатные инструменты для воспроизведения видео и музыки, так как написать самостоятельно такую вещь у меня займёт много времени. Пересмотрев несколько пар таких плееров, остановился на сервисе uppod.ru.


Понравился плеер тем, что умеет воспроизводить практически всё, что можно придумать, точнее всё что поддерживается технологией Flash (список привёл для flash-плеера с версии 9.0.115.0):
  • Стандарт видео: Flash video (H.263), MPEG-4 (H.264 — HD)
  • Форматы видео: FLV, F4V, MP4, MOV, M4A, MP4V, 3GP и 3G2
  • Аудио: AAC (HE, LC)
  • Кодеки видео: On2 VP6, Sorenson Spark, H.264
  • Кодеки аудио: MP3 (11, 22, 44 кГц)
Но это не главное, чем он взял меня и чем выделяется среди остальных конкурентов. Самое главное, что мне требовалось от плеера для сайта – возможность кастомизации под свои нужды: возможность гибко настроить внешний вид, задать какие элементы интерфейса должны быть, какого цвета, размера и т.д. Тут flash медиаплеер Uppod значительно обгоняет всех остальных в плане количества и гибкости настроек. На сайте сервиса даже есть визуальный редактор стилей, в котором можно за 5 минут сварганить, что нужно именно в вашем конкретном случае.

Второе важное для меня требование – это отсутствие их рекламы и контекстной рекламы в интерфейсе. Бесплатный аккаунт сервиса Uppod не имеет практически никаких ограничений, и совсем не обязательно покупать версию PRO. Это ОГРОМНЫЙ плюс для проектов, не имеющих финансовой поддержки.

Приведу список основных возможностей, которые взял с их оффсайта:
  • поддержка плейлистов различных конфигураций; 
  • возможность скрывать прямые ссылки на файлы с помощью кодирования; 
  • мультиязычный интерфейс; 
  • возможность выбирать состав панели управления (более 20 кнопок и индикаторов можно установить в любой последовательности); 
  • пользовательские подсказки; 
  • полноэкранный режим для видео; 
  • поддержка стримминга и псевдопоточной загрузки; 
  • подключение веб-камеры; 
  • горячие клавиши; 
  • в интерфейсе нет рекламы; 
  • и еще много-много всего.
Есть тут и возможность управлять плеером через JavaScript. В общем, практически всё, что можно придумать разработчики учли в медиаплеере Uppod. Лучше плеера для сайта и не найти, настоятельно рекомендую.

понедельник, 22 марта 2010 г.

Типичный цикл разработки программного обеспечения

Думаю, кто работает в более-менее крупной IT-компании, взглянет эти этапы разработки программного обеспечения и скажет "...блин, ведь у нас точно так же!..". Я более чем уверен.

Итак, типичный цикл разработки программного обеспечения:

1. Программист пишет код, который, по его мнению, не содержит багов.
2. Продукт тестируется. Находится 20 ошибок.
3. Программист исправляет 10 ошибок и объясняет отделу QA, что остальные 10 - не баги, а фичи.
4. Отдел тестирования отправляет на доработку 5 старых багов и находит еще 15 новых.
5. Пункты 3 и 4 повторяются еще три раза.
6. В связи с маркетинговым давлением и слишком необдуманным анонсированием продукта, основанным на очень оптимистическом плане разработки, продукт уходит в релиз.
7. Пользователи находят 137 новых багов.
8. Программиста, писавшего продукт и получившего за него оплату, нигде не могут найти.
9. Нанятая в спешном порядке новая команда программистов исправляет почти все 137 багов, но при этом добавляет еще 456 новых.
10. Первоначальный программист высылает низкооплачиваемому отделу тестирования открытку с Фиджи. Весь отдел тестирования увольняется.
11. Компания поглащяется конкурирующей фирмой за прибыль, полученную от продажи их продукта, в котором 783 бага.
12. Советом директоров нанимается новый исполнительный директор. Он нанимает программиста чтобы переписать код с нуля.
13. Программист пишет код, который, по его мнению, не содержит багов...

Чистая жизненная правда!

вольный перевод жизненной правды отсюда

четверг, 11 марта 2010 г.

Вёрстка, "overflow:hidden" для ячейки таблицы

Появилась задача сверстать таблицу так, чтобы столбцы и ячейки table не разъезжались, не тянулись, при изменении количества содержимого внутри ячейки. Оказалось, не всё так просто. Повесив свойство overflow:hidden для ячейки таблицы - не будет работать. Как растягивал таблицу контент внутри ячеек, так и будет тянуть.

Нашёл, что к тегу <table> или к элементу, у которого свойство display установлено как table или inline-table можно применять свойство:

table-layout: auto | fixed

Применив для таблицы table-layout:fixed задача решилась сама собой, таблицу не растягивает, но и скролл не появляется.

Дело в том, что значение fixed ещё при этом и повышает производительность построения таблиц. Ширина колонок в этом случае определяется либо с помощью тега <col>, либо вычисляется на основе первой строки. Если данные о форматировании первой строки таблицы по каким-либо причинам получить невозможно, в этом случае таблица будет делиться на колонки равной ширины. При использовании этого параметра содержимое, которое не помещается в ячейку указанной ширины, будет «обрезано» либо наложено поверх ячейки.

Работает под браузерами: IE6+, IE7+, Firefox 2+, Firefox 3+, Opera 9.52+, Safari 3.1+, Chrome 0.3+.

Рекоммендую

Попробуйте надёжный хостинг от Scala Hosting