<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4335322278857984660</id><updated>2024-10-24T22:53:08.425+03:00</updated><category term="symfony"/><category term="html"/><category term="netbeans"/><category term="note"/><category term="rails"/><category term="ruby"/><category term="rvm"/><category term="svn"/><category term="ubuntu"/><title type='text'>web development tips</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jq11.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4335322278857984660.post-9215958687847250352</id><published>2011-05-19T00:29:00.002+03:00</published><updated>2011-05-19T00:32:25.720+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="note"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="rvm"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>Установка RVM, Ruby, Rails, MySQL на Ubuntu</title><content type='html'>&lt;h4&gt;1. Установка MySQL с причендалами&lt;/h4&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot;&gt;$ sudo apt-get install mysql-server mysql-client libmysql-ruby libmysqlclient-dev
&lt;/pre&gt;&lt;br /&gt;
&lt;h4&gt;2. Установка RVM&lt;/h4&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot;&gt;$ sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev
$ bash &lt; &lt;(curl -s https://rvm.beginrescueend.com/install/rvm)
&lt;/pre&gt;
После установки должно вывалиться много текста. Внимательно читаем и правим файл &lt;b&gt;.bashrc&lt;/b&gt;, иначе не взлетит.
Перезапускаем консоль, проверяем что rvm жив:
&lt;pre class=&quot;brush:bash&quot;&gt;$ type rvm | head -1 # должно сказать &quot;rvm is a function&quot;
$ rvm notes
&lt;/pre&gt;
&lt;h4&gt;3. Установка Ruby + Rails&lt;/h4&gt;
&lt;pre class=&quot;brush:bash&quot;&gt;$ rvm install 1.9.2
$ rvm use 1.9.2
$ ruby -v
$ gem install rails
$ rails -v
&lt;/pre&gt;На данный момент рельсы версии 3.0.7

&lt;h4&gt;4. Пробуем создать rails-приложение&lt;/h4&gt;
&lt;pre class=&quot;brush:bash&quot;&gt;$ rails new abc -d mysql -J
$ cd abc/
&lt;/pre&gt;На данный момент версия mysql2 - 0.3.2. Она работает только с рельсами 3.1.
У нас же рельсы 3.0, по этому меняем в &lt;b&gt;Gemfile&lt;/b&gt; строку
&lt;pre&gt;gem &#39;mysql2&#39;&lt;/pre&gt;на
&lt;pre&gt;gem &#39;mysql2&#39;, &#39;&lt; 0.3&#39;&lt;/pre&gt;
Устанавливаем необходимые gem&#39;ы
&lt;pre class=&quot;brush:bash&quot;&gt;$ bundle install
&lt;/pre&gt;Среди пакетов должен установиться mysql2 версии 0.2.7.

Правим файл &lt;b&gt;config/database.yml&lt;/b&gt;.
Создаём базы

&lt;pre class=&quot;brush:bash&quot;&gt;$ rake db:create
&lt;/pre&gt;На всякий случай можно проверить, что базы созданы

&lt;pre class=&quot;brush:bash&quot;&gt;$ mysql -uroot -p -e &quot;show databases&quot;
&lt;/pre&gt;&lt;br /&gt;
Всё.</content><link rel='replies' type='application/atom+xml' href='http://jq11.blogspot.com/feeds/9215958687847250352/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jq11.blogspot.com/2011/05/rvm-ruby-rails-mysql-ubuntu.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/9215958687847250352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/9215958687847250352'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/2011/05/rvm-ruby-rails-mysql-ubuntu.html' title='Установка RVM, Ruby, Rails, MySQL на Ubuntu'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4335322278857984660.post-6550621195530246490</id><published>2009-12-01T14:48:00.001+02:00</published><updated>2009-12-01T14:48:55.226+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="symfony"/><title type='text'>symfony 1.3 and 1.4 stable released</title><content type='html'>Ура! Версия 1.4 - это тоже, что и 1.3 минус устаревшие фичи.&lt;br /&gt;
&lt;a href=&quot;http://www.symfony-project.org/blog/2009/12/01/symfony-1-3-and-1-4-stable-released&quot;&gt;Официальный анонс&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://jq11.blogspot.com/feeds/6550621195530246490/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jq11.blogspot.com/2009/12/symfony-13-and-14-stable-released.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/6550621195530246490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/6550621195530246490'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/2009/12/symfony-13-and-14-stable-released.html' title='symfony 1.3 and 1.4 stable released'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4335322278857984660.post-7744465625886804414</id><published>2009-11-25T00:18:00.005+02:00</published><updated>2009-11-25T00:27:07.424+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="symfony"/><title type='text'>Symfony Custom Filter in Admin Generator</title><content type='html'>Небольшой snippet по расширению Form Filter.&lt;br /&gt;
Например есть табличка с заказами Order, табличка с товарами Product и связующая табличка OrderProduct. В backend необходимо добавить возможность фильтрации по id заказа &lt;small&gt;(странно что symfony сама не добавляет в фильтр id)&lt;/small&gt; и по названию товара в заказе.&lt;br /&gt;
&lt;br /&gt;
Первым делом изменяем OrderFormFilter:&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;class OrderFormFilter extends BaseOrderFormFilter
{
  public function configure()
  {
    $this-&gt;widgetSchema[&#39;id&#39;] = new sfWidgetFormInput();
    $this-&gt;validatorSchema[&#39;id&#39;] = new sfValidatorInteger(array(&#39;required&#39; =&gt; false));

    $this-&gt;widgetSchema[&#39;prodname&#39;] = new sfWidgetFormInput();
    $this-&gt;validatorSchema[&#39;prodname&#39;] = new sfValidatorString(array(&#39;required&#39; =&gt; false));
  }

  public function getFields()
  {
    $fields = parent::getFields();
    $fields[&#39;id&#39;] = &#39;Number&#39;;
    $fields[&#39;prodname&#39;] = &#39;Text&#39;;
    return $fields;
  }


  public function addIdColumnQuery(Doctrine_Query $query, $field, $value)
  {
    $query-&gt;andWhere(&#39;r.id = ? &#39;, $value);
  }


  public function addProdnameColumnQuery(Doctrine_Query $query, $field, $value)
  {
    $query-&gt;leftJoin(&#39;r.Products p&#39;)-&gt;andWhere(&#39;p.name LIKE ?&#39;, &quot;%$value%&quot;);
  }

}
&lt;/pre&gt;&lt;br /&gt;
Теперь нужно добавить новые поля в generator.yml:&lt;br /&gt;
&lt;pre class=&quot;brush:yaml&quot;&gt;      filter:
        display: [ id, prodname, ..... ]
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://jq11.blogspot.com/feeds/7744465625886804414/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jq11.blogspot.com/2009/11/symfony-custom-filter-in-admin.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/7744465625886804414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/7744465625886804414'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/2009/11/symfony-custom-filter-in-admin.html' title='Symfony Custom Filter in Admin Generator'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4335322278857984660.post-7046862696870124154</id><published>2009-11-04T22:26:00.001+02:00</published><updated>2009-11-04T22:27:25.121+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="note"/><title type='text'>Alt-Tab в NetBeans</title><content type='html'>В Windows глючит Alt-Tab в NetBeans. Лечится заменой look and feel.&lt;br /&gt;
В файле &lt;em&gt;netbeans.conf&lt;/em&gt; добавляем в &lt;em&gt;netbeans_default_options&lt;/em&gt;:&lt;br /&gt;
&lt;pre class=&quot;brush&quot;&gt;netbeans_default_options=&quot;...... --laf javax.swing.plaf.metal.MetalLookAndFeel&quot;
&lt;/pre&gt;&lt;br /&gt;
p.s.&lt;br /&gt;
Записи с меткой &lt;em&gt;note&lt;/em&gt; пишу в основном для себя, что бы не искать каждый раз одно и то же.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/7046862696870124154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/7046862696870124154'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/2009/11/alt-tab-netbeans.html' title='Alt-Tab в NetBeans'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4335322278857984660.post-901720254297273585</id><published>2009-10-10T00:56:00.000+03:00</published><updated>2009-10-10T00:56:24.214+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="html"/><title type='text'>5 признаков плохого HTML кода</title><content type='html'>Недавно, в связи с редизайном одного проекта, пришлось перелопатить довольно большой объём HTML-кода. Ниже привожу 5 наиболее распространённых ошибок, про которые все знают, но почему-то не особо стараются их избегать.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;b&gt;Использование тэга &lt;em&gt;&amp;lt;br/&amp;gt;&lt;/em&gt; для вертикальных отступов&lt;/b&gt;&lt;br /&gt;
Для отступов есть &lt;em&gt;padding&lt;/em&gt; и &lt;em&gt;margin&lt;/em&gt; в CSS, а &lt;em&gt;&amp;lt;br/&amp;gt;&lt;/em&gt; нужен только для разрывов строк.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Использование inline CSS&lt;/b&gt;&lt;br /&gt;
Инлайн стили надо использовать только в крайних случаях. Тогда при редизайне не прийдётся выискивать стили в HTML-шаблонах. Да и страничка будет загружаться быстрее, т.к. CSS-файлы, как правило, кешируются.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Использование инлайн JavaScript&lt;/b&gt;&lt;br /&gt;
Аналогично предыдущему пункту. Старайтесь избегать кода вида &lt;em&gt;&amp;lt;a onclick=&quot;...&quot;&lt;/em&gt;. Не стоит загромождать HTML код логикой. Лучше создать отдельный js-файл и навесить обработчик события из него.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Использование таблиц для отображения нетабличных данных&lt;/b&gt;&lt;br /&gt;
Про это и так предостаточно сказано, поэтому комментирвать не буду.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Невалидный HTML&lt;/b&gt;&lt;br /&gt;
Ваш HTML-код должен 100% проходить валидацию. Провериться можно на &lt;a href=&quot;http://validator.w3.org/&quot;&gt;W3C Markup Validation Service&lt;/a&gt;, &lt;br /&gt;
так же рекомендую расширение для FireFox - &lt;a href=&quot;http://users.skynet.be/mgueury/mozilla/&quot;&gt;Html Validator&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://jq11.blogspot.com/feeds/901720254297273585/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jq11.blogspot.com/2009/10/5-html.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/901720254297273585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/901720254297273585'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/2009/10/5-html.html' title='5 признаков плохого HTML кода'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4335322278857984660.post-6694764350263689568</id><published>2009-10-06T23:37:00.002+03:00</published><updated>2009-10-06T23:43:03.485+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="symfony"/><title type='text'>Readonly fields in symfony</title><content type='html'>Иногда бывает необходимо просто отобразить поле в форме без возможности его изменения. Обычно это актуально для автогенерируемых полей, таких как created_at и updated_at. Проблема в том, что поля типа &lt;em&gt;datetime&lt;/em&gt; отображаются в виде набора селектов (sfWidgetFormSelect) и простое навешивание атрибута &lt;em&gt;readonly&lt;/em&gt; не поможет:&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;$this-&amp;gt;widgetSchema[&#39;created_at&#39;]-&amp;gt;setAttribute(&#39;readonly&#39;, &#39;readonly&#39;);
&lt;/pre&gt;Наиболее простым выходом из ситуации будет замена виджета &lt;em&gt;sfWidgetFormDateTime&lt;/em&gt; на &lt;em&gt;sfWidgetFormInput&lt;/em&gt;:&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;public function configure()
{
  // ...
  $this-&amp;gt;widgetSchema[&#39;created_at&#39;] = new sfWidgetFormInput(array(), array(&#39;readonly&#39;=&amp;gt;&#39;readonly&#39;));
  // ...
}
&lt;/pre&gt;&lt;br /&gt;
Если по каким-либо причинам понадобилось вместо поля ввода (input) отображать просто текст, то можно создать виджет &lt;em&gt;myWidgetFormPlain&lt;/em&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;class myWidgetFormPlain extends sfWidgetForm
{
  
  protected function configure($options = array(), $attributes = array()) { }

  public function render($name, $value = null, $attributes = array(), $errors = array())
  {
    return $value ? $value : &#39;&amp;amp;mdash;&#39;;
  }

}
&lt;/pre&gt;При использовании этого виджета необходимо отключить валидатор:&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;public function configure()
{
  // ...
  $this-&amp;gt;widgetSchema[&#39;created_at&#39;] = new myWidgetFormPlain();
  unset($this-&amp;gt;validatorSchema[&#39;created_at&#39;]);
  // ...
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://jq11.blogspot.com/feeds/6694764350263689568/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jq11.blogspot.com/2009/10/readonly-fields-in-symfony.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/6694764350263689568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/6694764350263689568'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/2009/10/readonly-fields-in-symfony.html' title='Readonly fields in symfony'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4335322278857984660.post-5957957336130256449</id><published>2009-09-28T01:01:00.004+03:00</published><updated>2009-10-03T22:48:13.069+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="symfony"/><title type='text'>Routing cache в symfony</title><content type='html'>Уже довольно давно хотел написать об этом, но всё руки не доходили.&lt;br /&gt;
При довольно большом количестве ссылок иногда можно наблюдать ошибку такого плана&lt;br /&gt;
&lt;pre&gt;Allowed memory size of ******** bytes exhausted (tried to allocate ******* bytes) in app/cache/frontend/prod/config/config_core_compile.yml.php on line 3369&lt;/pre&gt;Происходит это из-за того, что кеш роутинга становится слишком большим.&lt;br /&gt;
Кеш представляет собой огромный сериализованный массив в файле&lt;br /&gt;
&lt;i&gt;app/cache/frontend/prod/config/routing/symfony.routing.data.cache&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Существует несколько вариантов решения этой проблемы, но для себя самым оптимальным я нашел просто отключение кеша для роутера. В &lt;i&gt;factories.yml&lt;/i&gt;&lt;br /&gt;
&lt;pre&gt;all:
  routing:
    class: sfPatternRouting
    param:
      cache: { class: sfNoCache }
&lt;/pre&gt;Почему я только сейчас пишу об этом? Да потому что только что вышла symfony 1.2.9, в которой как раз по дефолту и отключен кеш роутинга :)</content><link rel='replies' type='application/atom+xml' href='http://jq11.blogspot.com/feeds/5957957336130256449/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jq11.blogspot.com/2009/09/routing-cache-symfony.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/5957957336130256449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/5957957336130256449'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/2009/09/routing-cache-symfony.html' title='Routing cache в symfony'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4335322278857984660.post-68434196546706640</id><published>2009-09-28T00:46:00.002+03:00</published><updated>2009-10-03T22:48:07.067+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="symfony"/><title type='text'>symfony 1.2.9 is ready to use</title><content type='html'>&lt;a href=&quot;http://www.symfony-project.org/blog/2009/09/27/symfony-1-2-9-is-ready-to-use&quot;&gt;Анонс &lt;/a&gt;и &lt;a href=&quot;http://www.symfony-project.org/installation/1_2/changelog&quot;&gt;Changelog&lt;/a&gt;? :)</content><link rel='replies' type='application/atom+xml' href='http://jq11.blogspot.com/feeds/68434196546706640/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jq11.blogspot.com/2009/09/symfony-129-is-ready-to-use.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/68434196546706640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/68434196546706640'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/2009/09/symfony-129-is-ready-to-use.html' title='symfony 1.2.9 is ready to use'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4335322278857984660.post-3115859715551286457</id><published>2009-09-26T23:43:00.001+03:00</published><updated>2009-09-26T23:45:10.779+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="symfony"/><title type='text'>Symfony 1.3 alpha1</title><content type='html'>Вышла первая альфа ветки 1.3.&lt;br /&gt;
&lt;a href=&quot;http://www.symfony-project.org/blog/2009/09/26/hey-look-symfony-1-3-alpha1&quot;&gt;Анонс&lt;/a&gt; и &lt;a href=&quot;http://www.symfony-project.org/tutorial/1_3/en/whats-new&quot;&gt;What&#39;s new?&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://jq11.blogspot.com/feeds/3115859715551286457/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jq11.blogspot.com/2009/09/symfony-13-alpha1.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/3115859715551286457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/3115859715551286457'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/2009/09/symfony-13-alpha1.html' title='Symfony 1.3 alpha1'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4335322278857984660.post-4354739562815098180</id><published>2009-09-22T00:10:00.007+03:00</published><updated>2009-09-30T15:05:43.640+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="netbeans"/><title type='text'>Code Folding в NetBeans</title><content type='html'>Уже довольно давно ползуюсь &lt;a href=&quot;http://www.netbeans.org/&quot;&gt;NetBeans&lt;/a&gt;, но совснем недавно узнал, что в нём можно делать code folding (аналог &lt;i&gt;#region&lt;/i&gt; в Visual Studio).&lt;br /&gt;
Итак, формат такой&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;// &amp;lt;editor-fold defaultstate=&quot;collapsed&quot; desc=&quot;describe what is in here&quot;&amp;gt;
your code here
// &amp;lt;/editor-fold&amp;gt;
&lt;/pre&gt;Параметры &lt;b&gt;defaultstate&lt;/b&gt; и &lt;b&gt;desc&lt;/b&gt; не обязательны.&lt;br /&gt;
Вот часть кода в раскрытом виде&lt;br /&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgShtZe4IwQ7wFJYdWCBtpdxC4dlDAKRRgaysvBNznzUpJAMSrk1UdicCNYwnUv5MbSnhbjUsPE4qbuCIeL8zZhSAWw2SVSx8m_phAFBEV7g7H2Nc0Z3bbMg3cx2Bf-qdwe7Nkcfu7Xvx7w/s800/netbeans-folding-expanded.gif&quot; /&gt;&lt;br /&gt;
А вот она же, но уже в свёрнутом виде&lt;br /&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjYiOdTdxghQf2rw6UjxdUtQ5fKhrzlla38Hv4gqNOSlGLYh9tYpmEVodtzsdeXH39KMcQqpvJPV175kyZ7kocFInxpqPoEom5yANozCWgVfHz5cD4w15vT4WlmhK9mFHpoNLlF3xxdxUo/s800/netbeans-folding-collapsed.gif&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Естественно мало кто захочет набирать всё это каждый раз вручную. Поэтому открываем&lt;br /&gt;
Tools &amp;rarr; Options &amp;rarr; Editor &amp;rarr; Code Templates&lt;br /&gt;
и создаём следующий шаблон&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;// &amp;lt;editor-fold defaultstate=&quot;collapsed&quot; desc=&quot;${comment}&quot;&amp;gt;
${selection}${cursor}
// &amp;lt;/editor-fold&amp;gt;
&lt;/pre&gt;Сохраняем.&lt;br /&gt;
Выделяем часть кода, давим Alt-Enter и выбираем наш Surronud with...&lt;br /&gt;
&lt;br /&gt;
Вообще бытует мнение, что если приходится использовать фолдинг, то ваш код не очень хорошо структурирован, и я с этим согласен. Но если, например, нужно разобраться в длиннющем скрипте, то здесь фолдинг может очень помочь.</content><link rel='replies' type='application/atom+xml' href='http://jq11.blogspot.com/feeds/4354739562815098180/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jq11.blogspot.com/2009/09/netbeans.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/4354739562815098180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/4354739562815098180'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/2009/09/netbeans.html' title='Code Folding в NetBeans'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgShtZe4IwQ7wFJYdWCBtpdxC4dlDAKRRgaysvBNznzUpJAMSrk1UdicCNYwnUv5MbSnhbjUsPE4qbuCIeL8zZhSAWw2SVSx8m_phAFBEV7g7H2Nc0Z3bbMg3cx2Bf-qdwe7Nkcfu7Xvx7w/s72-c/netbeans-folding-expanded.gif" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4335322278857984660.post-3394227154104036075</id><published>2009-09-21T01:53:00.003+03:00</published><updated>2009-09-21T02:10:22.707+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="svn"/><title type='text'>Бесплатный  SVN хостинг для личных проектов</title><content type='html'>Сначала я использовал &lt;a href=&quot;http://www.assembla.com/&quot;&gt;assembla&lt;/a&gt;, но после того, как она стала полностью платной, перешел на &lt;a href=&quot;http://xp-dev.com/&quot;&gt;XP-Dev.com&lt;/a&gt;. До сих пор пользуюсь их сервисом. Но сегодня, пока их сервер обновлялся и был недоступен, решил на всякий случай подыскать альтернативу.&lt;br /&gt;
Итак, небольшое сравнение бесплатных аккаунтов некоторых SVN-хостингов.&lt;br /&gt;
&lt;table class=&quot;grid&quot;&gt;&lt;tr&gt;   &lt;th&gt;Хостер&lt;/th&gt;   &lt;td&gt;&lt;a href=&quot;http://www.xp-dev.com/pricing&quot;&gt;XP-Dev.com&lt;/a&gt;&lt;/td&gt;   &lt;td&gt;&lt;a href=&quot;http://beanstalkapp.com/pricing&quot;&gt;Beanstalk&lt;/a&gt;&lt;/td&gt;   &lt;td&gt;&lt;a href=&quot;http://unfuddle.com/accounts/plans&quot;&gt;unfuddle&lt;/a&gt;&lt;/td&gt;   &lt;td&gt;&lt;a href=&quot;https://www.projectlocker.com/signup/startup&quot;&gt;ProjectLocker&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;   &lt;th&gt;Пространство&lt;/th&gt;   &lt;td&gt;200M&lt;/td&gt;   &lt;td&gt;100M&lt;/td&gt;   &lt;td&gt;200M&lt;/td&gt;   &lt;td&gt;500M&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;   &lt;th&gt;Репозиториев&lt;/th&gt;   &lt;td&gt;?&lt;/td&gt;   &lt;td&gt;1&lt;/td&gt;   &lt;td&gt;unlim&lt;/td&gt;   &lt;td&gt;unlim&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;   &lt;th&gt;Пользователей&lt;/th&gt;   &lt;td&gt;unlim&lt;/td&gt;   &lt;td&gt;3&lt;/td&gt;   &lt;td&gt;2&lt;/td&gt;   &lt;td&gt;5&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;   &lt;th&gt;Проектов&lt;/th&gt;   &lt;td&gt;2&lt;/td&gt;   &lt;td&gt;?&lt;/td&gt;   &lt;td&gt;1&lt;/td&gt;   &lt;td&gt;unlim&lt;/td&gt; &lt;/tr&gt;
&lt;/table&gt;Кроме цифр есть такой немаловажный фактор, как удобство пользования. А оно у XP-Dev.com в последнее время оставляет желать лучшего. Вообщем лидер есть, надо будет попробовать...</content><link rel='replies' type='application/atom+xml' href='http://jq11.blogspot.com/feeds/3394227154104036075/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jq11.blogspot.com/2009/09/svn.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/3394227154104036075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/3394227154104036075'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/2009/09/svn.html' title='Бесплатный  SVN хостинг для личных проектов'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4335322278857984660.post-7490149374019444253</id><published>2009-09-20T14:19:00.008+03:00</published><updated>2009-09-22T02:00:42.539+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="symfony"/><title type='text'>get_partial &amp; task в symfony</title><content type='html'>Есть проект на &lt;a href=&quot;http://www.symfony-project.org/&quot;&gt;symfony&lt;/a&gt;.&lt;br /&gt;
Имеется &lt;a href=&quot;http://www.symfony-project.org/book/1_2/16-Application-Management-Tools#chapter_16_sub_custom_tasks_new_in_symfony_1_1&quot;&gt;консольная задача&lt;/a&gt; в которой необходимо выполнять рассылку писем.&lt;br /&gt;
Тело письма создаётся через &lt;a href=&quot;http://www.symfony-project.org/api/1_2/PartialHelper#method_get_partial&quot;&gt;get_partial&lt;/a&gt;.&lt;br /&gt;
В шаблоне письма есть &lt;a href=&quot;http://www.symfony-project.org/api/1_2/UrlHelper#method_link_to&quot;&gt;link_to&lt;/a&gt; и/или &lt;a href=&quot;http://www.symfony-project.org/api/1_2/UrlHelper#method_url_for&quot;&gt;url_for&lt;/a&gt;.&lt;br /&gt;
Проблема в том, что роутер не может создать правилый URL, т.к. приложение выполняется вне web-окружения и вместо нормальных ссылок получаем что-то типа &lt;u&gt;http://symfony/symfony/post/2009&lt;/u&gt;.&lt;br /&gt;
Я выкрутился следующим способом&lt;br /&gt;
&lt;pre class=&quot;brush:php&quot;&gt;$_SERVER[&#39;HTTP_HOST&#39;] = &#39;myhost&#39;;
$_SERVER[&#39;SCRIPT_NAME&#39;] = &#39;/index.php&#39;;
$configuration = ProjectConfiguration::getApplicationConfiguration(&#39;frontend&#39;, &#39;prod&#39;, false);
$context = sfContext::createInstance($configuration);
$configuration-&amp;gt;loadHelpers(&#39;Partial&#39;);
$body = get_partial(&#39;post/mail_notify&#39;, array(&#39;myvar&#39; =&amp;gt; $myval));&lt;/pre&gt;Обратите внимание на параметр &#39;&lt;b&gt;prod&lt;/b&gt;&#39;. Это необходимо для того что бы роутер смог выкинуть /index.php из URL&#39;а (если generate_shortest_url=true в factories.yml)</content><link rel='replies' type='application/atom+xml' href='http://jq11.blogspot.com/feeds/7490149374019444253/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jq11.blogspot.com/2009/09/getpartial-tasks-symfony.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/7490149374019444253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/7490149374019444253'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/2009/09/getpartial-tasks-symfony.html' title='get_partial &amp; task в symfony'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4335322278857984660.post-4315784583271056556</id><published>2009-09-19T16:55:00.023+03:00</published><updated>2009-09-22T01:59:35.591+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="html"/><title type='text'>Якоря</title><content type='html'>Почему-то большинство разработчиков для создания якорей используют конструкцию вида&lt;br /&gt;
&lt;pre class=&quot;brush:html&quot;&gt;&amp;lt;h2&amp;gt;
  &amp;lt;a name=&amp;quot;section1&amp;quot;&amp;gt;Section 1&amp;lt;/a&amp;gt;
&amp;lt;/h2&amp;gt;&lt;/pre&gt;Хотя якорем может быть любой элемент с атрибутом &lt;b&gt;id&lt;/b&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:html&quot;&gt;&amp;lt;h2 id=&quot;section1&quot;&amp;gt;Section 1&amp;lt;/h2&amp;gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://jq11.blogspot.com/feeds/4315784583271056556/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jq11.blogspot.com/2009/09/tttttttttt.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/4315784583271056556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4335322278857984660/posts/default/4315784583271056556'/><link rel='alternate' type='text/html' href='http://jq11.blogspot.com/2009/09/tttttttttt.html' title='Якоря'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>