<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>kernel panic in userspace &#187; Runix</title>
	<atom:link href="http://bobrik.name/category/runix/feed/" rel="self" type="application/rss+xml" />
	<link>http://bobrik.name</link>
	<description>my own self destruction</description>
	<lastBuildDate>Fri, 23 Jul 2010 11:23:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>bbPress terms filtering &amp; hacks</title>
		<link>http://bobrik.name/2010/07/19/bbpress-terms-filtering-hacks/</link>
		<comments>http://bobrik.name/2010/07/19/bbpress-terms-filtering-hacks/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 23:41:12 +0000</pubDate>
		<dc:creator>bobrik</dc:creator>
				<category><![CDATA[Runix]]></category>
		<category><![CDATA[Russian]]></category>
		<category><![CDATA[array_keys]]></category>
		<category><![CDATA[array_values]]></category>
		<category><![CDATA[bbpress]]></category>
		<category><![CDATA[filters]]></category>
		<category><![CDATA[foreach]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://bobrik.name/?p=816</guid>
		<description><![CDATA[Дана задача: сделать, чтобы облако тегов в bbPress выглядело как облако тегов, а не как огромная надпись «News» в окружении других букв. Т.е. нужно убрать этот самый тег «News», чтобы всё выглядело более или менее нормально. В общем случае необходимо убрать теги, которые встречаются со слишком большим отрывом от остальных. Есть несколько способов различной степени [...]]]></description>
			<content:encoded><![CDATA[<div id="post-816-russian"><p>Дана задача: сделать, чтобы облако тегов в bbPress выглядело как облако тегов, а не как огромная надпись «News» в окружении других букв. Т.е. нужно убрать этот самый тег «News», чтобы всё выглядело более или менее нормально. В общем случае необходимо убрать теги, которые встречаются со слишком большим отрывом от остальных.</p>
<p>Есть несколько способов различной степени кривости. Я, как мне кажется, выбрал тот, что требует наименьшей крови: даже шаблон править не пришлось. Было бы отлично, если бы мы фильтровали теги прямо в функции вывода тегов, но так уж сложилось, что bbPress не поощряет таких изысков.</p>
<p>Пойдём обходными путями: будем фильтровать вывод <strong>get_terms</strong> по условию. В условии и прячется самая соль. Определение того, что нам нужно отфильтровать теги производится согласно стеку вызовов. Т.е. если мы находит в нём вызов функции вывода облака тегов, то необходима фильтрация:</p>
<pre>function better_bb_tag_heat_map_exclude_filter($terms)
{
    $isCaptured = false;
    foreach (debug_backtrace() as $call)
    {
        if (isset($call['function']) &#038;&#038; $call['function'] == 'bb_tag_heat_map')
        {
            $isCaptured = true;
            break;
        }
    }

    if ($isCaptured)
    {
        return better_bb_tag_heat_map_sort($terms);
    }
    return $terms;
}

add_filter('get_terms', 'better_bb_tag_heat_map_exclude_filter');</pre>
<p>В функции фильтрации прибегаем к помощи теории вероятностей и математической статистике — будем выбирать только те записи, у которых интервал до <a  href="http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5">математического ожидания</a> меньше, чем к максимальному значению, поделённый надвое. Дисперсию использовать я как-то не захотел здесь :) Код не покажу пока что — там не сложно. Выложу вместе с плагином, как будет время.</p>
<p>В качестве бонуса <a  href="http://trac.bbpress.org/ticket/1313">баг в bbPress</a>, который может вам покалечить нервы. Пока что в качестве обходного пути можно возвращать из фильтра array_values($terms), вместо $terms, где у нас ключи могут начинаться не с 0 или пропускаться. Впрочем, это то же самое, если бы новый массив заводили. Глупо и неэффективно.</p>
<p>Если в php4 foreach обходит объекты не по ссылке, то можно было бы обходить array_keys() тем же foreach(). bbPress &#038; WordPress как всегда на высоте со своим кодом, да.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://bobrik.name/2010/07/19/bbpress-terms-filtering-hacks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>antialiased fonts in netbeans (java apps in common)</title>
		<link>http://bobrik.name/2010/06/27/antialiased-fonts-in-netbeans-java-apps-in-common/</link>
		<comments>http://bobrik.name/2010/06/27/antialiased-fonts-in-netbeans-java-apps-in-common/#comments</comments>
		<pubDate>Sun, 27 Jun 2010 00:42:20 +0000</pubDate>
		<dc:creator>bobrik</dc:creator>
				<category><![CDATA[Belarusian]]></category>
		<category><![CDATA[Runix]]></category>
		<category><![CDATA[Russian]]></category>
		<category><![CDATA[antialiasing]]></category>
		<category><![CDATA[awt]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[qtcurve]]></category>
		<category><![CDATA[screenshots]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://bobrik.name/?p=797</guid>
		<description><![CDATA[Не знаю, как вам, а мне вот в блокноте неудобно огромные проекты фигачить, да так, чтобы ещё и в subversion коммитить, и diff просматривать, и справку и все прочие плюшки, посему приходится пользоваться такими благами цивилизации, как IDE. До недавнего времени пользовался Eclipse, но его тормоза и странные баги меня окончательно доконали и я перешёл [...]]]></description>
			<content:encoded><![CDATA[<div id="post-797-russian"><p>Не знаю, как вам, а мне вот в блокноте неудобно огромные проекты фигачить, да так, чтобы ещё и в subversion коммитить, и diff просматривать, и справку и все прочие плюшки, посему приходится пользоваться такими благами цивилизации, как IDE. До недавнего времени пользовался Eclipse, но его тормоза и странные баги меня окончательно доконали и я перешёл на NetBeans. Только вот не радовала меня следующая ситуация со шрифтами:</p>
<div style="text-align: center;"><img src="http://bobrik.name/uploads/netbeans-antialiased-fonts/netbeans_no_gtk_aa_thumb.png" alt="netbeans not antialiased fonts" /></div>
<p>Ещё хотелось, чтобы выглядело всё как-то более-менее однородно с остальной системой и использовало установленную тему GTK+.</p>
<p><a  href="http://bobrik.name/?p=797" class="more-link"><span class="readmore">Read the rest of this entry &raquo;</span></a></p>
</div><div id="post-797-belarusian" style="display: none"><p>Ня ведаю, як вам, але мне вось ужо ў блакноце нязручна вялікія праекты фігачыць, ды так, каб яшчэ і ў subversion каміціць, і diff праглядаць, і дапамогу і ўсё іншыя плюшкі, таму прыходзіцца карыстацца такімі дасягненьнямі цывілізацыі, як IDE. Да нядаўняга часу я карыстаўся Eclipse, але ягоныя тармазы і дзіўныя багі мяне канчаткова заманалі і я перайшоў на NetBeans. Толькі вось не ўзрадвае мяне наступная сітуацыя са шрыфтамі:</p>
<div style="text-align: center;"><img src="http://bobrik.name/uploads/netbeans-antialiased-fonts/netbeans_no_gtk_aa_thumb.png" alt="netbeans not antialiased fonts" /></div>
<p>Яшчэ хацелася б, каб усё выглядала больш-менш аднародна зь сістэмай і выкарыстоўвала ўсталяваную тэму GTK+.</p>
<p><a  href="http://bobrik.name/?p=797" class="more-link"><span class="readmore">Read the rest of this entry &raquo;</span></a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://bobrik.name/2010/06/27/antialiased-fonts-in-netbeans-java-apps-in-common/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Gentoo Xorg-1.8 synaptics touchpad</title>
		<link>http://bobrik.name/2010/04/06/gentoo-xorg-1-8-synaptics-touchpad/</link>
		<comments>http://bobrik.name/2010/04/06/gentoo-xorg-1-8-synaptics-touchpad/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 21:11:59 +0000</pubDate>
		<dc:creator>bobrik</dc:creator>
				<category><![CDATA[Belarusian]]></category>
		<category><![CDATA[Runix]]></category>
		<category><![CDATA[Russian]]></category>
		<category><![CDATA[evdev]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[hal]]></category>
		<category><![CDATA[overlay]]></category>
		<category><![CDATA[synaptics]]></category>
		<category><![CDATA[touchpad]]></category>
		<category><![CDATA[udev]]></category>
		<category><![CDATA[x11]]></category>
		<category><![CDATA[xorf]]></category>
		<category><![CDATA[xorg]]></category>
		<category><![CDATA[xorg.conf.d]]></category>

		<guid isPermaLink="false">http://bobrik.name/?p=793</guid>
		<description><![CDATA[Всё течёт, всё меняется. Теперь файлы надо держать в /etc/X11/xorg.conf.d. Там же есть пример, просто надо поменять драйвер с evdev на synaptics Я знаю, вы все классные ребята и глаза у вас человеческого цвета. Я тоже, у меня голубые, к слову, а не красные. Только вот всё равно у меня почему-то подключен в Gentoo оверлей [...]]]></description>
			<content:encoded><![CDATA[<div id="post-793-russian"><div class="note">
<p>Всё течёт, всё меняется. Теперь файлы надо держать в <strong>/etc/X11/xorg.conf.d</strong>. Там же есть пример, просто надо поменять драйвер с <strong>evdev</strong> на <strong>synaptics</strong></p>
</div>
<p>Я знаю, вы все классные ребята и глаза у вас человеческого цвета. Я тоже, у меня голубые, к слову, а не красные. Только вот всё равно у меня почему-то подключен в Gentoo оверлей x11. Не знаю. Наверное это с бурной юности осталось.</p>
<p>По сей причине у меня с недавних пор, а именно со времён обновления до x11-base/xorg-server-1.8.0 тачпад стал себя вести просто отвратительно. Носился как угорелый, на tap события не реагировал, я уже молчу про отвалившийся скролл. Всё дело в udev, на который разработчики xorg решили свалить с hal. Нас никто не предупредил, потому мы будем сами выкручиваться. Простая пересборка драйвера synaptics никаких вменяемых результатов не даст, так что стоит поступить вот как:</p>
<p>Созадём в директории <strong>/etc/xorg.conf.d</strong> (да-да, неужели?) два файлика с примерно следующим содержимым:</p>
<p><strong>/etc/xorg.conf.d/10-synaptics.conf</strong></p>
<pre><code>Section "InputDevice"
   Identifier "touchpad"
   Driver "synaptics"
   Option "AutoServerLayout" "on"
EndSection</code></pre>
<p><strong>/etc/xorg.conf.d/99-evdev.conf</strong></p>
<pre><code>Section "InputClass"
        Identifier "evdev-catchall"
        Driver "evdev"
EndSection</code></pre>
<p>После чего, разумеется, перезапустим иксы. Вуаля! :) Теперь сначала synaptics захватит наш тачпад, а уж потом всем остальным займётся evdev. Дальше сами разберётесь.</p>
<p>Привет</p>
</div><div id="post-793-belarusian" style="display: none"><div class="note">
<p>Час бяжыць, усё зьмяняецца. Цяпер файлы трэба трымаць у <strong>/etc/X11/xorg.conf.d</strong>. Там жа ёсьць прыклад, проста трэба зьмяніць драйвер з <strong>evdev</strong> на <strong>synaptics</strong></p>
</div>
<p>Я ведаю, вы ўсё клёвыя чувакі і вочы ў вас чалавечага колеру. Я таксама, у меня блакітныя, дарэчы, а не чырвоныя. Толькі вось усё роўна ў мяне чамусьці падключаны ў Gentoo овэрлэй x11. Ня ведаю. Напэўна, гэта за часоў бурнага юнацтва засталося.</p>
<p>З такой нагоды ў мяне з нядаўніх часоў, а менавіта з часу аднаўленьня да x11-base/xorg-server-1.8.0 тачпад стаў сябе весьці проста неверагодна фігова. Насіўся як апалены, на tap эвэнты не рэагаваў, я ўжо маўчу пра адваліўшыся скрол. Уся справа ва udev, на які распрацоўшчыкі xorg вырашылі зваліць з hal. Нас ніхто не папярэджваў, таму мы будзем самі выкручвацца. Простая перасборка драйверу synaptics ніякіх вынікаў не дасі, таму варта паступіць наступным чынам:</p>
<p>Ствараем у тэчцы <strong>/etc/xorg.conf.d</strong> (так-так, ахвігець?) два файлікі з прыкладна наступным зьмесьцівам:</p>
<p><strong>/etc/xorg.conf.d/10-synaptics.conf</strong></p>
<pre><code>Section "InputDevice"
   Identifier "touchpad"
   Driver "synaptics"
   Option "AutoServerLayout" "on"
EndSection</code></pre>
<p><strong>/etc/xorg.conf.d/99-evdev.conf</strong></p>
<pre><code>Section "InputClass"
        Identifier "evdev-catchall"
        Driver "evdev"
EndSection</code></pre>
<p>Пасьля чаго, зразумела, перазапускаем іксы. Вуаля! :) Цяпер спачатку synaptics захопіць ваш тачпад, а ўжо потым астатнім займецца evdev. Далей самі разруліце.</p>
<p>Прывіт</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://bobrik.name/2010/04/06/gentoo-xorg-1-8-synaptics-touchpad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>hide mentions update</title>
		<link>http://bobrik.name/2010/04/04/hide-mentions-update/</link>
		<comments>http://bobrik.name/2010/04/04/hide-mentions-update/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 12:29:53 +0000</pubDate>
		<dc:creator>bobrik</dc:creator>
				<category><![CDATA[Belarusian]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Runix]]></category>
		<category><![CDATA[Russian]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mentions]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[updates]]></category>

		<guid isPermaLink="false">http://bobrik.name/?p=786</guid>
		<description><![CDATA[Со времён написания прошлого поста в Twitter несколько поменялась структура таймлайна и скрипт перестал работать. Если быть точным, то теперь у сообщений появился новый уровень вложенности. Не беда, всё поправили. Устанавливается всё просто: Идём на вот эту страничку Копируем всё, что на ней есть и добавляем новую закладку, где вместо ссылки будет то, что мы [...]]]></description>
			<content:encoded><![CDATA[<div id="post-786-russian" style="display: none"><p>Со времён написания <a  href="http://bobrik.name/2010/01/24/hide-mentions-in-twitter-web-interface/">прошлого поста</a> в Twitter несколько поменялась структура таймлайна и скрипт перестал работать. Если быть точным, то теперь у сообщений появился новый уровень вложенности. Не беда, всё поправили.</p>
<p>Устанавливается всё просто:</p>
<ul>
<li>Идём на <a  href="http://bobrik.name/projects/twitter-hide-mentions/hideMentions.min.js">вот эту страничку</a></li>
<li>Копируем всё, что на ней есть и добавляем новую закладку, где вместо ссылки будет то, что мы только что скопировали</li>
<li>Выбираем имя по вкусу и добавляем на видное место</li>
<li>Усё :)</li>
</ul>
<p>Теперь на любой (ну, почти любой) странице твиттера можно скрыть упоминания других пользователей простым нажатием на нашу закладку.</p>
<p>Если интересен сам код — смотрим <a  href="http://bobrik.name/projects/twitter-hide-mentions/hideMentions.js">здесь</a>.</p>
<p>p.s.: за наводку спасибо <a  href="http://twitter.com/mon_lolka">@mon_lolka</a></p>
</div><div id="post-786-belarusian" style="display: none"><p>З часу напісаньня  <a  href="http://bobrik.name/2010/01/24/hide-mentions-in-twitter-web-interface/">мінулага паста</a> ў Twitter трошкі зьмянілася структура таймлайна і скрыпт перастаў працаваць. Калі быць дакладным, дык цяпер у паведамленьняў зьявіўся новы ўзровень укладзенасьці. Ня страша, я ўсё паправіў.</p>
<p>Усталёўваецца ўсё проста:</p>
<ul>
<li>Ідзем на <a  href="http://bobrik.name/projects/twitter-hide-mentions/hideMentions.min.js">вось гэтую старонку</a></li>
<li>Капіюем ўсё, што на ёй ёсьць і дадаем новую закладку, дзе замест спасылкі будзе тое, што мы толькі што скапіявалі</li>
<li>Выбіраем імя на свой густ і дадаем закладку на бачнае месца</li>
<li>Усё :)</li>
</ul>
<p>Цяпер на любой (ну, амаль любой) старонцы твітэра можно будзе схаваць узгадваньні іншых карыстачоў простым націсканьнем на нашу закладку.</p>
<p>Калі цікавіць код — глядзім <a  href="http://bobrik.name/projects/twitter-hide-mentions/hideMentions.js">тут</a>.</p>
<p>p.s.: за наводку дзякуй <a  href="http://twitter.com/mon_lolka">@mon_lolka</a></p>
</div><div id="post-786-english"><p>Since the time of writing <a  href="http://bobrik.name/2010/01/24/hide-mentions-in-twitter-web-interface/">last post </a> Twitter changed the structure of timeline and script stopped working. To be exact, now posts a new level of nesting. Do not worry, all corrected. </p>
<p>Installation is simple: </p>
<ul>
<li>Go to <a  href="http://bobrik.name/projects/twitter-hide-mentions/hideMentions.min.js">that page</a></li>
<li>Copy everything on it is and add a new bookmark, where instead of url use that you just copied </li>
<li>Choose a name for taste and add in a prominent place</li>
<li>That&#8217;s it :)</ li>
</ul>
<p>Now for any (well, almost any) page on Twitter you can hide mentions of other users by simply clicking on new bookmark.</p>
<p>If interested in the code itself — look <a  href="http://bobrik.name/projects/twitter-hide-mentions/hideMentions.js">here</a>. </p>
<p>p.s.: thanks for the tip-off to <a  href="http://twitter.com/mon_lolka">@mon_lolka </a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://bobrik.name/2010/04/04/hide-mentions-update/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Hide Mentions in Twitter Web Interface</title>
		<link>http://bobrik.name/2010/01/24/hide-mentions-in-twitter-web-interface/</link>
		<comments>http://bobrik.name/2010/01/24/hide-mentions-in-twitter-web-interface/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 23:25:47 +0000</pubDate>
		<dc:creator>bobrik</dc:creator>
				<category><![CDATA[Belarusian]]></category>
		<category><![CDATA[Runix]]></category>
		<category><![CDATA[Russian]]></category>
		<category><![CDATA[chromium]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://bobrik.name/?p=762</guid>
		<description><![CDATA[Во время сессии вечно хочется сделать что-нибудь эдакое совсем бесполезное, лишь бы только не готовиться к экзаменам. Внезапно последний экзамен получился автоматом (был целиком на одной лекции), так что я решил попрактиковаться в JavaScript, вместо того, чтобы заниматься полезными делами. Некоторые тви-фашисты (вроде меня) не слишком любят читать реплаи чужим людям. Порой хочется открыть веб-интерфейс, [...]]]></description>
			<content:encoded><![CDATA[<div id="post-762-russian"><p>Во время сессии вечно хочется сделать что-нибудь эдакое совсем бесполезное, лишь бы только не готовиться к экзаменам. Внезапно последний экзамен получился автоматом (был целиком на одной лекции), так что я решил попрактиковаться в JavaScript<del datetime="2010-01-23T22:39:45+00:00">, вместо того, чтобы заниматься полезными делами</del>.</p>
<p>Некоторые тви-фашисты (вроде меня) не слишком любят читать реплаи чужим людям. Порой хочется открыть веб-интерфейс, открыть чью-нибудь ленту и просто почитать. Благо, букв немного. А там закрадутся 100500 реплаев, которые вообще ну никак в картину мира не вписываются. Так вот, давно хотелось их выпилить. Сначала я хотел сделать расширение для Chromium, но <del datetime="2010-01-23T22:39:45+00:00">не вышло</del> потом подумалось, что недурно было бы сделать что-нибудь более универсальное, например закладку. Пользователь на неё клац — и реплаи исчезли/появились. Ну не чудесно ли? :)</p>
<div class="note">
<p>Скрипт несколько обновился. Смотрите всё <a  href="http://bobrik.name/2010/04/04/hide-mentions-update/">здесь</a></p>
</div>
<p><em>Этот большой и сташный кусок непостигшие дао могут пропустить, листайте ниже.</em> Написался следующий скрипт (лицензирую под GPL v3, к слову):</p>
<pre><code class="javascript">if (typeof toggleTwitterUserMentions == "undefined")
{
  toggleTwitterUserMentions = function()
  {
    self = this;
    if (self.knowSettings == undefined)
    {
      self.knowSettings = true;
      self.hideMentions = true;
      self.getTweetsWithMentions = function()
      {
        return $('#timeline>li.status>span.status-body>span.entry-content>a.username').parent().parent().parent();
      }
      self.toggle = function()
      {
        if (self.hideMentions)
        {
          self.getTweetsWithMentions().slideUp();
        } else
        {
          self.getTweetsWithMentions().slideDown();
        }
        self.hideMentions = !self.hideMentions;
      }
      self.onPageChange = onPageChange;
      self.calledInternalOnPageChange = false;
      onPageChange = function()
      {
        if (!self.calledInternalOnPageChange)
        {
          self.calledInternalOnPageChange = true;
          self.onPageChange();
        } else
        {
          self.hideMentions = !self.hideMentions;
          self.toggle();
        }
      }
    }
    this.toggle();
  }
}
toggleTwitterUserMentions();</code></pre>
<p>После долгих и мучительных попыток его минимизировать и при этом оставить в рабочем состоянии осталось только первое требование. Видимо, я слишком хитро написал, чтобы обфускатор правильно всё разбрал и потом собрал обратно. Ну и ладно. Тем не менее, <strong>всё, что нужно для использования</strong> — добавить на панель следующую ссылку:</p>
<p><code>javascript:if(typeof toggleTwitterUserMentions=="undefined"){toggleTwitterUserMentions=function(){self=this;if(self.knowSettings==undefined){self.knowSettings=true;self.hideMentions=true;self.getTweetsWithMentions=function(){return $("#timeline>li.status>span.status-body>span.entry-content>a.username").parent().parent().parent()};self.toggle=function(){if(self.hideMentions){self.getTweetsWithMentions().slideUp()}else{self.getTweetsWithMentions().slideDown()}self.hideMentions=!self.hideMentions};self.onPageChange=onPageChange;self.calledInternalOnPageChange=false;onPageChange=function(){if(!self.calledInternalOnPageChange){self.calledInternalOnPageChange=true;self.onPageChange()}else{self.hideMentions=!self.hideMentions;self.toggle()}}}this.toggle()}}toggleTwitterUserMentions();</code></p>
<p>Потом можно в веб-интерфейсе твиттере этой кнопочкой пользоваться. Что стоит учесть:</p>
<ul>
<li>Повторное нажатие вернёт все реплаи</li>
<li>При использовании кнопки «more» настройка сохраняется и реплаи <strong>прячутся</strong></li>
<li>При переходе в DM, replies или другие меню реплаи тоже <strong>прячутся</strong></li>
<li>При появлении новых твиттов вверху страницы реплаи <strong>не прячутся</strong>, что логично (?)</li>
</ul>
<p>Enjoy, как говорится. Распространение в твиттере приветствуется %)</p>
</div><div id="post-762-belarusian" style="display: none"><p>Падчас сэсіі пастаянна хочацца зрабіць што-небудзь гэтакае зусім бессэнсоўнае, толькі б не рыхтавацца да іспытаў. Нечакана апошні экзамен атрымаўся аўтаматам (быў на адной лекцыі цалкам), так што я вырашыў папрактыкавацца ў JavaScript<del datetime="2010-01-23T22:39:45+00:00">, замест таго, каб займацца патрэбнымі справамі</del>.</p>
<p>Некаторыя тві-фашысты (кшталту мяне) ня дужа любяць чытаць рэплаі іншым людзям. Час ад часу хочацца адкрць вэб-інтэрфейс, адкрыць чыю-небудзь ленту і проста пачытаць. Добра, што літар няшмат. А там закрадуцца 100500 рэплаяў, якія ну ніяк не ўпісваюцца ў сьветаўленьне. Спачатку я хацеў напісаць пашырэньне для Chromium, але <del datetime="2010-01-23T22:39:45+00:00">ня выйшла</del> потым падумалася, што няблага было б і што-небудзь больш універсальнае зрабіць, напрыклад закладку. Карыстач на яе клац — і рэплаі зьніклі/зьявіліся. Ну не цуд, га? :)</p>
<div class="note">
<p>Скрыпт некалькі аднавіўся. Глядзіце ўсё <a  href="http://bobrik.name/2010/04/04/hide-mentions-update/">тут</a></p>
</div>
<p><em>Гэты вялікі і страшэнны кусок можна прапусьціць, калі вы дао не спасьціглі яшчэ.</em> Напісаўся наступны скрыпт (ліцэнзірую пад GPL v3, дарэчы):</p>
<pre><code class="javascript">if (typeof toggleTwitterUserMentions == "undefined")
{
  toggleTwitterUserMentions = function()
  {
    self = this;
    if (self.knowSettings == undefined)
    {
      self.knowSettings = true;
      self.hideMentions = true;
      self.getTweetsWithMentions = function()
      {
        return $('#timeline>li.status>span.status-body>span.entry-content>a.username').parent().parent().parent();
      }
      self.toggle = function()
      {
        if (self.hideMentions)
        {
          self.getTweetsWithMentions().slideUp();
        } else
        {
          self.getTweetsWithMentions().slideDown();
        }
        self.hideMentions = !self.hideMentions;
      }
      self.onPageChange = onPageChange;
      self.calledInternalOnPageChange = false;
      onPageChange = function()
      {
        if (!self.calledInternalOnPageChange)
        {
          self.calledInternalOnPageChange = true;
          self.onPageChange();
        } else
        {
          self.hideMentions = !self.hideMentions;
          self.toggle();
        }
      }
    }
    this.toggle();
  }
}
toggleTwitterUserMentions();</code></pre>
<p>Пасьля доўгіх і беспасьпяховых спроб яго мінімізаваць і пры гэтым заставіць у працоўным стане засталося толькі першае патрабаваньне. Напэўна, я дужа хітра напісаў, каб абфускатар правільна ўсё разабраў і потым сабраў зноў. Ну і ладна. Тым не менш, <strong>усё, ўто трэба для карыстаньня</strong> — дадаць на панэльку наступную спасылку:</p>
<p><code>javascript:if(typeof toggleTwitterUserMentions=="undefined"){toggleTwitterUserMentions=function(){self=this;if(self.knowSettings==undefined){self.knowSettings=true;self.hideMentions=true;self.getTweetsWithMentions=function(){return $("#timeline>li.status>span.status-body>span.entry-content>a.username").parent().parent().parent()};self.toggle=function(){if(self.hideMentions){self.getTweetsWithMentions().slideUp()}else{self.getTweetsWithMentions().slideDown()}self.hideMentions=!self.hideMentions};self.onPageChange=onPageChange;self.calledInternalOnPageChange=false;onPageChange=function(){if(!self.calledInternalOnPageChange){self.calledInternalOnPageChange=true;self.onPageChange()}else{self.hideMentions=!self.hideMentions;self.toggle()}}}this.toggle()}}toggleTwitterUserMentions();</code></p>
<p>Потым можна будзе ў уэб-інтэрфейсе твітэра гэтай кнопкай карыстацца. Але варта ўлічваць:</p>
<ul>
<li>Паўторнае націсканьне верне ўсе рэплаі</li>
<li>Пры выкарыстаньні кнопкі «more» наладка захоўваецца і рэплаі <strong>хаваюцца</strong></li>
<li>Пры пераходзе ў DM, replies ці іншыя меню рэплаі таксама <strong>хаваюцца</strong></li>
<li>Пры зьяўленьні новых твітаў уверсе старонкі рэплаі <strong>не хаваюцца</strong>, што лягічна (?)</li>
</ul>
<p>Enjoy, як кажуць. Распаўсюд у твітэры вітаецца %)</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://bobrik.name/2010/01/24/hide-mentions-in-twitter-web-interface/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>new project: @listwatcher</title>
		<link>http://bobrik.name/2009/11/20/new-project-listwatcher/</link>
		<comments>http://bobrik.name/2009/11/20/new-project-listwatcher/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 14:44:03 +0000</pubDate>
		<dc:creator>bobrik</dc:creator>
				<category><![CDATA[Belarusian]]></category>
		<category><![CDATA[Runix]]></category>
		<category><![CDATA[Russian]]></category>
		<category><![CDATA[bots]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[listwatcher]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[unfollowr]]></category>

		<guid isPermaLink="false">http://bobrik.name/?p=739</guid>
		<description><![CDATA[Снова мне что-то не сидится на месте, тянет что-нибудь сделать в меру бесполезное, что сам бы мог использовать неделю, а потом забыть. На сей раз захотелось поделиться с общественностью твиттера. Новый проект @listwatcher — бот, следящий за списками, в которых вы состоите, и сообщающий, если вдруг видны какие изменения на фронтах. Чем-то он похож на [...]]]></description>
			<content:encoded><![CDATA[<div id="post-739-russian" style="display: none"><p>Снова мне что-то не сидится на месте, тянет что-нибудь сделать в меру бесполезное, что сам бы мог использовать неделю, а потом забыть. На сей раз захотелось поделиться с общественностью твиттера. Новый проект <a  href="http://twitter.com/listwatcher">@listwatcher</a> — бот, следящий за списками, в которых вы состоите, и сообщающий, если вдруг видны какие изменения на фронтах.</p>
<p>Чем-то он похож на мой другой проект для твиттера, а именно <a  href="http://twitter.com/unfollowr">@unfollowr</a>. Тот пишет личное сообщение, если вас кто-то перестал читать (а теперь пишет ещё и про количество спамеров, которые так поступили). Только вот в отличие от @unfollowr, @listwatcher пишет не только о</p>
<ul>
<li>списках, в которых вы состояли и из которых вас удалили</li>
</ul>
<p>но и о</p>
<ul>
<li>списках, в которые вас добавили (twitter не пишет сам)</li>
<li>списках, которые удалали или сделали приватными, в которые вы входили</li>
<li>списках, в которых вы состояли и которые переименовали</li>
</ul>
<p>Таким образом, можно будет всегда узнать, что некто подло вас перенёс из списка &#8220;boyz&#8221; в список &#8220;bastards&#8221; или удалил из списка &#8220;favs&#8221;. Впрочем, может вы того и заслуживаете. Меня не волнуют ваши проблемы подобного рода :)</p>
<p>В будущем планирую дописать на Django web-интерфейс с авторизацией по OAuth для настройки этого безобразия, чтобы можно было, допустим, изменить формат присылаемых сообщений, ограничить их по типу или использовать локализованные сообщения. Неплохо было бы что-нибудь ещё такое написать к @unfollowr, чтобы с графиками и прочим клёвым стаффом. Ждите и подписывайтесь :)</p>
<p>Что действительно стоило бы сделать, так это дизайн какой-нибудь приемлемый и описание как в твиттере, так и на страничке в блоге, чтобы можно было показывать людям. Если у кого есть идеи/желание — высказывайтесь я буду только рад.</p>
<p>p.s.: ещё было бы круто, если кто-нибудь помог бы мне перевести описание на английский (или какой-нибудь ещё вдобавок, если хотите)</p>
</div><div id="post-739-belarusian" style="display: none"><p>Зноў мне нешта ня седзецца на месцы, тягне што-небудзь зрабіць у меру бессэнсоўнае, каб сам мог пакарыстацца тыдзень, а потым забыць. На гэты раз захацелася падзяліцца з грамадскасьцю твітэра. Новы праект <a  href="http://twitter.com/listwatcher">@listwatcher</a> — бот, які глядзіць за сьпісамі, у якіх вы знаходзіцеся, і піша, калі бачны нейкія зьмены на франтах.</p>
<p>Чымсьці ён падобны на мой іншы праект для твітэра, а менавіта <a  href="http://twitter.com/unfollowr">@unfollowr</a>. Той піша асабістае паведамленьне, калі вас нехта перастаў чытаць (а цяпер яшчэ піша і пра колькасьць спамераў, якія так зрабілі). Толькі вось у адрозненні ад @unfollowr, @listwatcher піша ня толькі пра</p>
<ul>
<li>сьпісы, у якіх вы былі і зь якіх вас выдалілі</li>
</ul>
<p>але і пра</p>
<ul>
<li>сьпісы, у якія вас дадалі (twitter ня піша сам)</li>
<li>сьпісы, у якія вы ўваходзілі, але якія выдалілі ці зрабілі прыватнымі</li>
<li>сьпісы, у якія вы ўваходзілі, але якія перайменавалі</li>
</ul>
<p>Такім чынам, можна будзе заўсёды даведацца, што нехта вас перанёс са сьпісу &#8220;boyz&#8221; у сьпіс &#8220;bastards&#8221; ці выдаліў са сьпісу &#8220;favs&#8221;. Але ж, можа вы таго вартыя. Мяне не турбуюць вашыя праблемы такога кшталту :)</p>
<p>У будучым пляную даписаць на Django web-інтэрфейс з аўтарызацыяй па OAuth для наладкі ўсяго гэтага, каб магчыма было, дапусьцім, зьмяніць фармат дасылаемых паведамленьняў, абмежаваць іх па тыпу ці выкарыстоўваць лакалізаваныя паведамленьні. Няблага было б яшчэ что-небудь напісаць для @unfollowr, каб глядзець статыстыку з графікамі і іншымі клёвымі штукамі. Чакайце і падпісвайцеся :)</p>
<p>Што насамрэч варта было б зрабіць, дык гэта дызайн які-небудзь прыгожы і апісаньне як ў твітэры, так і на старонцы ў блоге, каб можна было паказваць людзям. Калі ў каго якія ідэі/пажаданьні — выказвайцеся, я буду толькі рады.</p>
<p>p.s.: яшчэ было б крута, калі хто-небудзь дапамог бы мне перакласьці апісаньне на ангельскую (ці якую яшчэ ў дадатак, калі пажадаеце)</p>
</div><div id="post-739-english"><p>We&#8217;re waiting for help in translation. You may use Google Translate now. Sorry :)</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://bobrik.name/2009/11/20/new-project-listwatcher/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>whitelisted unfollowr troubles</title>
		<link>http://bobrik.name/2009/11/13/whitelisted-unfollowr-troubles/</link>
		<comments>http://bobrik.name/2009/11/13/whitelisted-unfollowr-troubles/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 21:45:34 +0000</pubDate>
		<dc:creator>bobrik</dc:creator>
				<category><![CDATA[Belarusian]]></category>
		<category><![CDATA[Runix]]></category>
		<category><![CDATA[Russian]]></category>
		<category><![CDATA[401]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[FancyURLopener]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[google groups]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[unfollowr]]></category>
		<category><![CDATA[urllib]]></category>
		<category><![CDATA[yahoo pipes]]></category>

		<guid isPermaLink="false">http://bobrik.name/?p=733</guid>
		<description><![CDATA[Свершилось чудо и моего ненаглядного @unfollowr добавили в список избранных пользователей Twitter, которым позволено использовать API запросы без ограничений. Теперь мне пишет, что осталось 20000 запросов в час, а не 150, хотя сколько бы я их ни делал, всё равно число не меняется. Не знаю даже, с какой попытки мне всё это далось. Далее о [...]]]></description>
			<content:encoded><![CDATA[<div id="post-733-russian"><p>Свершилось чудо и моего ненаглядного <a  href="http://twitter.com/unfollowr">@unfollowr</a> добавили в список избранных пользователей Twitter, которым позволено использовать API запросы без ограничений. Теперь мне пишет, что осталось 20000 запросов в час, а не 150, хотя сколько бы я их ни делал, всё равно число не меняется. Не знаю даже, с какой попытки мне всё это далось. Далее о печальном и разном.</p>
<p>Незадолго до этого я вообще решил переписать бота с Perl на Python. Просто так захотелось, да и Python надо немножко вспоминать иногда, а то я его что-то подзабросил. Переписалось всё отлично, даже лучше чем было. Как только можно было делать неограниченное количество запросов к API, так я даже от Yahoo Pipes отказался, который порой выдавал не самые полные данные, что, к слову, компенсировалось частыми проходами по спискам. Только вот Twitter API — вещь в себе и большая загадка порой.</p>
<p>Вот к примеру, есть некие люди, которые не хотят, чтобы их обновления видели другие люди, если им на то дозвол не выдан. Ну и бг с ними, пускай. Эдакие социопаты тоже не прочь узнать, кто это такой подлый перестал их читать. Тоже можно понять. Они фолловили @unfollowr, тот им через Yahoo Pipes тягал список фолловеров и вроде бы как и считал что-то. Вроде и считал, а вроде и нет. Когда всё работало через Pipes, было незаметно, что там API говорит по поводу таких пользователей (за всеми и не уследишь), а когда работа начала вестись напрямую, тут и всплыли странные глюки. На некоторые запросы Python начал спрашивать пароль, хоть тот и указывался явно в URL в виде http://user:pass@host/. Я уж думал, что это просто API глючит местами, написал WorkAround даже (об этом позже), да вот только всё не то.</p>
<p>Оказывается, если пользователь с закрытыми апдейтами читает тебя, а ты его нет, то получить список его фолловеров через API нельзя. В Web интерфейсе поглазеть можно, а через API забрать нельзя. Логика шопппц. Причём мало того, что нельзя, выдавало бы хоть какую инфу в ответе, так нет, делается хитрее. Выдаётся HTTP Error 401 (Not Authorized) и требуется авторизация. Новая авторизация, как будто блин у меня 500 логинов в этот чертов твиттер и я буду их перебирать. По такому радостному поводу я даже написал в Google группу <a  href="http://groups.google.com/group/twitter-development-talk">twitter-development-talk</a>. Пока тихо, будем ждать результатов.</p>
<p>К слову, о том, как избежать запроса пароля в консоли, если данные получаются с помощью urllib в python. По умолчанию используется &#8220;Opener&#8221; FancyURLopener, который берёт на себя грязную работу по обработке многих ситуаций. Так вот именно он и выдаёт запрос пароля. Можно унаследовать от него ещё один класс, в нём перегрузить метод получения пароля, но это всё тупиковый путь и нам не нужен в общем. Нам просто нужно использовать другой класс для получения данных, а именно просто URLOpener, который будет не запрашивать пароль, а генерировать исключение, которое мы сможем потом красиво обработать в автоматическом режиме. Листинги давать не буду, почитать подробнее можно <a  href="http://cis.poly.edu/cs912/urlopen.txt">вот здесь</a>, сам код @unfollowr <a  href="http://github.com/bobrik/unfollowr">лежит на Github</a>, там можно посмотреть, как оно вообще у меня реализовано и работает.</p>
</div><div id="post-733-belarusian" style="display: none"><p>Здарылася неверагоднае і майго ненагляднага <a  href="http://twitter.com/unfollowr">@unfollowr</a> дадалі ў сьпіс выбраных карыстачоў Twitter, якім дазволена выкарыстоўваць API запыты без абмежаваньняў. Цяпер мне піша, што засталося 20000 запытаў на гадзіну, а не 150, хаця колькі б я іх не рабіў, усё роўна чысло не зьмяняецца. Ня ведаю нават, зь якой спробы мне ўсё гэта далося. Далей пра сумнае і рознае.</p>
<p>Незадоўга да гэтага я ўвогуле вырашыў перапісаць бота з Perl на Python. Проста так захацелася, ды й  Python трэба ўзгадваць час ад часу, а то я нешта яго падзакінуў. Перапісалася ўсё проста цудоўна, нават лепей, чым было. Як толькі зьявілася магчымасьць рабіць неабмежаваную колькасьць запытаў да API, дык я адразу адмовіўся ад Yahoo Pipes, які час ада часу выдаваў не самыя поўныя дадзеныя, что, дарэчы, кампенсавалася частымі праходамі па сьпісах. Толькі вось Twitter API — рэч у сабе і вялікая загадка.</p>
<p>Вось напрыклад, ёсьць нейкія людзі, якія ня хочуць, каб іх аднаўленьні чыталі іншыя людзі, калі ім на тое не далі дазволу. Ну й фіг зь імі, няхай. Эдакія сацыяпаты таксама не супраць даведацца, хто такі подлы перастаў іх чытаць. Таксама можна зразумець. Яны фолавілі @unfollowr, той ім праз Yahoo Pipes цягаў сьпісы фолавераў і здаецца нават нешта там вылічваў. Здаецца і вылічваеў, а атрымваецца, што і не. Калі ўсё працавала праз Pipes, было незаўважна, што там API кажа наконт такіх карыстальнікаў (за ўсімі не ўгледзеш), а калі праца пачала весьціся напрамую, тут і ўсплылі дзіўныя глюкі. На некаторыя запыты Python пачаў запытваць пароль, хоць той і даваўся яўна ў URL у выглядзе http://user:pass@host/. Я ўжо думаў, што гэта проста API глючыць месцамі, напісаў  WorkAround нават (аб гэтым пазьней), ды вось толькі ўсё ня тое.</p>
<p>Выяўляецца, калі карыстач з закрытымі аднаўленьнямі чытае цябе, а ты яго не, то атрымаць сьпіс ягоных фолавераў праз API нельга. У Web інтэрфейсе паглядзець можна, а праз API забраць нельга. Логіка шоппц. Прычым мала таго, што нельга, выдавала б хоць якую інфу ў адказе, дые не, робіцца дзіўней. Выдаецца HTTP Error 401 (Not Authorized) і патрабуецца аўтарызацыя. Новая аўтарызацыя, нібыта блін у мяне 500 логінаў у гэты чортавы твітэр і я іх буду перабіраць. З такой радаснай нагоды я нават напісаў у Google групу <a  href="http://groups.google.com/group/twitter-development-talk">twitter-development-talk</a>. Пакуль ціха, будзем чакаць рэзультатаў.</p>
<p>Дарэчы пра тое, як пазьбегчы запыту пароля ў кансолі, калі дадзеныя атрымліваюцца праз urllib у python. Па змоўчаньні выкарыстоўваецца &#8220;Opener&#8221; FancyURLopener, які бярэ на сабе брудную працу па апрацоўцы многіх сітуацый. дык вось менавіта ён і выдае запыт пароля. Можна зрабіць для яго патомка, у ім перагрузіце мэтад атрыманьня пароля, але гэта тупіковы шлях і нам ён непатрэбны ўвогуле. Нам проста трэба выкарыстоўваць іншы клас для атрыманьня дадзеных, а менавіта проста URLOpener, які будзе не запытваць пароль, а генерыраваць выключэньне, якое мы зможам прыгожа апрацаваць у аўтаматычным рэжыме. Лістынгі даваць ня буду, пачытаць падрабязьней можна <a  href="http://cis.poly.edu/cs912/urlopen.txt">вось тут</a>, сам код @unfollowr <a  href="http://github.com/bobrik/unfollowr">ляжыць на Github</a>, там можна паглядзець, як яно ўвогуле ў мяне рэалізавана і працуе.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://bobrik.name/2009/11/13/whitelisted-unfollowr-troubles/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jQuery val() &amp; change() tricks</title>
		<link>http://bobrik.name/2009/10/24/jquery-val-change-tricks/</link>
		<comments>http://bobrik.name/2009/10/24/jquery-val-change-tricks/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 23:40:44 +0000</pubDate>
		<dc:creator>bobrik</dc:creator>
				<category><![CDATA[Belarusian]]></category>
		<category><![CDATA[Runix]]></category>
		<category><![CDATA[Russian]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[ckeditor]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[null]]></category>
		<category><![CDATA[onchange]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[tinymce]]></category>
		<category><![CDATA[wysiwyg]]></category>

		<guid isPermaLink="false">http://bobrik.name/?p=723</guid>
		<description><![CDATA[Начал понемногу оживать блог, как вы уже, наверное, заметили :) Практика программирования и последующего рефакторинга хорошего кода даёт благодатные плоды для размышлений. Плохой код и его сопровождение такой радости не принесут, особенно если работать одному. На сей раз про jQuery, WYSIWYG и onChange event. Read the rest of this entry &#187; Пачаў паціху ажываць блёг, [...]]]></description>
			<content:encoded><![CDATA[<div id="post-723-russian"><p>Начал понемногу оживать блог, как вы уже, наверное, заметили :) Практика программирования и последующего рефакторинга хорошего кода даёт благодатные плоды для размышлений. Плохой код и его сопровождение такой радости не принесут, особенно если работать одному. На сей раз про jQuery, WYSIWYG и onChange event.<br />
<a  href="http://bobrik.name/?p=723" class="more-link"><span class="readmore">Read the rest of this entry &raquo;</span></a></p>
</div><div id="post-723-belarusian" style="display: none"><p>Пачаў паціху ажываць блёг, як вы ўжо, напэўна, заўважылі :) Практыка праграмаваньня і далейшага рэфакторынгу добрага коду дае сваю добрую садавіну й гародніну. Благі код і ягонае суправаджэньне такой радасьці не прынясуць, асабліва калі працаваць аднаму. На гэта раз пра jQuery, WYSIWYG і onChange event.<br />
<a  href="http://bobrik.name/?p=723" class="more-link"><span class="readmore">Read the rest of this entry &raquo;</span></a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://bobrik.name/2009/10/24/jquery-val-change-tricks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>wordpress categories parentness</title>
		<link>http://bobrik.name/2009/10/23/wordpress-categories-parentness/</link>
		<comments>http://bobrik.name/2009/10/23/wordpress-categories-parentness/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 23:36:07 +0000</pubDate>
		<dc:creator>bobrik</dc:creator>
				<category><![CDATA[Belarusian]]></category>
		<category><![CDATA[Runix]]></category>
		<category><![CDATA[Russian]]></category>
		<category><![CDATA[category]]></category>
		<category><![CDATA[cat_is_ancestor_of]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[dynamic typing]]></category>
		<category><![CDATA[int]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[style]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://bobrik.name/?p=719</guid>
		<description><![CDATA[А это снова я со своим WordPress как с писанной торбой. Снова я зол и недоволен, потому что искал баги методом бинарного поиска, расставляя контрольные точки по всему шаблону, да ещё потом и по плагину небезызвестного Alex King. Тот ещё подлец, скажу я вам, не идеальный код пишет, мягко говоря. Read the rest of this [...]]]></description>
			<content:encoded><![CDATA[<div id="post-719-russian"><p>А это снова я со своим WordPress как с писанной торбой. Снова я зол и недоволен, потому что искал баги методом бинарного поиска, расставляя контрольные точки по всему шаблону, да ещё потом и по плагину небезызвестного <a  href="http://alexking.org/">Alex King</a>. Тот ещё подлец, скажу я вам, не идеальный код пишет, мягко говоря.<br />
<a  href="http://bobrik.name/?p=719" class="more-link"><span class="readmore">Read the rest of this entry &raquo;</span></a></p>
</div><div id="post-719-belarusian" style="display: none"><p>А гэта зноў я са сваім WordPress як зь пісанай торбай. Зноў я злы і незадаволены, таму што шукаў багі мэтадам бінарнага пошуку, расстаўляючы кантрольныя кропкі па ўсяму шаблону, ды потым яшчэ па плягіну даволі вядомага <a  href="http://alexking.org/">Alex King</a>. Той яшчэ падлец, скажу я вам, не ідэальны код піша, мякка кажучы.<br />
<a  href="http://bobrik.name/?p=719" class="more-link"><span class="readmore">Read the rest of this entry &raquo;</span></a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://bobrik.name/2009/10/23/wordpress-categories-parentness/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>i hate wp plugins developers</title>
		<link>http://bobrik.name/2009/10/21/i-hate-wp-plugins-developers/</link>
		<comments>http://bobrik.name/2009/10/21/i-hate-wp-plugins-developers/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 20:17:40 +0000</pubDate>
		<dc:creator>bobrik</dc:creator>
				<category><![CDATA[Belarusian]]></category>
		<category><![CDATA[Runix]]></category>
		<category><![CDATA[Russian]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://bobrik.name/?p=713</guid>
		<description><![CDATA[Это пост ненависти. Нет, правда, я уже не могу терпеть. Раньше мне было всё равно и я толком не разбирался в JavaScript, но тут уж как-то всё совпало и я решил немножко оптимизировать загрузку блога. И что вы думаете? Загружалось аж 3 или даже 4 копии jQuery из разных источников. Каждый плагинописатель сам себе безголовый [...]]]></description>
			<content:encoded><![CDATA[<div id="post-713-russian"><p>Это пост ненависти. Нет, правда, я уже не могу терпеть. Раньше мне было всё равно и я толком не разбирался в JavaScript, но тут уж как-то всё совпало и я решил немножко оптимизировать загрузку блога.</p>
<p>И что вы думаете? Загружалось аж 3 или даже 4 копии jQuery из разных источников. Каждый плагинописатель сам себе безголовый всадник и решает к своему плагину обязательным образом приложить Prototype или jQuery. Если вам не повезло и вы пользуетесь многими плагинами от такого рода авторов, то опасность того, что блог будет тормознутый как Windows XP после года использования детьми, весьма велика.</p>
<p>Ну неужели сложно догадаться, что раз такая насущная проблема с подключением одной и той же библиотеки, то должен быть какой-то простой и изящный путь? Ведь WordPress версию далеко не 0.2beta имеет. И есть же специальная функция, которой скармливается имя JS библиотеки, после чего WordPress сам высчитывает всё что нужно и подключает только нужные библиотеки, причём даже зависимости отследит как нужно. И имя у сей волшебной функции <a  href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script">wp_enqueue_script</a>. Это разработчику надо обязательно знать.</p>
<p>Ну а простому пользователю надо знать, что можно включение всех дублирующихся библиотек отключать, можно даже простым закомментированием, но лучше всё же заменить (при наличии должных знаний в php) все подключения библиотек через wp_enqueue_script. Главное — быть осторожным, а если ты девочка — быть осторожной. Adios.</p>
</div><div id="post-713-belarusian" style="display: none"><p>Гэта пост нянавісьці. Не, насамрэч я ўжо не магу трываць. Раней мне было ўсё роўна і я дужа ў JavaScript не разьбіраўся, але тут неяк усё супала і я вырашыў трошкі аптымізаваць загрузку блога.</p>
<p>І што вы думаеце? Загружалася аж 3 ці нават 4 копіі jQuery з розных крыніц. Кодны плягінапісацель сам сабе безгаловы конны і вырашае да свайго плягіна абавязковым чынам падключыць Prototype ці jQuery. Калі вам не пашчасьціла і вы карыстаецеся шматлікімі плягінамі ад такога кшталту аўтараў, то верагоднасьць таго, што блог будзе працаваць як Windows XP пасьля году карыстаньня дзецьмі, вельмі вялікая.</p>
<p>Ну няўжо цяжка здагадацца, што калі такая праблема з падключэньнем адной і той жа бібліятэкі, то павінен быць нейкі просты і элегантны шлях? Ну і WordPress ужо даўне не ў вэрсіі 0.2beta, павінен умець. І насамрэч жа ёсьць спецыяльная функцыя, якой скармліваецца імя JS бібліятэкі, пасьля чаго WordPress сам вылічвае ўсё што трэба, прычым нават залежнасьці ўлічвае як трэба. І імя той чароўнай функцыі <a  href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script">wp_enqueue_script</a>. Гэта распрацоўшчыку абавязкова ведаць.</p>
<p>Ну а простаму карыстачу трэба ведаць, што можна ўключэньне ўсіх дублюючыхся бібліятэк адключаць, можна нават прастым каментаваньнем, але ўсё ж лепей замяняць (калі маюцца адпаведныя навыкі) усе падключэньні бібліятэк на wp_enqueue_script. Галоўнае — быць асьцярожным, а калі ты дзяўчынка, то быць асьцярожнай. Adios.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://bobrik.name/2009/10/21/i-hate-wp-plugins-developers/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
