Вчера вернулся с DevConf, где читал доклад про Yii и процесс его разработки. В общем доклад был похож на одноимённый с CodeFest, но включал себя багфиксы и раскрывал мысль несколько лучше. На вопрос «во что может превратиться Yii, если его разработчики станут компанией» я чётко ответил «в Битрикс», чем, сдаётся мне, поверг окружающих в лёгкий в шок. На самом деле оговорился :) Вопросы были, кстати, очень хорошие и правильные. Спасибо задававшим их людям.
-
DevConf 2011, впечатления
6 июня 2011
-
Рекурсивные анонимные функции PHP
1 июня 2011
// считаем факториал $fact = function($n) use (&$fact) { if($n==1) return 1; return $fact($n-1)*$n; }; echo $fact(5); // =120
-
jQuery Fundamentals
29 мая 2011
Хороший последовательный материал на английском для тех, кто хочет изучить jQuery. Описаны основы JavaScript, основы jQuery, ядро, работа с событиями, анимация, AJAX, плагины, оптимизация производительности, организация кода в больших проектах и создание своих событий.
-
Google закрыл некоторые API
29 мая 2011
На Google I/O были анонсированы новые API, однако вскоре было объявлено и о закрытии некоторых старых API:
- Blog Search API.
- Books Data API, Books JavaScript API (взамен предлагают использовать новый API).
- Image Search API.
- News Search API.
- Patent Search API.
- Safe Browsing API (в этом случае просто надо перейти на вторую версию).
- Translate API.
- Transliterate API.
- Video Search API.
- Virtual Keyboard API.
Также пойдут под нож, хоть и неизвестно пока когда, Code Search API, Diacritize API, Feedburner APIs, Finance API, Power Meter API, Sidewiki API, Wave API.
Из всего этого можно сделать вывод, что какое угодно API может неожиданно накрыться медным тазом и основывать на нём критически важные части приложения, мягко говоря, не стоит.
-
Импорт больших SQL-дампов через PHP
27 мая 2011
Основная проблема при импорте большого SQL-дампа — нехватка памяти при чтении всего дампа. Решение очевидно: грузить в память только то, что нужно в данный момент.
$f = @fopen("path/to/dump.sql", "r"); if($f) { $q = ''; while(!feof($f)) { // читаем построчно в буфер $q $q .= fgets($f); // пока не упрёмся в ; if(substr(rtrim($q), -1) == ';') { // выполяем запрос execute_sql($q); // обнуляем буфер $q = ''; } } }
-
Свои классы для правил роутера Yii
24 мая 2011
В следующей версии Yii появится возможность использовать свой класс для конкретного правила роутера:
array( // стандартное правило CUrlRule '<action:(login|logout)>' => 'site/<action>', // свой класс array( 'class' => 'application.components.MyUrlRule', 'connectionID' => 'db', ), )
Это позволит, например, с лёгкостью реализовать такую штуку, как наличие потенциально конфликтующих URL:
/about /contact /my-cool-blog-post /my-cool-static-page
Код уже в транке, если есть желание или необходимость — можете опробовать. Замечания и предложения приветствуются.
-
Толстые контроллеры не так уж ужасны
22 мая 2011
Jani Hartikainen, разработчик, которого я всегда читаю с большим удовольствием, написал заметку о толстых контроллерах. Обычно преобладает академическая точка зрения, что контроллер должен быть тонким, т.е. вся логика должна быть вынесена в модели и сервисный слой. Как и почти всё академическое, идеальный тонкий контроллер — это крайность, которая не всегда нужна. В пользу толстого контроллера можно привести следующие аргументы:
- Сервисный слой — дополнительная сложность. Чтобы работать с ним, нужно сначала посмотреть, что там и как, то есть увеличивается порог, который нужно преодолеть новым членам команды.
- Проблема, которую дополнительные слои точно не могут решить — наличие слишком большого числа дополнительных слоёв.
Слишком толстый контроллер — другая крайность. Выносить функционал в сервисный слой определённо стоит если:
- Вы начинаете копировать свой же код.
- Вы в точности знаете, что вам нужно и это что-то точно будет использоваться много раз.
- Вы используете разработку через тестирование и хотите максимального покрытия кода.
-
Как скомпилить libevent для PHP под Windows
22 мая 2011
Компилировать расширения PHP под Windows нет так уж и просто. Но задача вполне выполнимая.
-
PHP, построение URL
20 мая 2011
При работе с разными API (и не только) требуется построить URL. На входе имеем массив параметров имя-значение, на выходе получаем URL. Решение очень простое:
function getUrl($url, $params = array()) { return $url.'&'.http_build_query($params); } // используем так echo getUrl('http://open.mapquestapi.com/nominatim/v1/search?format=json', array('q' => 'Olympiaturm, Spiridon-Louis-Ring 7, München 80809'));
UPD:
http_build_url
. -
Короткий echo в PHP 5.4
19 мая 2011
Похоже, в 5.4 и последующих версиях PHP собираются включить короткий
echo
по умолчанию и сделать его независимым отshort_tags
. Меня лично данное известие радует$username
выглядит гораздо приятнее, чем
echo $username
Единственное, что пока останавливает от повсеместного использования более короткого синтаксиса — необходимость писать продукты под дефолтные конфиги PHP. Хотя, например, в коде этого блога как раз используется короткий
echo
.