вторник, 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. Лучше плеера для сайта и не найти, настоятельно рекомендую.

четверг, 15 апреля 2010 г.

Причины, по которым программисты вечно выглядят бездельниками

понедельник, 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+.

понедельник, 15 февраля 2010 г.

Странности JavaScript. Или это всё-таки JS особенности?

Сегодня набрёл на отличную подборку не сразу объяснимых странностей JavaScript. Например:

//1.
Number.MIN_VALUE > 0; // true or false?
//2.
typeof null; // what type?
null === Object; // true or false?
//3.
NaN === NaN; // true or false?
//4.
typeof NaN; // what type?


Как думаете, что каждая из строчек вернёт, хорошенько подумайте. А потом проверьте себя:

  1. true 
  2. object и false
  3. false
  4. number

На самом деле если подумать над этим, то есть вполне логическое объяснение на каждый из пунктов, но не все так сразу очевидно. Например, необычное поведение NaN — требование IEEE 754, общее для всех языков программирования. Необходимо чтобы типу Number можно было присвоить NaN, но при этом не был равен ничему другому. Так же, с логической точки зрения можно объяснить все вышеприведенные пункты, все были при здравом уме и памяти, когда разработчики закладывали такое поведение JS.

Кому интересно продолжение, есть целый сайт, посвящённый "странностям" JS - wtfjs.com

понедельник, 1 февраля 2010 г.

Google Reader научился отслеживать изменения на сайте без RSS-потоков

Как стало известно, Google Reader, веб-сервис от гугла, для управления RSS-потоками, научился отслеживать изменения даже на тех сайтах, которые лишены RSS-каналов.

Для добавления в агрегатор нужных веб-ресурсов без RSS-канала,  достаточно ввести их адрес в поле подписки. Все происходящие на сайте изменения начинают отслеживаться, а пользователям приходят соответствующие уведомления, включая модифицированные фрагменты веб-страниц. Думаю, что это происходит путём сравнения проиндексированных google-bot-ом страниц, и выдаче разницы на сайте.

Сейчас поддерживается только англоязычный контент в HTML-формате, обновление содержимого фреймов не распознается, понятное дело.

Если вы не хотите, чтобы агрегатор Google Reader мог "сканировать" вашу страницу таким образом, а только через существующие RSS-каналы, то вы можете поставить в заголовке страницы следующий текст:

<meta name="googlebot" content="noarchive">

Гугл рулит, всё лучше и лучше их сервисы, скоро станут монополистами во всех отраслях web-сервисов.

Рекоммендую

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