Перегрузка методов и свойств в PHP

мая 17, 2007 by admin

Задача: Проверить насколько перегруженные методы и свойства медленнее явных.

Публичные методы

Набросаем небольшой класс:

class Classic {  public $fooProp;  public $barProp;

  public function getFooProp() {      return $this->fooProp;  }

  public function setFooProp($foo) {      $this->fooProp = $foo;  }

  public function getBarProp() {      return $this->barProp;  }

  public function setBarProp($bar) {      $this->barProp = $bar;  }}

Проведем тест на скорость выполнения публичных методов. Исходя из

$iterations = 10000;echo ‘<p>Доступ через прописанные сеттеры/геттеры  - ‘;$time_start = microtime(1);for ($i=0; $i < $iterations; $i++) {  $obj = new Classic();  $obj->setFooProp($i);  $tmp = $obj->getBarProp();  $tmp = $obj->getFooProp();  $tmp = $obj->getBarProp();  $tmp = $obj->getFooProp();  $tmp = $obj->getBarProp();  $tmp = $obj->getFooProp();  $tmp = $obj->getBarProp();  $tmp = $obj->getFooProp();  $tmp = $obj->getBarProp();}$times = round($iterations / (microtime(1) - $time_start));echo $times . ‘ в секунду</p>’;

Результаты тестов на 10000 итераций:

Доступ через прописанные сеттеры/геттеры - 136552 в секунду

Перегрузка обращений к свойствам объекта (__set, __get)

Класс Overloaded реализует функционал класса Classic, с помощью перегрузки методов(__call) и доступа к свойствам(__set, __get):

<?phpclass Overloaded {  protected $fields = array(  ‘fooProp’ => false,  ‘barProp’ => false  );

  protected function _generateNoPropertyException($prop) {      throw new Exception(’Undefined property ‘ . $prop);  }

  public function __get($name) {      if(isset($this->fields[$name])) {          return $this->fields[$name];      } else {          $this->_generateNoPropertyException($name);      }  }

  public function __set($name,$value) {      if (isset($this->fields[$name])) {          $this->fields[$name] = $value;      } else {          $this->_generateNoPropertyException($name);      }  }

  public function getBarProp() {      return $this->fields[’barProp’];  }

  protected function __call($mthd, $args = array()) {      $type = substr($mthd, 0, 3);      if(’get’ == $type) {          return $this->__set(strtolower(substr($mthd, 3, 1)).substr($mthd, 4),$args);      } elseif(’set’ == $type) {          return $this->__get(strtolower(substr($mthd, 3, 1)).substr($mthd, 4));      }      throw new Exception(”No such method ‘$mthd’ in ” . get_class($this));  }}

Протестируем:

echo '<p>Доступ через перегруженные сеттеры/геттеры  - ';$time_start = microtime(1);for ($i=0; $i < $iterations; $i++) {  $obj = new Overloaded();  $obj->fooProp = $i;  $tmp = $obj->barProp;  $tmp = $obj->fooProp;  $tmp = $obj->barProp;  $tmp = $obj->fooProp;  $tmp = $obj->barProp;  $tmp = $obj->fooProp;  $tmp = $obj->barProp;  $tmp = $obj->fooProp;  $tmp = $obj->barProp;}$times = round($iterations / (microtime(1) - $time_start));echo $times . ‘ в секунду</p>’;

Получаем результат:

Доступ через перегруженные сеттеры/геттеры - 56004 в секунду

Перегрузка методов (__call)

Тестировать будем на нашем классе Overloaded:
echo ‘<p>Доступ через эмулированные сеттеры/геттеры - ‘;
$time_start = microtime(1);
for ($i=0; $i < $iterations; $i++) {
$obj = new Overloaded();
$obj->setFooProp($i);
$tmp = $obj->getBarProp();
$tmp = $obj->getFooProp();
$tmp = $obj->getBarProp();
$tmp = $obj->getFooProp();
$tmp = $obj->getBarProp();
$tmp = $obj->getFooProp();
$tmp = $obj->getBarProp();
$tmp = $obj->getFooProp();
$tmp = $obj->getBarProp();
}
$times = round($iterations / (microtime(1) - $time_start));
echo $times . ‘ в секунду</p>’;

highlight_file(__FILE__);

Результат:

Доступ через эмулированные сеттеры/геттеры - 27468 в секунду

Выводы

Вот результаты всех трех тестов:

Доступ через прописанные сеттеры/геттеры - 136552 в секундуДоступ через перегруженные сеттеры/геттеры - 56004 в секундуДоступ через эмулированные сеттеры/геттеры - 27468 в секунду

На диаграмме это выглядит следующим образом:

Сравнительно большая разница. Но если учесть, что сервер на котором проводилось тестирование достаточно сильно загружен, и тем не менее способен ежесекундно обрабатывать примерно 27,5 тысяч объектов, то отказ от использования overload это экономия на спичках в чистом виде.

Исходники полного теста: setget.php (3,2 Кб)

Posted in Без рубрики | No Comments »

Аутентификация на основе длительности нажатия клавиш

мая 16, 2007 by admin

Наткнулся на замечательную идею аутентификации на основе длительности нажатия клавиш.

Для аутентификации ее использовать не очень логично, так как это просто добавление еще одного пароля (количество секунд, для каждой клавиши), а вот для отсеивания роботов очень даже пригодится.

Posted in Без рубрики | No Comments »

Red Hat Developer Studio… coming soon

мая 14, 2007 by admin

Компания Red Hat заключила соглашение с Exadel о присоединении пакета Exadel Studio Pro к сабжу.

Программистам, работающим в среде Eclipse хорошо известен этот пакет. В настоящее время я использую Exadel Studio Pro 4.0.4 по временной лицензии. К лету планируется выход среды разработки Red Hat Developer Studio, которая будет включать в себя JBoss IDE и Exadel Studio Pro( уже по открытой лицензии ). JBoss IDE - это продукт middleware-компании первоначально специализировавшейся в разработке сервера приложений JBoss AS. Примерно год назад Red Hat купила ее, сделав из нее комьюнити. Думаю, релиз будет настоящим раем для разработчиков Web-приложений, особенно для тех, кто использует продукты JBoss.

Exadel представляет из себя набор средств на базе Eclipse для разработки Web-приложений с использованием Struts, JSF, Hibernate, Ajax4jsf и RichFaces (разработки JBoss), не считая примитивного JSP / Servlets. В общем весь комплекс Java EE.

P.S. Что ж, возможно это не сразу будет конфетой. Но, все же это единственный вид, который будет поддерживать столько спецификаций. Тем более, что добавление функционала не будет проблемой. Ведь Eclipse - это еще и возможность разрабатывать плагины под самого себя. Кто-то называет Eclipse свалкой плагинов. Может быть… Но, эта свалка реально дает возможность относительно быстро и качественно работать, чего не скажешь о netBeans. При установке Enterprise Pack-а он частенько загибается и жрет всю оперативку, не говоря уже о Visual Web Pack

Статьи по теме: Developer Studio… coming soon

Posted in Без рубрики | No Comments »

Другие блогохостинги. Myspace.com

мая 14, 2007 by admin

Сегодня зарегистрировался на myspace.com. Их юзабилити показался мне отстойным. Сначала я не понял почему кнопки Login и SignUp стоят рядом. Потом наконец понял… Зарегистрировался. Только не понял, какого хера они пихнули мне в друзья какого-то Тома, у которого где-то 180 млн. друзей. Оказалось это один из разработчиков, ну или usability designer. Разве нельзя было сделать что-то типа FAQ(вопрос-ответ)? Потом не мог найти, где редактировать профиль. Потому что, они сначала сделали мне мою страничку, и только затем разрешили мне задать УРЛ. Короче, я набираю myspace.com/myname, а в title у меня что-то вроде myspace.com/178243253, который также является зеркалом моей страницы, ну или доп. урлом. Я взбесился, и вышел оттуда. Только снова войдя, я понял, что нужно было войти в Home, который был в менюшке наряду с Blog, Forum и еще десятком других. Конечно, как разработчик, функционал я ценю, но это слишком. Я че, тупее 180 миллионов??? У меня уже не было сил разбираться в чем-либо еще.

Я никак не могу понять феномен myspace-а. Занимаясь вирусным маркетингом и позволяя делать пользователям все-что угодно, они не ограничили в возможностях и себя. Моя страничка напоминает мне страницу сайтов года 2001-2003. Когда можно было лишиться глаз от обилия ярких цветов в баннерах или схватить инфаркт от внезапно появившегося pop-up окна. Я еще понимаю гугловские контекстные объявления, и тебе не мешают, если не стараться, и им дают заработать. Но огромный банер в самой топ-ке страницы и “чоп-чорный” flash-banner сбоку - это уже слишком.

Одним словом, затащить меня туда теперь будет трудно.

Статьи по теме: Другие блогохостинги Myspace

Posted in Без рубрики | No Comments »

Индия vs США

мая 14, 2007 by admin

Нашел статью в Инете. Сравниваются американские и индийские программисты. В начале о том, какие индусы аккуратные и какие американцы тупые и безграмотные, потому что слушают хип-хоп. Мне даже смешно стало. Учителя, мамы и папы в детстве вместо того чтобы учить их языку, да и в общем воспитать, заставляли их слушать хип-хоп? А еще более странным показалось его “American programmers smell bad and don’t shower” в противовес “American programmers smell bad and don’t shower”. И это против моего стереотипа среднестатистического американца, который не может обойтись без душа более пяти минут, и обострения моего нюха возле общаги для индусов мед. института? Или к нам с Индии пускают только “вонючек”?

“Americans are good at management, Indians are good at programming, so America college boy, stop CODING!”, - что он хотел этим сказать? Хорош пацаны туфтой страдать, лучше давай запряжем индусов? Ни слова о том, какие индусы “кросавчеги”, кроме упоминания о книге, скорее всего про Java-у, хотя если б не индусы, сейчас не развелось бы столько middleware- компаний, сделавших огромные бабки за счет аутсорсинга.
Неужели они никак не могут признать, что индусы намного умнее их? Даже сам Редьярд Киплинг, и тот - падла, опустил их: “Они могут скопировать все, что мы делаем. Но они никогда не скопируют наш ум”.

А если сравнить казахов с индусами? Имею в виду программистов. Боюсь даже представить. А мы еще пыжимся и впихиваемся в ВТО. Тогда с нашей природной ленью, и еще кучей врожденных и прочно закрепившихся в генах минусов, программисты останутся без работы. Если конечно им не будет “впадлу” зарабатывать наравне с тех. персоналом. И что же нам останется делать “стоп коудин’ и тоже юзать индусов?”. Не думаю, что они всегда будут держать цены за услуги ниже плинтуса.

Статьи по теме: Индия США

Posted in Без рубрики | No Comments »

Перехожу на Linux

мая 14, 2007 by admin

Вот уже почти неделю как не сижу на Виндовозе. Кстати, свое первое сообщение писал сидя под Linux-ом. Дома стоит openSUSE 10.2. На работе думаю поставить Ubuntu 7.04. Дома не поставился. Никто аж не поверил мне. Вчера поставил себе все кодеки и VLC-player. Ставил наверное целый час если не два, так как у него зависимость к пяти или шести модулям, а у тех в свою очередь еще к нескольким. Теперь смотрю фильмы и клипы. А еще поставил Amarok, хоть у меня и гном стоит. В нем все неплохо продумано.
До этого поэкспериментировал с Wine, эмулятором Win32 API, только опен-сорс. Google Talk не загрузился. Ему Gecko нужен Mozilla-вский. Вконец нашел его, все равно не грузится. Пытался FIFA 07 поставить… тщетно. Только разрешение экрана сносит, хотя я уже поставил драйверы nVidia, а до этого слышал, что у них интеграция нормальная.
Единственное что я смог нормально сэмулировать, так это сапер от винды. Хоть что-то утешает.
Поставил Eclipse. Как ни крути, Gtk - гавно! Плюс подвисает больше, чем на ХР.

Кстати, вышел Picasa для Linux. Сильно подвисает, хотя на сайте ни слова о том, что это Beta. Мне не понравилось, что он использует Wine и Gecko, даже если они у тебя уже стоят. Что же это получается, ставить 20 сырых продуктов от зверей-вендоров - ставить 20 сырых Wine-ов???

Статьи по теме: Перехожу на Linux

Posted in Без рубрики | No Comments »

Хранение данных в БД

мая 11, 2007 by admin

Храните данные в БД в GMT-величинах, со смещением. Иначе получите что-нибудь типа:

Вывести все выставки на какой-то момент:

  1. Взять список выставок
  2. Определить город каждой выставки.
  3. Определить зону каждого города.
  4. Определить смещение каждой зоны

Храните в GMT, и будет вам счастье.

Статьи по теме: Хранение данных БД

Posted in Без рубрики | No Comments »

Russian Internet Technologies 2007

мая 9, 2007 by admin
На носу выставка РИТ 2007 (Российские Интернет Технологии).

На официальной странице, кстати очень хорошо оформленной, уже есть многие презентации докладчиков по нескольким секциям.

Мои выводы:

  • Секция “Базы данных” - все без исключения(!) презентации просто СУПЕР!
  • Секция “Бизнес на Web-разработках” - очень понравилась презентация BITRIX. Что-то вроде микса истории компании и советов начинающим, как делать нельзя. Очень понравился их вывод о том что “Аутсорсинг бесперспективен”.
  • Секция “Качество” - прикольное сравние гона Ньютона ( проделывание шести дырок для шести котят) с созданием нескольких модулей поиска без единого окна от Удалова Андрея с докладом “Web 2.0 + Usability = Web 3.0″. Да и вообще, отличные советы по юзабилити.
  • Секция “Клиентское программирование” - неплохой такой сэмпл AJAX-чата на prototype.js и интересная презентация Дмитрия Котерова (создателя очень популярного пакета Denwer) про pros и cons JsHttpRequest перед XmlHttpRequest, хотя про cons-ы разумеется не было ни слова. Хотя “фик ево” знает, может и нету их действительно, я лично пользуюсь XmlHttpRequest и в принципе претензий особых нет, так как Ajax я использовал по минимуму… пока.
  • Секция “Серверное программирование” - неплохо написано про CMS-ки.
  • Секция “Управление проектами” - можно сказать “best presentation” от Асхата Уразбаева под названием “Agile Web Development” (гибкая веб-разработка). Очень понравилась последовательность написания материала и Agile Manifesto, который отдаленно напоминает мне схему нашей работы. Думаю, я буду помнить об этих правилах, цитирую:
  1. Люди и взаимодействия важнее чем процессы и инструменты ( один хороший знакомый мне все время об этом талдычит ;-) );
  2. Рабочий код важнее совершенной документации ( неплохое оправдание нашей лени, не правла ли? );
  3. Сотрудничество с заказчиком важнее контрактных обязательств (чем то напоминает наше “все через жопу” lol );
  4. Реакция на изменения важнее следования плану.

P.S. Кстати, на индексе TIOBE за май текущего года C# неожиданно “опустился”. Аж на восьмом месте! И также неожиданно Perl оказался выше него на 6 месте, перегнав Питон.

Java на первом, как всегда! И меня, как ярого фаната Java, это очень радует. Java “форэва”!

P.S.S. Мейрамыңыз құтты болсын.

Статьи по теме: Russian Internet Technologies 2007

Posted in Без рубрики | No Comments »

PHPConf 2007

мая 7, 2007 by admin
24

май

phpconf 2007
ММТС-9, 24 Май 2007 в 09:00:00 (Москва, Россия)
Livents.ru - Смотри. Участвуй. Живи.
Статьи по теме: PHPConf 2007

Posted in Без рубрики | No Comments »