понедельник, 28 сентября 2009 г.

Routing cache в symfony

Уже довольно давно хотел написать об этом, но всё руки не доходили.
При довольно большом количестве ссылок иногда можно наблюдать ошибку такого плана
Allowed memory size of ******** bytes exhausted (tried to allocate ******* bytes) in app/cache/frontend/prod/config/config_core_compile.yml.php on line 3369
Происходит это из-за того, что кеш роутинга становится слишком большим.
Кеш представляет собой огромный сериализованный массив в файле
app/cache/frontend/prod/config/routing/symfony.routing.data.cache

Существует несколько вариантов решения этой проблемы, но для себя самым оптимальным я нашел просто отключение кеша для роутера. В factories.yml
all:
  routing:
    class: sfPatternRouting
    param:
      cache: { class: sfNoCache }
Почему я только сейчас пишу об этом? Да потому что только что вышла symfony 1.2.9, в которой как раз по дефолту и отключен кеш роутинга :)

symfony 1.2.9 is ready to use

Анонс и Changelog? :)

суббота, 26 сентября 2009 г.

Symfony 1.3 alpha1

Вышла первая альфа ветки 1.3.
Анонс и What's new?

вторник, 22 сентября 2009 г.

Code Folding в NetBeans

Уже довольно давно ползуюсь NetBeans, но совснем недавно узнал, что в нём можно делать code folding (аналог #region в Visual Studio).
Итак, формат такой
// <editor-fold defaultstate="collapsed" desc="describe what is in here">
your code here
// </editor-fold>
Параметры defaultstate и desc не обязательны.
Вот часть кода в раскрытом виде

А вот она же, но уже в свёрнутом виде


Естественно мало кто захочет набирать всё это каждый раз вручную. Поэтому открываем
Tools → Options → Editor → Code Templates
и создаём следующий шаблон
// <editor-fold defaultstate="collapsed" desc="${comment}">
${selection}${cursor}
// </editor-fold>
Сохраняем.
Выделяем часть кода, давим Alt-Enter и выбираем наш Surronud with...

Вообще бытует мнение, что если приходится использовать фолдинг, то ваш код не очень хорошо структурирован, и я с этим согласен. Но если, например, нужно разобраться в длиннющем скрипте, то здесь фолдинг может очень помочь.

понедельник, 21 сентября 2009 г.

Бесплатный SVN хостинг для личных проектов

Сначала я использовал assembla, но после того, как она стала полностью платной, перешел на XP-Dev.com. До сих пор пользуюсь их сервисом. Но сегодня, пока их сервер обновлялся и был недоступен, решил на всякий случай подыскать альтернативу.
Итак, небольшое сравнение бесплатных аккаунтов некоторых SVN-хостингов.
Хостер XP-Dev.com Beanstalk unfuddle ProjectLocker
Пространство 200M 100M 200M 500M
Репозиториев ? 1 unlim unlim
Пользователей unlim 3 2 5
Проектов 2 ? 1 unlim
Кроме цифр есть такой немаловажный фактор, как удобство пользования. А оно у XP-Dev.com в последнее время оставляет желать лучшего. Вообщем лидер есть, надо будет попробовать...

воскресенье, 20 сентября 2009 г.

get_partial & task в symfony

Есть проект на symfony.
Имеется консольная задача в которой необходимо выполнять рассылку писем.
Тело письма создаётся через get_partial.
В шаблоне письма есть link_to и/или url_for.
Проблема в том, что роутер не может создать правилый URL, т.к. приложение выполняется вне web-окружения и вместо нормальных ссылок получаем что-то типа http://symfony/symfony/post/2009.
Я выкрутился следующим способом
$_SERVER['HTTP_HOST'] = 'myhost';
$_SERVER['SCRIPT_NAME'] = '/index.php';
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false);
$context = sfContext::createInstance($configuration);
$configuration->loadHelpers('Partial');
$body = get_partial('post/mail_notify', array('myvar' => $myval));
Обратите внимание на параметр 'prod'. Это необходимо для того что бы роутер смог выкинуть /index.php из URL'а (если generate_shortest_url=true в factories.yml)

суббота, 19 сентября 2009 г.

Якоря

Почему-то большинство разработчиков для создания якорей используют конструкцию вида
<h2>
  <a name="section1">Section 1</a>
</h2>
Хотя якорем может быть любой элемент с атрибутом id
<h2 id="section1">Section 1</h2>