<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUQMRHo-cSp7ImA9WhRUFUs.&quot;"><id>tag:blogger.com,1999:blog-37345659</id><updated>2012-01-26T11:36:25.459+04:00</updated><category term="sfWidget" /><category term="gedit" /><category term="git" /><category term="php" /><category term="Mysql" /><category term="layout" /><category term="ssh" /><category term="sfFilter" /><category term="symfony" /><category term="Propel" /><category term="ubuntu" /><category term="algorithm" /><category term="Oracle" /><category term="konwert" /><category term="ntp" /><category term="sed" /><category term="sqplus" /><category term="gnome" /><title>Заметки разработчика</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://broderix.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/web-development-notes" /><feedburner:info uri="web-development-notes" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DUENRXw7fSp7ImA9WhRUFEQ.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-8686841722591876081</id><published>2012-01-25T17:21:00.001+04:00</published><updated>2012-01-25T17:21:34.205+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-25T17:21:34.205+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="algorithm" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Простой алгоритм случайной выборки с учетом веса</title><content type="html">Часто необходимо обращаться к одной и той же задаче:&lt;br /&gt;
&lt;b&gt;"случайная выборка с учетом веса"&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Чтобы не забыть вот кратное описание взятое &lt;a href="http://blog.dotzero.ru/post/4337902522/weighted-random-simple"&gt;отсюда&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Простой алгоритм случайной выборки с учетом веса&lt;/h2&gt;&lt;br /&gt;
В общем виде этот алгоритм можно описать так:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Выбрать случайное число между еденицей и суммой “весов” всех элементов&lt;br /&gt;
&lt;li&gt;Спускаться по списку элементов добавляя к счетчику вес текущего элемента&lt;/dd&gt;&lt;br /&gt;
&lt;li&gt;Проверить, если счетчик (шаг №2) больше или равен случайному числу (шаг №1), то закончить&lt;br /&gt;
&lt;li&gt;цикл и вернуть текущий элемент. В противном случае перейдите к шагу №2.&lt;br /&gt;
&lt;/ol&gt;&lt;pre class="prettyprint"&gt;/**
 * Выборка случайного элемента с учетом веса
 *
 * @param array $values индексный массив элементов
 * @param array $weights индексный массив соответствующих весов
 * @return mixed выбранный элемент
 */
function weighted_random_simple ( $values, $weights )
{
    $total = array_sum( $weights );
    $n = 0;
 
    $num = mt_rand( 1, $total );
 
    foreach ( $values as $i =&gt; $value )
    {
        $n += $weights[$i];
 
        if ( $n &gt;= $num )
        {
            return $values[$i];
        }
    }
}

$values = array('A', 'B', 'C');
$weights = array(3, 7, 10);
echo weighted_random_simple($values, $weights);
&lt;/pre&gt;&lt;h2&gt;Алгоритм случайной выборки из тысяч элементов&lt;/h2&gt;Алгоритм может быть расширен, чтобы сделать его значительно быстрее. Вместо вычисления общего веса (шаг №1) и счетчика (шаг №2) каждый раз, можно сделать это один раз и сохранить значения счетчиков в массиве. Тогда мы сможем использовать бинарный поиск, чтобы быстро выбрать правильный элемент. Ниже приведен модифицированный вариант скрипта:  &lt;pre class="prettyprint"&gt;/**
 * Случайно выбирает один из элементов на основе их веса. 
 * Оптимизирован для большого числа элементов.
 *
 * @param array $values индексный массив элементов
 * @param array $weights индексный массив соответствующих весов
 * @param array $lookup отсортированный массив для поиска
 * @param int $total_weight сумма всех весов
 * @return mixed выбранный элемент
 */
function weighted_random($values, $weights, $lookup = null, $total_weight = null)
{
    if ($lookup == null OR $total_weight == null) 
    {
        list($lookup, $total_weight) = calc_lookups($values, $weights);
    }
 
    $r = mt_rand(1, $total_weight);
         
    return $values[binary_search($r, $lookup)];
}
 
/**
 * Создание массива используемого в бинарном поиске
 *
 * @param array $values 
 * @param array $weights
 * @return array
 */
function calc_lookups($values, $weights)
{
    $lookup = array();
    $total_weight = 0;
         
    for ($i=0; $i &lt; count($weights); $i++)
    {
        $total_weight += $weights[$i];
        $lookup[$i] = $total_weight;
    }
     
    return array($lookup, $total_weight);
}
 
/**
 * Ищет в массиве элемент по номеру и возвращает элемент если он найден.
 * В противном случае возвращает позицию, где он должен быть вставлен, 
 * или count($haystack)-1, если $needle больше чем любой элемент в массиве.
 *
 * @param int $needle
 * @param array $haystack
 * @return int
 */
function binary_search($needle, $haystack)
{
    $high = count($haystack) - 1;
    $low = 0;
 
    while ( $low &lt; $high )
    {
        $probe = (int)(($high + $low) / 2);
 
        if ($haystack[$probe] &lt; $needle)
        {
            $low = $probe + 1;
        } 
        elseif ($haystack[$probe] &gt; $needle) 
        {
            $high = $probe - 1;
        } 
        else
        {
            return $probe;
        }
    }
 
    if ( $low != $high )
    {
        return $probe;
    } 
    else
    {
        return ($haystack[$low] &gt;= $needle) ? $low : $low + 1;
    }
}

// Рассчет массивов (1 раз)
list($lookup, $total_weight) = calc_lookups($values, $weights);
//....
// Каждый раз когда вам необходимо выбрать случайный элемент:
$val = weighted_random($values, $weights, $lookup, $total_weight);
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-8686841722591876081?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YtFsoLKZsvv9H139RB_-fkZsidE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YtFsoLKZsvv9H139RB_-fkZsidE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YtFsoLKZsvv9H139RB_-fkZsidE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YtFsoLKZsvv9H139RB_-fkZsidE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/8686841722591876081/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=8686841722591876081" title="Комментарии: 2" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/8686841722591876081?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/8686841722591876081?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/Ujf008y4WZM/blog-post.html" title="Простой алгоритм случайной выборки с учетом веса" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://broderix.blogspot.com/2012/01/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUFQH87fSp7ImA9WhRTEk8.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-6348349629507162866</id><published>2011-10-31T13:45:00.002+04:00</published><updated>2011-11-02T12:56:51.105+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-02T12:56:51.105+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="git" /><title>Основы работы с git</title><content type="html">Основной и полноценный документ &lt;a href="http://githowto.com/"&gt;http://githowto.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
забрать код&lt;br /&gt;
git clone git@github.com:companyname/projectname.git&lt;br /&gt;
&lt;br /&gt;
если&lt;br /&gt;
&lt;blockquote&gt;Cloning into mambaandroid...&lt;br /&gt;
Permission denied (publickey).&lt;br /&gt;
fatal: The remote end hung up unexpectedly&lt;/blockquote&gt;то &lt;br /&gt;
ssh-keygen -t rsa -C "your_email@youremail.com"&lt;br /&gt;
cat ~/.ssh/id_rsa.pub &lt;br /&gt;
и скопировать его в настройки своего аккаунта на гитхабе&lt;br /&gt;
&lt;br /&gt;
тест коннекта&lt;br /&gt;
ssh -T git@github.com&lt;br /&gt;
&lt;br /&gt;
иногда надо добавить идентит&lt;br /&gt;
ssh-add ~/.ssh/id_rsa&lt;br /&gt;
&lt;br /&gt;
список бранчей&lt;br /&gt;
git branch -a&lt;br /&gt;
&lt;br /&gt;
переключиться в бранч&lt;br /&gt;
git checkout version-0.8&lt;br /&gt;
&lt;br /&gt;
если вставить этот код в конец своего .bashrc&lt;br /&gt;
PS1="\[\033[38m\]\u@\h\[\033[01;34m\] \w \[\033[31m\]\`ruby -e \"print (%x{git branch 2&gt; /dev/null}.grep(/^\*/).first || '').gsub(/^\* (.+)$/, '(\1) ')\"\`\[\033[35m\]$\[\033[00m\] "&lt;br /&gt;
&lt;br /&gt;
то будет подсвечиваться текущий бранч прямо в консоли&lt;br /&gt;
&lt;br /&gt;
забрать все новое с удаленного репа и попытаться авто-смерджить с текущим состоянием&lt;br /&gt;
git pull origin version-0.8&lt;br /&gt;
&lt;br /&gt;
добавить все данные в локальной копии и зафиксировать&lt;br /&gt;
git add .&lt;br /&gt;
git commit -m 'desc' &lt;br /&gt;
или&lt;br /&gt;
git commit -a -m 'desc' &lt;br /&gt;
&lt;br /&gt;
пушнуть в удаленный реп&lt;br /&gt;
git push origin version-0.8&lt;br /&gt;
&lt;br /&gt;
отменить локальные изменения (svn revert)&lt;br /&gt;
сбросить все&lt;br /&gt;
git reset --hard HEAD&lt;br /&gt;
&lt;br /&gt;
только определенный файл&lt;br /&gt;
git checkout -- hello.rb&lt;br /&gt;
git checkout HEAD hello.rb&lt;br /&gt;
&lt;br /&gt;
ревертнуть последний коммит&lt;br /&gt;
git revert HEAD&lt;br /&gt;
&lt;br /&gt;
еще примеры &lt;a href="http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html"&gt;здесь&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
смерджить код из обного бранча в другой&lt;br /&gt;
git checkout version-0.9&lt;br /&gt;
git pull origin version-0.9&lt;br /&gt;
git merge version-0.8&lt;br /&gt;
git log&lt;br /&gt;
git push origin version-0.9&lt;br /&gt;
&lt;br /&gt;
смерджить код в мастер и навесить таг&lt;br /&gt;
git checkout master&lt;br /&gt;
git merge version-0.8&lt;br /&gt;
git tag -a version-0.8.1-release -m "0.8.1 фикс-версия"&lt;br /&gt;
git push --tags origin master&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-6348349629507162866?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wcFFSmPGuXKFKZp6uhpcmcCGhLk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wcFFSmPGuXKFKZp6uhpcmcCGhLk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wcFFSmPGuXKFKZp6uhpcmcCGhLk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wcFFSmPGuXKFKZp6uhpcmcCGhLk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/6348349629507162866/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=6348349629507162866" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/6348349629507162866?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/6348349629507162866?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/oqxcmBftiQE/git.html" title="Основы работы с git" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2011/10/git.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04AR3o4cCp7ImA9WhZTFEg.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-5993843242355425347</id><published>2011-02-10T16:31:00.013+03:00</published><updated>2011-03-18T16:45:46.438+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-18T16:45:46.438+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Как на самом деле работает присваивание и передача по ссылке объектов в php5</title><content type="html">Как-то давно, когда только появился php5, я думал, что разобрался с ООП, а именно с присвоением  объектов. Но из-за того, что много времени проводил с java стал под забывать как это работает в php5.&lt;br /&gt;
В штатном режиме, если всегда помнить о том, что в php5 присваивание происходит по ссылке, то нет никаких проблем, пока не используешь знак &amp;.&lt;br /&gt;
http://www.php.net/manual/en/language.oop5.basic.php&lt;br /&gt;
&lt;pre class="brush: php"&gt;&amp;lt;?php
class SimpleClass{}
class SimpleClass
{
    // property declaration
    public $var = 'a default value';

    // method declaration
    public function displayVar() {
        echo $this-&amp;gt;var;
    }
}
?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Но подлинный смысл раскрывается этим комментарием:&lt;br /&gt;
&lt;a href="http://www.php.net/manual/en/language.oop5.basic.php#79856"&gt;http://www.php.net/manual/en/language.oop5.basic.php#79856&lt;/a&gt;&lt;br /&gt;
Я позволил себе его вольно перевести:&lt;br /&gt;
В php необходимо думать о переменных как о ячейках памяти. У каждой переменной если имя, которое ссылается на ячейку памяти(переменную), где хранится значение простого типа: число, строка, массив, и т.д. Когда вы создаете ссылку(&amp;), вы создаете второе имя, которое ссылается на ту же саму ячейку памяти. Когда вы присваиваете одну переменную другой, вы копируете содержимое  ячейки памяти в другую ячейку памяти.&lt;br /&gt;
Но присваивание экземпляров классов(далее объект) происходит не так как присваивание простых типов. Объекты не хранятся в ячейках памяти, которые программист "видит" на прямую. Вместо этого в ячейке памяти хранится указатель на объект. Таким образом указатель ведет себя как примитивный тип.&lt;br /&gt;
Когда вы присваиваете значение ссылки объекта одной переменной другой, обе переменные могут менять состояние одного и того же объекта. Но переменные не являются ссылками на объект, т.к. если присвоить одной из переменных новое значение, то это не отразится на другой переменной.&lt;br /&gt;
&lt;pre class="brush: c"&gt;&amp;lt;?php
// Assignment of an object
Class Object{
   public $foo="bar";
};

$objectVar = new Object();
$reference =&amp; $objectVar;
$assignment = $objectVar

//
// $objectVar ---&amp;gt;+-----------+
//                |(указатель1)----+
// $reference ---&amp;gt;+-----------+    |
//                                 |
//                +-----------+    |
// $assignment --&amp;gt;|(указатель2)----+
//                +-----------+    |
//                                 |
//                                 v
//                  Object(1):foo="bar"
//
?&amp;gt;
&lt;/pre&gt;Значение переменной $assignment отличается от $objectVar, но эти значение ссылаются на один и тот же объект. Это поведение делает похожим на механизм передачи по ссылке. Если вы используете переменную $objectVar, чтобы поменять состояние объекта, то эти же изменения появятся и в переменной $assignment, т.к. они указывают на один и тот же объект.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="autoinclude"&gt;&amp;lt;?php
$objectVar-&amp;gt;foo = "qux";
print_r( $objectVar );
print_r( $reference );
print_r( $assignment );

//
// $objectVar ---&amp;gt;+-----------+
//                |(указатель1)----+
// $reference ---&amp;gt;+-----------+    |
//                                 |
//                +-----------+    |
// $assignment --&amp;gt;|(указатель2)----+
//                +-----------+    |
//                                 |
//                                 v
//                  Object(1):foo="qux"
//
?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Но с передачей значения по ссылке (&amp;) дело обстоит совсем иначе. Если вы обнулите $objectVar, вы замените значение указателя в ячейке памяти на NULL. Это означает, что $reference, которая ссылается на туже ячейку памяти, также будет NULL. Но $assignment, которая ссылается на другую ячейку памяти, будет так же хранить копию указателя на объект, и она не будет равна NULL.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;&amp;lt;?php
$objectVar = null;
print_r($objectVar);
print_r($reference);
print_r($assignment);

//
// $objectVar ---&amp;gt;+-----------+
//                |  NULL     | 
// $reference ---&amp;gt;+-----------+
//                           
//                +-----------+
// $assignment --&amp;gt;|(указатель2)----+
//                +-----------+    |
//                                 |
//                                 v
//                  Object(1):foo="qux"
?&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
К примеру, если взять java, где все переменные если ссылки на объекты, тот же пример выполняется так как и в php5 без символа &amp;:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;import java.util.*;

class ObjectReference {
    public static void main(String[] args) {
        class Obj {
            int var = 1;
        }
        
        Obj objectVar = new Obj();
        Obj reference = objectVar;
        objectVar.var = 2;
        System.out.println("objectVar.var="+objectVar.var);
        System.out.println("reference.var="+reference.var);
        
        objectVar = null;
        
        if (reference == null) {
            System.out.println("reference is null");
        } else {
            System.out.println("reference is not null");
        }
    }
}
&lt;/pre&gt;ответ:&lt;br /&gt;
&lt;pre&gt;objectVar.var=2
reference.var=2
reference is not null
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-5993843242355425347?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/svIniGIHbkEyTiUil5R4bAZ6ey8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/svIniGIHbkEyTiUil5R4bAZ6ey8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/svIniGIHbkEyTiUil5R4bAZ6ey8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/svIniGIHbkEyTiUil5R4bAZ6ey8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/5993843242355425347/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=5993843242355425347" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/5993843242355425347?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/5993843242355425347?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/eLXTQYZfeqg/php5.html" title="Как на самом деле работает присваивание и передача по ссылке объектов в php5" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2011/02/php5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcEQX46eCp7ImA9Wx9QEUQ.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-8053165341646721356</id><published>2010-12-24T16:23:00.002+03:00</published><updated>2010-12-24T16:23:20.010+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-24T16:23:20.010+03:00</app:edited><title>А как умеет ваш язык это делать?</title><content type="html">Результат будет одинаковый:&lt;br /&gt;
about_logo&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;python -c 'import re;s="http://www.google.ru/intl/ru/images/about_logo.gif"; m = re.match(".*\/(.*)\.gif$",s); print m.group(1)'
&lt;/pre&gt;&lt;pre&gt;perl -e '$e="http://www.google.ru/intl/ru/images/about_logo.gif"; $e =~ /.*\/(.*)\.gif$/i; print $1."\n";'
&lt;/pre&gt;&lt;pre&gt;php -r '$e="http://www.google.ru/intl/ru/images/about_logo.gif"; $pat = "/.*\/(.*)\.gif$/"; preg_match($pat,$e,$m);print $m[1]."\n";'
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-8053165341646721356?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EBRTWrEELyaEWWyIEyodlmv1jDE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EBRTWrEELyaEWWyIEyodlmv1jDE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EBRTWrEELyaEWWyIEyodlmv1jDE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EBRTWrEELyaEWWyIEyodlmv1jDE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/8053165341646721356/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=8053165341646721356" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/8053165341646721356?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/8053165341646721356?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/dyjgyuLYXpg/blog-post.html" title="А как умеет ваш язык это делать?" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://broderix.blogspot.com/2010/12/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AFQ389fip7ImA9Wx9QFU4.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-1560161121019455539</id><published>2010-11-11T19:31:00.002+03:00</published><updated>2010-12-28T13:21:52.166+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-28T13:21:52.166+03:00</app:edited><title>Глобальная переменная $_REQUEST в php</title><content type="html">Заметил интересное поведение в глобальной переменной&lt;br /&gt;
$_REQUEST в php, похоже она создается по запросу&lt;br /&gt;
&lt;pre class="pretty-print"&gt;~$ php -r 'echo (int)isset($GLOBALS["_REQUEST"])."\n";'
&lt;/pre&gt;&lt;br /&gt;
ответ 0, но если&lt;br /&gt;
&lt;pre class="pretty-print"&gt;~$ php -r '$_REQUEST;echo (int)isset($GLOBALS["_REQUEST"])."\n";'
&lt;/pre&gt;&lt;br /&gt;
ответ уже 1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-1560161121019455539?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/98kwWWz8WyKkYwSkLXaVK3S944k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/98kwWWz8WyKkYwSkLXaVK3S944k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/98kwWWz8WyKkYwSkLXaVK3S944k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/98kwWWz8WyKkYwSkLXaVK3S944k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/1560161121019455539/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=1560161121019455539" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1560161121019455539?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1560161121019455539?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/p4Wae0eXQrg/request-php.html" title="Глобальная переменная $_REQUEST в php" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2010/11/request-php.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EER3g4cCp7ImA9Wx5QEUU.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-4023931087488618817</id><published>2010-08-30T21:20:00.003+04:00</published><updated>2010-08-30T21:33:26.638+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-30T21:33:26.638+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mysql" /><title>Mysql ERROR 1005 (HY000): Can't create table (errno: 150)</title><content type="html">Уже который раз спотыкаюсь об одни и те же грабли, решил записать.&lt;br /&gt;&lt;br /&gt;т.е. после создания таблиц:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;CREATE TABLE sf_guard_user &lt;br /&gt;(&lt;br /&gt; id BIGINT AUTO_INCREMENT, &lt;br /&gt; first_name VARCHAR(255), &lt;br /&gt; last_name VARCHAR(255), &lt;br /&gt; email_address VARCHAR(255) NOT NULL UNIQUE, &lt;br /&gt; username VARCHAR(128) NOT NULL UNIQUE, &lt;br /&gt; algorithm VARCHAR(128) DEFAULT 'sha1' NOT NULL, &lt;br /&gt; salt VARCHAR(128), password VARCHAR(128), &lt;br /&gt; is_active TINYINT(1) DEFAULT '1', &lt;br /&gt; is_super_admin TINYINT(1) DEFAULT '0', &lt;br /&gt; last_login DATETIME, created_at DATETIME NOT NULL, &lt;br /&gt; updated_at DATETIME NOT NULL, &lt;br /&gt; INDEX is_active_idx_idx (is_active), &lt;br /&gt; PRIMARY KEY(id)&lt;br /&gt;)ENGINE = INNODB;&lt;br /&gt;&lt;br /&gt;CREATE TABLE sf_guard_user_profile &lt;br /&gt;(&lt;br /&gt; id BIGINT AUTO_INCREMENT, &lt;br /&gt; user_id BIGINT, first_name VARCHAR(20), &lt;br /&gt; last_name VARCHAR(20),&lt;br /&gt; email VARCHAR(255), &lt;br /&gt; email_hash VARCHAR(255), &lt;br /&gt; INDEX user_id_idx (user_id), &lt;br /&gt; PRIMARY KEY(id)&lt;br /&gt;) ENGINE = INNODB;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;я пытаюсь создать ключи:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ALTER TABLE sf_guard_user_profile &lt;br /&gt;ADD CONSTRAINT sf_guard_user_profile_user_id_sf_guard_user_id &lt;br /&gt; FOREIGN KEY (user_id) &lt;br /&gt;  REFERENCES sf_guard_user(id) &lt;br /&gt;   ON DELETE CASCADE;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;и получаю ошибку ERROR 1005 (HY000): Can't create table (errno: 150)&lt;br /&gt;mysql говорит, что не может найти поле на которое ссылаемся&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql&gt; SHOW ENGINE INNODB STATUS; &lt;br /&gt;...&lt;br /&gt;100830 20:59:41 Error in foreign key constraint of table s1/#sql-477_152:&lt;br /&gt; FOREIGN KEY (user_id) REFERENCES sf_guard_user(id) ON DELETE CASCADE:&lt;br /&gt;Cannot find an index in the referenced table where the&lt;br /&gt;referenced columns appear as the first columns, or column types&lt;br /&gt;in the table and the referenced table do not match for constraint.&lt;br /&gt;Note that the internal storage type of ENUM and SET changed in&lt;br /&gt;tables created with &gt;= InnoDB-4.1.12, and such columns in old tables&lt;br /&gt;cannot be referenced by such columns in new tables.&lt;br /&gt;See http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html&lt;br /&gt;for correct foreign key definition.&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;mysql это не нравится, отсюда и ошибка, хотя пишет что не может найти поле, а оно есть.&lt;br /&gt;Дело оказывается в том, что в symfony при генерации схемы нет проверки на размерность типов для внешних ключей, т.е. если указать разные размерности для ключевых полей, то будет ошибка, т.е. вместо:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sfGuardUserProfile:&lt;br /&gt;  tableName:     sf_guard_user_profile&lt;br /&gt;  columns:&lt;br /&gt;    user_id:          integer(4)&lt;br /&gt;    first_name:       varchar(20)&lt;br /&gt;    last_name:        varchar(20)&lt;br /&gt;    email:            varchar(255)&lt;br /&gt;    email_hash:       varchar(255)&lt;br /&gt;  relations:&lt;br /&gt;    Users:&lt;br /&gt;      class: sfGuardUser&lt;br /&gt;      refClass: sfGuardUserGroup&lt;br /&gt;      local: group_id&lt;br /&gt;      foreign: user_id&lt;br /&gt;      foreignAlias: Groups&lt;br /&gt;    sfGuardUser:&lt;br /&gt;      type: one&lt;br /&gt;      foreignType: one&lt;br /&gt;      class: sfGuardUser&lt;br /&gt;      local: user_id&lt;br /&gt;      foreign: id&lt;br /&gt;      onDelete: cascade&lt;br /&gt;      foreignAlias: Profile&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;надо :&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sfGuardUserProfile:&lt;br /&gt;  tableName:     sf_guard_user_profile&lt;br /&gt;  columns:&lt;br /&gt;    user_id:          integer&lt;br /&gt;    first_name:       varchar(20)&lt;br /&gt;    last_name:        varchar(20)&lt;br /&gt;    email:            varchar(255)&lt;br /&gt;    email_hash:       varchar(255)&lt;br /&gt;  relations:&lt;br /&gt;    Users:&lt;br /&gt;      class: sfGuardUser&lt;br /&gt;      refClass: sfGuardUserGroup&lt;br /&gt;      local: group_id&lt;br /&gt;      foreign: user_id&lt;br /&gt;      foreignAlias: Groups&lt;br /&gt;    sfGuardUser:&lt;br /&gt;      type: one&lt;br /&gt;      foreignType: one&lt;br /&gt;      class: sfGuardUser&lt;br /&gt;      local: user_id&lt;br /&gt;      foreign: id&lt;br /&gt;      onDelete: cascade&lt;br /&gt;      foreignAlias: Profile&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;а именно поле user_id должно быть таким же как в у sfGuardUser&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-4023931087488618817?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-y3GD0th9UA9pxF3mEOSinutJsc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-y3GD0th9UA9pxF3mEOSinutJsc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-y3GD0th9UA9pxF3mEOSinutJsc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-y3GD0th9UA9pxF3mEOSinutJsc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/4023931087488618817/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=4023931087488618817" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4023931087488618817?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4023931087488618817?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/FFN7NcdNnNo/mysql-error-1005-hy000-cant-create.html" title="Mysql ERROR 1005 (HY000): Can't create table (errno: 150)" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://broderix.blogspot.com/2010/08/mysql-error-1005-hy000-cant-create.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkACSX89eSp7ImA9Wx5QEUU.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-5325147538050413421</id><published>2010-06-02T17:14:00.006+04:00</published><updated>2010-08-30T21:19:28.161+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-30T21:19:28.161+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="gnome" /><title>Как сделать слайд-шоу для рабочего стола gnome</title><content type="html">В ubuntu 9.10 появились обой рабочего стола в виде слайд-шоу&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_67GcH7V6PNQ/TAZZ7GAl1YI/AAAAAAAAJiU/KJRZHkUmTu8/s1600/ubuntu10_04_gnome_slideshow.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 244px;" src="http://2.bp.blogspot.com/_67GcH7V6PNQ/TAZZ7GAl1YI/AAAAAAAAJiU/KJRZHkUmTu8/s320/ubuntu10_04_gnome_slideshow.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5478164868503033218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;его пример лежит в папке&lt;br /&gt;/usr/share/backgrounds/cosmos/background-1.xml&lt;br /&gt;&lt;br /&gt;Это простой xml файл с простыми инструкциями.&lt;br /&gt;Его можно создать вручную, схема довольно проста.&lt;br /&gt;Но можно использовать этот скрипт:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;$staticDuration = "300.0";#1795.0&lt;br /&gt;$transitionDuration = "5.0";#5.0&lt;br /&gt;&lt;br /&gt;print &amp;lt;&amp;lt;"TBEGIN";&lt;br /&gt;&amp;lt;background&amp;gt;&lt;br /&gt;  &amp;lt;starttime&amp;gt;&lt;br /&gt;    &amp;lt;year&amp;gt;2009&amp;lt;/year&amp;gt;&lt;br /&gt;    &amp;lt;month&amp;gt;08&amp;lt;/month&amp;gt;&lt;br /&gt;    &amp;lt;day&amp;gt;04&amp;lt;/day&amp;gt;&lt;br /&gt;    &amp;lt;hour&amp;gt;00&amp;lt;/hour&amp;gt;&lt;br /&gt;    &amp;lt;minute&amp;gt;00&amp;lt;/minute&amp;gt;&lt;br /&gt;    &amp;lt;second&amp;gt;00&amp;lt;/second&amp;gt;&lt;br /&gt;  &amp;lt;/starttime&amp;gt;&lt;br /&gt;TBEGIN&lt;br /&gt;&lt;br /&gt;$pwd = `pwd`;&lt;br /&gt;$pwd =~ s/[\n]//;&lt;br /&gt;$isStart = 0;&lt;br /&gt;opendir(DIR,".");&lt;br /&gt;while ($name = readdir(DIR)) {&lt;br /&gt;if($name =~ /jpg|png/){&lt;br /&gt;    if($isStart){&lt;br /&gt;            $pathLast = $pwd."/".$lastName;&lt;br /&gt;            $pathCurr = $pwd."/".$name;&lt;br /&gt;            print &amp;lt;&amp;lt;"Tname";&lt;br /&gt;&amp;lt;static&amp;gt;&lt;br /&gt;  &amp;lt;duration&amp;gt;1795.0&amp;lt;/duration&amp;gt;&lt;br /&gt;    &amp;lt;file&amp;gt;$pathLast&amp;lt;/file&amp;gt;&lt;br /&gt;  &amp;lt;/static&amp;gt;&lt;br /&gt;  &amp;lt;transition&amp;gt;&lt;br /&gt;    &amp;lt;duration&amp;gt;5.0&amp;lt;/duration&amp;gt;&lt;br /&gt;    &amp;lt;from&amp;gt;$pathLast&amp;lt;/from&amp;gt;&lt;br /&gt;    &amp;lt;to&amp;gt;$pathCurr&amp;lt;/to&amp;gt;&lt;br /&gt;&amp;lt;/transition&amp;gt;&lt;br /&gt;Tname&lt;br /&gt;    } else {&lt;br /&gt;        $pathFirst = $pwd."/".$name;&lt;br /&gt;    }&lt;br /&gt;    $lastName = $name;&lt;br /&gt;    $isStart = 1;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;closedir(DIR);&lt;br /&gt;&lt;br /&gt;print &amp;lt;&amp;lt;"TEND"&lt;br /&gt;&amp;lt;static&amp;gt;&lt;br /&gt;  &amp;lt;duration&amp;gt;1795.0&amp;lt;/duration&amp;gt;&lt;br /&gt;    &amp;lt;file&amp;gt;$pathCurr&amp;lt;/file&amp;gt;&lt;br /&gt;  &amp;lt;/static&amp;gt;&lt;br /&gt;  &amp;lt;transition&amp;gt;&lt;br /&gt;    &amp;lt;duration&amp;gt;5.0&amp;lt;/duration&amp;gt;&lt;br /&gt;    &amp;lt;from&amp;gt;$pathCurr&amp;lt;/from&amp;gt;&lt;br /&gt;    &amp;lt;to&amp;gt;$pathFirst&amp;lt;/to&amp;gt;&lt;br /&gt;&amp;lt;/transition&amp;gt;&lt;br /&gt;&amp;lt;/background&amp;gt;&lt;br /&gt;TEND&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;создайте текстовый файл gen.pl с этим кодом и положите в папку с фотографиями.&lt;br /&gt;выполните команду:&lt;br /&gt;&lt;pre&gt;perl gen.pl &gt; background-2.xml&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Теперь добавьте этот файл в "Параметры внешнего вида" - "Фон", вуаля.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-5325147538050413421?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WgSGuzR_QDtxaqfvil08_oJqEBI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WgSGuzR_QDtxaqfvil08_oJqEBI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WgSGuzR_QDtxaqfvil08_oJqEBI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WgSGuzR_QDtxaqfvil08_oJqEBI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/5325147538050413421/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=5325147538050413421" title="Комментарии: 2" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/5325147538050413421?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/5325147538050413421?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/L1l3tEqwxlg/gnome.html" title="Как сделать слайд-шоу для рабочего стола gnome" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_67GcH7V6PNQ/TAZZ7GAl1YI/AAAAAAAAJiU/KJRZHkUmTu8/s72-c/ubuntu10_04_gnome_slideshow.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://broderix.blogspot.com/2010/06/gnome.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEFRng9fyp7ImA9WxFXEUU.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-5637087559929205831</id><published>2010-05-18T16:58:00.002+04:00</published><updated>2010-05-18T17:16:57.667+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-18T17:16:57.667+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gedit" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Плагин по regexp для gedit</title><content type="html">Потребовался инструмент для мелкого редактирования текста с использованием regexp&lt;br /&gt;То что может стандартный gedit уже не хватает, такие вещи как замена теста с использованием спец-символов таких как отступ(\t), конец строки(\n) решаются довольно просто, но дальше уже сложно.&lt;br /&gt;Есть такой &lt;a href="http://students.olin.edu/2010/bfisher/blog/geditplugin/regex_replace.tar.gz"&gt;плагин&lt;/a&gt; в &lt;a href="http://halfhourhacks.blogspot.com/2008/03/gedit-regular-expression-plugin.html"&gt;одном блоге&lt;/a&gt; описано как его  поставить&lt;br /&gt;Я повторюсь, его нужно &lt;a href="http://students.olin.edu/2010/bfisher/blog/geditplugin/regex_replace.tar.gz"&gt;скачать&lt;/a&gt; и распаковать в папку ~/.gnome2/gedit/plugins/&lt;br /&gt;Создать если не существует.&lt;br /&gt;Теперь можно использовать такие конструкции как поиск функции название которой вы точно не помните, например ищете Что_то_тамSave&lt;br /&gt;function\s+.*Save.*&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-5637087559929205831?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BZHvqEeKo_s11px9mOZTJ7Bn84c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BZHvqEeKo_s11px9mOZTJ7Bn84c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BZHvqEeKo_s11px9mOZTJ7Bn84c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BZHvqEeKo_s11px9mOZTJ7Bn84c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/5637087559929205831/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=5637087559929205831" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/5637087559929205831?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/5637087559929205831?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/Q44l6yoEgmE/regexp-gedit.html" title="Плагин по regexp для gedit" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2010/05/regexp-gedit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8GSXk7eCp7ImA9WxFSF0k.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-7295350736335706292</id><published>2010-04-20T10:50:00.003+04:00</published><updated>2010-04-20T11:17:08.700+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-20T11:17:08.700+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ntp" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Настройка времени под linux</title><content type="html">Самый простой способ:&lt;br /&gt;&lt;pre&gt;sudo ntpdate 0.ru.pool.ntp.org&lt;/pre&gt;&lt;br /&gt;Список всех серверов:&lt;br /&gt;&lt;pre&gt;0.ru.pool.ntp.org&lt;br /&gt;1.ru.pool.ntp.org&lt;br /&gt;2.ru.pool.ntp.org&lt;br /&gt;3.ru.pool.ntp.org&lt;/pre&gt;&lt;br /&gt;Теперь по порядку:&lt;br /&gt;&lt;h2&gt;1.Установить часовой пояс&lt;/h2&gt;&lt;br /&gt;&lt;pre&gt;sudo dpkg-reconfigure tzdata&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;2.Синхронизация&lt;/h2&gt;&lt;br /&gt;&lt;pre&gt;ntpdate 0.ru.pool.ntp.org&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;3.Настройка обновления&lt;/h2&gt;&lt;br /&gt;&lt;pre&gt;$ sudo bash&lt;br /&gt;# echo "ntpdate 0.ru.pool.ntp.org" &gt; /etc/cron.daily/ntpdate&lt;br /&gt;# chmod 755 /etc/cron.daily/ntpdate&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-7295350736335706292?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pc06c384cydRNx5T7lknVTiPbmA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pc06c384cydRNx5T7lknVTiPbmA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pc06c384cydRNx5T7lknVTiPbmA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pc06c384cydRNx5T7lknVTiPbmA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/7295350736335706292/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=7295350736335706292" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/7295350736335706292?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/7295350736335706292?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/6i7aSBPuDNY/linux.html" title="Настройка времени под linux" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2010/04/linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYHSXwzfip7ImA9WxJUFks.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-1512399967541427520</id><published>2009-07-15T17:13:00.003+04:00</published><updated>2009-07-15T17:22:18.286+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-15T17:22:18.286+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Полезные заметки по symfony - 2</title><content type="html">Если надо использовать функции из View в Controller, то надо вопользоваться sfLoader&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;class blogActions extends sfActions&lt;br /&gt;{&lt;br /&gt;  public function preExecute(){&lt;br /&gt;   ...&lt;br /&gt;  }&lt;br /&gt;  public function executeRedirect(sfWebRequest $request)&lt;br /&gt;  {&lt;br /&gt;    sfLoader::loadHelpers('Url');&lt;br /&gt;    $this-&gt;redirect(url_for('@archive_blog?id='.$this-&gt;currentBlog-&gt;getId(), 301);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Но лучше использовать внутренние средства, в symfony почти для каждого из составляющих MVC если дублирующие средства:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;class blogActions extends sfActions&lt;br /&gt;{&lt;br /&gt;  public function preExecute(){&lt;br /&gt;   ...&lt;br /&gt;  }&lt;br /&gt;  public function executeRedirect(sfWebRequest $request)&lt;br /&gt;  {&lt;br /&gt;    sfLoader::loadHelpers('Url');&lt;br /&gt;    $this-&gt;redirect(&lt;br /&gt;      $this-&gt;getController()-&gt;genUrl('@archive_blog?id='.$this-&gt;currentBlog-&gt;getId()),&lt;br /&gt;      301&lt;br /&gt;    );&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Исключение составляет вызов action из View, как например в ZendFramework, но в symfony похоже это не трубуется (прим. автора: по крайней мере в моей практике).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-1512399967541427520?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bdvRRe9XtfZ5UeZIAOPueht-OpM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bdvRRe9XtfZ5UeZIAOPueht-OpM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bdvRRe9XtfZ5UeZIAOPueht-OpM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bdvRRe9XtfZ5UeZIAOPueht-OpM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/1512399967541427520/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=1512399967541427520" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1512399967541427520?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1512399967541427520?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/s_alXM0CtSU/symfony-2.html" title="Полезные заметки по symfony - 2" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/07/symfony-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQESXo-cCp7ImA9WxJUEEg.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-908767855766564438</id><published>2009-07-08T16:11:00.008+04:00</published><updated>2009-07-08T16:31:48.458+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-08T16:31:48.458+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="sfWidget" /><title>Как добавить в форму admin генератора ссылку</title><content type="html">К примеру у вас есть backend (admin) и вам нужно поставить ссылку на какой нибудь ресурс. &lt;br /&gt;Для этого нужно создать свой виджет, например, такой:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;class sfWidgetFormHtmlLink extends sfWidgetForm&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  protected function configure($options = array(), $attributes = array())&lt;br /&gt;  {&lt;br /&gt;    $this-&gt;addOption('url', false);&lt;br /&gt;    $this-&gt;addOption('target', 'self');  // self, blank&lt;br /&gt;    $this-&gt;addOption('route', false);&lt;br /&gt;    $this-&gt;addOption('name', true);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public function render($name, $value = null, $attributes = array(), $errors = array())&lt;br /&gt;  {&lt;br /&gt;    if($this-&gt;getOption('route')){&lt;br /&gt;      return link_to(&lt;br /&gt;        $this-&gt;getOption('name'),&lt;br /&gt;        $this-&gt;getOption('route'),&lt;br /&gt;        array('target'=&gt;'_'.$this-&gt;getOption('target'))&lt;br /&gt;      );&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    if($this-&gt;getOption('url')){&lt;br /&gt;      return "&amp;lt;a href='".$this-&gt;getOption('name').&lt;br /&gt;        "' target='_".$this-&gt;getOption('target')."'&amp;gt;".&lt;br /&gt;        $this-&gt;getOption('name')."&amp;lt;/a&amp;gt;";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Теперь его просто использовать:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;class SomeForm extends BaseSomeForm&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  public function configure()&lt;br /&gt;  {&lt;br /&gt;    $this-&gt;setWidget('external_link',new sfWidgetFormHtmlLink(array('url'=&gt;'http://ya.ru','name'=&gt;'Поискать')));&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Меняя метод render можно создать свой виджет по выводу какого-либо html текста и т.д.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-908767855766564438?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UBZNLbeKpvsGmJPeupjEgQku9e8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UBZNLbeKpvsGmJPeupjEgQku9e8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UBZNLbeKpvsGmJPeupjEgQku9e8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UBZNLbeKpvsGmJPeupjEgQku9e8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/908767855766564438/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=908767855766564438" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/908767855766564438?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/908767855766564438?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/Tk7yaUIaXTI/admin.html" title="Как добавить в форму admin генератора ссылку" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/07/admin.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0INQ385eyp7ImA9WxJWEk8.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-5323530814654485108</id><published>2009-06-17T13:01:00.002+04:00</published><updated>2009-06-17T13:06:32.123+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-17T13:06:32.123+04:00</app:edited><title>Полезные заметки по symfony - 1</title><content type="html">Установка meta html данных:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;class SomeObjectActions extends sfActions&lt;br /&gt;{&lt;br /&gt;  public function executeShowObject(sfWebRequest $request){&lt;br /&gt;    ...&lt;br /&gt;    $this-&gt;getResponse()-&gt;setTitle($this-&gt;object-&gt;getMetaTitle());&lt;br /&gt;    $this-&gt;getResponse()-&gt;addMeta('meta_keywords', $this-&gt;object-&gt;getMetaKeywords());&lt;br /&gt;    $this-&gt;getResponse()-&gt;addMeta('meta_description', $this-&gt;object-&gt;getMetaDescription());&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-5323530814654485108?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vF894gl4B3FZbEFwt7jcsyD0tNI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vF894gl4B3FZbEFwt7jcsyD0tNI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vF894gl4B3FZbEFwt7jcsyD0tNI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vF894gl4B3FZbEFwt7jcsyD0tNI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/5323530814654485108/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=5323530814654485108" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/5323530814654485108?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/5323530814654485108?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/uoLSBOHEelk/symfony-1.html" title="Полезные заметки по symfony - 1" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/06/symfony-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYCSHgzfip7ImA9WxJWEk8.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-3237339801534369977</id><published>2009-06-17T11:24:00.003+04:00</published><updated>2009-06-17T11:36:09.686+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-17T11:36:09.686+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Правильное использование sfWidgetFormTextareaTinyMCE</title><content type="html">sfWidgetFormTextareaTinyMCE - это виджет, HTML WYSIWYG editor. Очень удобная вешь, но в &lt;a href="http://www.symfony-project.org/blog/2008/10/18/spice-up-your-forms-with-some-nice-widgets-and-validators"&gt;блоге&lt;/a&gt; symfony очень скудно описан принцип работы, точнее в последней версии возникает ошибка:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;You must pass a "class" attribute for a TinyMCE widget&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Вот, как и какой класс надо указывать:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;    $this-&gt;setWidget('text', new sfWidgetFormTextareaTinyMCE(array(&lt;br /&gt;      'width'  =&gt; 650,&lt;br /&gt;      'height' =&gt; 550,&lt;br /&gt;      'config' =&gt; 'theme_advanced_disable: "anchor,image,cleanup,help"',&lt;br /&gt;    )&lt;br /&gt;    ,array(&lt;br /&gt;   'class' =&gt; 'tinyMCE',&lt;br /&gt;    )&lt;br /&gt;  ));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;в генераторе (если вы используете его в backend) generator.yml укажите class в атрибутах&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;    config:&lt;br /&gt;      actions: ~&lt;br /&gt;      fields:&lt;br /&gt;        text:  { label: 'Текст', attributes: { class: "tinyMCE" } }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;еще обсуждение &lt;a href="http://forum.symfony-project.org/index.php/t/18293/"&gt;здесь&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-3237339801534369977?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/evs0QHRSs_ThZZOfghwFcCgWGQw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/evs0QHRSs_ThZZOfghwFcCgWGQw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/evs0QHRSs_ThZZOfghwFcCgWGQw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/evs0QHRSs_ThZZOfghwFcCgWGQw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/3237339801534369977/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=3237339801534369977" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3237339801534369977?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3237339801534369977?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/dG3z3WITq1E/sfwidgetformtextareatinymce.html" title="Правильное использование sfWidgetFormTextareaTinyMCE" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/06/sfwidgetformtextareatinymce.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQBSHc6fip7ImA9WxFQFUo.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-3857245966501749304</id><published>2009-06-16T14:55:00.004+04:00</published><updated>2010-05-11T13:32:39.916+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-11T13:32:39.916+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mysql" /><title>Как заставить mysql5 использовать нужный вам default-character и collation</title><content type="html">Для начала посмотрите что у вас есть&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;SHOW VARIABLES LIKE 'character_set%';&lt;br /&gt;+--------------------------+----------------------------+&lt;br /&gt;| Variable_name            | Value                      |&lt;br /&gt;+--------------------------+----------------------------+&lt;br /&gt;| character_set_client     | utf8                       | &lt;br /&gt;| character_set_connection | utf8                       | &lt;br /&gt;| character_set_database   | utf8                       | &lt;br /&gt;| character_set_filesystem | binary                     | &lt;br /&gt;| character_set_results    | utf8                       | &lt;br /&gt;| character_set_server     | utf8                       | &lt;br /&gt;| character_set_system     | utf8                       | &lt;br /&gt;| character_sets_dir       | /usr/share/mysql/charsets/ | &lt;br /&gt;+--------------------------+----------------------------+&lt;br /&gt;8 rows in set (0.00 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;По умолчанию Value=latin1&lt;br /&gt;&lt;br /&gt;Теперь вы хотите чтобы все клиенты mysql сразу использовали нужную ва кодировку:&lt;br /&gt;utf8,cp1251 или koi8r&lt;br /&gt;&lt;br /&gt;Нужно добавить в файл my.cnf&lt;br /&gt;/etc/mysql/my.cnf&lt;br /&gt;&lt;br /&gt;Слудущие переменные:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;[client]&lt;br /&gt;default-character-set=utf8&lt;br /&gt;[mysqld]&lt;br /&gt;default-character-set=utf8&lt;br /&gt;default-collation=utf8_general_ci&lt;br /&gt;character-set-server=utf8&lt;br /&gt;init-connect='SET NAMES utf8;'&lt;br /&gt;collation-server=utf8_general_ci&lt;br /&gt;[mysql]&lt;br /&gt;default-character-set=utf8&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;После изменений перезагружайте сервер.&lt;br /&gt;/etc/init.d/mysql restart&lt;br /&gt;&lt;br /&gt;Если не работает еще раз проверьте что у вас происходит:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;SHOW VARIABLES LIKE 'character_set%';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;проверьте кодировку базы данных:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;mysql&gt; show create database yourdatabase;&lt;br /&gt;+-------------+----------------------------------------------------------------------+&lt;br /&gt;| Database    | Create Database                                                      |&lt;br /&gt;+-------------+----------------------------------------------------------------------+&lt;br /&gt;| yourdatabase | CREATE DATABASE `yourdatabase` /*!40100 DEFAULT CHARACTER SET utf8 */ | &lt;br /&gt;+-------------+----------------------------------------------------------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Кодировка по умолчанию для создания таблиц наследуется.&lt;br /&gt;&lt;br /&gt;Можно еще проще для ubuntu (10.04):&lt;br /&gt;создать файл, например /etc/mysql/conf.d/mysqld_charset.cnf&lt;br /&gt;с текстом:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;[mysqld]&lt;br /&gt;default-character-set=utf8&lt;br /&gt;default-collation=utf8_general_ci&lt;br /&gt;character-set-server=utf8&lt;br /&gt;init-connect='SET NAMES utf8;'&lt;br /&gt;collation-server=utf8_general_ci&lt;br /&gt;&lt;br /&gt;[mysql]&lt;br /&gt;default-character-set=utf8&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;и перезапустить mysql&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-3857245966501749304?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fXZSkFmS0tO3NXPFyXIFXIeU-rU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fXZSkFmS0tO3NXPFyXIFXIeU-rU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fXZSkFmS0tO3NXPFyXIFXIeU-rU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fXZSkFmS0tO3NXPFyXIFXIeU-rU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/3857245966501749304/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=3857245966501749304" title="Комментарии: 3" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3857245966501749304?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3857245966501749304?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/WGugnxym9lM/mysql5-default-character-collation.html" title="Как заставить mysql5 использовать нужный вам default-character и collation" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/06/mysql5-default-character-collation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4CQHYzfip7ImA9WxJWEEo.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-643971718967182737</id><published>2009-06-15T17:34:00.001+04:00</published><updated>2009-06-15T17:36:01.886+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-15T17:36:01.886+04:00</app:edited><title>Смена часового пояса в linux</title><content type="html">$ cd /etc; ln -sf /usr/share/zoneinfo/Europe/Moscow localtime&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-643971718967182737?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Gkp4gTaljuJjj0y8jxGuFF065a4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gkp4gTaljuJjj0y8jxGuFF065a4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Gkp4gTaljuJjj0y8jxGuFF065a4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gkp4gTaljuJjj0y8jxGuFF065a4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/643971718967182737/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=643971718967182737" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/643971718967182737?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/643971718967182737?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/gUDFknYIlaI/linux.html" title="Смена часового пояса в linux" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/06/linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIARXkzcSp7ImA9WhZTEkw.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-3986923997191341908</id><published>2009-05-08T16:43:00.004+04:00</published><updated>2011-03-15T20:35:44.789+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-15T20:35:44.789+03:00</app:edited><title>Полезные команды для web-разработчика</title><content type="html">Искать любое упоминание чего-либо в проекте, исключая системные svn файлы:&lt;br /&gt;
&lt;b&gt;grep -Rn &amp;#39;mysql.php&amp;#39; ./ | grep -v svn&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Перенести изменения из одного проекта в другой методом патча:&lt;br /&gt;
&lt;b&gt;project1 $ svn diff &amp;gt; filename.patch&lt;br /&gt;
&lt;/b&gt;&lt;b&gt;project2 $ &lt;/b&gt;&lt;b&gt;patch -p0 -i ../project1/filename.patch&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Собрать файлы в архив по определенному принципу, в данном случае измененные и добавленные файлы: &lt;br /&gt;
&lt;b&gt;perl -e &amp;#39;$res = `svn stat|grep -E &amp;quot;^[AM]&amp;quot;`; $res =~ s/\+|^\w+\s*//gm; $res =~ s/\n/ /g; `tar cfz 1.tgz $res`;&amp;#39;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В буду дальнейшем буду пополнять, есть что то вспомню.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-3986923997191341908?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QzkrWZoPnDoz0Xb8A6O_llKZUG0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QzkrWZoPnDoz0Xb8A6O_llKZUG0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QzkrWZoPnDoz0Xb8A6O_llKZUG0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QzkrWZoPnDoz0Xb8A6O_llKZUG0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/3986923997191341908/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=3986923997191341908" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3986923997191341908?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3986923997191341908?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/dgwXAk5zL4I/web.html" title="Полезные команды для web-разработчика" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/05/web.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcBR3gyeSp7ImA9WxVbEkg.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-32996035933057508</id><published>2009-03-28T17:14:00.003+03:00</published><updated>2009-03-28T17:20:56.691+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-28T17:20:56.691+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Segmentation fault в php5</title><content type="html">Взгляните на этот код:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;class A extends B&lt;br /&gt;{&lt;br /&gt;  public function getA(){&lt;br /&gt;    if($this-&gt;getA()){&lt;br /&gt;      return $this-&gt;getA();&lt;br /&gt;    } else {&lt;br /&gt;      return $this-&gt;getB();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;С первого взгляда все верно. Но выдает:&lt;br /&gt;[Sat Mar 28 17:12:59 2009] [notice] child pid 11239 exit signal Segmentation fault (11)&lt;br /&gt;&lt;br /&gt;Образуется цикл, тогда надо:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;class A extends B&lt;br /&gt;{&lt;br /&gt;  public function getA(){&lt;br /&gt;    if(parent::getA()){&lt;br /&gt;      return parent::getA();&lt;br /&gt;    } else {&lt;br /&gt;      return $this-&gt;getB();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-32996035933057508?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gVMEln7KM3dVY7nhIOtlD9xrWvg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gVMEln7KM3dVY7nhIOtlD9xrWvg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gVMEln7KM3dVY7nhIOtlD9xrWvg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gVMEln7KM3dVY7nhIOtlD9xrWvg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/32996035933057508/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=32996035933057508" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/32996035933057508?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/32996035933057508?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/qwNwD7Y-Pls/segmentation-fault-php5.html" title="Segmentation fault в php5" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/segmentation-fault-php5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQMRXg8cCp7ImA9WxVUGUQ.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-4098507895609117545</id><published>2009-03-25T16:28:00.002+03:00</published><updated>2009-03-25T18:53:04.678+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-25T18:53:04.678+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ssh" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Монтирование(mount) файловой системы по ssh</title><content type="html">sudo apt-get install sshfs&lt;br /&gt;&lt;br /&gt;sudo sshfs -o allow_other username@hostname.ru:/home/usernamedir /home/usermountdir&lt;br /&gt;&lt;br /&gt;Можно создать файл mount.sh и сделать ярлык для запуска на него. Gnome легко определяет что надо ввести пароль для ssh и предлагает сделать это через GUI&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_67GcH7V6PNQ/ScpTPNF93eI/AAAAAAAAFkA/Ys7UmZPoiME/s1600-h/open_ssh.png"&gt;&lt;img style="cursor: pointer; width: 240px; height: 174px;" src="http://2.bp.blogspot.com/_67GcH7V6PNQ/ScpTPNF93eI/AAAAAAAAFkA/Ys7UmZPoiME/s320/open_ssh.png" alt="" id="BLOGGER_PHOTO_ID_5317153830742121954" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-4098507895609117545?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Pm1O1bs16sSNhL4LgCh-K6p9O9o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pm1O1bs16sSNhL4LgCh-K6p9O9o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Pm1O1bs16sSNhL4LgCh-K6p9O9o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Pm1O1bs16sSNhL4LgCh-K6p9O9o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/4098507895609117545/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=4098507895609117545" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4098507895609117545?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4098507895609117545?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/pL6rwVVfyW0/mount-ssh.html" title="Монтирование(mount) файловой системы по ssh" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_67GcH7V6PNQ/ScpTPNF93eI/AAAAAAAAFkA/Ys7UmZPoiME/s72-c/open_ssh.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/mount-ssh.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YGRnY7eyp7ImA9WxVUGUQ.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-1731639332615448193</id><published>2009-03-24T02:11:00.006+03:00</published><updated>2009-03-25T19:38:47.803+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-25T19:38:47.803+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Необходимые компоненты для работы symfony в Ubuntu</title><content type="html">Недавно переставил систему с ubuntu 8.10 x86 на ubuntu 9.04 x86_64 на свой рабочий acer aspire 5720G.&lt;br /&gt;Пришлось настраивать систему заново, но так как я сейчас разрабатываю только под symfony. Настраивал работу системы как раз для симфони, поэтому можно рассматривать этот пост как &lt;span style="font-weight: bold;"&gt;Необходимые компоненты для работы symfony в Ubuntu&lt;/span&gt;.&lt;br /&gt;Поставим apache и php5.&lt;br /&gt;&lt;span class="prettyprint"&gt;&lt;br /&gt;sudo apt-get install apache2 php5-mysql libapache2-mod-php5 php5-common mysql-server mysql-common mysql-client-5.0 php5-cli php5-xsl&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Устанавливаем кодировку по умолчанию для mysql:&lt;br /&gt;&lt;span class="prettyprint"&gt;&lt;br /&gt;sudo mcedit /etc/mysql/my.cnf&lt;br /&gt;или&lt;br /&gt;sudo nano /etc/mysql/my.cnf&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;добавить в конец строчки:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;default-character-set=utf8&lt;br /&gt;character_set_client=utf8&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;вместо utf8 можно любую другую, например cp1251&lt;br /&gt;&lt;br /&gt;Ставим svn. Если не используете, то можно пропустить.&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;apt-get install subversion&lt;br /&gt;&lt;br /&gt;libapache2-svn ssl-cert libapache2-svn - опционально&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="prettyprint"&gt;&lt;br /&gt;Ставим symfony:&lt;br /&gt;sudo mkdir -p /usr/share/php5/symfony-1.2/&lt;br /&gt;sudo svn co http://svn.symfony-project.com/branches/1.2 /usr/share/php5/symfony-1.2/&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;VirtualHost 127.0.0.1:80&amp;gt;&lt;br /&gt;       ServerAdmin webmaster@localhost&lt;br /&gt;       DocumentRoot /var/www/symfony/web/&lt;br /&gt;       &amp;lt;Directory /&gt;&lt;br /&gt;               Options FollowSymLinks Indexes&lt;br /&gt;               AllowOverride All&lt;br /&gt;       &amp;lt;/Directory&amp;gt;&lt;br /&gt;       ErrorLog /var/log/apache2/error.log&lt;br /&gt;       LogLevel warn&lt;br /&gt;       CustomLog /var/log/apache2/access.log combined&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Если проект начинаете с нуля:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;wget http://www.symfony-project.org/get/sf_sandbox_1_2.tgz&lt;br /&gt;&lt;br /&gt;tar xfz sf_sandbox_1_2.tgz&lt;br /&gt;cp sf_sandbox&lt;br /&gt;mv sf_sandbox/* /var/www/symfony/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Подключаем библиотеку symfony. В файле:&lt;br /&gt;&lt;pre class="prettyprint"&gt;/var/www/symfony/config/ProjectConfiguration.class.php&lt;br /&gt;&lt;br /&gt;меняем на:&lt;br /&gt;&lt;br /&gt;require_once '/usr/share/php5/symfony-1.2/lib/autoload/sfCoreAutoload.class.php';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Проверяем&lt;br /&gt;cp /var/www/symfony/&lt;br /&gt;./symfony&lt;br /&gt;&lt;br /&gt;если все без ошибок, то можно приступать к работе&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-1731639332615448193?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yYaCYuASIs9J9m5zAiLcTlh2HtY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yYaCYuASIs9J9m5zAiLcTlh2HtY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yYaCYuASIs9J9m5zAiLcTlh2HtY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yYaCYuASIs9J9m5zAiLcTlh2HtY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/1731639332615448193/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=1731639332615448193" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1731639332615448193?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1731639332615448193?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/n1fPtIL_qTc/symfony-ubuntu.html" title="Необходимые компоненты для работы symfony в Ubuntu" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/symfony-ubuntu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMEQH0-eCp7ImA9WxVUGEg.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-3227562177499645171</id><published>2009-03-23T22:33:00.004+03:00</published><updated>2009-03-24T02:53:21.350+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-24T02:53:21.350+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="sfWidget" /><title>Группировка виджетов(sfWidget) в админ генераторе(admin-generator) для symfony 1.2</title><content type="html">Сегодня мне понадобилось динамически стороить элементы формы в админ генераторе и группировать их.&lt;br /&gt;Это оказалось не столь простой задачей.&lt;br /&gt;Я использую symfony 1.2.5-DEV из svn.&lt;br /&gt;Сразу оговорюсь, что строить из embedded forms я не хочу, т.к. элементы динамические.&lt;br /&gt;Вот мои действия. Постоим простейший вариант:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;   $this-&gt;widgetSchema['group0'] = new sfWidgetFormSchema(array(&lt;br /&gt;     'name0'    =&gt; new sfWidgetFormInput(),&lt;br /&gt;     'email0'   =&gt; new sfWidgetFormInput(),&lt;br /&gt;   ));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;сгенерированный html код будет:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;  &amp;lt;label for="t_object_key_group0"&amp;gt;Group0&amp;lt;/label&amp;gt;&lt;br /&gt;  &amp;lt;label for="t_object_key_group0_name0"&amp;gt;Name0&amp;lt;/label&amp;gt;&lt;br /&gt;  &amp;lt;input name="t_object_key[group0][name0]" id="t_object_key_group0_name0" type="text"&amp;gt;&lt;br /&gt;  &amp;lt;label for="t_object_key_group0_email0"&amp;gt;Email0&amp;lt;/label&amp;gt;&lt;br /&gt;  &amp;lt;input name="t_object_key[group0][email0]"id="t_object_key_group0_email0" type="text"&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh6.ggpht.com/_67GcH7V6PNQ/ScIJ05P8pnI/AAAAAAAAFjo/cpeopqdAY4w/001.png"/&gt;&lt;br /&gt;&lt;br /&gt;Смотрится - не очень. Тогда покопавшись в коде я попробовал указать FormFormatter:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;$decorator = new sfWidgetFormSchemaFormatterTable($this-&gt;widgetSchema&lt;br /&gt;['group0']);&lt;br /&gt;$this-&gt;widgetSchema['group0']-&gt;addFormFormatter('custom', $decorator);&lt;br /&gt;$this-&gt;widgetSchema['group0']-&gt;setFormFormatterName('custom');&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Эффект тот же.&lt;br /&gt;Тогда я использовал RowFormat:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;$this-&gt;widgetSchema['group0']-&gt;getFormFormatter()-&gt;setRowFormat&lt;br /&gt;("\n&amp;lt;table&amp;gt;  &amp;lt;th&amp;gt;%label%&amp;lt;/th&amp;gt;\n  &amp;lt;td&amp;gt;%error%%field%%help%&lt;br /&gt;%hidden_fields&lt;br /&gt;%&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;");&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;сгенерированный html код будет:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;  &amp;lt;label for="t_object_key_group0"&amp;gt;Group0&amp;lt;/label&amp;gt;&lt;br /&gt;  &amp;lt;table&amp;gt;  &amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;lt;label for="t_object_key_group0_name0"&lt;br /&gt;  &amp;gt;Name0&amp;lt;/label&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;input name="t_object_key[group0][name0]"id="t_object_key_group0_name0" type="text"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;  &amp;lt;table&amp;gt;  &amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;lt;label&lt;br /&gt;for="t_object_key_group0_email0"&amp;gt;Email0&amp;lt;/label&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;input name="t_object_key[group0][email0]" id="t_object_key_group0_email0" type="text"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh5.ggpht.com/_67GcH7V6PNQ/ScIJ10PrZrI/AAAAAAAAFjw/Mky9MT0VoZc/002.png"/&gt;&lt;br /&gt;&lt;br /&gt;Тоже не то что я ожидал.&lt;br /&gt;И выходом из всего этого будет:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;   $this-&amp;gt;widgetSchema['group0'] = new sfWidgetFormSchema(array(&lt;br /&gt;     'grouped' =&amp;gt; new sfWidgetFormSchema(array(&lt;br /&gt;     'name0'    =&amp;gt; new sfWidgetFormInput(),&lt;br /&gt;     'email0'   =&amp;gt; new sfWidgetFormInput(),&lt;br /&gt;   ))&lt;br /&gt;   ));&lt;br /&gt;$this-&amp;gt;widgetSchema['group0']-&amp;gt;getFormFormatter()-&amp;gt;setRowFormat&lt;br /&gt;("\n&amp;lt;table&amp;gt;  &amp;lt;th&amp;gt;%label%&amp;lt;/th&amp;gt;\n  &amp;lt;td&amp;gt;%error%%field%%help%&lt;br /&gt;%hidden_fields&lt;br /&gt;%&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;сгенерированный html код будет:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;  &amp;lt;label for="t_object_key_group0"&amp;gt;Group0&amp;lt;/label&amp;gt;&lt;br /&gt;  &amp;lt;table&amp;gt;  &amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Grouped&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;label for="t_object_key_group0_grouped_name0"&amp;gt;Name0&amp;lt;/label&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;input name="t_object_key[group0][grouped][name0]"&lt;br /&gt;id="t_object_key_group0_grouped_name0" type="text"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;label for="t_object_key_group0_grouped_email0"&amp;gt;Email0&amp;lt;/label&amp;gt;&amp;lt;/&lt;br /&gt;th&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;input name="t_object_key[group0][grouped][email0]"&lt;br /&gt;id="t_object_key_group0_grouped_email0" type="text"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh4.ggpht.com/_67GcH7V6PNQ/ScIJ2J4ZXSI/AAAAAAAAFj4/GGgFUzxcAdM/003.png"/&gt;&lt;br /&gt;&lt;br /&gt;Это и есть то что нам надо.&lt;br /&gt;Похоже на то, что setFormFormatterName работает только с embedded forms.&lt;br /&gt;Я пытался попросить объяснений это на &lt;a href="http://groups.google.com/group/symfony-users/browse_thread/thread/4cd842e30f9ed0eb"&gt;гугл групс&lt;/a&gt;, но без результатно.&lt;br /&gt;&lt;br /&gt;Теперь самое интересное. Как же будет выглядеть валидатор:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;$this-&gt;validatorSchema['group0'] = new sfValidatorSchema(array(&lt;br /&gt;  'grouped' =&gt; new sfValidatorSchema(array(&lt;br /&gt;    'name0'    =&gt; new sfValidatorInteger(),&lt;br /&gt;    'email0'   =&gt; new sfValidatorString(),&lt;br /&gt;  ))&lt;br /&gt;));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Таким образом используя sfWidgetFormSchema можно делать сгруппированные формы любой вложенности.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-3227562177499645171?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5n7kkhKvIcn-LOkT9819QqWekk8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5n7kkhKvIcn-LOkT9819QqWekk8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5n7kkhKvIcn-LOkT9819QqWekk8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5n7kkhKvIcn-LOkT9819QqWekk8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/3227562177499645171/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=3227562177499645171" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3227562177499645171?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3227562177499645171?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/xLEbsMmz1BU/sfwidget-admin-generator-symfony-12.html" title="Группировка виджетов(sfWidget) в админ генераторе(admin-generator) для symfony 1.2" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_67GcH7V6PNQ/ScIJ05P8pnI/AAAAAAAAFjo/cpeopqdAY4w/s72-c/001.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/sfwidget-admin-generator-symfony-12.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEAQHY5eSp7ImA9WxVUF0g.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-4358012449083314082</id><published>2009-03-23T00:03:00.002+03:00</published><updated>2009-03-23T00:17:21.821+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-23T00:17:21.821+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mysql" /><title>Интересный момент в mysql 5 для foreign key</title><content type="html">&lt;pre class="prettyprint"&gt;CREATE TABLE `key` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `name` varchar(255) NOT NULL,&lt;br /&gt;  `slug` varchar(128) NOT NULL,&lt;br /&gt;  `group_id` int(11) NOT NULL,&lt;br /&gt;  `parent_id` int(11) default '0',&lt;br /&gt;  `comp_id` int(11) default NULL,&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `key_FI_1` (`group_id`),&lt;br /&gt;  KEY `key_FI_2` (`parent_id`),&lt;br /&gt;  CONSTRAINT `key_FK_1` FOREIGN KEY (`group_id`) REFERENCES `key_group` (`id`) ON DELETE CASCADE,&lt;br /&gt;  CONSTRAINT `key_FK_2` FOREIGN KEY (`parent_id`) REFERENCES `key` (`id`) ON DELETE CASCADE&lt;br /&gt;) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;С первого взгляда все ок.&lt;br /&gt;Теперь попробуем вставить запись:&lt;br /&gt;&lt;pre class="prettyprint"&gt;insert into key (name,group_id) values ('ключ1',1)&lt;/pre&gt;&lt;br /&gt;выходит ошибка&lt;br /&gt;&lt;pre class="prettyprint"&gt;mysql&gt;ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`database/key`, CONSTRAINT `key_FK_2` FOREIGN KEY (`parent_id`) REFERENCES `key` (`id`) ON DELETE CASCADE)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Дело оказывается в `parent_id` int(11) default '0' , т.к. нет записи с id=0. &lt;br /&gt;Правильнее сделать `parent_id` int(11) default NULL. &lt;br /&gt;&lt;br /&gt;Мне кажется в propel при генерации из схемы можно сделать проверку на defaultValue, т.к. в купе с foreign key это уже ошибочно в большинстве случаев.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-4358012449083314082?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NQoNLwD2km4C-4_jMxqyHAVN7tM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NQoNLwD2km4C-4_jMxqyHAVN7tM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NQoNLwD2km4C-4_jMxqyHAVN7tM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NQoNLwD2km4C-4_jMxqyHAVN7tM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/4358012449083314082/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=4358012449083314082" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4358012449083314082?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4358012449083314082?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/1fOcbOimnaw/mysql-5-foreign-key.html" title="Интересный момент в mysql 5 для foreign key" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/mysql-5-foreign-key.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkANSHk_fip7ImA9WxNQEUs.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-4266163805679197742</id><published>2009-03-22T12:59:00.004+03:00</published><updated>2009-09-17T08:13:19.746+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-17T08:13:19.746+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="Propel" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Правильное расширение базовых классов Propel в symfony 1.2</title><content type="html">Пусть наша модель называется SomeModel, тогда методом для извлечения объекта по строке(slug) будет:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;class SomeModelPeer extends BaseSomeModelPeer&lt;br /&gt;{&lt;br /&gt;  public static function retrieveBySlug($slug, PropelPDO $con = null){&lt;br /&gt;    if (null !== ($obj = SomeModelPeer::getInstanceFromPool((string) $slug))) {&lt;br /&gt;      return $obj;&lt;br /&gt;    }&lt;br /&gt;    if ($con === null) {&lt;br /&gt;      $con = Propel::getConnection(self::DATABASE_NAME, Propel::CONNECTION_READ);&lt;br /&gt;    }&lt;br /&gt;    $criteria = new Criteria();&lt;br /&gt;    self::addSelectColumns($criteria);&lt;br /&gt;    $criteria-&gt;add(self::SLUG,$slug);&lt;br /&gt;    $object = self::doSelectOne($criteria,$con);&lt;br /&gt;    if($object instanceof SomeModel){&lt;br /&gt;      self::addInstanceToPool($object);&lt;br /&gt;    }&lt;br /&gt;    return $object;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-4266163805679197742?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mDA822_Igb6_UVOt4VwDTCt9ldc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mDA822_Igb6_UVOt4VwDTCt9ldc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mDA822_Igb6_UVOt4VwDTCt9ldc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mDA822_Igb6_UVOt4VwDTCt9ldc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/4266163805679197742/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=4266163805679197742" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4266163805679197742?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4266163805679197742?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/ZQrupW0noM4/propel-symfony-12.html" title="Правильное расширение базовых классов Propel в symfony 1.2" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/propel-symfony-12.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYARno6fSp7ImA9WxVUFEw.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-2051938539759714718</id><published>2009-03-18T19:32:00.005+03:00</published><updated>2009-03-19T02:15:47.415+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-19T02:15:47.415+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="layout" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="sfFilter" /><title>Как динамически изменить layout для всего application</title><content type="html">Иногда нужно менять layout для всего приложения, на пример в празничные дни. &lt;br /&gt;Но писать условия в каждом модуле - не красиво.&lt;br /&gt;Поэтому можно сделать это заранее в фильтре.&lt;br /&gt;В файле app/your_module/config/filters.yml добавь ваш фильтр:&lt;br /&gt;&lt;pre class="prettyprint"&gt;rendering: ~&lt;br /&gt;security:  ~&lt;br /&gt;&lt;br /&gt;# insert your own filters here&lt;br /&gt;&lt;br /&gt;change_layuot:&lt;br /&gt;  class: changeLayoutFilter&lt;br /&gt;  param:&lt;br /&gt;&lt;br /&gt;cache:     ~&lt;br /&gt;common:    ~&lt;br /&gt;execution: ~&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Создайте класс changeLayoutFilter и положите его в lib/:&lt;br /&gt;&lt;pre class="prettyprint"&gt;class changeLayoutFilter extends sfFilter&lt;br /&gt;{&lt;br /&gt;  public function execute($filterChain)&lt;br /&gt;  {&lt;br /&gt;    $request = $this-&gt;getContext()-&gt;getRequest();&lt;br /&gt;    $user    = $this-&gt;getContext()-&gt;getUser();&lt;br /&gt;    //устанавливаю layuot&lt;br /&gt;    if(isNY()){&lt;br /&gt;      sfConfig::set('symfony.view.'.&lt;br /&gt;          $this-&gt;getContext()-&gt;getModuleName().'_'.&lt;br /&gt;          $this-&gt;getContext()-&gt;getActionName().'_layout',&lt;br /&gt;        'your_layout');&lt;br /&gt;    }&lt;br /&gt;    // Execute next filter&lt;br /&gt;    $filterChain-&gt;execute();&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;isNY() - это ваше условие, 'your_layout' - ваш layout.&lt;br /&gt;&lt;br /&gt;Кстати, почему я не использовал конструкцию по учебнику:&lt;br /&gt;&lt;pre class="prettyprint"&gt;class changeLayoutFilter extends sfFilter&lt;br /&gt;{&lt;br /&gt;  public function execute($filterChain)&lt;br /&gt;  {&lt;br /&gt;    // Execute this filter only once&lt;br /&gt;    if ($this-&gt;isFirstCall())&lt;br /&gt;    {&lt;br /&gt;      [... ...]&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;?&lt;br /&gt;Потому что если будет использован forward в контроллере(sfAction), то&lt;br /&gt;цепочка фильтров будет запущено заново и наш хак не сработает.&lt;br /&gt;Посмотрите сами в дебагере, вкладка "log" как ваш фильтр будет запущен 2 раза.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-2051938539759714718?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wIUgn6SuruchZTH_JdJ_a2AeP1c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wIUgn6SuruchZTH_JdJ_a2AeP1c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wIUgn6SuruchZTH_JdJ_a2AeP1c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wIUgn6SuruchZTH_JdJ_a2AeP1c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/2051938539759714718/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=2051938539759714718" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/2051938539759714718?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/2051938539759714718?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/I8v9lPTnZT4/layout-application.html" title="Как динамически изменить layout для всего application" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/layout-application.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8MQXg-eSp7ImA9WxVUE08.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-603714279953067634</id><published>2009-03-17T23:17:00.005+03:00</published><updated>2009-03-17T23:48:00.651+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-17T23:48:00.651+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Валидатор телефонного номера в symfony 1.2</title><content type="html">Телефонный номер вида: +7(495)1234567&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;/**&lt;br /&gt; * sfValidatorTelephone&lt;br /&gt; *&lt;br /&gt; * @package    &lt;br /&gt; * @subpackage validator&lt;br /&gt; * @author     broderix&lt;br /&gt; * @version    &lt;br /&gt; */&lt;br /&gt;class sfValidatorTelephone extends sfValidatorRegex&lt;br /&gt;{&lt;br /&gt;  /**&lt;br /&gt;   * @see sfValidatorRegex&lt;br /&gt;   */&lt;br /&gt;  protected function configure($options = array(), $messages = array())&lt;br /&gt;  {&lt;br /&gt;    parent::configure($options, $messages);&lt;br /&gt;&lt;br /&gt;    $this-&gt;setOption('pattern', '/^(\+\d\(\d+\)\d*)$/i');&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;чтобы заработал положить в lib/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-603714279953067634?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8ispjHqBAmXOokrKemGmB_bHhVU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8ispjHqBAmXOokrKemGmB_bHhVU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8ispjHqBAmXOokrKemGmB_bHhVU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8ispjHqBAmXOokrKemGmB_bHhVU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/603714279953067634/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=603714279953067634" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/603714279953067634?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/603714279953067634?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/1_ToMiblOjA/symfony-12.html" title="Валидатор телефонного номера в symfony 1.2" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/symfony-12.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cBRno4eip7ImA9WxVUE08.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-8630509798214560839</id><published>2009-03-14T21:46:00.017+03:00</published><updated>2009-03-17T23:17:37.432+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-17T23:17:37.432+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Упрощение работы с sfWidgetFormSelect в sfForm</title><content type="html">Этим постом я начну серию статьёй по  symfony 1.2&lt;br /&gt;&lt;br /&gt;Иногда необходимо использовать ограниенные списки select в админе в  symfony 1.2.&lt;br /&gt;Но не хочется выбирать данные для sfWidgetFormSelect из массива или yaml файла.&lt;br /&gt;Поэтому можно создать свой виджет sfWidgetFormYamlSelect:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;class sfWidgetFormYamlSelect extends sfWidgetFormChoice&lt;br /&gt;{&lt;br /&gt;  public function __construct($options = array(), $attributes = array())&lt;br /&gt;  {&lt;br /&gt;    $options['choices'] = new sfCallable(array($this, 'getChoices'));&lt;br /&gt;    parent::__construct($options, $attributes);&lt;br /&gt;  }&lt;br /&gt;  protected function configure($options = array(), $attributes = array())&lt;br /&gt;  {&lt;br /&gt;    addRequiredOption('form_name', null);&lt;br /&gt;    $this-&gt;addRequiredOption('field_name', null);&lt;br /&gt;    $this-&gt;addOption('add_empty', false);&lt;br /&gt;    parent::configure($options, $attributes);&lt;br /&gt;  }&lt;br /&gt;  public function getChoices()&lt;br /&gt;  {&lt;br /&gt;    $conf_array = sfConfig::get('app_'.$this-&gt;getOption('form_name'));&lt;br /&gt;    $choices = array();&lt;br /&gt;    if(false !== $this-&gt;getOption('add_empty')){&lt;br /&gt;      $choices[''] = true === $this-&gt;getOption('add_empty') ? '' :&lt;br /&gt;        $this-&gt;getOption('add_empty');&lt;br /&gt;    }&lt;br /&gt;   $choices = array_merge($choices,$conf_array[$this-&gt;getOption('field_name')]);&lt;br /&gt;   return $choices;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;В файле config/app.yml (если его нет, то создайте) опишите ваши поля для форм:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;span style="font-size:100%;"&gt;all:&lt;br /&gt; .form_settings:&lt;br /&gt;   my_form1:&lt;br /&gt;     type: { 'yes': 'да', 'no': 'нет }&lt;br /&gt;   my_form2:&lt;br /&gt;     status: { 0: 'новый', 1: 'подтвержденный', 2: 'редактируется' }&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;В самой форме это будет выглядеть так:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;class MyFormForm1 extends BaseMyForm1Form&lt;br /&gt;{&lt;br /&gt;  public function configure()&lt;br /&gt;  {&lt;br /&gt;    $this-&gt;setWidget('status' , new sfWidgetFormYamlSelect(array(&lt;br /&gt;      'form_name'=&gt;'my_form1',&lt;br /&gt;      'field_name'=&gt;'status'&lt;br /&gt;    )));&lt;br /&gt;  }&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_67GcH7V6PNQ/SbwDa6zd4_I/AAAAAAAAFic/aHq2pboF3Wk/s1600-h/select_example.png"&gt;&lt;img style="cursor: pointer; width: 265px; height: 50px;" src="http://3.bp.blogspot.com/_67GcH7V6PNQ/SbwDa6zd4_I/AAAAAAAAFic/aHq2pboF3Wk/s320/select_example.png" alt="" id="BLOGGER_PHOTO_ID_5313125421386949618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Так же это можно использовать в фильтрах.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-8630509798214560839?l=broderix.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6VgWo-fd7DHrJyo06v7Z4BUu_Ko/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6VgWo-fd7DHrJyo06v7Z4BUu_Ko/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6VgWo-fd7DHrJyo06v7Z4BUu_Ko/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6VgWo-fd7DHrJyo06v7Z4BUu_Ko/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/8630509798214560839/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=37345659&amp;postID=8630509798214560839" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/8630509798214560839?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/8630509798214560839?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/-D9E2I2itac/sfwidgetformselect-sfform.html" title="Упрощение работы с sfWidgetFormSelect в sfForm" /><author><name>Данилов Кирилл</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://1.bp.blogspot.com/-OoT9W8ckop4/TyD9Yl0YhhI/AAAAAAAANgI/MGQv9ZZrBxk/s220/IMG_0807.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_67GcH7V6PNQ/SbwDa6zd4_I/AAAAAAAAFic/aHq2pboF3Wk/s72-c/select_example.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/sfwidgetformselect-sfform.html</feedburner:origLink></entry></feed>

