<?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;C0YARH46eSp7ImA9WhRbF0U.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374</id><updated>2012-02-09T11:52:25.011+02:00</updated><category term="C++" /><category term="Couchbase" /><category term="магазинам" /><category term="Далион" /><category term="ситауции" /><category term="CouchDB" /><title>На ладони</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://savdalion.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>52</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/savdalion" /><feedburner:info uri="savdalion" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DEUGRXo7fip7ImA9WhRXEE4.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-8221019078020044026</id><published>2011-12-16T11:01:00.001+02:00</published><updated>2011-12-16T13:50:24.406+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T13:50:24.406+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Число. Обрезать до байта? Быстро? Легко!</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" src="http://1.bp.blogspot.com/-FIbpHPBi0-8/TusRnUL8gOI/AAAAAAAACaU/_qGaJFs_2bc/s1600/clamp-int-byte-char.png" /&gt;&lt;/div&gt;
Когда выполняются вычисления на графических картах (GPU), создаются текстуры, или, например, данные готовятся к серилизации, бывает, нужно привести поток данных к жёстко фиксированному диапазону. Хорошо, если мы активно используем &lt;a href="http://www.khronos.org/opencl/"&gt;OpenCL&lt;/a&gt;: тогда есть готовая &lt;a href="http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/"&gt;инструкция&lt;/a&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code class="opencl"&gt;gentype clamp(
    gentype x,
    gentype minval,
    gentype maxval)&lt;/code&gt;&lt;/pre&gt;
Но никто в здравом уме не будет городить тяжеловесный OpenCL, чтобы привести int к unsigned char.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Обычно, для приведения числа к [0; 255] на CPU я пользовался таким кодом (С++): &lt;br /&gt;
&lt;pre&gt;&lt;code class="C++"&gt;char byteN = (intN &amp;gt; 255) ? 255 : (intN &amp;lt; 0) ? 0 : intN;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;a href="http://codereview.stackexchange.com/questions/6502/fastest-way-to-clamp-an-integer-to-the-range-0-255?newsletter=1&amp;amp;nlcode=29222%7c1fd9"&gt;Оказывается&lt;/a&gt;, есть  более быстрый способ. Когда-нибудь компиляторы C++ научатся лучше понимать, чего от них хотят. Ну а пока такой вот код для приведения целого числа к беззнаковому байту - самый-самый:&lt;br /&gt;
&lt;pre&gt;&lt;code class="C++"&gt;unsigned char clamp( int n ) {
    int a = 255;
    a -= n;
    a &amp;gt;&amp;gt;= 31;
    a |= n;
    n &amp;gt;&amp;gt;= 31;
    n = ~n;
    n &amp;amp;= a;
    return n;
}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Мне этот код не нравится. Но если он понравился Вам, наверняка, Вам понравится и содержимое этой страницы &amp;gt;&lt;a href="http://graphics.stanford.edu/%7Eseander/bithacks.html"&gt;http://graphics.stanford.edu/~seander/bithacks.html&lt;/a&gt;&lt;br /&gt;
Крайне быстро. Крайне непонятно. Крайне эффективно. C++. &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/2909062909816541374-8221019078020044026?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/Gt2UkJCkCBQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/8221019078020044026/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=8221019078020044026&amp;isPopup=true" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/8221019078020044026?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/8221019078020044026?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/Gt2UkJCkCBQ/blog-post.html" title="Число. Обрезать до байта? Быстро? Легко!" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-FIbpHPBi0-8/TusRnUL8gOI/AAAAAAAACaU/_qGaJFs_2bc/s72-c/clamp-int-byte-char.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/12/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIDQXY-eCp7ImA9WhRQFko.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-5687762901010992818</id><published>2011-12-03T01:46:00.001+02:00</published><updated>2011-12-12T09:06:10.850+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-12T09:06:10.850+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Ленивое сравнение для boost::any()</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" src="http://4.bp.blogspot.com/-9HHss2SsEM0/TuKs2AcnbTI/AAAAAAAACaM/iQfkb3Q6WZQ/s1600/boost-any-equals.png" /&gt;&lt;/div&gt;
Понадобилось мне быстро распарсить много данных из XML-файла. Возможность хранить всё, предлагаемая &lt;a href="http://boost.org/doc/libs/1_48_0/doc/html/any.html"&gt;boost::any&lt;/a&gt;, как бы предполагает возможность это "всё" сравнивать... Ан нет! Выяснилось, что для &lt;b&gt;boost::any&lt;/b&gt; (в который собирались xml-данные) готового сравнения нет. В общем-то, если &lt;a href="http://lists.boost.org/Archives/boost/2006/04/103272.php"&gt;задуматься&lt;/a&gt;, это логично. Но я так привык работать с нестрого типизированными языками, что просто не мог смириться. C++ - злой язык :) Время на написание довольно скучного кода было потрачено. И если Вам нужен &lt;b&gt;equals() для boost::any()&lt;/b&gt; - код ниже.

&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Метод equals( boost::any, boost::any ) возвращает пару булевых значений:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;(1) проверка на равенство типов&lt;/li&gt;
&lt;li&gt;(2) проверка собственно самих значений &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Сравнение я назвал "ленивым", т.к. если простые типы оказались не равными и &lt;i&gt;хотя бы одно&lt;/i&gt; из значений является строкой, делается попытка распознать в строках числа и сравнить их.&lt;br /&gt;
&lt;br /&gt;
Типами метод чрезмерно не нагружал, т.к. каждая проверка - это процессорное время. Вы можете запросто добавить в код свои типы и/или исключить имеющиеся. Ведь код должен эффективно решать поставленную задачу и (в идеале) быть лёгким для понимания. Остальное - от лукавого!&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code class="c++"&gt;/**
* Сравнивает два значения boost::any.
*
* (!) Может возвращать ( false, true ), т.к. числа разных типов
* сравниваются как числа.
*
* @param precision Точность для сравнения значений с плавающей точкой.
*/
inline std::pair&amp;lt;
    // типы совпадают?
    bool,
    // содержимое совпадает?
    bool
&amp;gt; lazyEquals(
    const boost::any&amp;amp; a,
    const boost::any&amp;amp; b,
    double precision = 1e-8
) {
    using namespace boost;

    // Быстрая оценка на равенство
    const type_info&amp;amp; at = a.type();
    const type_info&amp;amp; bt = b.type();
    std::pair&amp;lt; bool, bool &amp;gt;  r = std::make_pair(
        (at == bt),
        false
    );
    
    // double
    if (at == typeid( double )) {
        const auto ca = any_cast&amp;lt; double &amp;gt;( a );
        double cb = numeric_limits&amp;lt; double &amp;gt;::infinity();
        if (bt == typeid( double )) {
            cb = any_cast&amp;lt; double &amp;gt;( b );
        } else if (bt == typeid( float )) {
            cb = (double)any_cast&amp;lt; float &amp;gt;( b );
        } else if (bt == typeid( int )) {
            cb = (double)any_cast&amp;lt; int &amp;gt;( b );
        } else if (bt == typeid( size_t )) {
            cb = (double)any_cast&amp;lt; size_t &amp;gt;( b );
        } else if (bt == typeid( string )) {
            cb = numberCast( any_cast&amp;lt; string &amp;gt;( b ) );
            // Получим infinity(), если не число
        }
        if (cb != numeric_limits&amp;lt; double &amp;gt;::infinity()) {
            r.second = (precision &amp;gt; std::abs( ca - cb ));
        }

    // float
    } else if (at == typeid( float )) {
        const auto ca = any_cast&amp;lt; float &amp;gt;( a );
        float cb = numeric_limits&amp;lt; float &amp;gt;::infinity();
        if (bt == typeid( double )) {
            cb = (float)any_cast&amp;lt; double &amp;gt;( b );
        } else if (bt == typeid( float )) {
            cb = any_cast&amp;lt; float &amp;gt;( b );
        } else if (bt == typeid( int )) {
            cb = (float)any_cast&amp;lt; int &amp;gt;( b );
        } else if (bt == typeid( size_t )) {
            cb = (float)any_cast&amp;lt; size_t &amp;gt;( b );
        } else if (bt == typeid( string )) {
            cb = (float)numberCast( any_cast&amp;lt; string &amp;gt;( b ) );
            // Получим infinity(), если не число
        }
        if (cb != numeric_limits&amp;lt; float &amp;gt;::infinity()) {
            r.second = (precision &amp;gt; std::abs( ca - cb ));
        }

    // int
    } else if (at == typeid( int )) {
        const auto ca = any_cast&amp;lt; int &amp;gt;( a );
        if (bt == typeid( double )) {
            r.second = (ca == (int)any_cast&amp;lt; double &amp;gt;( b ));
        } else if (bt == typeid( float )) {
            r.second = (ca == any_cast&amp;lt; float &amp;gt;( b ));
        } else if (bt == typeid( int )) {
            r.second = (ca == any_cast&amp;lt; int &amp;gt;( b ));
        } else if (bt == typeid( size_t )) {
            r.second = (ca == (int)any_cast&amp;lt; size_t &amp;gt;( b ));
        } else if (bt == typeid( string )) {
            const double temp = numberCast( any_cast&amp;lt; string &amp;gt;( b ) );
            // Получим infinity(), если не число
            if (temp != numeric_limits&amp;lt; double &amp;gt;::infinity()) {
                r.second = (ca == (int)temp);
            }
        }

    // size_t
    } else if (at == typeid( size_t )) {
        const auto ca = any_cast&amp;lt; size_t &amp;gt;( a );
        if (bt == typeid( double )) {
            r.second = (ca == (size_t)any_cast&amp;lt; double &amp;gt;( b ));
        } else if (bt == typeid( float )) {
            r.second = (ca == (size_t)any_cast&amp;lt; float &amp;gt;( b ));
        } else if (bt == typeid( int )) {
            r.second = (ca == (size_t)any_cast&amp;lt; int &amp;gt;( b ));
        } else if (bt == typeid( size_t )) {
            r.second = (ca == any_cast&amp;lt; size_t &amp;gt;( b ));
        } else if (bt == typeid( string )) {
            const double temp = numberCast( any_cast&amp;lt; string &amp;gt;( b ) );
            // Получим infinity(), если не число
            if (temp != numeric_limits&amp;lt; double &amp;gt;::infinity()) {
                r.second = (ca == (size_t)temp);
            }
        }

    // string
    } else if (at == typeid( string )) {
        const string ca = any_cast&amp;lt; string &amp;gt;( a );
        if (bt == typeid( string )) {
            r.second = (ca == any_cast&amp;lt; string &amp;gt;( b ));
        }
        // Может, число представлено строкой? Строки переведём
        // в числа и сравним числа согласно их типу.
        const double nca = numberCast( ca );
        if (nca != numeric_limits&amp;lt; double &amp;gt;::infinity()) {
            if (bt == typeid( double )) {
                const auto ncb = any_cast&amp;lt; double &amp;gt;( b );
                r.second = (precision &amp;gt; std::abs( nca - ncb ));
            } else if (bt == typeid( float )) {
                const auto ncb = any_cast&amp;lt; float &amp;gt;( b );
                r.second = (precision &amp;gt; std::abs( (float)nca - ncb ));
            } else if (bt == typeid( int )) {
                const auto ncb = any_cast&amp;lt; int &amp;gt;( b );
                r.second = ((int)nca == ncb);
            } else if (bt == typeid( size_t )) {
                const auto ncb = any_cast&amp;lt; size_t &amp;gt;( b );
                r.second = ((size_t)nca == ncb);
            }
            // string посмотрели выше
        }

    } // if-else ...

    return r;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
В методе используется вот такая функция, которая &lt;strike&gt;кастует&lt;/strike&gt; преобразует строку в число: &lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code class="c++"&gt;/**
* @return Распознанное число или numeric_limits&amp;lt; double &amp;gt;::infinity().
*/
inline double numberCast( const string&amp;amp; s ) {
    try {
        const double number = boost::lexical_cast&amp;lt; double &amp;gt;( s );
        return number;
    }
    catch ( boost::bad_lexical_cast&amp;amp; ) {
        return numeric_limits&amp;lt; double &amp;gt;::infinity();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
И, конечно же, тесты! Без них любой код смотрится подозрительно. Используем &lt;a href="http://code.google.com/p/googletest"&gt;googletest&lt;/a&gt;. Надо говорить, что все t. - зелёные? &lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code class="c++"&gt;/**
* Фикстура.
*/
class DTest : public ::testing::Test {
  protected:
    inline DTest() {
    }

    virtual inline ~DTest() {
    }

    virtual inline void SetUp() {
    }

    virtual void TearDown() {
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Одинаковые типы данных
&lt;br /&gt;
&lt;pre&gt;&lt;code class="c++"&gt;TEST_F( DTest, IntEqualsInt_LazyEquals ) {
    const auto a = boost::any( (int)100 );
    const auto b = boost::any( (int)100 );
    const auto r = d::lazyEquals( a, b );
    EXPECT_TRUE( r.first );
    EXPECT_TRUE( r.second );
}


TEST_F( DTest, IntNotEqualsInt_LazyEquals ) {
    const auto a = boost::any( (int)100 );
    const auto b = boost::any( (int)200 );
    const auto r = d::lazyEquals( a, b );
    EXPECT_TRUE( r.first );
    EXPECT_FALSE( r.second );
}


TEST_F( DTest, SizeTEqualsSizeT_LazyEquals ) {
    const auto a = boost::any( (size_t)100 );
    const auto b = boost::any( (size_t)100 );
    const auto r = d::lazyEquals( a, b );
    EXPECT_TRUE( r.first );
    EXPECT_TRUE( r.second );
}


TEST_F( DTest, SizeTNotEqualsSizeT_LazyEquals ) {
    const auto a = boost::any( (size_t)100 );
    const auto b = boost::any( (size_t)200 );
    const auto r = d::lazyEquals( a, b );
    EXPECT_TRUE( r.first );
    EXPECT_FALSE( r.second );
}


TEST_F( DTest, FloatEqualsFloat_LazyEquals ) {
    const auto a = boost::any( (float)100 );
    const auto b = boost::any( (float)100 );
    const auto r = d::lazyEquals( a, b );
    EXPECT_TRUE( r.first );
    EXPECT_TRUE( r.second );
}


TEST_F( DTest, FloatNotEqualsFloat_LazyEquals ) {
    const auto a = boost::any( (float)100 );
    const auto b = boost::any( (float)200 );
    const auto r = d::lazyEquals( a, b );
    EXPECT_TRUE( r.first );
    EXPECT_FALSE( r.second );
}


TEST_F( DTest, DoubleEqualsDouble_LazyEquals ) {
    const auto a = boost::any( (double)100 );
    const auto b = boost::any( (double)100 );
    const auto r = d::lazyEquals( a, b );
    EXPECT_TRUE( r.first );
    EXPECT_TRUE( r.second );
}


TEST_F( DTest, DoubleNotEqualsDouble_LazyEquals ) {
    const auto a = boost::any( (double)100 );
    const auto b = boost::any( (double)200 );
    const auto r = d::lazyEquals( a, b );
    EXPECT_TRUE( r.first );
    EXPECT_FALSE( r.second );
}


TEST_F( DTest, StringLatinEqualsStringLatin_LazyEquals ) {
    const auto a = boost::any( (string)"abcd" );
    const auto b = boost::any( (string)"abcd" );
    const auto r = d::lazyEquals( a, b );
    EXPECT_TRUE( r.first );
    EXPECT_TRUE( r.second );
}


TEST_F( DTest, StringLatinNotEqualsStringLatin_LazyEquals ) {
    const auto a = boost::any( (string)"abcd" );
    const auto b = boost::any( (string)"abcdefgh" );
    const auto r = d::lazyEquals( a, b );
    EXPECT_TRUE( r.first );
    EXPECT_FALSE( r.second );
}


TEST_F( DTest, StringUnicodeEqualsStringUnicode_LazyEquals ) {
    const auto a = boost::any( (string)"Юникод" );
    const auto b = boost::any( (string)"Юникод" );
    const auto r = d::lazyEquals( a, b );
    EXPECT_TRUE( r.first );
    EXPECT_TRUE( r.second );
}


TEST_F( DTest, StringUnicodeNotEqualsStringUnicode_LazyEquals ) {
    const auto a = boost::any( (string)"Юникод" );
    const auto b = boost::any( (string)"Юникод тоже" );
    const auto r = d::lazyEquals( a, b );
    EXPECT_TRUE( r.first );
    EXPECT_FALSE( r.second );
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Разные типы данных
&lt;br /&gt;
&lt;pre&gt;&lt;code class="c++"&gt;TEST_F( DTest, IntEqualsSizeT_LazyEquals ) {
    auto a = boost::any( (int)100 );
    auto b = boost::any( (size_t)100 );
    auto r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (size_t)100 );
    b = boost::any( (int)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );
}


TEST_F( DTest, IntNotEqualsSizeT_LazyEquals ) {
    auto a = boost::any( (int)100 );
    auto b = boost::any( (size_t)200 );
    auto r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (size_t)100 );
    b = boost::any( (int)200 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );
}


TEST_F( DTest, IntEqualsFloat_LazyEquals ) {
    auto a = boost::any( (int)100 );
    auto b = boost::any( (float)100 );
    auto r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (float)100 );
    b = boost::any( (int)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );
}


TEST_F( DTest, IntNotEqualsFloat_LazyEquals ) {
    auto a = boost::any( (int)100 );
    auto b = boost::any( (float)200 );
    auto r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (float)100 );
    b = boost::any( (int)200 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );
}


TEST_F( DTest, IntEqualsDouble_LazyEquals ) {
    auto a = boost::any( (int)100 );
    auto b = boost::any( (double)100 );
    auto r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (double)100 );
    b = boost::any( (int)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );
}


TEST_F( DTest, IntNotEqualsDouble_LazyEquals ) {
    auto a = boost::any( (int)100 );
    auto b = boost::any( (double)200 );
    auto r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (double)100 );
    b = boost::any( (int)200 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Строки - Равенство
&lt;br /&gt;
&lt;pre&gt;&lt;code class="c++"&gt;TEST_F( DTest, NumberEqualsString_LazyEquals ) {
    // int
    auto a = boost::any( (int)100 );
    auto b = boost::any( (string)"100" );
    auto r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (string)"100" );
    b = boost::any( (int)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (int)100 );
    b = boost::any( (string)"100.0" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (string)"100.0" );
    b = boost::any( (int)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    // size_t
    a = boost::any( (size_t)100 );
    b = boost::any( (string)"100" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (string)"100" );
    b = boost::any( (size_t)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (size_t)100 );
    b = boost::any( (string)"100.0" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (string)"100.0" );
    b = boost::any( (size_t)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (size_t)100 );
    b = boost::any( (string)"100.1" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (string)"100.1" );
    b = boost::any( (size_t)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    // float
    a = boost::any( (float)100 );
    b = boost::any( (string)"100" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (string)"100" );
    b = boost::any( (float)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (float)100 );
    b = boost::any( (string)"100.0" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (string)"100.0" );
    b = boost::any( (float)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (float)100.1 );
    b = boost::any( (string)"100.1" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (string)"100.1" );
    b = boost::any( (float)100.1 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    // double
    a = boost::any( (double)100 );
    b = boost::any( (string)"100" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (string)"100" );
    b = boost::any( (double)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (double)100 );
    b = boost::any( (string)"100.0" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (string)"100.0" );
    b = boost::any( (double)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (double)100.1 );
    b = boost::any( (string)"100.1" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

    a = boost::any( (string)"100.1" );
    b = boost::any( (double)100.1 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_TRUE( r.second );

}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Строки - Не равенство
&lt;br /&gt;
&lt;pre&gt;&lt;code class="c++"&gt;TEST_F( DTest, NumberNotEqualsString2_LazyEquals ) {
    // int
    auto a = boost::any( (int)100 );
    auto b = boost::any( (string)"200" );
    auto r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"200" );
    b = boost::any( (int)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (int)100 );
    b = boost::any( (string)"200.0" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"200.0" );
    b = boost::any( (int)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    // size_t
    a = boost::any( (size_t)100 );
    b = boost::any( (string)"200" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"200" );
    b = boost::any( (size_t)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (size_t)100 );
    b = boost::any( (string)"200.0" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"200.0" );
    b = boost::any( (size_t)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    // float
    a = boost::any( (float)100 );
    b = boost::any( (string)"200" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"200" );
    b = boost::any( (float)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (float)100 );
    b = boost::any( (string)"200.0" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"200.0" );
    b = boost::any( (float)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    // double
    a = boost::any( (double)100 );
    b = boost::any( (string)"200" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"200" );
    b = boost::any( (double)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (double)100 );
    b = boost::any( (string)"200.0" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"200.0" );
    b = boost::any( (double)100 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );
}


TEST_F( DTest, Number2NotEqualsString_LazyEquals ) {
    // int
    auto a = boost::any( (int)200 );
    auto b = boost::any( (string)"100" );
    auto r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"100" );
    b = boost::any( (int)200 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (int)200 );
    b = boost::any( (string)"100.0" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"100.0" );
    b = boost::any( (int)200 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    // size_t
    a = boost::any( (size_t)200 );
    b = boost::any( (string)"100" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"100" );
    b = boost::any( (size_t)200 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (size_t)200 );
    b = boost::any( (string)"100.0" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"100.0" );
    b = boost::any( (size_t)200 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    // float
    a = boost::any( (float)200 );
    b = boost::any( (string)"100" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"100" );
    b = boost::any( (float)200 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (float)200 );
    b = boost::any( (string)"100.0" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"100.0" );
    b = boost::any( (float)200 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    // double
    a = boost::any( (double)200 );
    b = boost::any( (string)"100" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"100" );
    b = boost::any( (double)200 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (double)200 );
    b = boost::any( (string)"100.0" );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );

    a = boost::any( (string)"100.0" );
    b = boost::any( (double)200 );
    r = d::lazyEquals( a, b );
    EXPECT_FALSE( r.first );
    EXPECT_FALSE( r.second );
}
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-5687762901010992818?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/OHOn8cNwcuE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/5687762901010992818/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=5687762901010992818&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/5687762901010992818?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/5687762901010992818?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/OHOn8cNwcuE/boostany.html" title="Ленивое сравнение для boost::any()" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-9HHss2SsEM0/TuKs2AcnbTI/AAAAAAAACaM/iQfkb3Q6WZQ/s72-c/boost-any-equals.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/12/boostany.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYFQnc4cSp7ImA9WhRSEkQ.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-5253760238423451328</id><published>2011-11-12T08:53:00.001+02:00</published><updated>2011-11-14T19:01:53.939+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-14T19:01:53.939+02:00</app:edited><title>Очень современные просветители</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" src="http://1.bp.blogspot.com/-MKJIpZ0XEmE/TsFEUxYmFDI/AAAAAAAACZs/b32-1B5o9Ts/s1600/little-red-riding-hood-forest.jpg" /&gt;&lt;/div&gt;
Детский издательский дом "КомпасГид" (КГ) недавно выпустило &lt;a href="http://book.kompasgid.ru/index.php?page=shop.product_details&amp;amp;flypage=flypage.tpl&amp;amp;product_id=197&amp;amp;category_id=6&amp;amp;option=com_virtuemart&amp;amp;Itemid=770"&gt;книгу о дедушке-педофиле&lt;/a&gt;. В общем-то, я бы об этом никогда не узнал, если бы не ссылка на стене Facebook от друга. Представители КГ поехали на &lt;a href="http://www.prokhorovfund.ru/projects/own/169/"&gt;Красноярскую ярмарку книжной культуры&lt;/a&gt; и говорят: "&lt;i&gt;Робкий, пугливый, стыдливый интерес есть&lt;/i&gt;". Конечно есть! Когда это у людей не было интереса к запретным темам? Я приветствую хорошую литературу о жизни. Но книга для меня - это личное, то что не смотришь в компании; воздействие книги - намного глубже образов голубого экрана. И я не в восторге как от современных тенденций преподносить &lt;b&gt;в одной упаковке&lt;/b&gt; сказку, семью и педофилию, так и от ещё кое-чего, увиденного в издательстве КГ. &lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Сразу замечу, что ниже не будет обсуждения конкретно &lt;a href="http://book.kompasgid.ru/index.php?page=shop.product_details&amp;amp;flypage=flypage.tpl&amp;amp;product_id=197&amp;amp;category_id=6&amp;amp;option=com_virtuemart&amp;amp;Itemid=770"&gt;этой&lt;/a&gt; книги - все мнения "за" и "против" смотрите, пожалуйста, &lt;a href="http://eugeniashaffert.livejournal.com/279757.html"&gt;здесь&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="commentBody" data-jsid="text"&gt;&lt;a href="http://eugeniashaffert.livejournal.com/279757.html?thread=3648717#t3648717"&gt;Мнения - разные&lt;/a&gt;. Лично я уверен&lt;span class="text_exposed_show"&gt;,
 что большинство подростков воспримут &lt;a href="http://book.kompasgid.ru/index.php?page=shop.product_details&amp;amp;flypage=flypage.tpl&amp;amp;product_id=197&amp;amp;category_id=6&amp;amp;option=com_virtuemart&amp;amp;Itemid=770"&gt;эту книгу&lt;/a&gt; много, много легче 
взрослых. Реакция на поднятые в литературе "запретные темы" - индикатор 
пропасти между поколениями. И эта пропасть поведёт себя в зависимости от
 того, как поступят стороны: замкнутся или мнимо согласятся - пропасть 
увеличится; примут чужой взгляд, останутся при своём, найдут общий - 
сойдётся.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Беспокоит ли издательства размер пропасти? В какую сторону?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Выпуск подобных книг издательским домом, &lt;b&gt;который позиционирует себя как "детский"&lt;/b&gt; - огромная ответственность. Осознают ли сами издательства, это? Видимо, не все. Потому что когда &lt;a href="http://www.facebook.com/vitali.ziusko/posts/215670741837015"&gt;задаются&lt;/a&gt; подобные вопросы наряду с личным мнением о тенденциях современного писательства, представители и. цепляются за личное мнение: "Как же можно! Упоминать порноиндустрию в обсуждении наших книг! Мы - детское издательство. И не потерпим!.. А вы, господин ..." - ну и т.п., в духе гаерства. Было бы даже смешно, если бы не было так грустно...&lt;br /&gt;
&lt;br /&gt;
"&lt;a href="http://book.kompasgid.ru/"&gt;КомпасГид&lt;/a&gt;" - &lt;b&gt;детское, уважаемое родителями издательство, выпустившее художественную книгу о педофилии в семье&lt;/b&gt;. Детское. Уважаемое. Художественную. О педофилии. В семье. Я где-то ошибся? Не будь вы детским - дети бы прошли мимо. Не будь уважаемым - мимо прошли бы родители. Не выпусти вы книгу художественную - пронеслись бы мимо ценители литературы. Не рассказывай вы о педофилии - книга не считалась бы "горячей". &lt;b&gt;Не примешай вы сюда семью - многие семьи были бы счастливее&lt;/b&gt;. Но, &lt;a href="http://www.facebook.com/vitali.ziusko/posts/215670741837015"&gt;оказывается&lt;/a&gt;, заботит издательства не это. (Наверное, не ошибусь, говоря во множественном числе). Не на шутку беспокоит их то, что такие книги - "большой риск", ответственно заботятся, как бы отпечатанные экземпляры на складе не залежались. Business is business...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Дети и родители - только потребители?&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
Хотел бы я видеть другое отношение, но разглядел - такое... Вас это не беспокоит?&lt;br /&gt;
&lt;br /&gt;
Дорогие &lt;b&gt;детские&lt;/b&gt; издательства! По-моему, подобные книги - не решают проблем. Вместо этого вы учите детей и родителей видеть зло там, где его нет. Это очень легко (и даже бывает приятно) - воображать неприятное, когда преподнесено оно слогом красивым (спросите у &lt;a href="https://www.google.com/search?q=%D1%8D%D0%BC%D0%BE&amp;amp;ie=utf-8&amp;amp;oe=utf-8"&gt;эмо&lt;/a&gt;!). И не надо на любое неприятие вашей "современной книги" говорить, мол надо сначала прочитать, прежде чем обсуждать. &lt;b&gt;Здесь не книга обсуждается&lt;/b&gt;. Не важно её содержание, т.к. &lt;a href="http://book.kompasgid.ru/index.php?page=shop.product_details&amp;amp;flypage=flypage.tpl&amp;amp;product_id=197&amp;amp;category_id=6&amp;amp;option=com_virtuemart&amp;amp;Itemid=770"&gt;название и аннотацию&lt;/a&gt; прочитает гораздо больше людей, чем саму книгу. И этого - хватит. Объясню.&lt;br /&gt;
&lt;br /&gt;
Во-первых, человек разумный имеет представление, &lt;a href="http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D0%B4%D0%BE%D1%84%D0%B8%D0%BB%D0%B8%D1%8F"&gt;что такое педофилия&lt;/a&gt;. Во-вторых, он знает о сказке "Красная Шапочка" (кто утверждает, что сказка "не добрая" - наверное, познакомился с её оригинальным вариантом будучи взрослым, или забыл о своём детстве, или не слышал тогда эту сказку, или - о, ужас! - слышал с комментариями взрослых). В-третьих, человек знает о существовании семьи, любит свою семью. И, я уверен, ему не приходило в голову установить прочную ассоциацию между этими тремя вещами... пока он не увидел название вашей книги. Вот что важно! Автор по своей прихоти связала эти три вещи в одном произведении, вы - разносите это под видом современной книги для подростков/родителей, да ещё и подъяриваете, мол, не каждый посмеет это прочитать... Знаете, большинство семей никогда (никогда!) не столкнётся с подобной ситуацией. Они что-то потеряют?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Что хорошего приносит миру ваше "очень актуальное" название на витрине?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Считаете, готовите ребёнка к жизни?&lt;/b&gt;&lt;br /&gt;
Думаю, вы искажаете его в&lt;i&gt;и&lt;/i&gt;дение жизни.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Считаете, обсуждение темы педофилии поможет людям понять друг друга?&lt;/b&gt;&lt;br /&gt;
Для этого нужны условия. Перед тем, как выпустить книгу, вы хотя бы побеспокоились узнать, созданы ли подходящие условия для её обсуждения, условия взаимопонимания и острой необходимости в подобной худ. литературе? Думаю, нет (я очень, очень хочу, чтобы меня поправили). Поэтому бросая в семьи такие "горячие пирожки" вы ещё больше разобщаете родителей и детей.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Считаете годовую прибыль?&lt;/b&gt;&lt;br /&gt;
Ценой разрушения счастья там, где оно ещё &lt;strike&gt;могло&lt;/strike&gt; может сохраниться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Изображение: швейцарский художник Альберт Анкер, картина маслом "Красная Шапочка", 1883&amp;nbsp;год.
&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-5253760238423451328?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/-BN1lq7iFfI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/5253760238423451328/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=5253760238423451328&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/5253760238423451328?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/5253760238423451328?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/-BN1lq7iFfI/blog-post.html" title="Очень современные просветители" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-MKJIpZ0XEmE/TsFEUxYmFDI/AAAAAAAACZs/b32-1B5o9Ts/s72-c/little-red-riding-hood-forest.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/11/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEINQ387cSp7ImA9WhRSFks.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-9071013748729791820</id><published>2011-11-03T08:35:00.001+02:00</published><updated>2011-11-19T03:36:32.109+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-19T03:36:32.109+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Библиотека усатых шаблонов для C++</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" height="395" src="http://3.bp.blogspot.com/-xFI0D-JsdY4/TrGZZE-7GgI/AAAAAAAACZg/L76gClVze2A/s400/mustache-plustache-vcpp2010-express.png" width="300" /&gt;&lt;/div&gt;
Появилась необходимость использовать шаблоны в своём (инди-)проекте на C++. Т.к. я &lt;a href="http://savdalion.blogspot.com/search/label/CouchDB"&gt;работаю c CouchDB&lt;/a&gt;, мне очень привычно использовать &lt;a href="http://mustache.github.com/"&gt; Mustache&lt;/a&gt;. К счастью, этот замечательный и крайне быстрый шаблонизатор доступен практически для всех известных на сегодня языков программирования. C++ - известный язык :) и Mustache для него называется &lt;a href="https://github.com/mrtazz/plustache"&gt;Plustache&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Я почему решил об этом написать? Потому что работаю с C++ уже полгода (не считаю себя классным специалистом, нет), успел его и возненавидеть, и полюбить. Порог входа в этот язык - довольно высок: шишок у начинающих C++ изучать - мама не горюй! И здесь речь не о первой программе типа&amp;nbsp; "&lt;a href="http://ru.wikipedia.org/wiki/Hello,_world%21"&gt;Hello world!&lt;/a&gt;", хотя и это в C++ - уже достижение :) Собрать проект из исходного кода - то, без чего ни один серьёзный программист сегодня не выживет. И если человек не знает... нет, даже не основ, а (!) подноготной C++, изучение языка может замедлиться (ведь придётся писать и отлаживать свой &lt;a href="http://vexell.ru/2010/12/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D0%BE%D0%B8%D1%82-%D0%BB%D0%B8-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B5%D1%82%D0%B0%D1%82/"&gt;велосипед&lt;/a&gt;) или даже остановиться. Надеюсь, описание процесса сборки проекта от "А" до "Я" поможет Вам в дальнейшем смело включать сторонние библиотеки в свои проекты.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Если бы &lt;a href="https://github.com/mrtazz"&gt;Daniel Schauenberg&lt;/a&gt; - 
автор Plustache, огромное ему спасибо за труд! - попробовал собрать свой
 проект под Windows, он бы, наверное, внёс изменения в код. Хотя вряд 
ли: поддерживать несколько операционных систем - та ещё радость! Тем 
более, что проект - маленький и с лёгкостью переносится на любые ОС. Прекрасно подходит для обучения. &lt;br /&gt;
&lt;br /&gt;
Итак, соберём &lt;a href="https://github.com/mrtazz/plustache"&gt;Plustache&lt;/a&gt; как статическую библиотеку (*.lib) на MS Visual C++ 2010.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;I. Получение исходного кода проекта.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Это самый простой этап. Зайдите на &lt;a href="https://github.com/mrtazz/plustache"&gt;https://github.com/mrtazz/plustache&lt;/a&gt;, скачайте ZIP-архив проекта, распакуйте содержимое.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;II. Подготовка проекта для VC++.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Не было бы печали, если бы &lt;a href="http://habrahabr.ru/tag/rake/"&gt;rake&lt;/a&gt; работал под Windows также, как для OS X. Это не так. Хотя - клянусь! - я поставил для этой цели &lt;a href="http://rubyinstaller.org/"&gt;Ruby&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;1. Создание пустого проекта.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Выбираем в меню VC++ "Создать проект / Пустой проект "...&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://3.bp.blogspot.com/-MetO_IwJv1E/TrE5e1OJalI/AAAAAAAACZM/N8ybCQ4g5eM/s1600/create-new-clear-project-vc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="435" src="http://3.bp.blogspot.com/-MetO_IwJv1E/TrE5e1OJalI/AAAAAAAACZM/N8ybCQ4g5eM/s640/create-new-clear-project-vc.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
... и в свойствах проекта делаем след. изменения:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Общие / Тип конфигурации = "Статическая библиотека (.lib)"&lt;/li&gt;
&lt;li&gt;C++ / Общие / Обрабатывать предупреждения как ошибки = "Да" или "Нет" (см. заметку ниже). &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;2. Копирование файлов.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
VC++ поощряет создание проектов, которые заставят помучаться желающих скомпилировать их в другой &lt;a href="http://ru.wikipedia.org/wiki/IDE"&gt;IDE&lt;/a&gt;. Я говорю о файлах *.h и *.cpp, которые при создании из IDE VC++ бросаются в общую папку и т.н. "фильтрах", которыми VC++ мило позволяет пользоваться, но которые &lt;b&gt;не являются&lt;/b&gt; папками файловой системы. Файлы Plustache лежат в папках "include", "src" и "tests". Можно пойти на поводу у Microsoft, но здесь вовсе не тот случай, когда мы вынуждены это делать. Поэтому&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Целиком скопируйте папки "include", "src" и "tests" в папку нашего проекта, воспользовавшись Проводником Windows.&lt;/li&gt;
&lt;li&gt;Добавим в VC++ / plustache файлы, &lt;b style="color: #cc0000;"&gt;(!)&lt;/b&gt; за исключением "main.cpp". Будем аккуратны: h-файлы поместим в "Заголовочные файлы", cpp-файлы - в "Файлы исходного кода".&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;3. Настройка проекта, разрешение зависимостей.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Настроек, сделаных в п.1, недостаточно для сборки, если проект имеет зависимости. Мало какой проект на C++ их не имеет. У Plustache зависимостей две:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://boost.org/"&gt;Boost&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://easy-coding.blogspot.com/search/label/gtest"&gt;GoogleTest&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Boost&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
За время изучения C++ я понял, что без &lt;a href="http://www.boost.org/"&gt;Boost&lt;/a&gt;'а программиста ждёт безрадостное существование. Если &lt;a href="http://www.boost.org/"&gt;Boost&lt;/a&gt; у Вас на компьютере ещё не установлен, &lt;a href="http://www.boost.org/doc/libs/1_47_0/more/getting_started/windows.html"&gt;сделайте это&lt;/a&gt;. Благо, создатели этого фреймворка пошли по пути упрощения и последние версии работают без компиляции. Вообще говоря, когда Вы начали серьёзно работать с C++, существует два ответа на вопрос "Нужно ли устанавливать Boost?": (а) да, сейчас; (б) да, позже.&lt;br /&gt;
&lt;br /&gt;
&lt;b style="color: #cc0000;"&gt;(!)&lt;/b&gt; После установки Boost'а, убедитесь, что переменная окружения "BOOST_ROOT" - открываем Мой компьютер / Свойства / Дополнительно / Переменные среды - установлена и указывает на нужную папку. Например, это может быть папка "&lt;i&gt;C:\boost_Версия&lt;/i&gt;".&lt;br /&gt;
Если внимательно следовали инструкции по установке, так оно и будет.&lt;br /&gt;
&lt;br /&gt;
Заходим в свойства проекта Plustache и дорисовываем:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Каталоги VC++ / Каталоги включения / Изменить / Добавить = "$(BOOST_ROOT)" &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://easy-coding.blogspot.com/2009/07/google-test.html"&gt;GoogleTest&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Если уже используете эту библиотеку &lt;a href="http://www.sql.ru/forum/actualthread.aspx?tid=843109"&gt;unit-тестирования&lt;/a&gt; в других своих проектах (в Boost свой модуль тестирования тоже &lt;a href="http://www.devexp.ru/2010/01/boost-test-yunit-testirovanie-i-cmake/"&gt;есть&lt;/a&gt;, но также &lt;a href="http://www.devexp.ru/2010/01/boost-test-yunit-testirovanie-i-cmake/#comment-1888"&gt;есть жалобы&lt;/a&gt;, что библиотека на развивается) - просто добавьте пути к заголовочным файлам, как сделали выше для Boost'а.&lt;br /&gt;
&lt;br /&gt;
Но для Plustache от GoogleTest можно отказаться. Библиотека используется в файлах папки "test". Поэтому просто не добавляйте эти файлы в проект.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;4. Устранение ошибок компиляции.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Запускаем компиляцию. &lt;br /&gt;
&lt;br /&gt;
Первая ошибка - компилятор VC++ 2010 не найдёт пути к некоторым &lt;b&gt;своим&lt;/b&gt; же файлам включения (#include "include/*.hpp"). Можно&amp;nbsp; Устраняется в свойствах проекта:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Каталоги VC++ / Каталоги включения / Изменить / Добавить = "Путь к папке, где лежит проект". Например, такой &amp;gt; "&lt;i&gt;D:\Projects\utils\plustache&lt;/i&gt;".&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Опция "&lt;i&gt;Обрабатывать предупреждения как ошибки&lt;/i&gt;" (см. выше) заставляет программиста писать более чистый, быстрый и надёжный код. Для больших библиотек устанавливать эту опцию - лишняя 
головная боль, т.к. свободный код программисты на Windows пишут редко. 
Иначе, почему в &lt;a href="http://www.ogre3d.org/"&gt;больших проектах&lt;/a&gt; количество предупреждений компилятора - зашкаливает!?&lt;br /&gt;
&lt;br /&gt;
Т.к. Plustache - очень маленькая библиотека, ошибок много исправлять не придётся.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code class="c++"&gt;try {
    // ...
} catch ( int i ) {
    // ...
}
&lt;/code&gt;&lt;/pre&gt;
исправляем на&lt;br /&gt;
&lt;pre&gt;&lt;code class="c++"&gt;try {
    // ...
} catch ( ... ) {
    // ...
}
&lt;/code&gt;&lt;/pre&gt;
Компилятор покажет где.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В общем-то, на этом всё. Статическая библиотека &lt;code&gt;plustache.lib&lt;/code&gt; создана (компилятор показывает путь, куда её положил) и готова к работе в других проектах под MS&amp;nbsp;Windows. Благодаря тому, что Вы читали внимательно и не добавили в проект Visual&amp;nbsp;C++ файл "main.cpp", не появится предупреждение &lt;a href="http://msdn.microsoft.com/ru-RU/library/1zzf962b%28v=VS.100%29.aspx"&gt;LNK4006&lt;/a&gt; при использовании &lt;code&gt;plustache.lib&lt;/code&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/2909062909816541374-9071013748729791820?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/BFja5CC2_as" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/9071013748729791820/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=9071013748729791820&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/9071013748729791820?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/9071013748729791820?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/BFja5CC2_as/mustache-c.html" title="Библиотека усатых шаблонов для C++" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-xFI0D-JsdY4/TrGZZE-7GgI/AAAAAAAACZg/L76gClVze2A/s72-c/mustache-plustache-vcpp2010-express.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/11/mustache-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcCQ344cCp7ImA9WhdaGUs.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-2536960103615957733</id><published>2011-10-28T20:19:00.000+03:00</published><updated>2011-10-30T10:07:42.038+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-30T10:07:42.038+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CouchDB" /><title>А если в CouchDB View на View надо позарез?</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" src="http://3.bp.blogspot.com/-MYkTMXY28Kg/TqriSPKeuxI/AAAAAAAACZE/iziOR15SyCk/s1600/view-on-view-couchdb.png" /&gt;&lt;/div&gt;
Когда начинаешь быть на "ты" с CouchDB, почти всегда оказывается, что чего-то не хватает: нет полнотекстового поиска "из коробки", хранилище растёт как на дрожжах и приходится самому следить за его размером и т.д.. С поиском вопрос решается подключением &lt;a href="http://wiki.apache.org/couchdb/Full_text_search"&gt;сторонних модулей&lt;/a&gt;. С пугающим ростом базы данных в след. релизах вопрос уже решён. Но вот такая хитрая штука как обработка результатов другого представления - этого в ближайших планах разработчиков CouchDB не предвидится. Хотя вещь, безусловно, полезная.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Например, мы можем держать в хранилище сырые данные - скажем, список фактических адресов, забитых &lt;strike&gt;кем&lt;/strike&gt; как попало - и создать для них представление (&lt;a href="http://www.job-blog.bullgare.ru/2009/08/%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D1%81-view-%D0%B4%D0%BB%D1%8F-couchdb/"&gt;view&lt;/a&gt;), результатом которого будет чёткая структура с разбивкой по стране / городу / индексу / улице / номеру дома и пр.. Чем хорош такой подход? Написать &lt;i&gt;идеальный&lt;/i&gt; парсер вручную введённых адресов - дело не одного дня и даже месяца (спорить с этим может только тот, кто с подобной задачей в промышленных масштабах не сталкивался). А вот &lt;i&gt;достаточный для начала работы&lt;/i&gt; парсер адресов - дело 1 часа. И это позволит начать разработку след. этапов системы без необходимости ждать полностью готового списка структурированных адресов и (!) даже когда-либо возвращаться к сырым адресам. Непробиваемые аргументы, когда работает команда и/или требуется видимый результат "уже завтра". Мало? Тогда представьте, что каждый день добавляется сотня новых адресов... Потом к парсеру можно возвращаться, делая его всё лучше. Но структурированные данные благодаря созданному представлению уже на руках! И, раз уж начали представлять, предположим, что проект - большой и было принято решение оставить это живое представление (живое - потому что формирует адреса из сырого потока) как источник для других модулей системы. Т.е. менять его вывод - ни-ни!&lt;br /&gt;
&lt;br /&gt;
И вот, хотим &lt;i&gt;некоторым&lt;/i&gt; адресатам что-то сами доставлять. Для этой цели хорошо бы группировать адреса по индексам, чтобы раздать списки водителям, сэкономив и бензин, и время (Вы ведь знаете, что такое &lt;a href="http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%87%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81"&gt;почтовый индекс&lt;/a&gt;). И тут CouchDB оказывается не на высоте, т.к. живой список адресов (в виде гранитного представления) - есть, а вот работать с ним - не можем: &lt;b&gt;CouchDB не поддерживает создание представления для другого представления&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
В общем-то, задачу подобную задачу можно решить, периодически копируя результаты работы представления в новую базу; или создав новое представление, которое помимо структурирования адресов (copy / paste здесь поможет) будет делать необходимую нам выборку и группировку по почтовым индексам. Оба решения усложнят дальнейшее сопровождение системы. А ведь как красиво задача решается простым созданием нового представления... на готовые результаты другого!&lt;br /&gt;
&lt;br /&gt;
К счастью, на этой неделе появилась разработка, позволяющая создавать цепочки представлений, благодаря которым изложенная выше задача решается и просто, и красиво &amp;gt; &lt;a href="https://github.com/afters/Couch-Incarnate"&gt;https://github.com/afters/Couch-Incarnate&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Для своей работы требует &lt;a href="http://nodejs.org/"&gt;Node.js&lt;/a&gt;.&lt;br /&gt;

&lt;br/&gt;
P.S. Строго говоря, &lt;a href="https://github.com/afters/Couch-Incarnate"&gt;couch-incarnate&lt;/a&gt; не является единственной альтернативой реализовать представление по результатам другого map/reduce. Активно ведётся разработка целой системы - &lt;a href="https://cloudant.com/"&gt;CloudAnt&lt;/a&gt; - на базе CouchDB, где, помимо прочего, поддерживается view на view что называется "из коробки". &lt;a href="https://cloudant.com/"&gt;CloudAnt&lt;/a&gt;, безусловно, заслуживает отдельного внимания, но это - не &lt;a href="http://couchdb.apache.org/"&gt;тот&lt;/a&gt; CouchDB.
&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/2909062909816541374-2536960103615957733?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/amng4-bBSiM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/2536960103615957733/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=2536960103615957733&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/2536960103615957733?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/2536960103615957733?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/amng4-bBSiM/couchdb-view-view.html" title="А если в CouchDB View на View надо позарез?" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-MYkTMXY28Kg/TqriSPKeuxI/AAAAAAAACZE/iziOR15SyCk/s72-c/view-on-view-couchdb.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/10/couchdb-view-view.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMDRXw_eyp7ImA9WhdaGE8.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-3998896086125816632</id><published>2011-10-26T16:14:00.000+03:00</published><updated>2011-10-28T20:54:34.243+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-28T20:54:34.243+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CouchDB" /><title>Специфические JavaScript-функции CouchDB</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" src="http://1.bp.blogspot.com/-32LvJkIuDPA/TqgGu4TvzuI/AAAAAAAACYc/LgCT5K76Ng0/s1600/couchdb-function.png" /&gt;&lt;/div&gt;
&lt;a href="http://ru.wikipedia.org/wiki/CouchDB"&gt;CouchDB&lt;/a&gt; - &lt;b&gt;платформа&lt;/b&gt; для разработки приложений. Об этом вначале забывают веб-мастера, когда обнаруживают, что весь код пишется на JavaScript (и которые ещё не знакомы с &lt;a href="http://ru.wikipedia.org/wiki/Node.js"&gt;Node.js&lt;/a&gt;, ага). Как и на любой платформе, здесь присутствуют функции, которых не найдёте в JavaScript-документации. Ниже - все они в алфавитном порядке. &lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul style="clear: both;"&gt;
&lt;li&gt;&lt;a href="http://wiki.apache.org/couchdb/View_collation"&gt;&lt;b&gt;emit()&lt;/b&gt;&lt;/a&gt; В &lt;a href="http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Map_Functions"&gt;map-функции&lt;/a&gt; формирует результат в виде пар ключ-значение. &lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://wiki.apache.org/couchdb/Formatting_with_Show_and_List#Listing_Views_with_CouchDB_0.10_and_later"&gt;getRow&lt;/a&gt;()&lt;/b&gt; В &lt;a href="http://guide.couchdb.org/draft/transforming.html"&gt;list-функции&lt;/a&gt; позволяет обработать результат, получаемый из &lt;a href="http://guide.couchdb.org/editions/1/en/views.html"&gt;view&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;JSON.parse()&lt;/b&gt; Преобразует строку в объект &lt;a href="http://json.org/json-ru.html"&gt;JSON&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;JSON.stringify()&lt;/b&gt; Преобразует объект &lt;a href="http://json.org/json-ru.html"&gt;JSON&lt;/a&gt; в строку. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;log()&lt;/b&gt; Выводит в лог сообщения / значения переменных. Полезная для отладки функция. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://wiki.apache.org/couchdb/Formatting_with_Show_and_List#Responding_to_different_Content-Type_Request_Headers"&gt;&lt;b&gt;provides()&lt;/b&gt;&lt;/a&gt; Метод, пришедший на замену respondWith(). Переопределяет заголовок перед отправкой результата клиента в &lt;a href="https://github.com/apache/couchdb/blob/1.0.1/share/www/script/test/show_documents.js#L137-157"&gt;show / view&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://wiki.apache.org/couchdb/Formatting_with_Show_and_List#Responding_to_different_Content-Type_Request_Headers"&gt;registerType()&lt;/a&gt;&lt;/b&gt; Добавляет новый тип, который может быть возвращён в заголовке ответа. Посмотреть предустановленные типы Вы можете в &lt;code&gt;&amp;lt;ПапкеCouchDB&amp;gt;/share/couchdb/server/main.js&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://caolanmcmahon.com/posts/commonjs_modules_in_couchdb"&gt;&lt;b&gt;require()&lt;/b&gt;&lt;/a&gt; Подключает указанный JavaScript-файл (стандарт &lt;a href="http://www.commonjs.org/"&gt;CommonJS&lt;/a&gt;). &lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://wiki.apache.org/couchdb/Formatting_with_Show_and_List#Listing_Views_with_CouchDB_0.10_and_later"&gt;send()&lt;/a&gt;&lt;/b&gt; Отправляет клиенту пакет или часть пакета. Используется в &lt;a href="http://guide.couchdb.org/draft/transforming.html"&gt;list-функции&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://wiki.apache.org/couchdb/Formatting_with_Show_and_List#Listing_Views_with_CouchDB_0.10_and_later"&gt;&lt;b&gt;start()&lt;/b&gt;&lt;/a&gt; Задаёт заголовок для пакета в list-функции. Всегда должна идти раньше &lt;b&gt;send()&lt;/b&gt;. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://stackoverflow.com/questions/7306981/how-to-get-sum-of-all-couchdb-values"&gt;sum()&lt;/a&gt;&lt;/b&gt; Суммирует значения в reduce-функции.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;toJSON()&lt;/b&gt; Псевдоним для &lt;b&gt;JSON.stringify()&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
Ссылался я на страницы, которые посчитал наиболее удачными для понимания работы описываемых функций. Поэтому, если в первом абзаце не найдёте ожидаемое упоминание функции, просто посмотрите ниже: непременно обнаружите примеры / пояснения.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-3998896086125816632?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/T4gKPpqDIk4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/3998896086125816632/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=3998896086125816632&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/3998896086125816632?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/3998896086125816632?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/T4gKPpqDIk4/javascript-couchdb.html" title="Специфические JavaScript-функции CouchDB" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-32LvJkIuDPA/TqgGu4TvzuI/AAAAAAAACYc/LgCT5K76Ng0/s72-c/couchdb-function.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/10/javascript-couchdb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4HQ3s9fSp7ImA9WhdaEU0.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-3812200134599032603</id><published>2011-10-19T22:11:00.002+03:00</published><updated>2011-10-20T12:28:52.565+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-20T12:28:52.565+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CouchDB" /><title>CouchDB 1.1.1: Релиз близок!</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" src="http://4.bp.blogspot.com/-fQ10ypeBRYk/Tp8fyJc6-BI/AAAAAAAACYA/LYZyyHFa7vU/s1600/build-vote-reliaze-couchdb.png" /&gt;&lt;/div&gt;
Сегодня &lt;a href="http://permalink.gmane.org/gmane.comp.db.couchdb.devel/17616"&gt;собран пререлиз CouchDB&amp;nbsp;1.1.1&lt;/a&gt;.&lt;br /&gt;
(Последняя официальная версия CouchDB - 1.1.0 - была выпущена 30-05-2011&amp;nbsp;г.)&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Добавлена функциональность&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://savdalion.blogspot.com/2011/09/couchdb-ubuntu.html"&gt;Наконец-то&lt;/a&gt;, CouchDB дружит со SpiderMonkey 1.8.5!&lt;/li&gt;
&lt;li&gt;Добавлена настройка (размер результата в байтах) в файл конфигурации для &lt;a href="http://localhost/_log"&gt;http://localhost/_log&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Модулю &lt;a href="http://commonjs.org/"&gt;CommonJS&lt;/a&gt; разрешено быть пустым.&lt;/li&gt;
&lt;li&gt; Etag'и для представлений стали умнее.&lt;/li&gt;
&lt;li&gt;Улучшен обработчик, определяющий количество открытых баз (параметр конфигурации &lt;code&gt;max_dbs_open_limit&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;В ответе для JSONP теперь передаётся "Content-Type": "text/javascript".&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wiki.apache.org/couchdb/Document_Update_Handlers"&gt;Обработчик обновлений&lt;/a&gt; может возвращать HTTP-код в ответе клиенту.&lt;/li&gt;
&lt;li&gt;При очистке представлений (сжатии), удаляются все индексные файлы, если в базе отсутствует &lt;a href="http://guide.couchdb.org/draft/design.html"&gt;ddoc&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Для параметра конфигурации &lt;code&gt;max_replication_retry_count&lt;/code&gt; теперь можно указать "бесконечность". См. прим. в файле конфигурации.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Исправлены ошибки&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Запускалась &lt;code&gt;validate_doc_update&lt;/code&gt; функция, даже если она была удалена.&lt;/li&gt;
&lt;li&gt;В &lt;code&gt;_changes&lt;/code&gt; попадались дубликаты.&lt;/li&gt;
&lt;li&gt;Обработчик обновлений прекращал работу после разрешения конфликта.&lt;/li&gt;
&lt;li&gt;Включение фильтра в &lt;code&gt;_replicator&lt;/code&gt; могло повредить базу.&lt;/li&gt;
&lt;li&gt;Сжатие большого представления завершалось с ошибкой.&lt;/li&gt;
&lt;li&gt;При каждом вызове &lt;code&gt;_log&lt;/code&gt; создавался новый дескриптор файла.&lt;/li&gt;
&lt;li&gt;Терялись записи при вызове &lt;code&gt;_changes?style=all_docs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;В системе оставались жить процессы couchjs, которые завершались с ошибкой &lt;code&gt;reduce_overflow&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Метод &lt;code&gt;&lt;a href="http://www.blogger.com/"&gt;&lt;span id="goog_1844213449"&gt;&lt;/span&gt;provides()&lt;span id="goog_1844213450"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/code&gt; не корректно работал в &lt;code&gt;show&lt;/code&gt;. &lt;a href="https://issues.apache.org/jira/browse/COUCHDB-1272"&gt;CouchDB-1272&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Репликация прекращалась, когда в базе-источнике встречался документ с пустым UID.&lt;/li&gt;
&lt;li&gt;Процесс couchjs мог зависать при обслуживании некоторых запросов.&lt;/li&gt;
&lt;li&gt;Исправлены ошибки в &lt;a href="http://wiki.apache.org/couchdb/HTTP_Document_API?highlight=%28multipart%29%7C%28PUT%29%7C%28API%29#Attachments"&gt;multipart PUT API&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Прочие мелочи&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Минимальная версия Erlang'а - R13B02. &lt;/li&gt;
&lt;li&gt;Для Windows-версии добавлена ссылка на &lt;a href="http://icu-project.org/download/4.2.html"&gt;ICU 4.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Путь для функций обновления может начинаться со слешей.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-3812200134599032603?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/o3YZ3nvj6y8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/3812200134599032603/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=3812200134599032603&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/3812200134599032603?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/3812200134599032603?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/o3YZ3nvj6y8/couchdb-111.html" title="CouchDB 1.1.1: Релиз близок!" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-fQ10ypeBRYk/Tp8fyJc6-BI/AAAAAAAACYA/LYZyyHFa7vU/s72-c/build-vote-reliaze-couchdb.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/10/couchdb-111.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EERHg7eyp7ImA9WhdaEEg.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-4882752969078204948</id><published>2011-10-16T19:12:00.000+03:00</published><updated>2011-10-19T22:13:25.603+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-19T22:13:25.603+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Couchbase" /><category scheme="http://www.blogger.com/atom/ns#" term="CouchDB" /><title>Couchbase Server 2.0 &gt; Общие вопросы и ответы (по итогам вебинара)</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" src="http://4.bp.blogspot.com/-so3BXvizCdc/Tpr_CQs-uMI/AAAAAAAACX0/38ioegC2jvw/s1600/couchbase-server-2.png" /&gt;&lt;/div&gt;
&lt;i&gt;Перевод итогов вебинаров &lt;/i&gt;&lt;a href="http://couchbase.org/"&gt;&lt;i&gt;Couchbase&lt;/i&gt;&lt;/a&gt;&lt;i&gt;, которые на этой неделе опубликовал Perry Krug. &lt;a href="http://blog.couchbase.com/couchbase-server-20-most-common-questions-and-answers"&gt;Источник&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;I just finished up a nine-week technical webinar series highlighting the
 features of our upcoming release of Couchbase Server 2.0. It was such a
 blast interacting with the hundreds of participants, and I was blown 
away by the level of excitement, engagement and anticipation for this 
new product.&lt;/span&gt;&lt;/div&gt;
Я (&lt;i&gt;чит. - Пэри Круг&lt;/i&gt;) только что закончил 9-недельную серию вебинаров, освещающих новые возможности предстоящего релиза Couchbase Server 2.0. Это были яркие беседы с сотнями участников и я просто обалдел от волнения, рассказывая о новом продукте и ожидая его выпуска.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;(By the way, if you missed the series, all nine sessions are &lt;a href="http://www.couchbase.com/on-demand/webinar/couchbase-server-2.0-overview"&gt;available for replay&lt;/a&gt;).&lt;/span&gt;&lt;/div&gt;
(Если Вы пропустили серии, записи всех  вебинаров находятся &lt;a href="http://www.couchbase.com/on-demand/webinar/couchbase-server-2.0-overview"&gt;здесь&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #999999; font-size: x-small;"&gt;There were some great questions generated by users throughout the 
webinar series, and my original plan was to use this blog entry to 
highlight them all. I quickly realized there were too many to expect 
anyone to read through all of them, so I’ve taken a different tack. This
 blog will feature the most common/important/interesting questions and 
answer them here for everyone’s benefit. Before diving in, I’ll answer 
the question that was by far the most commonly asked: “How long until 
the GA of Couchbase Server 2.0?” We are currently on track to release it
 before the end of the year. In the meantime, please feel free to 
experiment with the &lt;a href="http://www.couchbase.org/get/couchbase/2.0.0"&gt;Developer Preview&lt;/a&gt; that is already available. As for the rest of the questions, here goes! &lt;/span&gt;&lt;br /&gt;
Участники задавали хорошие вопросы и  цель этого текста - собрать вопросы и ответы вместе, в этом блоге. Что я и сделал довольно быстро. Здесь будут освещены наиболее общие / важные / интересные вопросы и ответы на них. Но вначале, я отвечу на самый общий вопрос: "Когда появится официальная Couchbase Server 2.0?" Мы ожидаем её появления до конца года. Тем временем, пожалуйста, свободно эксперементируйте с &lt;a href="http://www.couchbase.org/get/couchbase/2.0.0"&gt;версией для разработчиков&lt;/a&gt;, она уже доступна. Приступим!&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style="color: #999999; font-size: x-small;"&gt;Q: What are the primary benefits of incorporating Membase and&amp;nbsp;CouchDB into a single product?&lt;/span&gt; &lt;br /&gt;
&lt;b&gt;В&amp;gt; Какие основные преимущества включения Membase и CouchDB в один проект?&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: Membase is a super fast, highly scalable key value store known for 
its performance and scalability. CouchDB on the other hand is a great 
document database, with powerful indexing and querying capabilities. 
Combining these two products brings together the best of both worlds to 
create a high-performance, highly elastic NoSQL database that scales out
 linearly while providing querying, indexing and document-oriented 
features.&lt;/span&gt;&lt;/div&gt;
О&amp;gt; Membase - очень быстрое, масштабируемое хранилище "Ключ-Значение". CouchDB - великолепная документоориентированная база данных, с мощными возможностями индексации и построения выборок. Объединение этих двух продуктов позволяет создать высокопроизводительное, гибкое NoSQL-хранилище, обеспечивающее нас линейной сложностью при масштабировании плюс возможностями индексации и выборки документов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: Does Couchbase speed up access to a database document by automatically caching it in memory?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Действительно ли увеличивается скорость работы с документами при  кешировании данных в памяти?&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: Absolutely! That’s one of the great feature of Couchbase Server 2.0, 
and comes from the vast experience we have with memcached. All access to
 documents goes through our integrated RAM caching layer (built out of 
memcached) to provide extremely low and, more importantly, predictable, 
latency under extremely heavy loads. For instance, we regularly see 
customers well over 100k operations/sec across a cluster and have taken 
single nodes to over 200k operations/sec in our own testing 
environments. This RAM caching layer also allows us to handle spikes in 
write (and read) load without affecting the performance of the 
application.&lt;/span&gt;&lt;/div&gt;
О&amp;gt; Так и есть! Это одно из больших достижений Couchbase Server 
2.0, и пришло оно благодаря нашему огромному опыту работы с Membase. Любой доступ к документам происходит через интегрированный кеш, RAM-слой (строится с помощью 'memcached'), что даёт крайне низкую и, что более важно, предсказуемую задержку в высоконагруженных системах. Например, мы сейчас получаем более чем 100K операций/сек на целом кластере, а в нашей тестовой среде смогли достичь производительности до 200K операций/сек для одного узла. Слой кеширования также позволяет нам обходить проблемы при записи (и чтении) без потери производительности приложения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: I see in your forums that Couchbase Server 2.0 uses the memcached 
protocol for accessing data as this is compatible for existing Membase 
users and also for the much higher performance. Is there a way to use 
REST APIs akin to CouchDB’s to access the documents in Couchbase Server 
2.0?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Я вижу на вашем форуме, что Couchbase Server 2.0 использует протокол memcached для доступа к данным для совместимости с уже существующими Membase-клиентами плюс для увеличения производительности. Как же тогда пользоваться REST API, который предоставляет CouchDB для доступа к документам?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: The first version of Couchbase Server 2.0 uses the memcached 
protocol for document access, and the CouchDB HTTP protocol for 
accessing views. Over time, these two will merge even closer. In the 
meantime, we have provided a number of client libraries that abstract 
these two access methods away from the developer.&lt;/span&gt;&lt;/div&gt;
О&amp;gt; Первая версия Couchbase Server 2.0 использует memcached-протокол для доступа к документам и HTTP-протокол для доступа к представлениям CouchDB. Со временем это будет объединено. Пока что мы создали библиотеки, которые объединяют эти два метода доступа к данным.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: Is Couchbase Server 2.0 going to be open source?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Couchbase Server 2.0 будет OpenSource-проектом?&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: It already is! As a company, Couchbase is fully committed to the 
furthering of the open source communities that exist and are being built
 around our various products. While our focus is on providing 
enterprise-class software to our paying customers, we embrace the 
free-flow of ideas and wide adoption that an open source project allows 
for and believe very strongly that there is a place for both.&lt;/span&gt;&lt;/div&gt;
О&amp;gt; Он уже им является! Как организация, Couchbase полностью представлена в сообществе OpenSource и на основе Couchbase Server 2.0 могут создаваться свои вариации продукта. Несмотря на то, что мы сосредоточены на приложениях класса предприятия, мы открыты для идей и верим, что благодаря OpenSource система будет адаптирована и для других областей. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #999999;"&gt;Indexing/Querying&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Индексация / Выборка&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&amp;nbsp;&lt;/span&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: All I need is a simple secondary index, not map/reduce...how do I do that?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Всё что мне нужно, это просто вторичный индекс, не map/reduce... Как мне быть?&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: Currently, all of our indexes are built using a map function (the 
reduce is totally optional and can be ignored here). &amp;nbsp;This is really 
just another syntax for creating an index and there are a variety of 
examples avialable discussing how to create very simple indexes. &amp;nbsp;The 
very simplest form would involve just putting "emit(doc.&lt;field&gt;)" 
in your map function where &lt;field&gt; is what you want to index off 
of. &amp;nbsp;This will create a list of all documents containing that field, 
sorted by that field. &amp;nbsp;Of course there are more complex scenarios, but 
it can be made quite simple if that is what is needed.&lt;/field&gt;&lt;/field&gt;&lt;/span&gt;&lt;/div&gt;
&lt;field&gt;&lt;field&gt;О&amp;gt;&amp;nbsp; В настоящее время все индексы строятся используя map-функцию (reduce можно игнорировать). Это просто другой синтаксис для создания индекса и есть множество разных примеров, как создать очень простые индексы. Самое простое  - поместить emit( doc.field ) в Вашу map-функцию. Это создаст список всех документов, содержащих поле 'field'; список будет сразу отсортирован по этому полю. Конечно, в действительности приходится сталкиваться с более сложными сценариями, но строится индекс всегда очень просто, если знаете, что Вам нужно. &lt;/field&gt;&lt;/field&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: How does dealing with Couchbase Server 2.0 views differ from CouchDB and Couchbase Single Server?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Чем представления Couchbase Server 2.0 отличаются от CouchDB и Couchbase Single Server? &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: Not at all...the format, the syntax, everything is the same. 
&amp;nbsp;Additionally, all the options for querying are supported. &amp;nbsp;You can 
literally copy-paste the view code from one to another. &amp;nbsp;Multiple design
 docs are also supported.&lt;/span&gt;&lt;/div&gt;
О&amp;gt; Ничем... Формат, синтаксис, всё остальное - одинаково. В дополнение, все опции запросов поддерживаются. Вы можете буквально копировать код представления из одной системы в другую. Множество дизайн-документов также поддерживается.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: Does Couchbase Server 2.0 support ad-hoc querying?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Couchbase Server 2.0 поддерживает запросы по требованию (&lt;a href="http://ru.wikipedia.org/wiki/%D0%91%D0%B5%D1%81%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_ad_hoc_%D1%81%D0%B5%D1%82%D0%B8"&gt;ad-hoc&lt;/a&gt; запросы)? &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: At the moment, all querying to Couchbase Server (like CouchDB) 
must be done against pre-materialized views. In general, this is the 
only way of providing reliable performance when making those queries. We
 also understand the need to for more on-demand/ad-hoc querying and are 
working diligently to provide that as well. Couchbase has already begun 
to take an industry-leader approach to creating a language specifically 
for unstructured data that can be used across the NoSQL landscape. Take a
 look at &lt;a href="http://unqlspec.org/" title="http://unqlspec.org"&gt;http://unqlspec.org&lt;/a&gt; to see what we're working on!&lt;/span&gt;&lt;/div&gt;
О&amp;gt; В данный момент все запросы к Couchbase Server (аналогично - к CouchDB) должны быть предварительно воплощены в представлениях. В общем, это только способ получить надёжную работу этих запросов. Мы также понимаем необходимость создания запросов по требованию и старательно работаем, чтобы это тоже было. Couchbase уже начали воспринимать как отраслевого лидера, создающего язык специально для работы с неструктурированными данными. Взгляните по &lt;a href="http://unqlspec.org/" title="http://unqlspec.org"&gt;http://unqlspec.org&lt;/a&gt; - и увидите, что работы идут полным ходом!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #999999;"&gt;SDKs/Client Libraries&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Среды разработки / Клиентские библиотеки&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&amp;nbsp;&lt;/span&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: Which SDK's and client libraries are supported?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Какие SDK и клиентские библиотеки поддерживаются? &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #999999; font-size: x-small;"&gt;A: At a base level, Couchbase Server 2.0 supports any library that 
implements the memcached protocol (and there are MANY of those). &amp;nbsp;For 
the additional functionality that we have added (extended protocol 
commands and view access) Couchbase &lt;a href="http://couchbase.org/code"&gt;provides client libraries&lt;/a&gt;
 for a variety of languages (Java, .NET, PHP, Python, Ruby, C/C++) as 
well as instructions for how to extend libraries for other languages.&lt;/span&gt;&lt;br /&gt;
О&amp;gt; На базовом уровне, Couchbase Server 2.0 поддерживаются библиотеки, которые реализуют протокол Memcached (и таких много). Для расширения функциональности, мы добавили библиотеки на разных языках программирования (Java, .NET, PHP, Python, Ruby, C/C++) а также руководства, как создать библиотеку на других языках. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: Is there any chance of dogpiling with stale=update_after? If you 
get 30 requests simultaneously for a view with stale=update_after, will 
they generate several requests simultaneously for updating the index?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Есть возможность создать беспорядок при использовании stale=update_after? Если вы получаете одновременно 30 запросов для обновления с включённым stale=update_after, тогда будут генерироваться разные запросы при обновлении индекса? &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: To recap, “stale” tells the server that this query request should 
be returned as quickly as possible, knowing that some data that has 
already been written may not be included in the view.&amp;nbsp; By putting 
“update_after” in the request as well, the client is telling the server 
to rematerialize the index in the background…after returning the initial
 request as quickly as possible.&amp;nbsp; Once this rematerialization is 
started, subsequent requests will not cause anything different to happen
 so there’s no worry of “dogpiling” or “stampeding herd” issues.&lt;/span&gt;&lt;/div&gt;
О&amp;gt; Вспомним, 'stale' говорит серверу что ответ на этот запрос должен быть возвращён так быстро, насколько возможно. Это означает, что некоторые данные, которые были записаны в хранилище, могут не попасть в представление. Поставив 'update_after' в запрос, клиент говорит серверу перестраивать индекс в фоне... после возвращения начального запроса так быстро, насколько возможно. Раз построение индекса началось, последующие запросы не вызовут ничего. Так что не волнуйтесь о беспорядке в базе (в ориг. - dogpilling or stampeding herd, "собачей кучи" или "панического бегства стада"). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: How does the client know when to pull updated the server/vbucket maps?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Как клиент узнает, что обновление на сервере завершилось? &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: All clients (whether they be our “smart” clients or are going 
through our Moxi process) will maintain a streaming connection to a 
Couchbase Server.&amp;nbsp; When the topology of the cluster changes 
(add/remove/failover nodes), the clients will be automatically updated 
with a new vbucket map over this connection.&amp;nbsp; The clients can also 
request this map on-demand, and do so everytime they startup.&amp;nbsp; 
Additionally, each node of the cluster knows which vbuckets it is 
responsible for and will only return data for those vbuckets.&amp;nbsp; This way,
 even if a client is temporarily out of sync with the cluster, it will 
never be vulnerable to inconsistent data.&lt;/span&gt;&lt;/div&gt;
О&amp;gt; Все клиенты (будь это наши "умные" клиенты или идущие через наш &lt;a href="http://www.couchbase.org/wiki/display/membase/Moxi"&gt;Moxi&lt;/a&gt;-процесс) будут поддерживать потоковое соединение с 
Couchbase Server. Когда топология кластера изменится (добавятся / удалятся / откажут узлы), клиент будет автоматически извещён по этому соединению получение новой &lt;a href="http://www.couchbase.org/wiki/display/membase/vBuckets"&gt;vbucket&lt;/a&gt;-карты. Клиенты также могут самостоятельно отправить запрос этой карты и делать это каждый раз при подключении. Кроме того, каждый узел кластера знает какие vbacket за что отвечают и может вернуть данные для конкретных vbucket. Т.о., даже если клиент временно не синхронизирован с кластером, он никогда не будет уязвим к получению противоречивых данных. &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #999999;"&gt;Development/Production View Usage&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Использование представлений при разработке / в производстве&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&amp;nbsp;&lt;/span&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: Why the extra effort of creating a view in “development” mode and then pushing it to production?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Почему нужны дополнительные усилия для создания представлений в режиме "разработки" и когда внедряем представления на стадии "производства"? &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: We wanted to provide the ability to do view development on a live 
dataset, but didn’t want to have that development impact the currently 
running application.&amp;nbsp; Thus, a “development” mode was created so that 
users could create and edit views on “real” data.&amp;nbsp; In order to speed up 
the iterations of development, the default is to materialize a view over
 a subset of the data.&amp;nbsp; When the development is complete, the user can 
opt to materialize the view over the whole cluster right before pushing 
it to production.&amp;nbsp; This gives the added benefit of materializing the 
view so that it is immediately ready for the application to use.&amp;nbsp; 
Lastly, this “development” mode can be used to edit views that are 
currently in production , without affecting the application’s access to 
them (by making a copy).&amp;nbsp; When the edits are complete, the view can then
 be materialized and swapped with the original into production.&lt;/span&gt;&lt;/div&gt;
О&amp;gt; Мы хотели бы предоставить возможность строить представления на живых наборах данных, но не хотим влиять при разработке на работающее сейчас приложение. Т.о., режим "разработки" был создан: так пользователи могли бы создавать и редактировать представления на "реальных" данных. В целях ускорения итераций разработки, по умолчанию представления создаются над подмножеством данных. Когда разработка завершена, пользователь может разместить представление на целом кластере прямо перед запуском на живых данных. Это даёт дополнительное преимущество: представление готово к немедленному использованию в приложении. Наконец, этот режим "разработки" может быть использован для редактирования представлений, находящихся в "производстве", без затрагивания самого приложения (сделав копию). Когда редактирование завершено, новое представление может заменить оригинал на "производстве".&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: How do you control what the development data set is?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Как контролировать, что работаем с "данными для разработки"?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A:&amp;nbsp; Currently, the development dataset is automatically decided by 
the software depending on how much data exists.&amp;nbsp; For small datasets, the
 software will actually materialize the view across the whole thing. As 
that gets larger, the software will automatically scale it down to 
provide a quicker response time while developing. Once the view is 
finalized, the user has the option to run it over the whole dataset 
manually (by clicking the tab “Full Cluster Dataset”) both for the 
purposes of final verification and to prepare it for production use.&lt;/span&gt;&lt;/div&gt;
О&amp;gt; На сегодня, набор данных для разработки автоматически определяется приложением&amp;nbsp; в зависимости от объёма существующих данных. Для малых наборов, приложение будет создавать представление, включив все данные. Для больших наборов, приложение автоматически масштабирует наборы, опираясь на время отклика при их получении. По завершении разработки представления, пользователь имеет возможность вручную запустить код для всего набора (щёлкнув по вкладке "Full Cluster Dataset") с целью окончательной проверки и подготовки представления для использования в "производстве". &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #999999;"&gt;Clustering&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Кластеризация&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&amp;nbsp;&lt;/span&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: For a bucket with replica and auto-failover, will a server failure
 without rebalance causing retrieval/update errors on that bucket?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Для пакета (bucket) с репликой и при включённой "автоматической отказоусточивости", сбой пройдёт без перебалансировки кластера в случае ошибки выборки / обновления в пакете?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: When a server initially fails (for whatever reason: hardware, 
network, software) the application will briefly get errors for any data 
which that server was responsible for. Requests for data on other 
servers will not be impacted. These errors will continue until the node 
is “failed over” which activates the replica data (vbuckets) elsewhere 
in the cluster. The amount of time will vary depending on whether you 
are using automatic or manual failover…&lt;/span&gt;&lt;span style="background-color: yellow; font-size: x-small;"&gt;but once the failover is 
triggered there is no more delay&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;. You might ask “but why can’t I read 
from the replica data that already exists.”&amp;nbsp; The answer is two-fold.&amp;nbsp; 
First, we specifically disallow access to the replica data (while it is 
“replica”) to preserve the very strong consistency that our system 
provides. Under normal operation, you are guaranteed to “read your own 
writes” &lt;/span&gt;&lt;span style="background-color: yellow; font-size: x-small;"&gt;and this is done by only providing one location for accessing 
any given piece of data&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;. By allowing unrestricted reading of replicas, 
you might have a situation where one client writes a piece of data to 
the active copy and another client immediately tries to read that data 
from the replica…leading to possible inconsistency. Now, the second part
 of this answer is that we are currently working on feature to allow for
 reading from these replicas. It will be a new operation that is 
explicitly invoked by the application so that there won’t be any 
confusion about which copy is being read from. You’ll still want to 
failover the node as quickly as possible since writes will continue to 
fail. This is one example of the many features we have added as a direct
 response to our customers’ and users’ demands…you speak, and we listen 
(and then do something about it too)!&lt;/span&gt;&lt;/div&gt;
О&amp;gt; Когда произошёл сбой на сервере (по любой причине: оборудование, сеть, программа) приложение будет получать ошибки при запросе любых данных с этого сервера. Запрошенные с других серверов данные останутся прежними. Эти ошибки будут идти до узла, который активировал репликацию данных (vbuckets). Продолжительность будет варьироваться в зависимости от использованного режима отказоустойчивости - ручного или автоматического... Вы можете спросить: "Но почему я не могу прочесть данные из реплики, которая уже существует?" Ответ складывается из двух частей. Во-первых, мы специально запретили доступ к реплике, чтобы сохранить строгую согласованность данных в нашей системе. При нормальной работе вам гарантируется возможность "читать собственные данные". Позволив неограниченное чтение реплик, можно получить ситуацию, когда один клиент записывает часть данных в активную копию, а другой в это же время пытается прочитать данные из реплики... что, возможно, приведёт  к несогласованности. Вторая часть ответа касается возможности чтения из этих реплик. Это должна быть новая операция, в которой приложение ясно говорит, что прочитанные данные не внесут путаницы в работу. Вы до сих пор получаете быстрый отказоустойчивый узел, но запись в него вызовет сбой. Это лишь один пример, как много возможностей мы добавили, выслушав наших заказчиков и пользователей... Вы говорите, мы слушаем (и делаем)!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #999999;"&gt;Q: Is there any effect/risk/time when rebalancing a system under heavy write loads? Is it best to add nodes during quite times?&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;
&lt;b&gt;В&amp;gt; Действия / риски / время при восстановлении равновесия (перебалансировки) системы при большом частоте записей в неё.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: By design, the rebalance operation is done asynchronously so as to
 have as minimal-as-possible an impact on the performance of the 
cluster. However, the reality is that rebalancing puts an increased load
 on the cluster and requires resources in order to do so (network, disk,
 RAM, CPU). If the cluster is already close to capacity, any increased 
load may impact the application’s performance. While safe to do at 
anytime, we highly recommend performing your own tests in your own 
environment to characterize what, if any, impact will be had by a 
rebalance. Typically our customers perform these at low or quiet times, 
but the main advantage is that you don’t need to take the application 
completely offline as you continue to scale.&lt;/span&gt;&lt;/div&gt;
О&amp;gt; По замыслу, операция перебалансировки производится асинхронно, так что имеем минимальное влияние на производительность кластера. Однако, в реальности перебалансировка увеличивает нагрузку на кластер и требует ресурсов (сеть, диск, память, процессор). Если кластер уже наполнен до отказа, любая загрузка в него может влиять на производительность приложения. Хотя это безопасно, мы очень рекомендуем провести свои собственные тесты, чтобы определить степень влияния перебалансировки на вашу систему. Обычно наши клиенты уделяют этому вопросу мало времени, но основное преимущество перебалансировки - вам не нужно останавливать работу системы, чтобы ускорить её работу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: What’s a vbucket?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Что такое vbucket?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: A vbucket is our way of logically partitioning data so that it can
 be spread across all the nodes within a cluster. Every Couchbase-type 
bucket that gets created on the cluster is automatically (and 
transparently) split up into a static set of slices (the vbuckets). 
These are then “mapped” to individual servers. When a node is added or 
removed, it is these slices that get moved around and re-mapped to 
provide linear and non-disruptive scaling. &lt;span style="background-color: yellow;"&gt;While totally abstracted from
 the application and user, it’s important to realize that vbuckets exist
 “under-the-hood” to provide much of the wonderful capabilities that 
Couchbase Server has&lt;/span&gt;. You can learn more about the vbucket concept here:
 &lt;a href="http://www.couchbase.org/wiki/display/membase/vBuckets"&gt;http://www.couchbase.org/wiki/display/membase/vBuckets&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
О&amp;gt; vbucket - это наш вариант логического деления данных, которые могут передаваться между узлами кластера. Каждый пакет (bucket) в кластере автоматически (и прозрачно) разбивает наборы данных на куски (vbucket). Пакеты затем "проецируются" на отдельные серверы. Когда узел добавляется или убирается, части данных перемещаются и перепроецируются. Это происходит без прерывания работы системы. Пакеты не затрагивают приложение и пользователя. Вы можете узнать больше о концепции vbucket здесь &amp;gt; &lt;a href="http://www.couchbase.org/wiki/display/membase/vBuckets"&gt;http://www.couchbase.org/wiki/display/membase/vBuckets&lt;/a&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #999999;"&gt;Monitoring&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Отслеживание&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&amp;nbsp;&lt;/span&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: Is the Couchbase Server Web UI the only method of monitoring a Couchbase Server cluster?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Веб-интерфейс Couchbase Server - единственный способ наблюдать за работой кластера?  &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: Not necessarily, no. All that you see and can do in the Web UI is actually driven by our REST interface (&lt;a href="http://www.couchbase.org/wiki/display/membase/Membase+Management+REST+API"&gt;http://www.couchbase.org/wiki/display/membase/Membase+Management+REST+API&lt;/a&gt;)
 that is programmatically accessible externally. &amp;nbsp;Additionally, each 
individual server (and each individual bucket on that server) provides 
its own “raw” statistics that are used by the REST API.&amp;nbsp; These raw 
statistics are available externally as well: &lt;a href="http://www.couchbase.org/wiki/display/membase/Monitoring+Membase"&gt;http://www.couchbase.org/wiki/display/membase/Monitoring+Membase&lt;/a&gt;.&amp;nbsp;
 It is our goal to provide as much information as possible about the 
system so that our users can effectively monitor it both from a capacity
 planning perspective and a diagnostic/troubleshooting perspective when 
things start to go wrong (or to prevent things from going wrong in the 
first place.&lt;/span&gt;&lt;/div&gt;
О&amp;gt; Вовсе нет. Всё, что вы видите и можете делать в веб-интерфейсе Couchbase Server, управляется нашим &lt;a href="http://www.couchbase.org/wiki/display/membase/Membase+Management+REST+API"&gt;REST-интерфейсом&lt;/a&gt;, доступным внешним программам. Также, каждый конкретный сервер (и каждый конкретный пакет на сервере) предоставляет по REST API собственную "сырую" статистику. Эта сырая статистика также &lt;a href="http://www.couchbase.org/wiki/display/membase/Monitoring+Membase"&gt;доступна извне&lt;/a&gt;. Наша цель - предоставить информацию о системе так много, насколько возможно, чтобы наши пользователи могли эффективно наблюдать работу кластера, планирую т.о. наращивание мощностей и диагностирую/исправляя проблемы, как только они возникнут (или предупреждать их возниконовение). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: What kind of alerting does Couchbase Server provide?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Какие виды оповещения предоставляет Couchbase Server? &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: Technically, we are not a company that makes alerting software.&amp;nbsp; 
In our minds, our job is to provide an interface for other systems to 
make use of.&amp;nbsp; Most larger organizations would not want each piece of 
technology in their stack sending out a differently formatted set of 
alerts. That is why we have made it so easy to plug our statistics and 
monitoring data into any other system.&amp;nbsp; However, we also realize that 
some smaller environments may in fact want our software to provide this 
out of the box. &amp;nbsp;We are working on extending our capabilities here and 
already provide alerts for when nodes go down.&lt;/span&gt;&lt;/div&gt;
О&amp;gt; Технически, мы не компания, что создаёт приложения для оповещения. По&amp;nbsp; нашему мнению, наша работа - предоставить интерфейс для других систем. Большинство организаций не хотят собирать по кусочкам оповещения, отправленные в разных форматах. Однако, мы реализуем небольшую среду окружения, которая может использоваться "из коробки" (без необходимости подключения других приложений). Мы работаем над расширением возможностей и уже передаём оповещения об узлах, которые "упали".&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #999999;"&gt;Autocompaction&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Автоматическое сжатие&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&amp;nbsp;&lt;/span&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: If you abort the compaction at the end of the timeperiod, is the 
compaction done up until that point still saved or is all compaction 
done thus far lost?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Если прервать процесс сжатия базы, последующий запуск сжатия продолжится с сохранённой точки или начнётся сначала? &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: Normally, a compaction is all-or-nothing and so aborting it will 
lose the progress that has been made so far.&amp;nbsp; However, within Couchbase 
Server, we are performing the compaction on a per-vbucket (see above) 
basis and so the whole dataset can actually be compacted incrementally 
without losing all of the progress it has made when aborted.&lt;/span&gt;&lt;/div&gt;
О&amp;gt; Нормально, когда сжатие проходит по принципу "всё или ничего" и прерывание сжатия приводит к необходимости начать его сначала. Однако, с Couchbase 
Server мы выполняем сжатие по пакетам (vbucket, см. выше) и целый набор данных в действительности сжимается инкрементно, без потери прогресса в случае отмены сжатия. &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #999999;"&gt;Autofailover&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Автоматическая отказоустойчивость&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&amp;nbsp;&lt;/span&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;Q: Why is a delay imposed before the cluster will automatically failover a downed node?&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;В&amp;gt; Почему введена задержка до того как кластер автоматически отключит упавший узел? &lt;/b&gt;&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;A: By default, the software is configured with a 30-second minimum before automatic failover will kick in.&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: x-small;"&gt;This is designed to prevent the software from doing the “wrong thing”.&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: x-small;"&gt;For
 example, if a node is simply slow to respond, or there is a brief 
network hiccup, you wouldn’t want it to be failed over and so the 
cluster will wait to ensure that the node is actually down.&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;
 There are a few other situations to be taken into consideration and you
 can read more about these and our design decisions to handle them &lt;a href="http://www.couchbase.org/wiki/display/membase/Failover+Best+Practices"&gt;here&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;span style="font-size: 17px;"&gt;О&amp;gt; По умолчанию, приложение сконфигурировано с 30-секундным минимум до автоматического исправления проблемы. Это защищает приложение от "неправильного поведения". Например, если узел просто медленно отвечает или в сети небольшой сбой, вы не хотите получить сигнал об ошибке и поэтому кластер будет ждать, чтобы быть уверенным, что узел действительно упал. Существует и несколько других ситуаций, достойных рассмотрения и вы можете прочитать больше о них и о наших проектных решения &lt;a href="http://www.couchbase.org/wiki/display/membase/Failover+Best+Practices"&gt;здесь&lt;/a&gt;. &amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: 17px;"&gt; &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;To get even more information, you can view the 25-30 minute videos of each week's webinar by going &lt;a href="http://www.couchbase.com/on-demand/webinar/couchbase-server-2.0-overview"&gt;here&lt;/a&gt;. And the authoritative place for all information regarding Couchbase Server 2.0 can be found &lt;a href="http://www.couchbase.org/get/couchbase/2.0.0"&gt;here&lt;/a&gt;. While
 this series may have come to a conclusion, we are already planning on 
starting up another one to highlight not only the features of Couchbase 
Server 2.0, but also Couchbase Mobile, our SDKs/client libraries and 
more! Some of the topics will include:&lt;/span&gt;&lt;/div&gt;
&lt;ul style="color: #999999;"&gt;
&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Cross-cluster synchronization (aka cross-data center replication)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Backup/Restore with Couchbase Server 2.0&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Upgrading from Membase 1.7&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: x-small;"&gt;And more!&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
Чтобы получить больше информации, вы можете посмотреть &lt;a href="http://www.couchbase.com/on-demand/webinar/couchbase-server-2.0-overview"&gt;25-30-минутное видео&lt;/a&gt; каждой недели вебинара. Авторитетный источником информации о Couchbase Server 2.0 - &lt;a href="http://www.couchbase.org/get/couchbase/2.0.0"&gt;здесь&lt;/a&gt;. Хотя эта серия вебинаров завершилась, мы уже планируем начать следующую, осветив не только возможности Couchbase 
Server 2.0, но также Couchbase Mobile, наши SDK, клиентские библиотеки и многое другое! Вот некоторые темы:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Синхронизация кластеров (ака репликация между дата-центрами)&lt;/li&gt;
&lt;li&gt;Резервное копирование / восстановление с помощью Couchbase Server 2.0&lt;/li&gt;
&lt;li&gt;Обновление Membase 1.7&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style="color: #999999;"&gt;
&lt;span style="font-size: x-small;"&gt;To make it even better, I'm asking you to help participate! Please comment here (or send me an email directly at &lt;a href="mailto:perry@couchbase.com"&gt;perry@couchbase.com&lt;/a&gt;) with any topics that think we need to cover more and we’ll do our best to include them in an upcoming webinar.&lt;/span&gt;&lt;/div&gt;
Чтобы сделать это лучше, я прошу вас помочь своим участием! Пожалуйста, комментируйте &lt;a href="http://blog.couchbase.com/couchbase-server-20-most-common-questions-and-answers"&gt;здесь&lt;/a&gt; (или отправьте email на &lt;a href="mailto:perry@couchbase.com"&gt;perry@couchbase.com&lt;/a&gt;) с любой темой, которую, думаете, надо раскрыть больше - и мы сделаем всё возможное, чтобы включить их в предстоящий вебинар.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-4882752969078204948?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/nqWW_5Ktyww" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/4882752969078204948/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=4882752969078204948&amp;isPopup=true" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/4882752969078204948?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/4882752969078204948?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/nqWW_5Ktyww/couchbase-server-20.html" title="Couchbase Server 2.0 &gt; Общие вопросы и ответы (по итогам вебинара)" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-so3BXvizCdc/Tpr_CQs-uMI/AAAAAAAACX0/38ioegC2jvw/s72-c/couchbase-server-2.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/10/couchbase-server-20.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAEQng_cSp7ImA9WhdbFE8.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-6281844510731999874</id><published>2011-10-12T16:38:00.001+03:00</published><updated>2011-10-12T16:38:23.649+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-12T16:38:23.649+03:00</app:edited><title>Горячие русские: Настраиваем быстрые клавиши для Eclipse</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" src="http://3.bp.blogspot.com/-wbbgUneJsjs/TpWWGJCz5yI/AAAAAAAACXo/jdLAPn-2v7g/s1600/hotkeys-eclipse-ide.png" /&gt;&lt;/div&gt;
&lt;a href="http://ru.wikipedia.org/wiki/Eclipse_%28%D1%81%D1%80%D0%B5%D0%B4%D0%B0_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8%29"&gt;Eclipse&lt;/a&gt; - замечательная IDE. Но есть в ней... особенности, мешающие работать. Например, если в системе установлены языки помимо английского, то стандартные горячие клавиши для этого языка, увы, не работают. И если для копирования / вставки - Ctrl+C / Ctrl+V - есть альтернатива - Ctrl+Ins / Shift+Ins, то для использования других комбинаций приходится переключаться на английскую раскладку. Некоторое время с этим мирился. Решения в Интернете я не нашёл (всё-таки, по сравнению с западом, русские мало спрашивают: наверное, пробуют сначала сделать сами, а после - лучше "полежать на печи"). Вышел из положения просто: переопределил горячие клавиши в самой IDE.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Eclipse / меню Window / Preferences / General / Key&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
Ищем команду, которую хотим видеть работающей по горячим клавишам на своём языке, копируем её и переназначаем комбинацию (поле "binding"), &lt;i&gt;находясь в своей родной раскладке&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Команды, которые использую я:&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Название&lt;/th&gt;
&lt;th&gt;Hotkey&lt;br /&gt;
(англ.)&lt;/th&gt;
&lt;th&gt;Горячая клавиша&lt;br /&gt;
(русск.)&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Select All&lt;/th&gt;
&lt;td&gt;Ctrl+A&lt;/td&gt;
&lt;td&gt;Ctrl+Ф&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Undo&lt;/th&gt;
&lt;td&gt;Ctrl+Z&lt;/td&gt;
&lt;td&gt;Ctrl+Я&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Redo&lt;/th&gt;
&lt;td&gt;Ctrl+Y&lt;/td&gt;
&lt;td&gt;Ctrl+Н&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Save&lt;/th&gt;
&lt;td&gt;Ctrl+S&lt;/td&gt;
&lt;td&gt;Ctrl+Ы&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Save All&lt;/th&gt;
&lt;td&gt;Ctrl+Shift+S&lt;/td&gt;
&lt;td&gt;Ctrl+Shift+Ы&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Find&lt;/th&gt;
&lt;td&gt;Ctrl+F&lt;/td&gt;
&lt;td&gt;Ctrl+А&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Find Next&lt;/th&gt;
&lt;td&gt;Ctrl+K&lt;/td&gt;
&lt;td&gt;Ctrl+Л&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Find Previous&lt;/th&gt;
&lt;td&gt;Ctrl+Shift+K&lt;/td&gt;
&lt;td&gt;Ctrl+Shift+Л&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Copy&lt;/th&gt;
&lt;td&gt;Ctrl+C&lt;/td&gt;
&lt;td&gt;Ctrl+С&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Cut&lt;/th&gt;
&lt;td&gt;Ctrl+X&lt;/td&gt;
&lt;td&gt;Ctrl+Ч&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Paste&lt;/th&gt;
&lt;td&gt;Ctrl+V&lt;/td&gt;
&lt;td&gt;Ctrl+М&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-6281844510731999874?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/mFvrnHNL-Hc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/6281844510731999874/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=6281844510731999874&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/6281844510731999874?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/6281844510731999874?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/mFvrnHNL-Hc/eclipse.html" title="Горячие русские: Настраиваем быстрые клавиши для Eclipse" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-wbbgUneJsjs/TpWWGJCz5yI/AAAAAAAACXo/jdLAPn-2v7g/s72-c/hotkeys-eclipse-ide.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/10/eclipse.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EERHg7fip7ImA9WhdaEEg.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-5971498652518811626</id><published>2011-10-05T17:28:00.000+03:00</published><updated>2011-10-19T22:13:25.606+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-19T22:13:25.606+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CouchDB" /><title>Настроим CouchDB как веб-сервер</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" height="244" src="http://2.bp.blogspot.com/-gQGN1Qsc-NY/ToxmrXeOlQI/AAAAAAAACXU/Fvs0M52pmmk/s400/couchdb-web-server-relax-ubuntu.png" width="300" /&gt;&lt;/div&gt;
&lt;a href="http://savdalion.blogspot.com/2011/09/couchdb-ubuntu.html"&gt;CouchDB&lt;/a&gt;, &lt;a href="http://savdalion.blogspot.com/2011/09/eclipse-couchdb.html"&gt;Eclipse&lt;/a&gt; - установлены. И уже можем работать с CouchDB через веб-интерфейс по адресу &lt;a href="http://127.0.0.1:5984/_utils"&gt;http://127.0.0.1:5984/_utils&lt;/a&gt;&lt;br /&gt;
Но CouchDB - это не только &lt;a href="http://ru.wikipedia.org/wiki/NoSQL"&gt;NoSQL-хранилище&lt;/a&gt;, а ещё и &lt;b&gt;полноценный веб-сервер&lt;/b&gt;... после небольшой настройки. Здесь будет предложено готовое решение, годное как для домашнего компьютера, так и для высоконагруженного Интернет-сервера.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;
Для приёма соединений из Интернета будем использовать лёгкий &lt;a href="http://sysoev.ru/nginx/"&gt;Nginx&lt;/a&gt;. Если Nginx Вам не по душе (&lt;i&gt;с чего бы это?&lt;/i&gt;), &lt;a href="http://www.google.com/search?client=ubuntu&amp;amp;channel=fs&amp;amp;q=%D0%B2%D1%8B%D0%B1%D0%B8%D1%80%D0%B0%D0%B5%D0%BC+HTTP-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80&amp;amp;ie=utf-8&amp;amp;oe=utf-8#q=ngin%D1%85+nodejs+lightppd&amp;amp;hl=ru&amp;amp;client=ubuntu&amp;amp;channel=fs&amp;amp;prmd=imvns&amp;amp;source=lnt&amp;amp;tbs=lr:lang_1ru&amp;amp;lr=lang_ru&amp;amp;sa=X&amp;amp;ei=KHRwTrTQAcik-gbvrN2ZCQ&amp;amp;ved=0CAcQpwUoAQ&amp;amp;bav=on.2,or.r_gc.r_pw.&amp;amp;fp=95fda5fbee14ab69&amp;amp;biw=1280&amp;amp;bih=799"&gt;выбирайте HTTP-сервер&lt;/a&gt; на свой вкус. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Устанавливаем Nginx&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table class="guide"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Скачиваем с официального сайта новую стабильную версию &amp;gt;
&lt;br /&gt;
&lt;a href="http://nginx.org/ru/download.html"&gt;http://nginx.org/ru/download.html&lt;/a&gt;
&lt;br /&gt;
На момент написания статьи, это была версия 1.0.6.
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Разархивируем. Через граф. интерфейс или командой в терминале&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ tar -zxvf НазваниеАрхива.tar.gz&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Заходим в папку с разархивированным Nginx.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ cd НазваниеАрхив&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Скачиваем и разархивируем новые версии зависимостей: &lt;a href="http://www.pcre.org/"&gt;PCRE&lt;/a&gt; и &lt;a href="http://www.zlib.net/"&gt;ZLIB&lt;/a&gt;. Достаточно только разархивировать их: установщик Nginx соберёт всё сам.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo aptitude install libpcre3-dev&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Собираем и устанавливаем Nginx. Обратите внимание на параметры конфигурации, на версии библиотек: пути должны указывать на разархивированные выше зависимости.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ ./configure --with-http_ssl_module \
    --with-pcre=../pcre-8.11 \
    --with-zlib=../zlib-1.2.5
~$ make
~$ sudo make install&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Редактируем файл конфигурации.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo nano /usr/local/nginx/conf/nginx.conf&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;a href="http://adw0rd.ru/2009/nginx-and-apache-install/"&gt;Официальный пример файла&lt;/a&gt;. В конце поста привёл пример своих конфигов Nginx'а.&lt;br /&gt;
&lt;br /&gt;
Для тонкой настройки Nginx есть &lt;a href="http://habrahabr.ru/blogs/nginx/56497"&gt;хорошая статья на Хабре&lt;/a&gt;.
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Запускаем Nginx.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo /usr/local/nginx/sbin/nginx&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Чтобы Nginx стартовал при загрузке Ubuntu, пишем в терминале
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo nano /etc/rc.local&lt;/code&gt;&lt;/pre&gt;
и добавляем в открывшийся файл строку
&lt;br /&gt;
&lt;code&gt;~$ /usr/local/nginx/sbin/nginx&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Добавляем домен сайта с которым будем работать в файл 'hosts'. Пишем в терминале
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo nano /etc/hosts&lt;/code&gt;&lt;/pre&gt;
Файл содержит что-то наподобие этого
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;127.0.0.1 localhost
127.0.1.1 НазваниеСайтаА
127.0.1.1 НазваниеСайтаБ
&lt;/code&gt;&lt;/pre&gt;
Сайт будет доступен в браузере по адресу http://НазваниеСайта
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Если Вы планируете &lt;b&gt;серьёзно&lt;/b&gt; заниматься сервером Nginx, подпишитесь на дайджесты  рассылок &amp;gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru"&gt;mailman.nginx.org/mailman/listinfo/nginx-ru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru-announce"&gt;mailman.nginx.org/mailman/listinfo/nginx-ru-announce&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
В общем-то, на этом всё: Nginx и CouchDB настроены для работы. А значит, Вы можете создавать на этой системе &lt;a href="http://wiki.apache.org/couchdb/CouchDB_in_the_wild"&gt;веб-сайты&lt;/a&gt;.

&lt;br /&gt;Мне нравится использовать Nginx, т.к. это надёжный, проверенный временем, прокси. Благодаря ему можно &lt;b&gt;значительно&lt;/b&gt; снизить нагрузку на &lt;a href="http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B4%D0%B0%D0%BA%D1%88%D0%BD"&gt;продакшн-сервер&lt;/a&gt; и настроить короткие ("человеческие") ссылки: в строке браузера вместо, скажем, такого чуда
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;http://my-site.zone/holidayline/_design/\
    holidayline/_list/choice/holiday\
    ?year=2011&amp;amp;month=10&amp;amp;day=25
&lt;/code&gt;&lt;/pre&gt;
написать
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;http://my-site.zone/2011/10/25
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
А, вот ещё что. Когда меняется конфигурация, Nginx требует перезапуска. Для этих целей я пишу в терминале
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo killall -9 nginx
~$ sudo /usr/local/nginx/sbin/nginx
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Пример конфигурации Nginx для CouchDB (три файла)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code class="nginx"&gt;# Файл /usr/local/nginx/conf/nginx.conf

# Используется оптимизация, предложенная в статьях об Nginx
# (см. ссылки выше)

worker_processes  2;


events {
    worker_connections  1024;
    use epoll;
}


http {
    include       mime.types;

    log_format my_combined
      '$remote_addr - $remote_user [$time_local] '
      '"$request" $status $body_bytes_sent '
      '"$http_referer" "$http_user_agent" '
      '$upstream_response_time "$host"'

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  50;
    tcp_nodelay        on;

    client_header_buffer_size 1k;
    large_client_header_buffers 4 4k;

    client_max_body_size 64k;
    client_body_buffer_size 128k;

    proxy_buffer_size 16k;
    proxy_buffers 16 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;

    proxy_intercept_errors on;

    ssi off;

    gzip  on;
    gzip_min_length 2000;
    gzip_buffers 64 8k;
    gzip_comp_level 3;
    gzip_http_version 1.1;
    gzip_proxied any;
    gzip_types text/plain
      text/css
      application/x-javascript
      application/json
      application/xml;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";


    upstream backendCouchDB {
      server localhost:5984;
    }

    include site/*;
}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code class="nginx"&gt;# Файл /usr/local/nginx/conf/proxy.conf

proxy_redirect off;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 35s;
proxy_read_timeout 50s;
proxy_send_timeout 50s;
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code class="nginx"&gt;# Файл /usr/local/nginx/conf/site/ДоменВашегоСайта.conf

# Пример настроек для работы с хранилищем CouchDB.
# Название хранилища &amp;gt; 'cargo'

server {
  server_name НазваниеДомена;
  listen 80;

  # Если будете работать с несколькими сайтами на одном
  # компьютере, Вы будете рады, что вынесли некоторые
  # настройки в отдельный файл
  include /usr/local/nginx/conf/proxy.conf;

  # Требуется для репликации больших баз CouchDB
  client_max_body_size 1000m;

  # Оптимизация. См. по ссылкам выше статьи по Nginx.
  client_body_buffer_size 64k;

  proxy_buffer_size 1k;
  proxy_buffers 16 1K;
  proxy_busy_buffers_size 8k;
  proxy_temp_file_write_size 8k;

  # Если при разработке сайта необходимр знать, куда направляет
  # запросы Nginx, переключаем в 'on'
  access_log off;


  # Подружим Nginx с CouchDB
  # @see http://wiki.apache.org/couchdb/Nginx_As_a_Reverse_Proxy

  # Я использую перенаправление внешних запросов к хранилищу
  # CouchDB исключительно с помощью Nginx. Но есть и другая
  # возможность создавать короткие ссылки.
  # @see http://wiki.apache.org/couchdb/Rewriting_urls

  # Главная страница сайта ссылается на статический файл HTML
  location = / {
    proxy_pass
      http://backendCouchDB/cargo/_design/cargo/index.html;
    break;
  }

  location = /index.html {
    proxy_pass
      http://backendCouchDB/cargo/_design/cargo/index.html;
    break;
  }

  # Адрес вида http://domain.zone/in формируется из представления
  location = /in {
  proxy_pass
  http://backendCouchDB/cargo/_design/cargo/_show/in/in-configure;
  break;
  }

  # В этом сайте я использую приставки 'cargo' и '/cargo/design',
  # чтобы обращаться со страниц непосредственно к документам
  # хранилища
  location /cargo/design {
    rewrite ^/cargo/design/(.*) /cargo/_design/cargo/$1 break;
    proxy_pass http://backendCouchDB;
    break;
  }
  
  location /cargo {
    proxy_pass http://backendCouchDB;
    break;
  }

  # Ссылку на иконку и файлы для роботов имеет смысл закешировать
  location = /favicon.ico {
    proxy_pass
      http://backendCouchDB/cargo/_design/cargo/favicon.ico;
    expires 50d;
    break;
  }
  
  location = /robots.txt {
    proxy_pass
      http://backendCouchDB/cargo/_design/cargo/robots.txt;
    expires 50d;
    break;
  }

  # Карту сайта формируем динамически, из представления
  location = /sitemap.xml {
    proxy_pass
      http://backendCouchDB/cargo/_design/cargo/_list/sitemap/page;
    expires 10d;
    break;
  }


  # Мы должны пропускать запросы, начинающиеся с '/_utils/script',
  # если сайт использует js-библиотеки, идущие вместе с CouchDB
  location /_utils/script {
    rewrite
      ^/_utils/script/(.*)
      /_utils/script/$1
      break;
    proxy_pass http://backendCouchDB;
    break;
  }

  # В этих папках хранятся библиотеки, которые могут быть
  # затребованы сайтом
  location ~ /cargo/design/vendor {
    rewrite
      ^/cargo/design/vendor/(.*)
      /cargo/_design/cargo/vendor/$1
      break;
    proxy_pass http://backendCouchDB;
    break;
  }

  location ~ /vendor/couchapp {
    rewrite
      ^/vendor/couchapp/(.*)
      /cargo/_design/cargo/vendor/couchapp/$1
      break;
    proxy_pass http://backendCouchDB;
    break;
  }

  # Для репликации и отслеживания изменений в документах CouchDB
  location ~ ^/(.*)/_changes {
    proxy_pass http://backendCouchDB;
    proxy_buffering off;
    expires off;
    access_log off;
  }

}&lt;/code&gt;&lt;/pre&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-5971498652518811626?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/7N6NNqaEFC8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/5971498652518811626/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=5971498652518811626&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/5971498652518811626?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/5971498652518811626?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/7N6NNqaEFC8/couchdb.html" title="Настроим CouchDB как веб-сервер" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-gQGN1Qsc-NY/ToxmrXeOlQI/AAAAAAAACXU/Fvs0M52pmmk/s72-c/couchdb-web-server-relax-ubuntu.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/10/couchdb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUHQns4eyp7ImA9WhdUEko.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-264797668603093299</id><published>2011-09-29T07:22:00.001+03:00</published><updated>2011-09-29T07:23:53.533+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T07:23:53.533+03:00</app:edited><title>Как в сообщение на GitHub включить зачёркнутый текст</title><content type="html">&lt;div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;
&lt;img border="0" height="195" src="http://1.bp.blogspot.com/-P8AwPAvI0ss/ToMIbKebRmI/AAAAAAAACXM/9_MQGpVjX-0/s400/github-flavoured-markdown.png" width="300" /&gt;&lt;/div&gt;
Все сообщения &lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt;&amp;nbsp; пропускает через свой форматтер "GitHub Flavored Markdown" (GFM). Я понимаю, почему нельзя раскрыть все возможности GFM во всплывающей подсказке при наборе сообщения, но совершенно не ясно, почему на &lt;a href="http://github.github.com/github-flavored-markdown/"&gt;официальной странице&lt;/a&gt; не упомянуто, как, например, добавить в сообщение зачёркнутый текст. Исправлю это недоразумение.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Два способа создать перечёркнутый текст в GFM&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code class="html"&gt;I.  Моё &amp;lt;del&amp;gt;лучшее&amp;lt;/del&amp;gt; путешествие.&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="html"&gt;II. Моё ~~лучшее~~ путешествие.&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Второй мне нравится больше.&lt;br /&gt;
&lt;br /&gt;
Назначение &lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt;'а - создавать тексты, которые "&lt;i&gt;легко читаются и легко пишутся&lt;/i&gt;". Вы можете свободно использовать его как плагин для своего сайта. Никогда не понимал смысла в копировании (или переписывании своими словами) текстов чужих сайтов. Вот, &lt;a href="http://daringfireball.net/projects/markdown/syntax#html"&gt;по этой ссылке есть всё о форматировании в Markdown&lt;/a&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/2909062909816541374-264797668603093299?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/6gbpEtVdWz8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/264797668603093299/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=264797668603093299&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/264797668603093299?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/264797668603093299?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/6gbpEtVdWz8/github.html" title="Как в сообщение на GitHub включить зачёркнутый текст" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-P8AwPAvI0ss/ToMIbKebRmI/AAAAAAAACXM/9_MQGpVjX-0/s72-c/github-flavoured-markdown.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/09/github.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EERHszfip7ImA9WhdaEEg.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-1686533519696689284</id><published>2011-09-28T14:01:00.001+03:00</published><updated>2011-10-19T22:13:25.586+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-19T22:13:25.586+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CouchDB" /><title>Быстрая работа: Настройка Eclipse для работы с CouchDB</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" height="242" width="300" src="http://4.bp.blogspot.com/-fQSSulbgHEo/ToMF97XHBOI/AAAAAAAACW8/7eUj3uWTmOI/s400/light-rubic-shine.jpg" /&gt;&lt;/div&gt;
&lt;a href="http://savdalion.blogspot.com/2011/09/eclipse-couchdb.html"&gt;Мы настроили Eclipse для работы с CouchDB&lt;/a&gt;. Я ленивый человек. И меня совсем не радует после любого изменения в коде нажимать кнопку "&lt;b style="background-color: #666666; color: yellow;"&gt;П&lt;/b&gt;", чтобы обновить данные в хранилище CouchDB. Этот процесс &lt;strike&gt;можно&lt;/strike&gt; нужно автоматизировать. &lt;br /&gt;
&lt;br /&gt;
Eclipse умеет много замечательных вещей. И одна из них - выполнение команд при изменении файла. Настроим Eclipse т.о., чтобы изменения файлов проекта сразу отражались в CouchDB.&lt;br /&gt;
&lt;br /&gt;
Для этой цели понадобятся:
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href="http://couchapp.org/"&gt;CouchApp&lt;/a&gt;. Позволяет обновлять базы CouchDB из командной строки.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ru.wikipedia.org/wiki/Apache_Ant"&gt;Ant&lt;/a&gt;. Если Вы ещё не встречались с Муравьём (&lt;i&gt;англ.&lt;/i&gt; ant - муравей), рекомендую познакомиться. Он умеет автоматизировать сборки &lt;i&gt;любых&lt;/i&gt; проектов как никто другой (уж простите, поклонники &lt;a href="http://ru.wikipedia.org/wiki/Make"&gt;make&lt;/a&gt; и &lt;a href="http://ru.wikipedia.org/wiki/Apache_Maven"&gt;Maven&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Устанавливаем CouchApp&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table class="guide"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Воспользуемся возможностями Ubuntu и соберём CouchApp из PPA-репозитория. Пишем в терминале.&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo add-apt-repository ppa:couchapp/couchapp
~$ sudo aptitude update
~$ sudo aptitude install couchapp&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
С возможностями CouchApp можно ознакомиться на этой странице &amp;gt; &lt;a href="http://www.couchapp.org/page/getting-started"&gt;couchapp.org/page/getting-started&lt;/a&gt;&lt;br /&gt;
А здесь - &lt;a href="http://www.couchapp.org/page/videos"&gt;couchapp.org/page/videos&lt;/a&gt; - видеодемонстрации (на английском).&lt;br /&gt;
&lt;br /&gt;
Но мы ведь настраиваем Eclipse. Достаточно сейчас научить Eclipse работать с нашим проектом, и, уверяю, о CouchApp Вы долго вспоминать не будете.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Устанавливаем Ant&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table class="guide"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Я не нашёл более простого способа установки, чем подключение компонентов от  Java.&lt;br /&gt;
&lt;br /&gt;
Заходим в меню Eclipse &amp;gt; Help / Install New Software...&lt;br /&gt;
Выбираем адрес http://download.eclipse.org/releases/indigo &lt;br /&gt;
Дожидаемся загрузки, находим Eclipse Java Development Tools и устанавливаем.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
Что умеет Ant можно почитать здесь &amp;gt; &lt;a href="http://www.opennet.ru/base/dev/ant_10.txt.html"&gt;opennet.ru/base/dev/ant_10.txt.html&lt;/a&gt;&lt;br /&gt;
Мы же попросим его собирать наши проекты для CouchDB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Учим Eclipse собирать проект для CouchDB&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table class="guide"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Создаём файл &lt;code&gt;build-couchdb.xml&lt;/code&gt; и помещаем его в корневую папку проекта Eclipse. Содержимое файла:
&lt;br /&gt;
&lt;pre&gt;&lt;code class="xml"&gt;&amp;lt;project name="НазваниеВашегоПроекта"
      basedir="." default="make"&amp;gt;

  &amp;lt;description&amp;gt;
    Сборка проекта "НазваниеВашегоПроекта".
  &amp;lt;/description&amp;gt;

  &amp;lt;property name="workspace" value="${basedir}" /&amp;gt;
  &amp;lt;property name="source" value="${workspace}/" /&amp;gt;
  &amp;lt;property name="destination"
      value="http://login:password@localhost:5984/" /&amp;gt;


  &amp;lt;target name="init"&amp;gt;

    &amp;lt;!--
    - Здесь можем что-то выполнить до размещения
    - файлов проекта в CouchDB. Например, получить
    - время сборки проекта.
    --&amp;gt;
    &amp;lt;tstamp&amp;gt;
      &amp;lt;format property="touch.time"
          pattern="dd-MM-yyyy HH:mm" /&amp;gt;
    &amp;lt;/tstamp&amp;gt;

  &amp;lt;/target&amp;gt;


  &amp;lt;target name="push" depends="init"&amp;gt;

    &amp;lt;echo&amp;gt;^&amp;lt;/echo&amp;gt;
    &amp;lt;echo&amp;gt;
        Добавление '${source}НазваниеПапкиСПроектомCouchDB'
        в '${destination}НазваниеБазыCouchDB'
    &amp;lt;/echo&amp;gt;
    &amp;lt;exec executable="couchapp"&amp;gt;
      &amp;lt;arg value="push" /&amp;gt;
      &amp;lt;arg value="${source}НазваниеПапкиСПроектомCouchDB" /&amp;gt;
      &amp;lt;arg value="${destination}НазваниеБазыCouchDB" /&amp;gt;
    &amp;lt;/exec&amp;gt;

  &amp;lt;/target&amp;gt;


  &amp;lt;!-- Старт-блок --&amp;gt;
  &amp;lt;target name="make" depends="init, push"&amp;gt;
  &amp;lt;/target&amp;gt;

&amp;lt;/project&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Правой кнопкой в Навигаторе Eclipse нажимаем на &lt;code&gt;build-couchdb.xml&lt;/code&gt; и выбираем Run As / Ant Build...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;В открывшемся окне становимся на вкладку "Refresh" и устанавливаем метки так, как показано на скриншоте ниже (скриншоты можно увеличить, кликнув на них). Затем жмём на "Specify Resources..." и отмечаем папки проекта, файлы из которых должны быть согласованы с CouchDB.
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://2.bp.blogspot.com/-u5xVf2QziAM/TnIrCGOO99I/AAAAAAAACOI/pZcdDBXVgnw/s1600/c-refresh.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-u5xVf2QziAM/TnIrCGOO99I/AAAAAAAACOI/pZcdDBXVgnw/s320/c-refresh.png" width="265" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="float: left; text-align: left;"&gt;
&lt;a href="http://1.bp.blogspot.com/-GdQchOeu3p4/TnIsLTpKYbI/AAAAAAAACOY/iu0CJC72iV8/s1600/c-refresh-resource.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-GdQchOeu3p4/TnIsLTpKYbI/AAAAAAAACOY/iu0CJC72iV8/s320/c-refresh-resource.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;На вкладке "Build" проделываем то же самое. Отмечаем проект. См. скриншоты. 
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://3.bp.blogspot.com/-sFEueF5Zvt8/TnIrEv9virI/AAAAAAAACOM/bNNMt_zErFo/s1600/c-build.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-sFEueF5Zvt8/TnIrEv9virI/AAAAAAAACOM/bNNMt_zErFo/s320/c-build.png" width="296" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="float: left; text-align: left;"&gt;
&lt;a href="http://3.bp.blogspot.com/-1S2IFWVIo18/TnIrFHeP5kI/AAAAAAAACOQ/mgwwSiynsJk/s1600/c-build-select.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="186" src="http://3.bp.blogspot.com/-1S2IFWVIo18/TnIrFHeP5kI/AAAAAAAACOQ/mgwwSiynsJk/s200/c-build-select.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Жмём кнопку "Run" и если файл XML написан верно, счастливо наблюдаем, как проект появляется в CouchDB.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
Всё? Ан нет! Проект сам собираться не будет пока не проделаем следующее:&lt;br /&gt;
&lt;br /&gt;
&lt;table class="guide"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;В Навигаторе Eclipse правой кнопкой мыши жмём на проект и выбираем "Properties". В открывшемся окне становимся на свойство "Builders".
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://4.bp.blogspot.com/-RJddzoVZ8t0/TnsgfAu6JQI/AAAAAAAACTk/zwYT8b3ngF8/s1600/project-property-builders.png" imageanchor="1"&gt;&lt;img border="0" height="316" src="http://4.bp.blogspot.com/-RJddzoVZ8t0/TnsgfAu6JQI/AAAAAAAACTk/zwYT8b3ngF8/s400/project-property-builders.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Нажимаем кнопку "Import..." и выбираем созданную раньше конфигурацию сборки проекта. "Ок".
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Жмём на "Edit...". Заходим на вкладку "Targets" и устанавливаем для "Auto Build" такие же параметры, как у "Manual Build".
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://1.bp.blogspot.com/-RcblFSJatH0/TnsjJ4TUSXI/AAAAAAAACTs/3dQcXcb0t6E/s1600/project-property-builders-edit-targets.png" imageanchor="1"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-RcblFSJatH0/TnsjJ4TUSXI/AAAAAAAACTs/3dQcXcb0t6E/s400/project-property-builders-edit-targets.png" width="264" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Также проверяем, что на вкладке "Build Options" установлен флажок "Specify working set of relevant resources" и в качестве ресурса - кнопка "Specify Resources..." - указана папка, содержимое которой должно отслеживаться на изменения.
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://4.bp.blogspot.com/-HVh4ETd1NNk/TnsmNAQmt9I/AAAAAAAACT0/YFBaqGfib_I/s1600/project-property-builders-edit-build-options.png" imageanchor="1"&gt;&lt;img border="0" height="383" src="http://4.bp.blogspot.com/-HVh4ETd1NNk/TnsmNAQmt9I/AAAAAAAACT0/YFBaqGfib_I/s400/project-property-builders-edit-build-options.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверим наши труды. Откройте любой файл проекта из папки, отмеченной для отслеживания (см. последнюю картинку, "Build Options"), и допишите что-то в него.&amp;nbsp; Как только файл  будет сохранён, в консоле Eclipse Вы увидите, как заработал Муравей, быстро-быстро перебрасывая в CouchDB изменения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ух! Наконец-то можно настроить CouchDB как веб-сервер и забыть об Apache, MySQL и PHP &lt;strike&gt;как о страшном сне&lt;/strike&gt;. &lt;a href="http://savdalion.blogspot.com/2011/10/couchdb.html"&gt;Расскажу как на след. неделе&lt;/a&gt;.&lt;br /&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/2909062909816541374-1686533519696689284?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/noHLgetVzrE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/1686533519696689284/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=1686533519696689284&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/1686533519696689284?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/1686533519696689284?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/noHLgetVzrE/eclipse-couchdb_28.html" title="Быстрая работа: Настройка Eclipse для работы с CouchDB" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-fQSSulbgHEo/ToMF97XHBOI/AAAAAAAACW8/7eUj3uWTmOI/s72-c/light-rubic-shine.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/09/eclipse-couchdb_28.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04ASXo4cCp7ImA9WhdUEk0.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-4835593233835922812</id><published>2011-09-21T14:52:00.001+03:00</published><updated>2011-09-28T14:39:08.438+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T14:39:08.438+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CouchDB" /><title>Простые истины: Установка и настройка Eclipse для работы с CouchDB</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" height="306" width="289" src="http://2.bp.blogspot.com/-A4W5oPyvJjQ/ToMG1f2P9qI/AAAAAAAACXE/OySxC2zC6Ts/s400/orange-ball-lamp.jpg" /&gt;&lt;/div&gt;
Перед началом настройки &lt;a href="http://ru.wikipedia.org/wiki/Eclipse_%28%D1%81%D1%80%D0%B5%D0%B4%D0%B0_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8%29"&gt;Eclipse&lt;/a&gt;, лучше посмотреть, &lt;a href="http://savdalion.blogspot.com/2011/09/couchdb-ubuntu.html"&gt;как установливалась CouchDB&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Eclipse - среда для разработки приложений. Свободная. Кроссплатформенная. Поддерживает популярные языки программирования. Разрабатывалась IBM, но позже была передана независимому сообществу. Великолепно подходит для работы с CouchDB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style="clear: both; float: none;"&gt;
&lt;/div&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Устанавливаем Eclipse&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table class="guide"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Скачиваем "Eclipse IDE for JavaScript Web Developers" &amp;gt;&lt;br /&gt;
&lt;a href="http://www.eclipse.org/downloads/packages/eclipse-ide-javascript-web-developers/indigor"&gt;www.eclipse.org/downloads/packages/eclipse-ide-javascript-web-developers/indigor&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Разархивируем в папку /usr/local/bin.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Создаём на рабочем столе кнопку запуска Eclipse.&lt;br /&gt;
Правой кнопкой на рабочем столе &amp;gt; "Создать кнопку запуска..."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Если Eclipse не запускается, устанавливаем виртуальную машину Java.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;sudo aptitude install \
    sun-java6-jre \
    sun-java6-plugin \
    sun-java6-fonts&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
Eclipse установлена. Теперь настроим её под CouchDB.&lt;br /&gt;
&lt;br /&gt;
Я хотел было писать руководство, но, к счастью, разработчики плагина &lt;a href="http://pittypanda.github.com/"&gt;CouchDB для Eclipse&lt;/a&gt; записали трёхминутный видеоролик: наглядная демонстрация лучше тысячи слов.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/5Vbedt2akDo" width="560"&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;br /&gt;
Готово? В конце ролика показано, как создать новый проект CouchDB.
&lt;br /&gt;
&lt;br /&gt;
Теперь, нажимая жёлтую букву "&lt;b style="background-color: #666666; color: yellow;"&gt; П &lt;/b&gt;", файлы из Eclipse попадают в CouchDB. Это быстро и просто. Но нет предела совершенству! Научим Eclipse самостоятельно обновлять CouchDB, как только проводим изменения в файлах проекта. &lt;a href="http://savdalion.blogspot.com/2011/09/eclipse-couchdb_28.html"&gt;На след. неделе&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe src="http://player.vimeo.com/video/11852209?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;color=ff9933" width="500" height="281" frameborder="0" webkitAllowFullScreen allowFullScreen&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-4835593233835922812?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/9eydA_iiWeI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/4835593233835922812/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=4835593233835922812&amp;isPopup=true" title="Комментарии: 2" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/4835593233835922812?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/4835593233835922812?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/9eydA_iiWeI/eclipse-couchdb.html" title="Простые истины: Установка и настройка Eclipse для работы с CouchDB" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-A4W5oPyvJjQ/ToMG1f2P9qI/AAAAAAAACXE/OySxC2zC6Ts/s72-c/orange-ball-lamp.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/09/eclipse-couchdb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4ESHg9eSp7ImA9WhdUEU8.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-3605318446610827303</id><published>2011-09-19T10:04:00.002+03:00</published><updated>2011-09-27T15:01:49.661+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T15:01:49.661+03:00</app:edited><title>Кроссбраузерность для Вашего сайта: HTML5 и CSS3</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-krmXSWg1_dU/ToG6-C_AvuI/AAAAAAAACV4/ZQUgDZgEpCM/s400/html5-semantic.jpg" width="200" /&gt;&lt;/div&gt;Проект, которым я занялся сейчас, строится на возможностях современных браузеров, но будет работать внутри компаний и т.о. не требует подстройки под "все браузеры" (мой выбор - Firefox). Но работая над &lt;a href="http://dalion.ua/"&gt;dalion.ua&lt;/a&gt;, &lt;a href="http://gift-country.info/"&gt;gift-country.info&lt;/a&gt;, &lt;a href="http://dalion-gift.blogspot.com/"&gt;dalion-gift.blogspot.com&lt;/a&gt; и пр., у меня была возможность глубоко прочувствовать, насколько непросто создать сайт, который выглядел бы одинаково для путешественников на Firefox, Safari, Chrome и (о, ужас!) Internet Explorer. Для веб-интерфейса пользователя существуют достаточно отлаженые Javascript-библиотеки (кстати, &lt;a href="http://superdit.com/2011/06/08/10-javascript-framework-with-rich-ui-component/"&gt;UI - это не только jQueryUI&lt;/a&gt;). Но если Вы на своём сайте планируете самостоятельно использовать вкусности &lt;a href="http://your-internet.ru/2011/03/html5-i-css3-tutorial/"&gt;HTML5 / CSS3&lt;/a&gt;, очень пригодится "библиотека совместимости". Обнаружил сегодня, читая утренние списки рассылки &amp;gt; &lt;a href="http://www.modernizr.com/"&gt;http://modernizr.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
На закуску. Проверьте соответствие своего браузера стандартам HTML5 / CSS3 &amp;gt; &lt;a href="http://html5test.com/"&gt;http://html5test.com&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/2909062909816541374-3605318446610827303?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/RLRaGuR3ly0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/3605318446610827303/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=3605318446610827303&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/3605318446610827303?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/3605318446610827303?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/RLRaGuR3ly0/html5-css3.html" title="Кроссбраузерность для Вашего сайта: HTML5 и CSS3" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-krmXSWg1_dU/ToG6-C_AvuI/AAAAAAAACV4/ZQUgDZgEpCM/s72-c/html5-semantic.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/09/html5-css3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEAMRH8zfip7ImA9WhdaFk4.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-8366964161566804202</id><published>2011-09-16T16:11:00.002+03:00</published><updated>2011-10-26T15:39:45.186+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-26T15:39:45.186+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="CouchDB" /><title>Установка свежей CouchDB на Ubuntu</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" src="http://2.bp.blogspot.com/-06-ld24dwtM/TnblcoufjaI/AAAAAAAACPc/56mMmXVD7zg/s1600/couchdb-logo.png" /&gt;&lt;img border="0" height="125" src="http://4.bp.blogspot.com/-FkO-ggqzEG8/TnbnHHs_kpI/AAAAAAAACPk/HdHuB_EFW3I/s400/UbuntuStrapLogo.png" width="125" /&gt;&lt;/div&gt;
&lt;i&gt;Проверенный и рабочий вариант установки &lt;a href="http://ru.wikipedia.org/wiki/CouchDB"&gt;CouchDB&lt;/a&gt; 1.2.0a на 64-разрядную &lt;a href="http://ru.wikipedia.org/wiki/Ubuntu"&gt;Ubuntu&lt;/a&gt; 11.04.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Подготовим компьютер для установки &lt;a href="http://ru.wikipedia.org/wiki/CouchDB"&gt;CouchDB&lt;/a&gt;. В стандартном дистрибутиве, как правило, нет последних версий библиотек. Т.к. CouchDB написана на &lt;a href="http://ru.wikipedia.org/wiki/Erlang"&gt;Erlang&lt;/a&gt;, для более эффективной её работы поставим новую версию Erlang'а.&lt;br /&gt;
&lt;br /&gt;
Но прежде выполните в терминале команды (терминал в Ubuntu вызывается через меню Рабочего стола или по горячим клавишам Ctrl+Alt+T)
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo apt-get install aptitude&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo aptitude install git subversion&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Будет поставлена программа, заменяющая собой устаревшую &lt;code&gt;apt-get&lt;/code&gt;, и клиенты &lt;code&gt;git&lt;/code&gt; и &lt;code&gt;subversion &lt;/code&gt;для получения новых версий программ из Интернета.&lt;br /&gt;
&lt;br /&gt;
Ожидаю, Вы знаете &lt;a href="http://www.linuxcenter.ru/lib/books/kostromin/gl_04_06.phtml"&gt;как создавать папки и файлы в Linux&lt;/a&gt; и умеете пользоваться текстовым редактором (например, &lt;a href="http://ru.wikipedia.org/wiki/Nano"&gt;nano&lt;/a&gt;). Если знакомы с двухпанельным файловым менеджером, установите для Linux &lt;a href="http://pingvinus.ru/program/midnight-commander"&gt;Midnight Commander&lt;/a&gt;, выполнив в терминале&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo aptitude install mc&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Устанавливаем Erlang&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table class="guide"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Скачиваем с сайта последнюю версию &amp;gt;
&lt;a href="http://www.erlang.org/download.html"&gt;erlang.org/download.html&lt;/a&gt;&lt;br /&gt;
Здесь устанавливается R14B03.
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Разархивируем. В терминале это будет выглядеть так
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ tar -zxvf НазваниеАрхива.tar.gz&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Заходим в папку с разархивированным Erlang.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ cd НазваниеАрхива&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Erlang требует дополнительные библиотеки. Получаем обязательные.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo aptitude install ncurses-dev&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Не все возможности Erlang будут активны, если не установлены все библиотеки. Поставим некоторые.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo aptitude install openssl libssl-dev&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Собираем и устанавливаем Erlang. Это, конечно, не сборка &lt;a href="http://mozilla-russia.org/products/thunderbird/"&gt;Thunderbird&lt;/a&gt; (у меня на Core 2 Duo / 2.6 GHz / 4 Gb этот почтовый клиент собирался полтора часа!), но, всё же, запаситесь терпением :)
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ ./configure
~$ make
~$ sudo make install&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
Вместе с последней версией Erlang'a неплохо было бы поставить последнюю версию &lt;a href="https://developer.mozilla.org/ru/SpiderMonkey"&gt;SpiderMonkey&lt;/a&gt; (интерпретатор JavaScript), но CouchDB пока с ним не дружит (по крайней мере, на 64-битовой Ubuntu 11.04): обзор баз работает, но запросы не проходят (см. ниже описание ошибку "&lt;code&gt;OS Process Error&lt;/code&gt;"). Поэтому воспользуемся рекомендациями из &lt;a href="http://wiki.apache.org/couchdb/Installing_on_Ubuntu"&gt;руководства&lt;/a&gt; по установке CouchDB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Устанавливаем CouchDB&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table class="guide"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Устанавливаем обязательные зависимости.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo aptitude build-dep couchdb
~$ sudo aptitude install libmozjs-dev libicu-dev \
    libcurl4-gnutls-dev libtool&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Получаем из репозитория последнюю версию CouchDB, собираем, устанавливаем.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ svn co http://svn.apache.org/repos/asf/couchdb/trunk couchdb
~$ cd couchdb
~$ ./bootstrap
~$ ./configure
~$ make
~$ sudo make install&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Создаём нового пользователя для работы с CouchDB, задаём права доступа на папки.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo useradd -d /usr/local/var/lib/couchdb
~$ sudo chown -R couchdb: /usr/local/var/lib/couchdb \
    /usr/local/var/log/couchdb \
    /usr/local/var/run/couchdb
~$ sudo chmod -R 764 /usr/local/var/lib/couchdb \
    /usr/local/var/log/couchdb \
    /usr/local/var/run/couchdb
~$ sudo chown -R root:couchdb /usr/local/etc/couchdb
~$ sudo chmod 664 /usr/local/etc/couchdb/*.ini
~$ sudo chmod 775 /usr/local/etc/couchdb/*.d&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Запускаем CouchDB.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo /usr/local/etc/init.d/couchdb start&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Пусть CouchDB стартует сама при загрузке Ubuntu.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ cd /etc/init.d
~$ sudo ln -s /usr/local/etc/init.d/couchdb
~$ sudo update-rc.d couchdb defaults&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Проверяем, что CouchDB работает.
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ curl http://127.0.0.1:5984&lt;/code&gt;&lt;/pre&gt;
В терминале должны получить ответ
&lt;br /&gt;
&lt;pre&gt;&lt;code class="javascript"&gt;{"couchdb":"Welcome","version":"1.2.0a"}&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Если необходимо, открываем доступ к серверу CouchDB по сети, редактируем файл конфигурации
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ nano /usr/local/etc/couchdb/local.ini&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Чтобы слушать все входящие соединения добавляем в конфигурацию строку
&lt;br /&gt;
&lt;pre&gt;&lt;code class="ini"&gt;bind_address = 0.0.0.0&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
А если на сервере включен Firewall, в терминале пишем
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo iptables -I INPUT 3 -p tcp --dport 5984 -j ACCEPT&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
После выполнения этих команд перезапускаем CouchDB
&lt;br /&gt;
&lt;pre&gt;&lt;code class="bash"&gt;~$ sudo /usr/local/etc/init.d/couchdb restart&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
Мне нравится, когда базы данных хранятся на отдельном разделе (а ещё лучше - на отдельном диске). Поэтому к сказанному выше я меняю путь к базам CouchDB в &lt;code&gt;/usr/local/etc/couchdb/default.ini&lt;/code&gt; на монтируемый раздел. Не забудьте предоставить права для записи, иначе при попытке работать с CouchDB будут появляться далеко не очевидные ошибки от Erlang'а. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Всё. У Вас на компьютере установлена &lt;a href="http://vimeo.com/11852209"&gt;замечательная&lt;/a&gt; система, которая уже сейчас вполне может заменить трёх &lt;strike&gt;китов&lt;/strike&gt; слонов Интернета: &lt;a href="http://ru.wikipedia.org/wiki/Apache"&gt;Apache&lt;/a&gt;, &lt;a href="http://ru.wikipedia.org/wiki/PHP"&gt;PHP&lt;/a&gt;, &lt;a href="http://ru.wikipedia.org/wiki/MySQL"&gt;MySQL&lt;/a&gt;. Меньше слонов - меньше ошибок, легче сопровождение, больше свободного времени. На каком языке с ней общаться? Достаточно &lt;strike&gt;знать&lt;/strike&gt; выучить &lt;a href="http://ru.wikipedia.org/wiki/JavaScript"&gt;JavaScript&lt;/a&gt;. Открывайте браузер по адресу &lt;a href="http://127.0.0.1:5984/_utils"&gt;http://127.0.0.1:5984/_utils&lt;/a&gt; , настраивайте свою любимую IDE (на днях напишу &lt;a href="http://savdalion.blogspot.com/2011/09/eclipse-couchdb.html"&gt;пример настройки IDE Eclipse&lt;/a&gt;) и... успехов! :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для начала работы с CouchDB посмотрите&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://anton.shevchuk.name/php/couchdb-for-developers/"&gt;Знакомство 1&lt;/a&gt; и &lt;a href="http://ruseller.com/lessons.php?rub=28&amp;amp;id=1197"&gt;знакомство 2&lt;/a&gt; с CouchDB на примерах &lt;/li&gt;
&lt;li&gt;&lt;a href="http://habrahabr.ru/blogs/nosql/101251/"&gt; Статья на Хабре&lt;/a&gt; (обзор возможностей) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://wirewit.tumblr.com/post/2742033216/couchdb"&gt;Опыт использование CouchDB в промышленной системе&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://guide.couchdb.org/"&gt;Отлична книга по CouchDB&lt;/a&gt; (англ.)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
И весёлый музыкальный ролик от создателей этой системы (если Вы хоть чуточку на слух воспринимаете английский).
&lt;iframe allowfullscreen="" frameborder="0" height="281" src="http://player.vimeo.com/video/11852209?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;color=ff9933" webkitallowfullscreen="" width="500"&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Возможные ошибки при установке CouchDB и пути их решения&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table class="guide"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;При запуске &lt;code&gt;./configure&lt;/code&gt; для CouchDB не находится &lt;a href="http://ru.wikipedia.org/wiki/SpiderMonkey"&gt;SpiderMonkey&lt;/a&gt;.
&lt;/td&gt;
&lt;td&gt;Установите SpiderMonkey руководствуясь этой инструкцией &amp;gt; &lt;a href="http://wiki.apache.org/couchdb/Installing_SpiderMonkey"&gt;wiki.apache.org/couchdb/Installing_SpiderMonkey&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CouchDB не компилируется / не устанавливается.&lt;/td&gt;
&lt;td&gt;Проверьте версии CouchDB / Ubuntu и попробуйте другие варианты установки &amp;gt; &lt;a href="http://wiki.apache.org/couchdb/Installing_on_Ubuntu"&gt;wiki.apache.org/couchdb/Installing_on_Ubuntu&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;При запросе к базе CouchDB - view, show, list и т.п. - вместо результата лог-файл наполняется сообщениями "&lt;code&gt;OS Process Error {os_process_error,{exit_status,127}}&lt;/code&gt;".
&lt;/td&gt;&lt;td&gt;SpiderMonkey установлен не правильно. Ошибка чаще всего возникает на Ubuntu. Проверьте себя на &lt;a href="http://wiki.apache.org/couchdb/Installing_on_Ubuntu"&gt;wiki.apache.org/couchdb/Installing_on_Ubuntu&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Для ошибок сообщество CouchDB ведёт отдельную страницу &amp;gt; &lt;a href="http://wiki.apache.org/couchdb/Error_messages"&gt;wiki.apache.org/couchdb/Error_messages&lt;/a&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/2909062909816541374-8366964161566804202?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/yohJoy2Dq0E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/8366964161566804202/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=8366964161566804202&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/8366964161566804202?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/8366964161566804202?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/yohJoy2Dq0E/couchdb-ubuntu.html" title="Установка свежей CouchDB на Ubuntu" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-06-ld24dwtM/TnblcoufjaI/AAAAAAAACPc/56mMmXVD7zg/s72-c/couchdb-logo.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/09/couchdb-ubuntu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IFR38yeyp7ImA9WhdVEEo.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-6955978008914118055</id><published>2011-09-14T18:21:00.001+03:00</published><updated>2011-09-15T12:38:36.193+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-15T12:38:36.193+03:00</app:edited><title>Медитация на природе: что взять, чтобы вернуться</title><content type="html">В этом году, с 22 августа по 8 сентября, сделал себе небольшой отпуск: никакой "усталости от работы" не чувствовалось, просто надо было собраться с мыслями и решить, что делать дальше. Выехать для этого на природу, одному, оказалось хорошим решением. Провёл эти дни в медитации и очень доволен &lt;strike&gt;результатом&lt;/strike&gt; собой. Здесь расскажу, где отдыхал, чего / сколько взял с собой, что оказалось лишним, а чего "нехватающим". Если Вы планировали провести неск. дней на природе, вдали от людских &lt;strike&gt;квартир&lt;/strike&gt; коробок, но до сих пор не решились этого сделать, уверен, эта информация развеет опасения и позволит в полной мере насладиться отдыхом. Тем более, что уголок - великолепный.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-qlAldtDFhB4/Tm3wmMiAySI/AAAAAAAACNs/HoAZXYsu2ww/s1600/oster-desna.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-qlAldtDFhB4/Tm3wmMiAySI/AAAAAAAACNs/HoAZXYsu2ww/s1600/oster-desna.png" /&gt;&lt;/a&gt;&lt;/div&gt;
Итак, место. Был во-о-от здесь (буква "А", речка Десна, возле Ост&lt;i&gt;ё&lt;/i&gt;ра, Черниговская обл.). Если добираться на машине, не будет так много "о", но пешком, с рюкзаком за спиной, после года безвылазного сидения за компьютером, дорога мне показалась не самой короткой. На путь "туда" (от автовокзала в Ост&lt;i&gt;ё&lt;/i&gt;ре) у меня ушло больше 3 часов. Обратно - 2. А всё потому, что шагая "туда", решил срезать путь (см. карту). Не делайте этого: на карте нет всех водоёмов. Я попал на распластанное по полю болото и т.к. ноги мочить не хотел, потратил час, чтобы его обойти; и в итоге всё равно вышел к дороге, с которой так опрометчиво свернул.&lt;br /&gt;
&lt;br /&gt;
О дорогах. После дождей, видимо, они проходимы только для вездеходов. В моём случае дождей не было неделю, но всё равно дороги местами оказались залиты водой.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Неск. слов про режим дня и чем занимался, дабы было понятно содержимое гардероба. Я настроился на серьёзную медитацию: 5 дней &lt;a href="http://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%B0%D0%BF%D0%B0%D0%BD%D0%B0"&gt;анап&lt;i&gt;а&lt;/i&gt;ны&lt;/a&gt;, 10 дней &lt;a href="http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%BF%D0%B0%D1%81%D1%81%D0%B0%D0%BD%D0%B0"&gt;вип&lt;i&gt;а&lt;/i&gt;ссаны&lt;/a&gt;; дни приезда / отъезда - исключены. Для отдыха были след. окна:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;03:00 - 03:30&amp;nbsp; Доброе утро!&lt;/li&gt;
&lt;li&gt;06:00 - 07:00&amp;nbsp; Завтрак (чай с одним печеньем).&lt;/li&gt;
&lt;li&gt;12:00 - 14:00&amp;nbsp; Обед (готовил на костре сразу на 2-3 дня, разогревал газовой горелкой).&lt;/li&gt;
&lt;li&gt;18:30 - 19:30&amp;nbsp; Ужин (чай с другим печеньем).&lt;/li&gt;
&lt;li&gt;22:00 - 03:00&amp;nbsp; Сон.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
С собой взял:&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-YsxhGGKzYsI/Tm3zoT9IblI/AAAAAAAACNw/YONj0S-nnJI/s1600/freetime.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="110" src="http://1.bp.blogspot.com/-YsxhGGKzYsI/Tm3zoT9IblI/AAAAAAAACNw/YONj0S-nnJI/s200/freetime.jpg" width="200" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-NsckM6GhM94/Tm9G81UOqrI/AAAAAAAACN4/MI9grpnfc5w/s1600/abbey-camp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-NsckM6GhM94/Tm9G81UOqrI/AAAAAAAACN4/MI9grpnfc5w/s200/abbey-camp.jpg" width="170" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a href="http://1.bp.blogspot.com/-k8O84py39uc/Tm9H-mdi5oI/AAAAAAAACOA/2jy1xm2kyBk/s1600/karemat.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="120" src="http://1.bp.blogspot.com/-k8O84py39uc/Tm9H-mdi5oI/AAAAAAAACOA/2jy1xm2kyBk/s200/karemat.jpg" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-ixIKW2fJ0LE/Tm9HrdWe14I/AAAAAAAACN8/sd9AHz-ZU7E/s1600/kovea_solo3_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="94" src="http://1.bp.blogspot.com/-ixIKW2fJ0LE/Tm9HrdWe14I/AAAAAAAACN8/sd9AHz-ZU7E/s200/kovea_solo3_1.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;a href="http://1.bp.blogspot.com/-NsckM6GhM94/Tm9G81UOqrI/AAAAAAAACN4/MI9grpnfc5w/s1600/abbey-camp.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/--7c17KpJb8Q/TnCq9PPlpgI/AAAAAAAACOE/FjP32ybUnWM/s1600/bag-pack.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/--7c17KpJb8Q/TnCq9PPlpgI/AAAAAAAACOE/FjP32ybUnWM/s200/bag-pack.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;

&lt;/ul&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top;"&gt;&lt;li&gt;&lt;b&gt;2-х местную палатку FreeTime&lt;/b&gt;. Первый раз шёл с ней. Как по мне, очень удачная модель: и раскладывается легко, и проветривается отлично, и сильный ветер держит.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Спальный мешок AbbeyCamp&lt;/b&gt;. Хорошая вещь, вот только ноги в нём у меня мёрзнут. Приходилось укутывать их свитером и курткой.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Каремат&lt;/b&gt;. Сейчас без него походов не бывает. Говорят, на каремате можно спать прямо на снегу и не чувствовать холода. Охотно этому верю: земля по утрам была очень холодной.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Горелку KOVEA: балон с газом, набор посуды&lt;/b&gt;. Легко и удобно. Пару лет назад набор подарил брат и я ему очень благодарен. Благодаря компактной горелке ел горячую пищу и мог три раза в день пить горячий чай - газа хватило на 14 дней.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Топорик.&amp;nbsp; &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Аптечку&lt;/b&gt; (перекись, эластичный бинт, пластырь, бальзам "Спасатель", пузырёк гутталакса, активир. уголь, гигиеническая помада).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Туалетную бумагу&lt;/b&gt;. Она здорово пригодилась в день отъезда: мне не хотелось задерживаться ещё на один день, чтобы отмыть котелок от сажи - обернул чёрные места бумагой. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Тряпку&lt;/b&gt;. С её помощью убирал и в день отъезда смог отмыть днище палатки (ох и грязное же оно было!).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Пакеты&lt;/b&gt;. Взял набор мусорных, 30 л. Один пакет был для грязных вещей, неск. других использовал для продуктов. Также ложил в них одежду на ночь.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Спички&lt;/b&gt;. Всегда беру зажигалку и два коробка спичек: один держу недалеко, второй - запрятан глубоко в рюкзаке. Оба - в непромокаемых целлофановых пакетах: тихий влажный воздух может доставить  неприятностей не меньше, чем гроза.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Скотч&lt;/b&gt;. С его помощью приладил 2 л бутылку к дереву - получил умывальник рядом с палаткой. Больше скотч  не пригодился.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Мобильный телефон&lt;/b&gt;. Отключил его сразу по приезду. Включил - по возвращению.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Часы&lt;/b&gt;. Чтобы не садить телефон, купил недорогие перед самым отъездом. "El Lite Sport", водонепроницаемые. Попалась удобная модель: активно пользовался всеми тремя будильниками и таймером.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Одежду&lt;/b&gt;. Вышел в тёплых спортивных брюках, футболке и свитере. С собой нёс 2 пары запасных носков, 2 трусов, футболку и пляжные тапочки. Если не брать тёплое одеяло, ещё один свитер к осени берите обязательно! &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Набор иголок с нитками&lt;/b&gt;. Всегда с собой беру. Ещё ни разу не понадобился. Но только не в этот раз. Когда перелазил через дерево, здорово порвал штаны прямёхонько между ног. Пришлось стать портным час.&lt;/li&gt;
&lt;li&gt; &lt;b&gt;Еду&lt;/b&gt;. 1 кг риса, 200 г пшеничной крупы, 1 кг гороха, 5 небольших бурячков, по 200 г изюма и семечек подсолнуха, бутылочку оливкового масла, соль, красный перец (хорошо греет). Сахар не брал. На 15 дней круп оказалось много, почти всё при отъезде оставил в лесу. Самой вкусной была пшеничная каша :) А вот горох (наверняка, как и другие "долгие" каши) брать с собой накладно: замочил горох на 2 дня и всё равно 2 часов кипения на костре ему не хватило - ел недоваренным.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Станковый рюкзак&lt;/b&gt;. Уже много лет исправно служит. В экстремальные походы, правда, с ним не ходил.&lt;/li&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
С собой не брал, но уже на месте думал, что было бы неплохо иметь:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Термос&lt;/b&gt;. Газовая горелка - это здорово. Но горячего чая хотелось чаще трёх раз в день :) &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Тёплое одеяло&lt;/b&gt;. Рюкзак за спиной и так смотрелся ёмко, поэтому не брал. Но по утрам было жутко холодно. В результате последние 4 дня часов до 8-ми не вылазил из спальника.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Сапёрную лопатку&lt;/b&gt;. Выровнять место для палатки, сделать ступеньки к реке (берег возвышается над Десной на 2-3 метра).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Фонарик&lt;/b&gt;. Его я просто забыл...&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;Место&lt;/b&gt; - красивое и тихое. Рядом - три упавших дерева образуют 4-угольник с выходом к реке. Эти три дерева лежат на уровне пояса и дают ощущение закрытости от внешнего мира. Мне это понравилось. В первый день насобирал дров для костра и все последующие не покидал эту фигуру.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Пляж&lt;/b&gt;. 20-метровая коса, шириной 2-3 метра из очень мелкого песка. От палатки к воде спускаться по вырытым в земле ступенькам. Я был в нескольких местах на Десне. Это глубокая река. "С головой" здесь уже через 5-7 метров. Это место не являлось исключением. Но в отличие от других мест, здесь нет течения, можно плавать не напрягаясь.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Погода&lt;/b&gt;. С ней очень повезло: все тёплые солнечные дни в начале осени - о такой погоде можно было только мечтать.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Животные&lt;/b&gt;. Их вокруг много. Пару раз в реке купалось что-то крупное: то ли олень, то ли лось. Но больше всего было диких уток: когда они начинали "петь" свои позывные, мне, сидя в палатке, порой казалось, что утки сидят под каждым кустом :) Ну очень громкие утки вокруг собрались! Когда темно, часов с 9 до 12 начинали выходить ночные обитатели. Они, видимо, старались особо не шуметь, но не у всех это получалось: кругом лес, полно веток. Больше всего доставала пара мышей, которым вдруг понравилось наматывать круги вокруг палатки. Сперва их было двое. Через пару дней услышал, как одна мышь кому-то попалась на ужин. За неск. дней до отъезда снова бегали парой. Но палатку мыши не грызли. Так, только резвились рядом.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Комары&lt;/b&gt;. Их больше, чем в городе. Но особого беспокойства не доставляли. Первые дни, перед тем, как выйти из палатки, я тщательно мазал открытые участки "Оффом", но после перестал это делать - и не почувствовал особой разницы. Вообще, после того, как  2 года назад пришлось заночевать на болотах, понятие "много комаров" для меня стало... намного шире. Раньше я не задумывался, могут ли комары съесть человека. Сейчас не сомневаюсь, что могут. Тогда меня спас туго затянутый спальный мешок (оставил небольшое отверстие для дыхания) и бинт, которым это отверстие прикрыл.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Шум&lt;/b&gt;. Посетителей от цивилизации очень мало. Неск. раз в день проплывают моторные лодки. Три раза неподалёку останавливались рыбаки. Один раз ставили сети браконьеры. Но рыбаки, и браконьеры - ребята очень тихие. А звуки лодок перестал замечать на 3-й день. Беспокойство вызывали лишь коровы (злой пастух раза 4 водил их в зоне слышимости) и два далёких танкодрома на севере и на юге (в сентябре генералы начали тренировать своих бойцов; до уток им было далеко, но всё равно выстрелы танков и залпы громов рвали тишину на много километров).&lt;br /&gt;
&lt;br /&gt;
Когда возвращался, в Ост&lt;i&gt;ё&lt;/i&gt;ре решил купить немного рыбы домой. Кстати, если поедете с удочками - без ухи наверняка  не останетесь: большой рыбы, судя по плесканию ночами, много. На базар идти было уже поздно (в Ост&lt;i&gt;ё&lt;/i&gt;ре был полдень), но, походив по городу, нашёл  людей, которые подсказали адрес нужного человека. Ещё минут 40 ушло, чтобы этот дом найти. Рыба стоит дешевле, чем в Киеве на 30-50%. Здесь телефон и адрес не оставляю (вдруг его прочитает инспектор из рыбнадзора? :), но если собираетесь отдыхать недалеко, пишите, телефон и адрес подскажу. Как оказалось, они ещё дачу на Десне отдыхающим сдают, для желающих отдохнуть с удобствами.&lt;br /&gt;
&lt;br /&gt;
Несмотря на то, что отдыхом я очень доволен, всё-таки в след. раз хотелось бы пожить в месте потише, подальше от милитаристов и рыбаков. &lt;b&gt;Может, кто подскажет такое?&lt;/b&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/2909062909816541374-6955978008914118055?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/tQ2pDnLewG4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/6955978008914118055/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=6955978008914118055&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/6955978008914118055?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/6955978008914118055?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/tQ2pDnLewG4/blog-post_14.html" title="Медитация на природе: что взять, чтобы вернуться" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-qlAldtDFhB4/Tm3wmMiAySI/AAAAAAAACNs/HoAZXYsu2ww/s72-c/oster-desna.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/09/blog-post_14.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cHSXg8eSp7ImA9WhdWFUo.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-4097145859785811926</id><published>2011-09-09T15:23:00.000+03:00</published><updated>2011-09-09T15:23:58.671+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T15:23:58.671+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Далион" /><title>Начало осени</title><content type="html">Начало осени. Буквально несколько слов о &lt;a href="http://dalion.ua/"&gt;Далионе&lt;/a&gt;. Работа над проектом на некоторое время (не спрашивайте сейчас какое, чит. ниже). Много усилий было приложено, многое было сделано... Но, видимо, усилия прилагались не в том направлении, т.к. в сегодняшнем виде проект себя не окупает. Будет сформирована новая концепция, ближе к реальному миру, с зарплатами и офисом. Но одно останется неизменным: люди, помогающие проекту развиваться эти годы, всегда получат значительно лучшие предложения (деньги, график, отпуска), чем те, кто придёт после (на условиях рынка). На сегодня это два человека: &lt;a href="http://eugeniashaffert.livejournal.com/"&gt;Евгения Шафферт&lt;/a&gt; и Оксана Рог. Раньше на Ко-сайте я сказал: "&lt;i&gt;Кто покинет проект, когда будет сложно с деньгами, в этой жизни работы от меня не получит&lt;/i&gt;". Хотелось бы мне видеть в этой группе ещё двух девочек. Но, увы, одна - прекратила работу на след. же день, как услышала "&lt;i&gt;зарплаты завтра не будет&lt;/i&gt;", вторая - просто исчезла. Поэтому, два человека.&lt;br /&gt;
&lt;br /&gt;
Далиону для развития нужны деньги. По самым жадным подсчётам &lt;b&gt;$200 тыс.&lt;/b&gt; хватит, чтобы платить людям хорошие зарплаты и выйти через полгода на самоокупаемость. Осталось эти деньги заработать. Сейчас и начну.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-4097145859785811926?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/EuuLntF26So" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/4097145859785811926/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=4097145859785811926&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/4097145859785811926?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/4097145859785811926?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/EuuLntF26So/blog-post.html" title="Начало осени" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/09/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYNQHY6eip7ImA9WhZWFEg.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-7562802789868527680</id><published>2011-05-15T12:40:00.009+03:00</published><updated>2011-05-15T13:43:11.812+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-15T13:43:11.812+03:00</app:edited><title>Размеры всего сущего</title><content type="html">Если ниже нет интерактивного слайда, отключите для этого сайта "&lt;a href="https://addons.mozilla.org/ru/firefox/addon/adblock-plus/" title="Скажи нет рекламе :)" target="_blank"&gt;Adblock Plus&lt;/a&gt;" или другое приложение, блокирующее контент: назойливой рекламы я размещать в блоге не буду.&lt;br /&gt;
&lt;br /&gt;
Двигайте ползунок!&lt;br /&gt;
&lt;br /&gt;
&lt;iframe frameborder="0" scrolling="no" src="" id="megaswf"&gt;&lt;/iframe&gt;&lt;script src="http://megaswf.com/ServeEmbedJS.aspx?fileID=1114087&amp;height=440&amp;width=640&amp;iframeID=megaswf" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-7562802789868527680?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/wzcrDuAf0lU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/7562802789868527680/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=7562802789868527680&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/7562802789868527680?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/7562802789868527680?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/wzcrDuAf0lU/blog-post.html" title="Размеры всего сущего" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/05/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQBSX49eyp7ImA9WhZQEkQ.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-7706298560396065086</id><published>2011-03-27T19:59:00.011+03:00</published><updated>2011-04-20T14:02:38.063+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-20T14:02:38.063+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="магазинам" /><title>Полезно ли Интернет-магазину ставить себе много кнопок / счётчиков?</title><content type="html">&lt;div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-5kosmhF9COI/TY9wD8Lqd9I/AAAAAAAACNQ/A18kEmfXfGQ/s1600/easy-red-button.jpg" /&gt;&lt;/div&gt;Если Вы не занимаетесь &lt;a href="http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F"&gt;поисковым спамом&lt;/a&gt;, у Вас не &lt;a href="http://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%BE%D0%B3"&gt;блог&lt;/a&gt;, не &lt;a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%BB%D0%BE%D0%B3"&gt;сплог&lt;/a&gt;, не &lt;a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%B0%D1%82%D0%B5%D0%BB%D0%BB%D0%B8%D1%82_%28%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%29"&gt;саттелит&lt;/a&gt;, не &lt;a href="http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D1%80%D0%B2%D0%B5%D0%B9"&gt;дорвей&lt;/a&gt;, не &lt;a href="http://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%BA%D0%BE%D1%84%D0%B5%D1%80%D0%BC%D0%B0"&gt;линкоферма&lt;/a&gt;, не &lt;a href="http://www.google.com.ua/search?hl=ru&amp;amp;rlz=1B3GGLL_ruUA361UA363&amp;amp;q=%D0%BB%D0%B5%D0%BD%D1%82%D0%B0+%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B5%D0%B9+%D0%B2%D1%81%D0%B5+%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8&amp;amp;btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&amp;amp;aq=f&amp;amp;aqi=&amp;amp;aql=&amp;amp;oq="&gt;транслятор чужих новостей&lt;/a&gt;, а живой &lt;b&gt;Интернет-магазин&lt;/b&gt;, правильный ответ на вопрос о количестве кнопок может быть только один: "&lt;i&gt;Ставьте кнопок &lt;b&gt;настолько мало, насколько это возможно&lt;/b&gt;. В идеале - ни одной. Ссылайтесь &lt;strike&gt;баннерами&lt;/strike&gt; на другие сайты только в случае, если сайты полезны Вашим посетителям&lt;/i&gt;".&lt;br /&gt;
&lt;br /&gt;
С внешними ссылками (а любая кнопка - это внешняя ссылка) есть нюанс. На форумах поисковых систем  &lt;a href="http://www.google.com/support/forum/p/webmasters/thread?tid=1261a38c5659e969&amp;amp;hl=ru"&gt;звучат рекомендации&lt;/a&gt; всегда добавлять к внешним ссылкам, включая кнопки / счётчики, специальный атрибут &lt;a href="http://ru.wikipedia.org/wiki/Nofollow"&gt;&lt;i&gt;rel="nofollow"&lt;/i&gt;&lt;/a&gt;. Официальные представители того же Google дают другую информацию (если русских титров нет, перейдите в ролике на YouTube и выберите&amp;nbsp;&lt;span style="background-color: #cc0000;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="background-color: #cc0000; color: white;"&gt;CC &lt;/span&gt;&lt;/b&gt;) &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;object height="311" width="500"&gt;&lt;param name="movie" value="http://www.youtube-nocookie.com/v/EnVEERmbdpo?fs=1&amp;amp;hl=ru_RU"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube-nocookie.com/v/EnVEERmbdpo?fs=1&amp;amp;hl=ru_RU" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="500" height="311"&gt;&lt;/embed&gt;&lt;/object&gt; &lt;br /&gt;
&lt;br /&gt;
В Интернете можно найти &lt;a href="http://www.google.com.ua/search?hl=ru&amp;amp;rlz=1B3GGLL_ruUA361UA363&amp;amp;q=noindex+nofollow&amp;amp;aq=f&amp;amp;aqi=g7&amp;amp;aql=&amp;amp;oq="&gt;уйму статей&lt;/a&gt; о другом атрибуте - &lt;a href="http://ru.wikipedia.org/wiki/Noindex"&gt;&lt;i&gt;noindex&lt;/i&gt;&lt;/a&gt;, рождённый Яндексом. Забудьте о &lt;i&gt;noindex&lt;/i&gt;: Яндекс с мая 2010 года &lt;a href="http://help.yandex.ru/webmaster/?id=1108950"&gt;учитывает &lt;i&gt;rel="nofollow"&lt;/i&gt;&lt;/a&gt; наравне с другими поисковыми системами. Это стало хорошим &lt;a href="http://www.mosinternet.com/news.php?newsid=62"&gt;сюрпризом для горе-&lt;strike&gt;веб&lt;/strike&gt;-оптимизаторов&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
А как же быть с кнопками социальных сетей? &lt;a href="http://www.google.com.ua/search?hl=ru&amp;amp;rlz=1B3GGLL_ruUA361UA363&amp;amp;q=%D1%82%D0%BE%D0%B2%D0%B0%D1%80+%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD+%D0%BA%D1%83%D0%BF%D0%B8%D1%82%D1%8C+%22%D0%9F%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D1%8C%D1%81%D1%8F%22+-%D0%BE%D0%BF%D1%8B%D1%82%D0%BE%D0%BC&amp;amp;aq=f&amp;amp;aqi=&amp;amp;aql=&amp;amp;oq="&gt;Походите сейчас&lt;/a&gt; по Интернет-магазинам: большинство из них обвешивают себя соцкнопками, как новогодними игрушками. Сейчас это модно. Польза от этих кнопок есть. Но это не та польза, о которой рассказывают "сайтостроители". Это - понятная, человеческая, польза. И &lt;b&gt;Вы сами можете её оценить&lt;/b&gt;, посетив свой магазин в качестве посетителя. Посетили? У Вас есть аккаунты в социальных сетях? Установленные в магазине кнопки пригодились? Примите решение: "советы специалистов" здесь не нужны.&lt;br /&gt;
&lt;br /&gt;
Как ни странно, многие владельцы магазинов редко примеряют на себя роль посетителя. А это - первое, что надо делать, создавая магазин. Интернет-магазин создаётся для людей? Полезность и удобство для посетителя - два кита успешного проекта. Впечатляющий дизайн сайта - полезный магазину китёнок, не более. Поисковые системы становятся всё умнее. В результате, поисковая оптимизация с каждым годом ближе к понятию "тюнинг веб-сайта", т.к. р&lt;i&gt;о&lt;/i&gt;боты начинают видеть сайты "глазами человека". Если с термином &lt;a href="http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F"&gt;SEO&lt;/a&gt; не знакомы - не забивайте &lt;i&gt;сейчас &lt;/i&gt;оптимизацией голову, это продаж не прибавит. Лучше спросите себя: "&lt;i&gt;Сделали бы Вы сами покупку в своём магазине? Кому и чем полезны добавленные кнопки?&lt;/i&gt;" &lt;a href="http://savdalion.blogspot.com/2011/03/liveinternet.html"&gt;Лирушечка&lt;/a&gt;, например, полезна для простой общедоступной статистики.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-7706298560396065086?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/j4UFTv_Z6VY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/7706298560396065086/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=7706298560396065086&amp;isPopup=true" title="Комментарии: 2" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/7706298560396065086?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/7706298560396065086?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/j4UFTv_Z6VY/blog-post_27.html" title="Полезно ли Интернет-магазину ставить себе много кнопок / счётчиков?" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-5kosmhF9COI/TY9wD8Lqd9I/AAAAAAAACNQ/A18kEmfXfGQ/s72-c/easy-red-button.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/03/blog-post_27.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MFSHg4eSp7ImA9WhZSEkk.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-6542322880401931452</id><published>2011-03-20T14:36:00.014+02:00</published><updated>2011-03-27T20:03:39.631+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-27T20:03:39.631+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="магазинам" /><title>Чем занимается посетитель в Вашем Интернет-магазине?</title><content type="html">&lt;div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh4.googleusercontent.com/-6q8ddcGcxhs/TYX0tAgqV-I/AAAAAAAACLw/KizJpa-i86E/s1600/people-shop-shadow-visitor.jpg" /&gt;&lt;/div&gt;Как быстро рассказать поисковым системам об изменении ассортимента своего магазина - &lt;a href="http://savdalion.blogspot.com/2011/03/blog-post_09.html"&gt;узнали&lt;/a&gt;. Итак, посетитель  заходит в Ваш Интернет-магазин. Первый посетитель, второй, третий... сотый. Неутомимый &lt;a href="http://savdalion.blogspot.com/2011/03/liveinternet.html"&gt;счётчик&lt;/a&gt; посетителей считает. А откуда приходят люди, &lt;b&gt;которые покупают&lt;/b&gt;? Какие страницы (товары, статьи) смотрят? На что обращают внимания? Где дольше задерживаются? Простой &lt;i&gt;счётчик&lt;/i&gt; (или &lt;i&gt;сервис статистики&lt;/i&gt;) ответы на эти вопросы не даёт. Здесь Вы узнаете, как магазину получить верные ответы.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Я построю это руководство по принципу "&lt;i&gt;Если информация уже есть в Интернете, смотрим её там&lt;/i&gt;": многие моменты уже написаны, и намного подробнее, чем можно позволить себе здесь, не превращая пост в книгу. В ссылках собраны лучшие на сегодня материалы по теме. Так что будьте готовы открывать другие страницы в новых окнах. Ведь знаете как? Удерживаете клавишу &lt;i&gt;Ctrl&lt;/i&gt; или &lt;i&gt;Shift&lt;/i&gt; - и нажимаете ссылку.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Какой счётчик выбрать для магазина?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Если Вам нужны ответы на вопросы о количестве посетителей магазина, с каких сайтов приходят, когда приходят, в каких странах проживают, каким браузером и даже с каким разрешении экрана просматривают - &lt;a href="http://yandex.ua/yandsearch?text=%D0%BF%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B9+%D1%81%D1%87%D1%91%D1%82%D1%87%D0%B8%D0%BA+%D0%BD%D0%B0+%D1%81%D0%B0%D0%B9%D1%82&amp;amp;tld=ua&amp;amp;lr=143"&gt;простые счётчики&lt;/a&gt; Вам в помощь. Но когда желаете видеть, &lt;b&gt;что делает&lt;/b&gt; посетитель Вашего магазина - выбирайте &lt;a href="http://metrika.yandex.ru/"&gt;Яндекс.Метрику&lt;/a&gt; (ЯМ) или &lt;a href="http://google.com/analytics/"&gt;Google Analytics&lt;/a&gt; (GA).&lt;br /&gt;
&lt;br /&gt;
Выбрать лучше одно. Что именно? Дело вкуса. Сервисы и от Яндекса, и от Google прекрасно справляются со своей задачей &amp;gt; &lt;a href="http://vremenno.net/seo/metrika-vs-google-analytics"&gt;сравнени ЯМ и GA&lt;/a&gt;, &lt;a href="http://habrahabr.ru/blogs/eCommerce/115672/"&gt;новый интерфейс GA&lt;/a&gt;. Лично мне Яндекс.Метрика видится более человечной.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Как установить счётчик?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Помните,  в начале этого поста сказал, что "&lt;i&gt;будут ссылки&lt;/i&gt;"? Вот, отличные инструкции на русском языке предоставляют сами сервисы статистики - &lt;a href="http://help.yandex.ru/metrika/?id=1113498"&gt;код ЯМ&lt;/a&gt;, &lt;a href="http://www.google.com/support/googleanalytics/bin/answer.py?answer=174090"&gt;код GA&lt;/a&gt;. Если нужна "развёрнутая пошаговая установка" - &lt;a href="http://ktonanovenkogo.ru/vokrug-da-okolo/schetchiki/google-analytics-yandeks-metrika-registraciya-poluchenie-ustanovka-schetchikov-poseshhaemosti.html"&gt;смотрите&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
После установки кода статистика начинает показывается &lt;b&gt;уже на след. день&lt;/b&gt;. Если этого не произошло, значит, счётчик установлен не правильно. Посмотрите распространённые ошибки (ниже)... или ещё раз &lt;b&gt;внимательно&lt;/b&gt;  прочтите инструкции для выбранного Вами сервиса. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Распространённые ошибки при установке счётчика посещений&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Счётчик поставлен не в те части страницы, которые указаны в инструкциях.&lt;/li&gt;
&lt;li&gt;Код счётчика был изменён (без понимания его работы).&lt;/li&gt;
&lt;li&gt;Счётчик установлен не на все страницы сайта.&lt;/li&gt;
&lt;li&gt;Код счётчика установлен не в заголовке страницы &amp;lt;head&amp;gt;. В общем случае, посетители, которые не дождались загрузки &lt;b&gt;всей&lt;/b&gt; страницы, не будут учитываться.&lt;/li&gt;
&lt;/ul&gt;Желающим получить &lt;b&gt;максимум пользы&lt;/b&gt; от сервиса статистики &amp;gt; &lt;a href="http://habrahabr.ru/tag/%D1%8F%D0%BD%D0%B4%D0%B5%D0%BA%D1%81.%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%BA%D0%B0/"&gt;для ЯМ&lt;/a&gt;, &lt;a href="http://web-analytic.ru/kak-pravilno-ustanovit-google-analytics-i-nastroit-ego-pod-runet/"&gt;для GA&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Если где-то краем уха слышали, мол "&lt;i&gt;статистика - &lt;/i&gt;какая угодно&lt;i&gt;! - расходится&lt;/i&gt;", верьте и знайте &lt;a href="http://habrahabr.ru/blogs/eCommerce/105981/"&gt;ответ "Почему?"&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Сколько счётчиков лучше установить?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Этот вопрос так часто задают начинающие создатели Интернет-магазинов, что он заслуживает отдельной темы :) Краткий ответ: "&lt;i&gt;Один&lt;/i&gt;". &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Как увидеть поведение посетителя в своём Интернет-магазине?&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
После установки кода &lt;i&gt;серьёзного&lt;/i&gt; счётчика, перемещение посетителей по магазину Вы уже можете видеть, посетив сайт выбранной статистики &amp;gt; &lt;a href="http://metrika.yandex.ru/"&gt;ЯМ&lt;/a&gt;, &lt;a href="https://google.com/analytics/settings/"&gt;GA&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Более того, оба сервиса уже покажут &lt;a href="http://adne.info/vizualno"&gt;куда заходит посетитель&lt;/a&gt;. Вам нужно больше? Тогда смотрите в сторону &lt;a href="http://sosnovskij.ru/webvisor-ru/"&gt;тепловых карт внимания&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Чтобы получить ответ на вопрос "&lt;i&gt;Откуда приходят посетители, &lt;b&gt;которые покупают&lt;/b&gt;?&lt;/i&gt;", помимо установки стандартного кода, надо проделать ещё немного работы: назначить интересующие Вас &lt;b&gt;цели&lt;/b&gt; &amp;gt; &lt;a href="http://help.yandex.ru/metrika/?id=1036912"&gt;работа для ЯМ&lt;/a&gt;, &lt;a href="http://code.google.com/intl/ru/apis/analytics/docs/tracking/eventTrackerOverview.html"&gt;работа для GA&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
И Google Analytics, и Яндекс.Метрика предоставляют ещё несколько интересных "поведенческих сервисов", которые Вашему Интернет-магазину "будуть у наг&lt;i&gt;о&lt;/i&gt;ди". П&lt;strike&gt;р&lt;/strike&gt;осмотрите справку - &lt;a href="http://help.yandex.ru/metrika/?id=1036908"&gt;справка ЯМ&lt;/a&gt;, &lt;a href="http://code.google.com/intl/ru/apis/analytics/docs/tracking/home.html"&gt;справка GA&lt;/a&gt; - чтобы использовать &lt;b&gt;максимум&lt;/b&gt; их возможностей. Например, можно запросто &lt;a href="http://habrahabr.ru/company/Techart/blog/100930/"&gt;отслеживать заполнение веб-формы&lt;/a&gt; посетителем.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Тема веб-аналитики -  большая. И, как в любом большом &lt;b&gt;д&lt;/b&gt;еле, понять все тонкости за один присест - нельзя. Важно понимать, что статистика - это &lt;i&gt;сбор&lt;/i&gt; данных, аналитика - &lt;i&gt;искусство&lt;/i&gt; данные анализировать. Если занимаетесь продвижением магазина в Интернете, надо стремиться быть &lt;i&gt;искусным аналитиком&lt;/i&gt;: данные для Вас уже собирает установленный счётчик.&lt;br /&gt;
&lt;br /&gt;
Здесь сказано достаточно, чтобы &lt;b&gt;начать и получить результат сразу же&lt;/b&gt;. Когда освоитесь с материалом (ссылки, полезные ссылки - мы ведь в Интернете!) и захотите пойти дальше, &lt;a href="http://roma.net.ua/internet-marketing/analytics/10-sovetov-nachinayushhemu-veb-analitiku/"&gt;великолепная статья Романа Рыбальченко&lt;/a&gt; поможет Вам обойти много подводных камней. &amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;На след. неделе - &lt;a href="http://savdalion.blogspot.com/2011/03/blog-post_27.html"&gt;Полезно ли Интернет-магазину ставить себе много кнопок / счётчиков?&lt;/a&gt;&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-6542322880401931452?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/725lvLqxqAU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/6542322880401931452/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=6542322880401931452&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/6542322880401931452?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/6542322880401931452?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/725lvLqxqAU/blog-post_20.html" title="Чем занимается посетитель в Вашем Интернет-магазине?" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh4.googleusercontent.com/-6q8ddcGcxhs/TYX0tAgqV-I/AAAAAAAACLw/KizJpa-i86E/s72-c/people-shop-shadow-visitor.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/03/blog-post_20.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EMRX86eip7ImA9WhZTFk0.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-6409232222345300235</id><published>2011-03-17T17:41:00.013+02:00</published><updated>2011-03-20T09:21:24.112+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-20T09:21:24.112+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="магазинам" /><category scheme="http://www.blogger.com/atom/ns#" term="Далион" /><title>Решено! Статистика LiveInternet. Для ежей.</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;
&lt;img border="0" src="https://lh3.googleusercontent.com/-b_Z3MioQSsg/TYIw1XobpWI/AAAAAAAACLo/u5Or0-XWdg8/s1600/urchin-hand.jpg" /&gt;&lt;/div&gt;Долго, долго я не хотел ставить визуальный счётчик статистики на сайты &lt;a href="http://dalion.ua/"&gt;Сервиса выбора подарка&lt;/a&gt;. Ну, не видел в них смысла. К чему отвлекать посетителя ненужными ему цифрами, заставлять грузить лишние килобайты, ждать лишние секунды? Думал, что общаясь с интересными проекту магазинами, можно запросто отправлять графики посещений в формате &lt;a href="http://ru.wikipedia.org/wiki/PDF"&gt;PDF&lt;/a&gt; (&lt;a href="http://lenta.ru/news/2007/12/05/pdf/"&gt;международный стандарт&lt;/a&gt; c 2008 года, между прочим), и предоставлять доступ к статистике &lt;a href="https://www.google.com/analytics"&gt;Google Analytics&lt;/a&gt; (GA) / &lt;a href="http://metrika.yandex.ru/"&gt;Яндекс.Метрики&lt;/a&gt;, которые намного, намного серьёзней примитивного счётчика &lt;a href="http://liveinternet.ru/code"&gt;LiveInternet&lt;/a&gt;... Ан нет! Переоценил я уровень образования владельцев Интернет-магазинов. Статистике от GA &lt;b&gt;2/3&lt;/b&gt; - не верят, подключиться и посмотреть (доступ предоставляли по первой просьбе) &lt;b&gt;3/4&lt;/b&gt; - не могут. А &lt;strike&gt;очень&lt;/strike&gt; многие ещё и заражены мыслью "&lt;i&gt;не показывают, значит хотят обмануть&lt;/i&gt;"... &lt;b&gt;Люди, не верящие в порядочность, редко сталкиваются с её проявлениями&lt;/b&gt;.&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
Что ж, я сделал выводы. На &lt;a href="http://dalion.ua/about"&gt;все сайты проекта&lt;/a&gt; поставлены счётчики LiveInternet. Внизу, внизу. Это, надеюсь, позволит нам больше не слышать фраз "&lt;i&gt;вы только начали работать&lt;/i&gt;" и "&lt;i&gt;проект не раскручен&lt;/i&gt;".&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;А, вообще, удивительно. Представители магазинов, вроде бы, называют себя "менеджерами", даже "директорами". Наверное, всё-таки, в кавычках, т.к. &lt;i&gt;настоящего&lt;/i&gt; менеджера / директора никогда не будет интересовать"&lt;i&gt;посещаемость &lt;b&gt;кого-то&lt;/b&gt;&lt;/i&gt;". Глупцам и желающим &lt;a href="http://seodic.ru/terms/%D0%BF%D1%83%D0%B7%D0%BE%D0%BC%D0%B5%D1%80%D0%BA%D0%B0"&gt;померятся пиписьками&lt;/a&gt;, да, эти цифры интересны. Ежу понятно:&amp;nbsp; посещаемость чужого сайта - отнюдь не показатель, что у размещённого там магазина увеличатся &lt;b&gt;продажи&lt;/b&gt;. &lt;a href="http://savdalion.blogspot.com/2010/02/blog-post_13.html"&gt;Когда-то&lt;/a&gt; это стало понятно и мне. Судя по вопросам магазинов, большинство т.н. "менеджеров" - даже не ежи...&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Продажи&lt;/b&gt;. Только они являются показателем. Я &lt;strike&gt;грубо&lt;/strike&gt; обобщу, назвав продажи &lt;i&gt;единственным&lt;/i&gt; показателем, &lt;i&gt;который полезен продавцам&lt;/i&gt;. Если заговорить не человеческим языком, можно услышать другое название , часто встречающееся в среде экономистов -&amp;nbsp; &lt;a href="http://ru.wikipedia.org/wiki/%D0%9E%D0%BA%D1%83%D0%BF%D0%B0%D0%B5%D0%BC%D0%BE%D1%81%D1%82%D1%8C_%D0%B8%D0%BD%D0%B2%D0%B5%D1%81%D1%82%D0%B8%D1%86%D0%B8%D0%B9"&gt;ROI&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Т.к. в 2011 году &lt;a href="http://dalion.ua/about"&gt;мы&lt;/a&gt; переключили внимание на работу с магазинами, показать полезность работы с Сервисом выбора подарка - первоочередная задача. Человек отвечает на несколько вопросов, система, анализируя десятки тысяч собранных в Базу Знаний мнений, предлагает подходящий подарок - и тут посетитель говорит: "&lt;i&gt;Отлично! Это хороший подарок. А у кого этот подарок я могу приобрести?&lt;/i&gt;" Далион показывает подходящий магазин, конкретные товары... Собираем статистику просмотров, переходов. Анализируем... Какие бы цифры не были, они будут правдиво отвечать на вопрос &lt;a href="http://lurkmore.ru/%D0%9E%D1%82%D0%BA%D0%B0%D1%82"&gt;&lt;i&gt;честного&lt;/i&gt;&lt;/a&gt; менеджера: "&lt;i&gt;Выгодно ли моему магазину работать с торговой маркой Далион?&lt;/i&gt;"&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-6409232222345300235?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/YZHo4TrbZUY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/6409232222345300235/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=6409232222345300235&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/6409232222345300235?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/6409232222345300235?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/YZHo4TrbZUY/liveinternet.html" title="Решено! Статистика LiveInternet. Для ежей." /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/-b_Z3MioQSsg/TYIw1XobpWI/AAAAAAAACLo/u5Or0-XWdg8/s72-c/urchin-hand.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/03/liveinternet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEASH04fip7ImA9WhdbE04.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-3203102259894470173</id><published>2011-03-15T20:11:00.005+02:00</published><updated>2011-10-11T14:30:49.336+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-11T14:30:49.336+03:00</app:edited><title>Наука претендует на мудрость?</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" height="192" src="http://1.bp.blogspot.com/-fe8cHRBR_5E/TpQmO0L3P4I/AAAAAAAACXc/h-luut21Pu4/s320/science-labwork-woman-man.png" width="320" /&gt;&lt;/div&gt;
Открыл сегодня &lt;a href="http://feedly.com/"&gt;RSS-газету&lt;/a&gt; с мыслью быстро проглядеть заголовки статей и промчаться по некоторым публикациям с интригующими названиями. И что вижу? Наука начала претендовать на мудрость!? Учёные, &lt;strike&gt;вместо того, чтобы наладить личную жизнь&lt;/strike&gt;, решили прояснить истинные причины долголетия. 80(!) лет (с 1921 г.) собирали данные, 20 последних лет дополняли / анализировали и сегодня опубликовали результаты. Целиком статья - &lt;a href="http://www.membrana.ru/particle/15847"&gt;здесь&lt;/a&gt;. Ниже - короткая выборка.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;О браке&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Брак &lt;i&gt;может быть&lt;/i&gt; полезен для здоровья мужчин, но на женщинах никак не отражается.&lt;/li&gt;
&lt;li&gt;Дольше всех остальных мужчин живут те, что состоят в&amp;nbsp;многолетних браках (доживают до 70 лет и&amp;nbsp;более).&lt;/li&gt;
&lt;li&gt;Менее одной трети разведённых мужчин доживают до 70 лет.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Мужчины, ни разу не вступавшие в&amp;nbsp;брак, живут дольше тех, кто повторно пошёл под венец, и&amp;nbsp;значительно дольше разведённых.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Для  здоровья женщин развод не столь губителен: те из них, что развелись  и&amp;nbsp;так и&amp;nbsp;остались одинокими, живут почти столько&amp;nbsp;же, сколько и&amp;nbsp;женщины  в&amp;nbsp;длительном браке.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;О работе&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Предложение не работать на износ не  увеличивает продолжительность жизни: постоянно работающие люди обоих  полов живут дольше своих более «расслабленных» сограждан.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;О школе и детях&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Ребёнку необходимо время на игры и&amp;nbsp;общение с&amp;nbsp;одноклассниками.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Раннее поступление в&amp;nbsp;школу (до 6 лет) – фактор риска ранней смерти. &lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;О домашних животных&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Домашние  животные никак не влияют на продолжительность жизни, хотя могут  временно улучшить самочувствие.&lt;/li&gt;
&lt;li&gt;Домашние животные не годятся в&amp;nbsp;качестве замены  друзьям.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Социальность, влияние прошлого и настоящего&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Участники вооружённых действий живут меньше, но  причиной тому является не психологический стресс, а&amp;nbsp;&lt;i&gt;последующее&lt;/i&gt; не  полезное для здоровья поведение.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Люди, вернувшие себе чувство защищённости в&amp;nbsp;этом мире, как правило, возвращают и&amp;nbsp;здоровье.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Ощущение любви и&amp;nbsp;заботы со стороны окружающих улучшает самочувствие, но не отражается на продолжительности жизни.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Самый очевидный положительный эффект на здоровье оказывает вовлечённость в&amp;nbsp;социальные отношения, помощь окружающим.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;В большинстве случаев здоровый / нездоровый образ жизни человека определяет его окружение.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Многие вещи - очевидны (если &lt;a href="http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%BF%D0%B0%D1%81%D1%81%D0%B0%D0%BD%D0%B0"&gt;остановиться&lt;/a&gt;), некоторые - спорны (если задуматься). Я позволил себе жирным выделить выводы, которые мне &lt;b&gt;особенно&lt;/b&gt; понравились.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.membrana.ru/particle/15847"&gt;Говорят&lt;/a&gt;, целую книгу по результатам исследования выпустили... Лет десять назад, посчитал бы это здоровским решением ("&lt;i&gt;стольким людям книга поможет!&lt;/i&gt;"). Пять лет назад возмутился бы ("&lt;i&gt;разве мало выпущено книг-советов!?&lt;/i&gt;"). Сейчас к новости отнёсся на удивление ровно ("&lt;i&gt;новая книга найдёт своего читателя&lt;/i&gt;"). Десятки бизнес-гуру-которые-учат-других-жить пополнят свой арсенал этими "открытиями" психологов. И будут бомбить выявленными "фактами" &lt;strike&gt;пустые&lt;/strike&gt; шаткие головы своей паствы. А уязвимые слушатели / читатели, раскрыв рты, внимать новой информации, &lt;i&gt;способной&lt;/i&gt; изменить их жизни. Способной. Но редко меняющей. Потому что вокруг сейчас много путей &lt;strike&gt;к счастью&lt;/strike&gt; &lt;strike&gt;к смыслу&lt;/strike&gt;. Но человек действительно меняется тогда, когда &lt;i&gt;осознанно выбрав&lt;/i&gt; &lt;b&gt;свой путь&lt;/b&gt;, от него не отступает; &lt;i&gt;приняв&lt;/i&gt; &lt;b&gt;взвешенное решение&lt;/b&gt;, его не меняет. А теория... Сейчас в ней нет недостатка.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-3203102259894470173?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/hXAjdc61vns" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/3203102259894470173/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=3203102259894470173&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/3203102259894470173?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/3203102259894470173?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/hXAjdc61vns/blog-post_15.html" title="Наука претендует на мудрость?" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-fe8cHRBR_5E/TpQmO0L3P4I/AAAAAAAACXc/h-luut21Pu4/s72-c/science-labwork-woman-man.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/03/blog-post_15.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04GRXo9eCp7ImA9WhdVFUU.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-6489575628706926033</id><published>2011-03-09T19:21:00.019+02:00</published><updated>2011-09-21T09:18:44.460+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-21T09:18:44.460+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="магазинам" /><category scheme="http://www.blogger.com/atom/ns#" term="Далион" /><title>Как быстро рассказать поисковым системам об изменении ассортимента магазина</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" height="216" src="http://2.bp.blogspot.com/-NMTjHwYwpho/TniCZlah_yI/AAAAAAAACQY/aOM5Iq7htQU/s400/fast-shop-change.gif" width="300" /&gt;&lt;/div&gt;
&lt;a href="http://www.google.com.ua/search?hl=ru&amp;amp;biw=1273&amp;amp;bih=766&amp;amp;q=%22%D0%BD%D0%B5+%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B8%D1%80%D1%83%D1%8E%D1%82%D1%81%D1%8F%22+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B+%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D0%B0&amp;amp;aq=f&amp;amp;aqi=&amp;amp;aql=&amp;amp;oq="&gt;Многие&lt;/a&gt; магазины сталкиваются с проблемой &lt;a href="http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B0%D1%86%D0%B8%D1%8F_%D0%B2_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0%D1%85"&gt;индексации поисковиками&lt;/a&gt; товаров их веб-сайта. Проблемой, потому что если ждёте &lt;b&gt;посетителей из поисковых систем&lt;/b&gt; (хотя это далеко не единственная дверь в Ваш магазин и порой странно, что владельцы Интернет-магазинов об этом забывают), люди не найдут Ваш товар в поиске до тех пор, пока &lt;i&gt;поисковик не проиндексирует&lt;/i&gt; &lt;i&gt;страницу&lt;/i&gt; магазина. Оставим в стороне вопрос &lt;b&gt;как&lt;/b&gt; должна быть представлена информация о товаре (посмотрите как это делают &lt;a href="http://www.google.com.ua/search?source=ig&amp;amp;hl=ru&amp;amp;rlz=1G1GGLQ_RUZZ263&amp;amp;=&amp;amp;q=%D0%BF%D0%BE%D0%BF%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5+%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D1%8B&amp;amp;aq=f&amp;amp;aqi=g4&amp;amp;aql=&amp;amp;oq="&gt;популярные Интернет-магазины&lt;/a&gt;). Здесь посмотрим, как сказать поисковику быстро о том, что в магазине появились новые товары и/или изменилась цена на старые.  &lt;br /&gt;
&lt;br /&gt;
Чтобы Вам не рассказывали, для этого не надо обращаться к "специалистам": если Вы знаете, как на своём сайте добавить страницу с товаром, рассказать о ней поисковым системам  можно самостоятельно. Причём, просто и быстро.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;Неск. слов о самом процессе индексации.&lt;br /&gt;
&lt;br /&gt;
Поисковые системам не хватает роботов, чтобы &lt;i&gt;ежедневно&lt;/i&gt; просматривать миллионы веб-сайтов (миллиарды веб-страниц). Да чего уж там: один раз узнав про сайт (&lt;a href="http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BC%D0%B5%D0%BD%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BC%D1%8F"&gt;домен&lt;/a&gt;), поисковики могут не добавлять его новые страницы месяцами! Может, ситуация изменится в будущем, но на сегодня инженеры поисковых систем поступили &lt;a href="http://savdalion.blogspot.com/2011/03/blog-post.html"&gt;также, как с микроформатами&lt;/a&gt;: переложили часть &lt;strike&gt;своей&lt;/strike&gt; работы на владельцев сайтов. Как это сделали? Вы должны самостоятельно поддерживать в актуальном состоянии т.н. "&lt;i&gt;карту сайта&lt;/i&gt;". К счастью, поисковые системы всё чаще используют международные стандарты, а не пытаются придумать свои. Поэтому созданная Вами &lt;i&gt;карта&lt;/i&gt; магазина будет понята всеми.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Карта сайта представлена протоколом &lt;a href="http://sitemaps.org/ru"&gt;Sitemap&lt;/a&gt;. В ней мы рассказываем о веб-страницах магазина, последнем их изменении и &lt;i&gt;планируемой&lt;/i&gt; частоте обновления. Декларируется это добро в текстовом файле с именем &lt;i&gt;sitemap.xml&lt;/i&gt;, который желательно расположить в &lt;a href="http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3_%28%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0%29"&gt;корневом каталоге&lt;/a&gt; магазина. Пример содержания &amp;gt;&lt;br /&gt;
&lt;pre&gt;&lt;code class="xml"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;

   &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#urlsetdef"&gt;xmlns&lt;/a&gt;="http://www.sitemaps.org/schemas/sitemap/0.9"&amp;gt;
   &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#urldef"&gt;url&lt;/a&gt;&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#locdef"&gt;loc&lt;/a&gt;&amp;gt;http://example.com/&amp;lt;/loc&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#lastmoddef"&gt;lastmod&lt;/a&gt;&amp;gt;2011-01-01&amp;lt;/lastmod&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#changefreqdef"&gt;changefreq&lt;/a&gt;&amp;gt;monthly&amp;lt;/changefreq&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#prioritydef"&gt;priority&lt;/a&gt;&amp;gt;0.8&amp;lt;/priority&amp;gt;
   &amp;lt;/url&amp;gt;
   
   &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#urldef"&gt;url&lt;/a&gt;&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#locdef"&gt;loc&lt;/a&gt;&amp;gt;http://example.com/catalog?item=12&amp;amp;desc=v_hawai&amp;lt;/loc&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#changefreqdef"&gt;changefreq&lt;/a&gt;&amp;gt;weekly&amp;lt;/changefreq&amp;gt;
   &amp;lt;/url&amp;gt;
   
   &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#urldef"&gt;url&lt;/a&gt;&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#locdef"&gt;loc&lt;/a&gt;&amp;gt;http://example.com/catalog?item=73&amp;amp;desc=v_nz&amp;lt;/loc&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#lastmoddef"&gt;lastmod&lt;/a&gt;&amp;gt;2011-12-23&amp;lt;/lastmod&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#changefreqdef"&gt;changefreq&lt;/a&gt;&amp;gt;weekly&amp;lt;/changefreq&amp;gt;
   &amp;lt;/url&amp;gt;
   
   &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#urldef"&gt;url&lt;/a&gt;&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#locdef"&gt;loc&lt;/a&gt;&amp;gt;http://example.com/catalog?item=74&amp;amp;desc=v_nf&amp;lt;/loc&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#lastmoddef"&gt;lastmod&lt;/a&gt;&amp;gt;2011-12-23T18:00:15+00:00&amp;lt;/lastmod&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#prioritydef"&gt;priority&lt;/a&gt;&amp;gt;0.3&amp;lt;/priority&amp;gt;
   &amp;lt;/url&amp;gt;
   
   &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#urldef"&gt;url&lt;/a&gt;&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#locdef"&gt;loc&lt;/a&gt;&amp;gt;http://example.com/catalog?item=83&amp;amp;desc=v_usa&amp;lt;/loc&amp;gt;
      &amp;lt;&lt;a href="http://www.sitemaps.org/ru/protocol.php#lastmoddef"&gt;lastmod&lt;/a&gt;&amp;gt;2010-11-23&amp;lt;/lastmod&amp;gt;
   &amp;lt;/url&amp;gt;
   
&amp;lt;/urlset&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
В тегах &lt;i&gt;&lt;url&gt;&lt;/url&gt;&lt;/i&gt; перечисляются полные адреса страниц Вашего магазина (&lt;i&gt;&lt;loc&gt;&lt;/loc&gt;&lt;/i&gt;&amp;lt;loc&amp;gt;), дата именения информации на странице (&lt;i&gt;&lt;lastmod&gt;&lt;/lastmod&gt;&lt;/i&gt;&amp;lt;changefreq&amp;gt;), частота планируемого обновления (&lt;i&gt;&lt;changefreq&gt;&lt;/changefreq&gt;&lt;/i&gt;&amp;lt;lastmod&amp;gt;) и важность страницы (&amp;lt;priority&amp;gt;&lt;i&gt;&lt;priority&gt;&lt;/priority&gt;&lt;/i&gt;). Обязательным является только тег &lt;i&gt;&lt;loc&gt;&lt;/loc&gt;&lt;/i&gt;&amp;lt;loc&amp;gt;. Но &lt;i&gt;желательно&lt;/i&gt; указывать все теги: т.о. Вы дадите поисковому роботу "информацию к размышлению" и, может быть (да-да, всё написанное в файле sitemap - только &lt;i&gt;рекомендации&lt;/i&gt; роботу), он прислушается - и оптимизирует частоту посещения Вашего магазина.&lt;br /&gt;
&lt;br /&gt;
Это всё, что нужно знать для создания файла Sitemap. Но если желаете знать больше - походите выше по ссылкам в коде XML: для больших магазинов там есть особые вкусности.&lt;br /&gt;
&lt;br /&gt;
Для создания файла &lt;i&gt;sitemap.xml&lt;/i&gt; для большинства CMS разработаны специальные инструменты. Воспользуйтесь ими, чтобы не формировать sitemap ручками. Если Вашей системы нет в списке - скажите, добавлю &amp;gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Bitrix &amp;gt; &lt;a href="http://dev.1c-bitrix.ru/user_help/settings/search/search_sitemap.php"&gt;dev.1c-bitrix.ru/user_help/settings/search/search_sitemap.php&lt;/a&gt;&lt;/span&gt; &lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Drupal &amp;gt; &lt;a href="http://drupal.org/project/xmlsitemap"&gt;drupal.org/project/xmlsitemap&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Joomla &amp;gt; &lt;a href="http://ext.joom.ru/sitemap.html"&gt;ext.joom.ru/sitemap.html&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Для &lt;i&gt;быстрого&lt;/i&gt; указания поисковикам пройтись по Вашему файлу sitemap вовсе не обязательно регистрировать свой сайт в поисковых системах. Хотя регистрация даёт дополнительные преимущества владельцам магазинов с большим ассортиментом товаров. Например, сможете отслеживать процесс индексации, который для тысяч товаров, увы, может длиться неделями. Воспользуйтесь прямыми ссылками, скопировав их в адресную строку браузера &amp;gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Ask &amp;gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt;http://submissions.ask.com/ping?sitemap=http://&lt;span style="background-color: yellow;"&gt;ВашДомен&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;/sitemap.xml&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Bing &amp;gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt;http://bing.com/webmaster/ping.aspx?siteMap=http://&lt;span style="background-color: yellow;"&gt;ВашДомен&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;/sitemap.xml&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Google &amp;gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt;http://google.com/webmasters/sitemaps/ping?sitemap=http://&lt;span style="background-color: yellow;"&gt;ВашДомен&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;/sitemap.xml&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Yahoo &amp;gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt;http://search.yahooapis.com/SiteExplorerService/V1/ping?sitemap=http://&lt;span style="background-color: yellow;"&gt;ВашДомен&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;/sitemap.xml&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
Вместо &lt;span style="background-color: yellow;"&gt;ВашДомен&lt;/span&gt; подставьте домен своего магазина.&lt;br /&gt;
Для Яндекса придётся зарегистрироваться: не поддерживает он простое добавление &lt;i&gt;sitemap.xml&lt;/i&gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Как видите, поисковые системы - отнюдь не умные и не всепонимающие: им всё надо разложить по полочкам. Умными поисковики делают владельцы веб-сайтов. &lt;b&gt;Умные&lt;/b&gt; владельцы :) Поэтому создатели поисковых систем были и будут заинтересованы в &lt;b&gt;бесплатных&lt;/b&gt; семинарах и консультациях: &lt;a href="http://google.com.ua/search?hl=&amp;amp;q=%D0%B1%D0%B5%D1%81%D0%BF%D0%BB%D0%B0%D1%82%D0%BD%D1%8B%D0%B9+%28%D1%81%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80+%7C+%D0%BA%D0%BE%D0%BD%D1%81%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%86%D0%B8%D1%8F%29+SEO&amp;amp;sourceid=navclient-ff&amp;amp;rlz=1B3GGLL_ruUA361UA363&amp;amp;ie=UTF-8"&gt;ищите&lt;/a&gt; и пользуйтесь на здоровье!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b style="color: #cc0000;"&gt;(...)&lt;/b&gt; Бывают ситуации, когда создание правильного &lt;i&gt;sitemap&lt;/i&gt; не приводит к появлению &lt;i&gt;некоторых&lt;/i&gt; страниц в поисковых системах. Тогда &amp;gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Обратите внимание, доступны эти страницы роботам? &lt;a href="http://www.google.com.ua/search?hl=ru&amp;amp;biw=1273&amp;amp;bih=766&amp;amp;q=robots.txt+%D0%B4%D0%BB%D1%8F+%D1%87%D0%B5%D0%B3%D0%BE+%D0%BD%D1%83%D0%B6%D0%B5%D0%BD&amp;amp;aq=f&amp;amp;aqi=&amp;amp;aql=&amp;amp;oq="&gt;Информация&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Вспомните, не была ли бездумно скопирована информация о товаре у других магазинов? &lt;a href="http://compass-blogger.com.ua/raskrutkaprodvizhenie-sajtabloga/plagiarism.html"&gt;Инструменты&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Посмотрите плотность ключевых слов на странице. &lt;a href="http://devaka.ru/articles/keyword-density-services"&gt;Инструменты&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&amp;lt;На след. неделе - &lt;a href="http://savdalion.blogspot.com/2011/03/blog-post_20.html"&gt;Статистика сайта, отслеживание действий посетителя&lt;/a&gt;&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-6489575628706926033?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/wi1Yd_FURSs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/6489575628706926033/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=6489575628706926033&amp;isPopup=true" title="Комментарии: 11" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/6489575628706926033?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/6489575628706926033?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/wi1Yd_FURSs/blog-post_09.html" title="Как быстро рассказать поисковым системам об изменении ассортимента магазина" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-NMTjHwYwpho/TniCZlah_yI/AAAAAAAACQY/aOM5Iq7htQU/s72-c/fast-shop-change.gif" height="72" width="72" /><thr:total>11</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/03/blog-post_09.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkACRnk7cCp7ImA9WhdVFU8.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-6783056922365797198</id><published>2011-03-02T20:59:00.010+02:00</published><updated>2011-09-20T15:12:47.708+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-20T15:12:47.708+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="магазинам" /><category scheme="http://www.blogger.com/atom/ns#" term="Далион" /><title>Польза микроформатов для Интернет-магазинов</title><content type="html">&lt;div class="separator" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;
&lt;img border="0" height="285" src="http://2.bp.blogspot.com/-nPL0K5QxZ6g/TniDIFx_gfI/AAAAAAAACQg/uqs4JJEOIrQ/s400/microformats-logo.png" width="292" /&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;b&gt;Микроформаты&lt;/b&gt; &lt;i&gt;-&lt;/i&gt; это способ размечать сведения о событиях, организациях, людях, товарах и т. д. на веб-страницах, используя стандартные элементы языка &lt;a href="http://ru.wikipedia.org/wiki/HTML"&gt;HTML&lt;/a&gt;. Человек может воспринимать страницу с  микроформатом как обычную веб-страницу;  в то же время программы-обработчики способны извлечь из такой страницы  структурированную информацию. &lt;/blockquote&gt;
&lt;div style="text-align: right;"&gt;
&lt;a href="http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D1%8B"&gt;Wikipedia&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
Другими словами, микроформаты делают жизнь создателей поисковых систем проще, переложив  работу по описанию данных на владельцев веб-сайтов (ага, на нас с вами). Правда в том, что веб-магазины, использующие сегодня микроформаты, получают бонус от поисковиков: как минимум, информация с их сайтов - цены, ассортимент, комментарии - быстрее становится доступной б&lt;i&gt;о&lt;/i&gt;льшему количеству людей.&lt;/div&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;Чем полезны микроформаты Интернет-магазину&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Поисковые системы быстрее обновляют информацию об ассортименте, ценах, отзывах к товару, контактах.&lt;/li&gt;
&lt;li&gt;Информация о магазине появляется в тематических сервисах поисковых систем. Например, в &lt;a href="http://maps.yandex.ru/?where"&gt;справочнике организаций&lt;/a&gt;, &lt;a href="http://savdalion.blogspot.com/2011/02/blog-post_23.html"&gt;сниппетах&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Если магазин размещает у себя новость-событие, микроформаты позволяют посетителю одним кликом добавить их к себе в календарь.&lt;/li&gt;
&lt;li&gt;Один раз семантически разметив страницу,  Вы будете &lt;i&gt;неожиданно&lt;/i&gt; получать новых посетителей: поисковые системы, социальные сети не стоят на месте и создают всё новые формы поиска. Магазины, использующие микроформаты, наверняка, (п)окажутся в них среди первых.&lt;/li&gt;
&lt;li&gt;Вы будете знать, что Ваш магазин не упустил ещё один бесплатный способ продвижения в Интернете :) &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Использовать микроформаты &lt;strike&gt;не просто, а очень&lt;/strike&gt; просто. Для этого достаточно  знать их назначение и &lt;a href="http://ru.wikipedia.org/wiki/HTML#.D0.A1.D1.82.D1.80.D1.83.D0.BA.D1.82.D1.83.D1.80.D0.B0_HTML-.D0.B4.D0.BE.D0.BA.D1.83.D0.BC.D0.B5.D0.BD.D1.82.D0.B0"&gt;как устроена веб-страница&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Здесь не будет технических деталей о том, как "микроразметить" сайт. Цель этой заметки - дать Вам представление о &lt;i&gt;полезности&lt;/i&gt; микроформатов. Я оставляю ссылки, где можно найти всю необходимую техническую информацию. Если что будет не ясно - обращайтесь, помогу.&lt;br /&gt;
&lt;br /&gt;
Микроформатов - &lt;a href="http://ru.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D1%8B#.D0.A1.D1.83.D1.89.D0.B5.D1.81.D1.82.D0.B2.D1.83.D1.8E.D1.89.D0.B8.D0.B5_.D0.BC.D0.B8.D0.BA.D1.80.D0.BE.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.82.D1.8B"&gt;много&lt;/a&gt;. Магазинам, в основном, пригодятся такие &amp;gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ru.wikipedia.org/wiki/HCard"&gt;hCard&lt;/a&gt; Адреса, контактная информация. &lt;a href="http://microformats.org/wiki/hcard"&gt;Стандарт&lt;/a&gt;. Примеры &amp;gt; &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=ru&amp;amp;answer=146646"&gt;люди&lt;/a&gt;, &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=ru&amp;amp;answer=146861"&gt;организации&lt;/a&gt;. &lt;a href="http://microformats.org/code/hcard/creator"&gt;Форма&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ru.wikipedia.org/wiki/HCalendar"&gt;hCalendar&lt;/a&gt; События. &lt;a href="http://microformats.org/wiki/hcalendar"&gt;Стандарт&lt;/a&gt;. &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hlrm=en&amp;amp;answer=164506"&gt;Пример&lt;/a&gt;. &lt;a href="http://www.xfront.com/microformats/hCalendar.html"&gt;Урок&lt;/a&gt;. &lt;a href="http://microformats.org/code/hcalendar/creator"&gt;Форма&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=ru&amp;amp;answer=146750"&gt;hProduct&lt;/a&gt; Товары. &lt;a href="http://microformats.org/wiki/hproduct"&gt;Стандарт&lt;/a&gt;. &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en-GB&amp;amp;answer=146750"&gt;Пример&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://help.yandex.ru/webmaster/?id=1113262"&gt;hReview&lt;/a&gt; Отзывы. &lt;a href="http://microformats.org/wiki/hreview"&gt;Стандарт&lt;/a&gt;. Примеры &amp;gt; &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=ru&amp;amp;answer=146645"&gt;отзывы&lt;/a&gt;, &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=ru&amp;amp;answer=172705"&gt;оценки&lt;/a&gt;. &lt;a href="http://microformats.org/code/hreview/creator"&gt;Форма&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
А популярные сегодня социальные сети в восторге от формата &lt;a href="http://microformats.org/2005/11/02/xfn-grandeur"&gt;XFN&lt;/a&gt; (&lt;a href="http://microformats.org/code/xfn/creator-ru.html"&gt;Форма&lt;/a&gt;)...&lt;br /&gt;
&lt;br /&gt;
Эти микроформаты сейчас понимают &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?hl=ru&amp;amp;answer=146897"&gt;Google&lt;/a&gt; (все представленные выше форматы), &lt;a href="http://developer.yahoo.com/searchmonkey/smguide/semantic_web.html#microformats"&gt;Yahoo&lt;/a&gt; (кроме hProduct) &lt;a href="http://help.yandex.ru/webmaster/?id=1111670"&gt;Yandex&lt;/a&gt; (кроме hCalendar). По ссылкам в &lt;i&gt;этом&lt;/i&gt; абзаце Вы можете найти информацию обо всех поддерживаемых поисковыми системами форматах.&lt;br /&gt;
&lt;br /&gt;
Проверить правильность разметки микроформатами поможет открытый в декабре 2010 г. &lt;a href="http://webmaster.yandex.ru/microtest.xml"&gt;сервис от Яндекса&lt;/a&gt;. И у Google есть &lt;a href="http://www.google.com/webmasters/tools/richsnippets"&gt;такой сервис&lt;/a&gt;. А быстро освоить микроформаты - ссылки "&lt;u&gt;Форма&lt;/u&gt;" и "&lt;u&gt;Примеры&lt;/u&gt;" (да-да, активные, чуть выше). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для полноты картины замечу, что микроформаты - не единственный способ  рассказать другим сайтам, что в действительности обозначают цифры, слова и картинки в Вашем Интернет-магазине. Много, много раньше появились  форматы, делающие то же самое, и гораздо полнее. &lt;strike&gt;Звали&lt;/strike&gt; Зовут их &lt;a href="http://ru.wikipedia.org/wiki/Web_Ontology_Language"&gt;OWL&lt;/a&gt; и &lt;a href="http://ru.wikipedia.org/wiki/Resource_Description_Framework"&gt;RDF&lt;/a&gt;. Но реальность такова, что "&lt;i&gt;полнее&lt;/i&gt;", отнюдь не значит "&lt;i&gt;лучше&lt;/i&gt;". Эти форматы сложнее микроформатов. Сейчас OWL и RDF повторяют судьбу мощного языка разметки &lt;a href="http://ru.wikipedia.org/wiki/SGML"&gt;SGML&lt;/a&gt;: большинство людей выбирает максимально простое решение, удовлетворяющее их потребности.&lt;br /&gt;
&lt;br /&gt;
О т.н.  "&lt;i&gt;Semantic Web&lt;/i&gt;" хорошо пишет Сергей Щербак в своём &lt;a href="http://shcherbak.net/"&gt;блоге&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;На след. неделе - &lt;a href="http://savdalion.blogspot.com/2011/03/blog-post_09.html"&gt;как быстро рассказать поисковым системам об изменении ассортимента&lt;/a&gt; у своего магазина&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-6783056922365797198?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/1QddsjAWJ8A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/6783056922365797198/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=6783056922365797198&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/6783056922365797198?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/6783056922365797198?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/1QddsjAWJ8A/blog-post.html" title="Польза микроформатов для Интернет-магазинов" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-nPL0K5QxZ6g/TniDIFx_gfI/AAAAAAAACQg/uqs4JJEOIrQ/s72-c/microformats-logo.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/03/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAMQn4-fCp7ImA9Wx9aGUk.&quot;"><id>tag:blogger.com,1999:blog-2909062909816541374.post-2844339573909843532</id><published>2011-02-23T20:40:00.011+02:00</published><updated>2011-03-12T18:36:23.054+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-12T18:36:23.054+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="магазинам" /><category scheme="http://www.blogger.com/atom/ns#" term="Далион" /><title>Как магазину выделиться в поиске Яндекса</title><content type="html">Небольшое вступление.&lt;br /&gt;
&lt;br /&gt;
Мы &lt;a href="http://dalion-news.blogspot.com/search/label/%D0%BF%D1%80%D0%B5%D1%81%D1%81-%D1%80%D0%B5%D0%BB%D0%B8%D0%B7"&gt;озвучиваем&lt;/a&gt; свои обещания магазинам и активно работаем над тем, чтобы эти обещания &lt;a href="http://savdalion.blogspot.com/2011/02/blog-post.html"&gt;выполнять&lt;/a&gt;. Много времени ушло на перевод &lt;a href="http://dalion.ua/"&gt;Сервиса выбора подарка&lt;/a&gt; на новую платформу. Сейчас работаем, чтобы &lt;a href="http://dalion.ua/"&gt;проект&lt;/a&gt; ясно отвечал на &lt;b&gt;2&lt;/b&gt; вопроса &amp;gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Что подарить?&lt;/li&gt;
&lt;li&gt;Где купить?&lt;/li&gt;
&lt;/ol&gt;Без магазинов &lt;a href="http://dalion.ua/"&gt;Сервис выбора подарка&lt;/a&gt; развиваться не может, т.к. деньги с продавцов - единственный источник дохода у проекта. Поэтому прилагаем все усилия, чтобы &lt;a href="http://dalion.ua/about"&gt;наш&lt;/a&gt; проект был магазинам &lt;b&gt;полезен&lt;/b&gt;. В рамках этой "программы", я каждый день просматриваю новости и когда проскакивают сведения, которые могут пригодиться Интернет-магазинам, буду на своём блоге говорить об этом. С сегодняшнего дня.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://yandex.ru/"&gt;Яндекс&lt;/a&gt; в феврале &lt;b&gt;2011&lt;/b&gt; года существенно расширил список сниппетов. Сниппет позволяет визуально &lt;b&gt;выделить магазин в результатах поиска&lt;/b&gt;. И даже если Ваш Интернет-магазин не зарегистрирован в &lt;a href="http://maps.yandex.ru/?where"&gt;каталоге&lt;/a&gt; Яндекса, будет полезным решением предоставить хорошему поисковику информацию о нужном сайте.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;&lt;b&gt;Сниппет&lt;/b&gt; - краткая «выжимка» содержания документа, показывается в  результатах поиска и располагается сразу под заголовком найденной  страницы.&lt;/i&gt; &lt;/blockquote&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;&lt;a href="http://help.yandex.ru/webmaster/?id=1111310"&gt;yandex.ru&lt;/a&gt;&lt;/i&gt; &lt;/div&gt;&lt;br /&gt;
На момент написания этого поста, выделить свой магазин в результатах поиска могут &amp;gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt; Автосалоны &lt;/li&gt;
&lt;li&gt;Автосервисы&lt;/li&gt;
&lt;li&gt;Автошколы&lt;/li&gt;
&lt;li&gt;Аптеки&lt;/li&gt;
&lt;li&gt;Аэропорты&lt;/li&gt;
&lt;li&gt;Бани&lt;/li&gt;
&lt;li&gt;Бары и пабы&lt;/li&gt;
&lt;li&gt;Бассейны&lt;/li&gt;
&lt;li&gt;Боулинг- и бильярд клубы&lt;/li&gt;
&lt;li&gt;Ветеринарные клиники&lt;/li&gt;
&lt;li&gt;Гостиницы&lt;/li&gt;
&lt;li&gt;Дельфинарии&lt;/li&gt;
&lt;li&gt;Детские сады&lt;/li&gt;
&lt;li&gt;Зоомагазины&lt;/li&gt;
&lt;li&gt;Кафе и Кофейни&lt;/li&gt;
&lt;li&gt;Кинотеатры&lt;/li&gt;
&lt;li&gt;Книжные магазины&lt;/li&gt;
&lt;li&gt;Музеи&lt;/li&gt;
&lt;li&gt;Ночные клубы&lt;/li&gt;
&lt;li&gt;Нотариусы&lt;/li&gt;
&lt;li&gt;Парикмахерские&lt;/li&gt;
&lt;li&gt;Пиццерии&lt;/li&gt;
&lt;li&gt;Рестораны&lt;/li&gt;
&lt;li&gt;Салоны красоты&lt;/li&gt;
&lt;li&gt;Спорт-бары&lt;/li&gt;
&lt;li&gt;Стоматологические клиники&lt;/li&gt;
&lt;li&gt;Супермаркеты&lt;/li&gt;
&lt;li&gt;Суши-бары&lt;/li&gt;
&lt;li&gt;Такси&lt;/li&gt;
&lt;li&gt;Торговые центры&lt;/li&gt;
&lt;li&gt;Туристические фирмы&lt;/li&gt;
&lt;li&gt;Школы танцев&lt;/li&gt;
&lt;/ul&gt;Перечислены все категории, для которых у Яндекса есть сниппеты. Не все они могут быть опубликованы в &lt;a href="http://dalion.ua/"&gt;Сервисе выбора подарка&lt;/a&gt;. Но это пост написан &lt;i&gt;благодаря&lt;/i&gt; работе над &lt;a href="http://dalion.ua/about"&gt;проектом&lt;/a&gt;, а не &lt;i&gt;сугубо для&lt;/i&gt; него. Найдут информацию полезной для себя Аптеки, Нотариусы и пр. далёкие от "подарка" фирмы? Я рад этому. Но не буду рад им. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Добавить информацию о своей фирме (чтобы она показывалась в сниппетах) Вы можете на странице &amp;gt; &lt;a href="http://help.yandex.ru/webmaster/?id=1108685"&gt;http://help.yandex.ru/webmaster/?id=1108685&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Узнать больше о сниппетах (что именно будет показываться, как исправить ошибочную информацию) можно здесь &amp;gt; &lt;a href="http://help.yandex.ru/webmaster/?id=1082354"&gt;http://help.yandex.ru/webmaster/?id=1082354&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассказывая  о сниппетах, я предполагаю, что Ваш магазин уже работает в Интернете и, как минимум, зарегистрирован в поисковых системах. Если нет, познакомьтесь с &lt;a href="http://shakin.ru/"&gt;shakin.ru&lt;/a&gt; для самостоятельного веб-продвижения. Ещё рекомендовал бы зарегистрировать свой магазин на &lt;a href="http://dalion.ua/add/shop"&gt;dalion.ua&lt;/a&gt;, но  эта рекомендация, конечно же, не будет не предвзятой :) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;На след. неделе расскажу &lt;a href="http://savdalion.blogspot.com/2011/03/blog-post.html"&gt;о микроформатах, чем они   полезны Интернет-магазинам&lt;/a&gt;&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2909062909816541374-2844339573909843532?l=savdalion.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/savdalion/~4/qm8sVHazEAI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://savdalion.blogspot.com/feeds/2844339573909843532/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2909062909816541374&amp;postID=2844339573909843532&amp;isPopup=true" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/2844339573909843532?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2909062909816541374/posts/default/2844339573909843532?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/savdalion/~3/qm8sVHazEAI/blog-post_23.html" title="Как магазину выделиться в поиске Яндекса" /><author><name>Андрей</name><uri>http://www.blogger.com/profile/02715216472597824596</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/-Kn4BdBvOeUo/TnxrKycaVtI/AAAAAAAACUs/IhfXtxsTBGs/s220/b-l-500x500.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://savdalion.blogspot.com/2011/02/blog-post_23.html</feedburner:origLink></entry></feed>

