<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2russianfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>СетевойГибитобой</title><link>http://dimio.org</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/thoughts-archive" /><description>Понемногу и обо всем, что приходит в голову или кажется интересным. Личный опыт и наработки. Linux, perl, AutoCAD, интернет и заработок в нём, туризм, путешествия и прочее.</description><language>ru</language><lastBuildDate>Thu, 17 May 2012 23:08:21 PDT</lastBuildDate><sy:updatePeriod xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">hourly</sy:updatePeriod><sy:updateFrequency xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">1</sy:updateFrequency><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/thoughts-archive" /><feedburner:info uri="thoughts-archive" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><meta xmlns="http://pipes.yahoo.com" name="pipes" content="noprocess" /><feedburner:emailServiceId>thoughts-archive</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/thoughts-archive" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fthoughts-archive" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item><title>Cборка модулей ядра для dd-wrt</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/Q4iY5V1PKYo/cborka-modulej-yadra-dlya-dd-wrt.html</link><category>Linux</category><category>Интернет</category><category>Технократия</category><category>ddwrt</category><category>dir620</category><category>how-to</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Fri, 04 May 2012 01:54:29 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=617</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Не смотря на то, что dd-wrt имеет достаточное количество собранных пакетов, доступных через <a href="http://dimio.org/paketnye-menedzhery-magiya-upravleniya-kompyuternymi-programmami.html">пакетный менеджер</a>, кое-чего иногда все же не хватает. Можно в принципе написать аналог этого &#8220;чего-то&#8221; на том же <a href="http://dimio.org/perl-practical-extraction-and-report-language.html">Perl</a> и спокойно запустить на роутере, но такой подход в случае с относительно сложным и большим приложением нерационален. А в случае с нехваткой поддержки ядром прошивки нужных функций &#8211; и вовсе очень затруднителен. И тогда на помощь приходит старый добрый способ сборки из исходников, осложняющийся в данном случае тем фактом, что собирать на самом роутере не слишком удобно в силу ограниченности его ресурсов, а сборке на производительной машине препятствует разница в архитектурах процессоров (у DIR-620 это MIPS), если у вас конечно нет доступа к производительной MIPS-машине с аналогичной архитектурой ЦПУ <img src='http://dimio.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Вывод &#8211; нужен кросс-компилятор. О процессе сборки приложений и модулей ядра под dd-wrt на DIR-620 при помощи кросс-компилятора и пойдет речь ниже.<br />
<span id="more-617"></span></p>
<h3>Готовимся к сборке: кросс-компилятор, исходники</h3>
<p>Первое, что нужно для сборки под dd-wrt, если планируется использовать готовый кросс-компилятор, это *nix-машина с архитектурой x86_64 (по какой-то причине кросс-компилятор собран именно под 64-битную архитектуру, под 32-битную придется пересобирать самостоятельно).</p>
<p>Затем <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhVBxxCRE0eBVwPHAABTBFAR0UBHVRXEwsJXlRTEE5WElkGQ0YZSl8TQQFWBwoFAx1HXFxeU1AFDAtCGlQWE0sDXxccQVlWXAVbA1oKFk8SU0EdUUgC/">загружаем архив</a></noindex> с набором различных версий кросс-компилятора и его исходниками (архив довольно тяжелый &#8211; больше 900 мегабайт, поэтому версию для DIR-620 я выложил отдельным архивом &#8211; <a href="http://dimio.org/wp-content/uploads/soft/toolchain-mipsel_gcc4.1.2.tar.lzma">toolchain-mipsel_gcc4.1.2</a>, 24 Мб). Версию надо выбирать на основании архитектуры используемого в роутере процессора, в случае с DIR-620 вывод <code class="codecolorer text default"><span class="text">cat /proc/cpuinfo</span></code> выглядит так:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">system type &nbsp; &nbsp; : Ralink SoC<br />
processor &nbsp; &nbsp; &nbsp; : 0<br />
cpu model &nbsp; &nbsp; &nbsp; : MIPS 24K V4.12</div></div>
<p>Распаковываем нужную версию (для примера буду использовать домашний каталог) и каким-либо образом прописываем путь до кросс-компилятора в пути поиска исполняемых файлов, чтобы не править этот момент в makefile. Например: <code class="codecolorer text default"><span class="text">PATH=$PATH:~/toolchain/bin</span></code><br />
Если использовать кросс-компилятор планируется часто, удобней конечно будет сделать симлинк где-то вроде <em>/usr/bin</em>.</p>
<p>Следующий шаг &#8211; получить исходники ядра прошивки при помощи svn (будут загружены в текущую директорию): <code class="codecolorer text default"><span class="text">svn co svn://svn.dd-wrt.com/DD-WRT/src/linux/brcm/linux-2.6.23</span></code>. Нужно обратить внимание на версию ядра и загрузить совпадающую с той, что выдает вывод <code class="codecolorer text default"><span class="text">uname -a</span></code>. Для моей сборки dd-wrt это 2.6.23. Или загрузить исходники нужного приложения оттуда, где они есть <img src='http://dimio.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Итак, кросс-компилятор распакован, исходники загружены, требуемые утилиты типа <em>make</em> или библиотеки типа <em>ncurses</em> для <em>menuconfig</em> можно установить в процессе, ориентируясь на сообщения компилятора. На этом подготовку можно считать законченной, пора перейти непосредственно к процессу сборки.</p>
<h3>Сборка модулей ядра для dd-wrt</h3>
<p>Собрать модулем поддержку USB-принтеров мне потребовалось в процессе создания сетевого принтера на основе роутера, описанном в заметке <a href="http://dimio.org/podklyuchenie-i-nastrojka-setevogo-usb-prinetra-k-dd-wrt-na-primere-dir-620-i-xerox-phaser-3140.html"><strong>Подключение и настройка сетевого USB-принетра к dd-wrt на примере DIR-620 и Xerox Phaser 3140</strong></a>. Распишу процесс сборки подробней по шагам (модуль называется <strong>usblp.ko</strong>).</p>
<ul>
<li>Переходим в директорию с загруженными исходниками, например <em>~/dd-wrt/linux-2.6.23</em> и снимаем копию со стандартного конфигурационного файла <code class="codecolorer text default"><span class="text">cp .config_std .config</span></code>. Запускаем утилиту настройки конфига по вкусу, я предпочитаю <code class="codecolorer text default"><span class="text">make menuconfig</span></code> (<em>config</em> слишком аскетично на мой вкус, <em>xconfig</em> &#8211; уже избыточно).</li>
<li>Первым делом нужно выставить правильную ревизию архитектуры процессора, для DIR-620 это делается так: <strong>CPU Selection -> CPU type -> MIPS32 Release 2</strong>.</li>
<li>Затем пробегаемся по настройкам, отключая все ненужное, а нужному выставляя сборку в виде модулей (если это в принципе возможно): <strong>&lt;M&gt;</strong>. Сохраняем конфигурацию, выходим из настройки.</li>
<li>При необходимости нужно в Makefile поправить версию ядра (чтобы модули загрузились, версия должна совпадать с выводом <strong>uname -a</strong> на роутере).</li>
<li>Дальше всё стандартно &#8211; собираем сами модули при помощи <code class="codecolorer text default"><span class="text">make modules</span></code>.</li>
<li>Собранные модули копируем на роутер, например в <strong>/opt/lib</strong> и загружаем: <code class="codecolorer text default"><span class="text">insmod /opt/lib/usblp.ko</span></code>. Проверяем, что модуль успешно загрузился, он должен присутствовать в выводе <code class="codecolorer text default"><span class="text">lsmod</span></code>. Если отсутствует &#8211; проблемы загрузки будут присутствовать в выводе <code class="codecolorer text default"><span class="text">dmesg</span></code>.</li>
</ul>
<p>Процесс сборки модулей ядра для dd-wrt, как видно из примера, совершенно несложен (по крайней мере для &#8220;полноценного&#8221; Линукса со сборкой модулей ядра у меня было больше сложностей в своё время). Плюсы очевидны &#8211; не приходится ждать, чтобы в прошивку включили поддержку каких-то нужных опций ядра, всегда можно собрать требуемый модуль и добавить его в автозагрузку при старте роутера.</p>
<h3>Другие заметки по теме D-Link DIR-620 и dd-wrt</h3>
<ul>
<li><a href="http://dimio.org/podklyuchenie-i-nastrojka-setevogo-usb-prinetra-k-dd-wrt-na-primere-dir-620-i-xerox-phaser-3140.html">Подключение и настройка сетевого USB-принетра к dd-wrt на примере DIR-620 и Xerox Phaser 3140</a></li>
<li><a href="http://dimio.org/d-link-dir-620-i-dd-wrt-podklyuchenie-flash-ustanovka-programm-nastrojka-nas.html">D-Link DIR-620 и dd-wrt &#8211; подключение flash, установка программ, настройка NAS</a></li>
<li><a href="http://dimio.org/zagruzka-i-vosstanovlenie-proshivki-dd-wrt-cherez-tftp.html">Загрузка и восстановление прошивки dd-wrt через tftp</a></li>
<li><a href="http://dimio.org/d-link-dir-620-i-dd-wrt-byudzhetnyj-nas-i-torrentokachalka.html">D-Link DIR-620 и dd-wrt &#8211; бюджетный NAS и торрентокачалка</a></li>
<li><a href="http://dimio.org/torrent-klient-transmission-ustanovka-na-dir-620-pod-upravleniem-dd-wrt.html">Торрент-клиент transmission &#8211; установка на DIR-620 под управлением dd-wrt</a></li>
</ul>

	Метки:<a href="http://dimio.org/tag/ddwrt" title="ddwrt" rel="tag">ddwrt</a>, <a href="http://dimio.org/tag/dir620" title="dir620" rel="tag">dir620</a>, <a href="http://dimio.org/tag/how-to" title="how-to" rel="tag">how-to</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/CKSHNxZ_buqltfnqBpUjTjjUx2w/0/da"><img src="http://feedads.g.doubleclick.net/~a/CKSHNxZ_buqltfnqBpUjTjjUx2w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/CKSHNxZ_buqltfnqBpUjTjjUx2w/1/da"><img src="http://feedads.g.doubleclick.net/~a/CKSHNxZ_buqltfnqBpUjTjjUx2w/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/Q4iY5V1PKYo" height="1" width="1"/>]]></content:encoded><description>Не смотря на то, что dd-wrt имеет достаточное количество собранных пакетов, доступных через пакетный менеджер, кое-чего иногда все же не хватает. Можно в принципе написать аналог этого &amp;#8220;чего-то&amp;#8221; на том же Perl и спокойно запустить на роутере, но такой подход в случае с относительно сложным и большим приложением нерационален. А в случае с нехваткой поддержки [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/cborka-modulej-yadra-dlya-dd-wrt.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://dimio.org/cborka-modulej-yadra-dlya-dd-wrt.html</feedburner:origLink></item><item><title>Моё знакомство с Conky и мой conkyrc</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/pepG0KvCEGA/moyo-znakomstvo-s-conky-i-moj-conkyrc.html</link><category>Linux</category><category>.rc</category><category>conky</category><category>linux</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Wed, 25 Apr 2012 01:47:04 PDT</pubDate><guid isPermaLink="false">http://dimio.org/?p=716</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Аж на восьмой год знакомства с Linux наконец-то познакомился и с Коньками (Conky) &#8211; раньше всё лень было, да и не особо нужно как-то (как мне казалось). Всякие индикаторы были на панельках Gnome, по клику на них вызывались развёрнутые версии, а Коньки я кроме как индикатором никак иначе и не воспринимал. После <a href="http://dimio.org/openboxsbxkb-pereklyuchenie-raskladok-klaviatury.html">перехода на Openbox</a> наконец решился на них посмотреть, три месяца потихоньку читал инструкции на сайте и настраивал Коньки под себя.</p>
<p>По итогам этой вялопротекавшей настроечной эпопеи могу сказать, что Conky я совершенно точно недооценивал. И хотя расширение при помощи LUA мне пока не пригодилось (да и возможность вывода нескольких окон с применением разных настроечных файлов тоже пока не требовалась), уже понятно, что Conky &#8211; это некий Emacs в мире системных мониторов <img src='http://dimio.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<span id="more-716"></span></p>
<p><a href="http://dimio.org/wp-content/uploads/2012/04/2012-04-24@09-16-44.png"><img src="http://dimio.org/wp-content/uploads/2012/04/2012-04-24@09-16-44-163x300.png" alt="Что можно сделать из Conky" title="Conky - системный монитор и не только" width="163" height="300" class="aligncenter size-medium wp-image-717" /></a></p>
<p>Меня в принципе интересовала возможность смотреть нагрузку на процессор и его температутру (поскольку ноут старый и я опасаюсь перегрева длительного), вывод свободного/занятого места на жестком диске, состояние сетевых подключений и съемных устройств (читай &#8211; флешек). Всё это реализуется простой правкой <strong>conkyrc</strong> на основе мануала. Вывод календаря с подсветкой текущей даты был утащен с форумов, еще в планах стоит вывод курсов валют с изменением относительно вчерашнего дня.</p>
<p>В общем-то расписывать установку Conky я не вижу особого смысла (в разных дистрибутивах может быть по-разному, а в целом сложностей нет &#8211; <a href="http://dimio.org/paketnye-menedzhery-magiya-upravleniya-kompyuternymi-programmami.html">поставил через пакетный менеджер</a> и пользуйся), так что просто приведу свой <strong>conkyrc</strong> с комментариями в качестве примера настройки.</p>
<p>Вот что сделано у меня в настройках (<a href="http://dimio.org/cgi-bin/bps/hlghtsrc/sourcehl.cgi?d=conf&#038;s=conkyrc&#038;l=conk" tilte="conkyrc - файл настройки для Conky" target="_blank">открыть conkyrc на отдельной странице</a>):</p>
<ul>
<li>Отображается загрузка процессора, текущая рабочая частота, температура, обороты вентилятора, средняя загрузка системы. Выводится температура с датчиков на видеокарте, материнке и АКБ;</li>
<li>Отображается использование ОЗУ, подкачки, нужных разделов HDD (корень и домашний раздел) без вывода типов файловых систем по ним;</li>
<li>В зависимости от активного сетевого интерфеса (LAN/Wi-Fi/USB-modem) выводятся данные по подключению &#8211; активно/неактивно, уровень сигнала, прошедший через интерфейс трафик;</li>
<li>Выводится календарик с подсветкой текущей даты (планировщиками типа Evolution не пользуюсь, так что его достаточно), думаю рядом с ним повесить курс валют (мне это актуально);</li>
<li>В завершение всего идёт текстовый блок с подсказками по горячим клавишам, по мере отпадания необходимости в подсказке сокращаю его <img src='http://dimio.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p><iframe name="vimrc" frameborder="yes" width="100%" height="400" sandbox="" src="/cgi-bin/bps/hlghtsrc/sourcehl.cgi?d=conf&#038;s=conkyrc&#038;l=conk"><br />
    Ваш браузер не поддерживает плавающие фреймы!<br />
</iframe></p>
<p>Другие мои конфиги для Linux-утилит собраны на странице <a href="http://dimio.org/config-dotfiles" title="Конфигурационные файлы - .rc, .conf">Конфиги / dotfiles</a></p>

	Метки:<a href="http://dimio.org/tag/rc" title=".rc" rel="tag">.rc</a>, <a href="http://dimio.org/tag/conky" title="conky" rel="tag">conky</a>, <a href="http://dimio.org/tag/linux" title="linux" rel="tag">linux</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/bEZx4-Hg73jY0fQFDjApFRsheEo/0/da"><img src="http://feedads.g.doubleclick.net/~a/bEZx4-Hg73jY0fQFDjApFRsheEo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/bEZx4-Hg73jY0fQFDjApFRsheEo/1/da"><img src="http://feedads.g.doubleclick.net/~a/bEZx4-Hg73jY0fQFDjApFRsheEo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/pepG0KvCEGA" height="1" width="1"/>]]></content:encoded><description>Аж на восьмой год знакомства с Linux наконец-то познакомился и с Коньками (Conky) &amp;#8211; раньше всё лень было, да и не особо нужно как-то (как мне казалось). Всякие индикаторы были на панельках Gnome, по клику на них вызывались развёрнутые версии, а Коньки я кроме как индикатором никак иначе и не воспринимал. После перехода на Openbox [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/moyo-znakomstvo-s-conky-i-moj-conkyrc.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments><feedburner:origLink>http://dimio.org/moyo-znakomstvo-s-conky-i-moj-conkyrc.html</feedburner:origLink></item><item><title>Торрент-клиент transmission – установка на DIR-620 под управлением dd-wrt</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/3-8P2BpTVNo/torrent-klient-transmission-ustanovka-na-dir-620-pod-upravleniem-dd-wrt.html</link><category>Linux</category><category>Интернет</category><category>ddwrt</category><category>dir620</category><category>torrent</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Thu, 22 Mar 2012 01:47:32 PDT</pubDate><guid isPermaLink="false">http://dimio.org/?p=653</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Итак, <a href="http://dimio.org/d-link-dir-620-i-dd-wrt-byudzhetnyj-nas-i-torrentokachalka.html">на роутер D-Link DIR-620 была установлена прошивка dd-wrt</a> (с поддержкой swap, это важно), <a href="http://dimio.org/d-link-dir-620-i-dd-wrt-podklyuchenie-flash-ustanovka-programm-nastrojka-nas.html">подключены флешка для хранения настроек и установленных программ и внешний жесткий диск в качестве NAS</a> и хранилища закачек для torrent-клиента. Дело за малым &#8211; установить и настроить сам клиент. Я выбирал между консольными клиентами rtorrent и transmission, в результате остановился на последнем. Популярные Deluge отпал сразу &#8211; тратить скромные ресурсы роутера на обслуживание еще и интерпретатора питона нет смысла. Про rtorrent попались сообщения о наличии в нем утечек памяти, что не есть хорошо. Кроме того, его нужно запускать при помощи screen или dtach, т.к. режима демона он не имеет. А это опять трата лишних ресурсов. Сам-собой остался <strong>transmission</strong>, умеющий работать в виде демона и достаточно стабильный. Кроме того, помимо нескольких GUI-фронтэндов у него есть встроенный веб-интерфейс &#8211; бери и пользуйся, без лишних телодвижений.</p>
<p>Установка торрент-клиента transmission (daemon) на роутер под управление dd-wrt проста до неприличия &#8211; достаточно, подключившись например по ssh к роутеру, выполнить следующие команды:</p>
<ul>
<li><code class="codecolorer text default"><span class="text">ipkg-opt update</span></code> &#8211; обновит список пакетов, доступных для установки;</li>
<li><code class="codecolorer text default"><span class="text">ipkg-opt list | grep transmission</span></code> &#8211; выбираем, какую версию клиента ставить (есть сборка клиент + утилиты для создания и редактирования торрентов + демон, есть отдельно демон);</li>
<li><code class="codecolorer text default"><span class="text">ipk-opt install transmission</span></code> &#8211; я установил пакет, включающий, помимо демона, утилиты для работы с торрент-файлами.</li>
</ul>
<p>
Всё предельно просто, теперь нужно немного настроить transmission-daemon, дописать его в автозагрузку &#8211; и можно начинать пользоваться. О настройке дальше и идет речь.<br />
<span id="more-653"></span></p>
<p>Итак, первым шагом, который необходимо предпринять, будет создание рабочей директории для демона, в ней же будет храниться и файл настроек. Умолчальная рабочая директория находится в памяти роутера и при перезагрузке будет уничтожена. Я создал директорию на подключенной к роутеру флешке: <code class="codecolorer text default"><span class="text">mkdir /opt/etc/transmission</span></code>.</p>
<p>Теперь можно запустить transmission-daemon с ключем, указывающим на новую рабочую директорию (а также прописать его в автозагрузку через веб-интерфейс dd-wrt: <em>Administration -> Commands -> Startup</em>). Запускаем следующим образом: <code class="codecolorer text default"><span class="text">/opt/bin/transmission-daemon -g /opt/etc/transmission</span></code>. Демон создаст файл настроек <strong>settings.json</strong>, который и нужно будет отредактировать.</p>
<p>Некторые настройки можно сделать через веб-интефейс, заодно убедившись в работоспособности демона. В него можно попасть, введя <em>ip_роутера:порт/transmission</em> в браузере. В дальнейшем адрес веб-интерфейса можно поменять в том же <strong>/opt/etc/transmission/settings.json</strong>. Он доступен только для чтения, так что проще всего снять копию, изменить к ней права доступа на нужные, а затем, остановив демон (<code class="codecolorer text default"><span class="text">killall transmission-daemon</span></code>), переписать изменнённый файл поверх оригинального. Мой <a href="http://dimio.org/cgi-bin/bps/hlghtsrc/sourcehl.cgi?d=conf&#038;s=settings.json&#038;l=js">файл настроек для transmission</a> выглядит так:<br />
<iframe name="transmission-settings" frameborder="yes" width="100%" height="300" sandbox="" src="/cgi-bin/bps/hlghtsrc/sourcehl.cgi?d=conf&#038;s=settings.json&#038;l=js"><br />
    Ваш браузер не поддерживает плавающие фреймы!<br />
</iframe></p>
<p>JSON-парсер transmission не поддерживает разбор комментариев (или я не нашел, как их обозначить в понятном ему виде), так что я прокомментирую некоторые строки своего settings.json ниже.</p>
<ul>
<li><strong>&#8220;ratio-limit&#8221;: 2.5000</strong> &#8211; прекращать раздачу при достижении указанного рейтинга;</li>
<li><strong>&#8220;cache-size-mb&#8221;: 4</strong> &#8211; объем памяти (Мб), выделяемый демону под кэшировние данных о торрентах (на роутере лучше много не давать &#8211; просто не из чего);</li>
<li><strong>&#8220;lpd-enabled&#8221;: true</strong> &#8211; включает локальный поиск пиров;</li>
<li><strong>&#8220;umask&#8221;: 0</strong> &#8211; выставляет для загружаемых папок и файлов права на чтение и запись для всех (права выставляются в десятеричной системе, так что нужно восьмеричное представление перевести в десятеричное);</li>
<li>&#8220;peer-congestion-algorithm&#8221;: &#8220;lp&#8221;, включает использование специальной версии протокола TCP, предназанченной для обмена пирами, в этом случает трафик обмена пирами будет иметь пониженный приоритет по отношению к обычному трафику &#8211; обмен пирами не будет замедлять загрузку страниц и т.п.;</li>
<li><strong>&#8220;pex-enabled&#8221;: true</strong> включает обмен пирами с уже подключенными пирами, т.е. обмен списками пиров происходит между самими пирами, без участия трекера;</li>
<li><strong>&#8220;watch-dir&#8221;</strong> и <strong>&#8220;watch-dir-enabled&#8221;: true</strong> &#8211; позволяют указать директорию слежения, найденные в ней torrent-файлы будут автоматически довалены в очередь загрузки;</li>
<li><strong>&#8220;script-torrent-done-enabled&#8221;: false</strong> и <strong>&#8220;script-torrent-done-filename&#8221;</strong> &#8211; позволяют задать выполнение произвольного скрипта после завершения загрузки, например таким образом можно переименовывать или перемещать загруженные файлы;</li>
<li>&#8220;rpc-enabled&#8221;: true &#8211; включает/выключает интерфейс удаленного управления демоном (в том числе и встроенный веб-интерфейс!);</li>
<li><strong>&#8220;rpc-authentication-required&#8221;: false</strong> и &#8220;<strong>rpc-password&#8221;</strong> + &#8220;rpc-username&#8221;</strong> &#8211; нужна ли авторизация для использования удаленного управления и логин-пароль если нужна;</li>
<li><strong>&#8220;rpc-port&#8221;: 9071</strong> &#8211; порт, на котором доступен интерфейс удаленного управления;</li>
<li><strong>&#8220;rpc-url&#8221;: &#8220;/transmission/&#8221;</strong> &#8211; путь к интерфейсу (тогда веб-интерфейс будет расположен по адресу <em>ip_роутера:9071/transmission/</em>)</li>
<li><strong>&#8220;rpc-whitelist-enabled&#8221;: true</strong> &#8211; включение доступа к удаленному управлению только для ip из указанного ниже списка;</li>
<li><strong>&#8220;rpc-whitelist&#8221;: &#8220;192.168.0.1*&#8221;</strong> &#8211; список ip-адресов, с которых будет возможен доступ к удаленному управлению демоном, можно указать маску;</li>
<li><strong>&#8220;blocklist-enabled&#8221;: true</strong> &#8211; использовать ли черные списки &#8220;плохих&#8221; пиров (например различные копираст-конторы и т.п.);</li>
<li><strong>&#8220;blocklist-url&#8221;: &#8220;http://update.transmissionbt.com/level1&#8243;</strong> &#8211; адрес для загрузки черных списков.</li>
</ul>
<p>Ограничения скоростей раздачи-загрузки, планировщик ограничений и условия для прекращения сидирования проще настраивать через веб-интерфейс. В общем-то и в файле настроек назначения почти всех опций понятны из их названий, а если что-то осталось неясным &#8211; <a href="https://trac.transmissionbt.com/wiki/EditConfigFiles#Options" >можно уточнить в веб-документации к transmission</a>.</p>
<h3>Другие заметки по теме D-Link DIR-620 и dd-wrt</h3>
<ul>
<li><a href="http://dimio.org/zagruzka-i-vosstanovlenie-proshivki-dd-wrt-cherez-tftp.html">Загрузка и восстановление прошивки dd-wrt через tftp</a></li>
<li><a href="http://dimio.org/podklyuchenie-i-nastrojka-setevogo-usb-prinetra-k-dd-wrt-na-primere-dir-620-i-xerox-phaser-3140.html">Подключение и настройка сетевого USB-принетра к dd-wrt на примере DIR-620 и Xerox Phaser 3140</a></li>
<li><a href="http://dimio.org/cborka-modulej-yadra-dlya-dd-wrt.html">Cборка модулей ядра для dd-wrt</a></li>
<li><a href="http://dimio.org/d-link-dir-620-i-dd-wrt-byudzhetnyj-nas-i-torrentokachalka.html">D-Link DIR-620 и dd-wrt &#8211; бюджетный NAS и торрентокачалка</a></li>
<li><a href="http://dimio.org/d-link-dir-620-i-dd-wrt-podklyuchenie-flash-ustanovka-programm-nastrojka-nas.html">D-Link DIR-620 и dd-wrt &#8211; подключение flash, установка программ, настройка NAS</a></li>
</ul>

	Метки:<a href="http://dimio.org/tag/ddwrt" title="ddwrt" rel="tag">ddwrt</a>, <a href="http://dimio.org/tag/dir620" title="dir620" rel="tag">dir620</a>, <a href="http://dimio.org/tag/torrent" title="torrent" rel="tag">torrent</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/_4BDNM5KC73o6xyuYBn9GTjKJdo/0/da"><img src="http://feedads.g.doubleclick.net/~a/_4BDNM5KC73o6xyuYBn9GTjKJdo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_4BDNM5KC73o6xyuYBn9GTjKJdo/1/da"><img src="http://feedads.g.doubleclick.net/~a/_4BDNM5KC73o6xyuYBn9GTjKJdo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/3-8P2BpTVNo" height="1" width="1"/>]]></content:encoded><description>Установка и настройка консольной версии торрент-клиента transmission на роутер D-Link DIR-620, работающий под управлением альтернативной прошивки dd-wrt. Описана установка transmission, создание и подключение рабочей директории, правка опций в файле настроек settings.json.</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/torrent-klient-transmission-ustanovka-na-dir-620-pod-upravleniem-dd-wrt.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://dimio.org/torrent-klient-transmission-ustanovka-na-dir-620-pod-upravleniem-dd-wrt.html</feedburner:origLink></item><item><title>Сохранение статистики внешних входящих ссылок из Яндекс.Вебмастер</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/6cOLudoad8k/soxranenie-statistiki-vneshnix-vxodyashhix-ssylok-iz-yandeks-vebmaster.html</link><category>Интернет</category><category>Сервисы</category><category>perl</category><category>yandex</category><category>парсер</category><category>скрипт</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Mon, 12 Mar 2012 03:41:44 PDT</pubDate><guid isPermaLink="false">http://dimio.org/?p=639</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Решил ради интереса посмотреть статистику изменения количества входящих внешних ссылок (и ссылаюшихся сайтов) через Я.Вебмастер &#8211; и с удивлением не обнаружил в нем такой возможности. Может быть &#8220;Выгрузка внешних ссылок в виде архива&#8221; &#8211; то, что мне нужно, но формирования архива придется ждать неделю и только потом можно будет узнать, что же в нем.</p>
<p>Запрос через Яндекс-поиск с ключом <em>link</em> (вида <code class="codecolorer html4strict default"><span class="html4strict">http://yandex.ru/yandsearch?text=link%3D%22dimio.org%2F*%22<span style="color: #ddbb00;">&amp;lr=2</span></span></code>) выдает сильно отличающийся от вывода Я.Вебмастер результат. Интернеты вообще сообщают, что ключ <em>link</em> не поддерживается Яндексом уже несколько лет.</p>
<p>Оставалось только одно &#8211; забирать интересующую информацию прямо со страницы из Вебмастера. Сделал небольшой скрипт на <a href="http://dimio.org/perl-practical-extraction-and-report-language.html">perl</a>, который и решает поставленную задачу. Скрипт целиком <a href="http://dimio.org/cgi-bin/bps/hlghtsrc/sourcehl.cgi?d=dev&#038;s=yaextlink.pl&#038;l=pl">доступен на отдельной странице</a>, в заметке остановлюсь подробнее только на паре моментов.<br />
<span id="more-639"></span></p>
<p>Итак, первое, что нужно сделать для получения информации от сервиса Яндекс.Вебмастер (помимо того, что зарегистрироваться в самом сервисе и добавить в него нужные сайты конечно) &#8211; это авторизоваться в службах Яндекса. В интернете нашел несколько примеров для <a href="http://dimio.org/php-personal-home-page-tools.html">php</a>, снабженных домыслами разной степени достоверности о значениях скрытых полей формы авторизации. Моя функция для входа в Яндекс выглядит так (неочевидные значения полей прокомментированы):</p>
<div class="codecolorer-container perl default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="perl codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">sub</span> ya_login <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ua</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$opt</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$response</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">post</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$opt</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ya_login_url<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#91;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #ff0000;">'from'</span> &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'passport'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #ff0000;">'idkey'</span> &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> ya_get_idkey<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ua</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$options</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #ff0000;">'display'</span> &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'page'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #ff0000;">'login'</span> &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">$opt</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ya_login<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #ff0000;">'passwd'</span> &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">$opt</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ya_pass<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #ff0000;">'timestamp'</span> &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #000066;">time</span> <span style="color: #339933;">*</span> <span style="color: #cc66cc;">1000</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;$response-&gt;status_line<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #b1b100;">unless</span> <span style="color: #0000ff;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">is_success</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Вызывают интерес поля <strong>timestamp</strong> и <strong>idkey</strong>. Первое представляет собой просто число миллисекунд, прошедших от &#8220;<a href="http://ru.wikipedia.org/wiki/Unix_time" >начала эпохи Unix</a>&#8220;. Соответственно результат вызова функции time (число в секундах) нужно перевести в миллисекунды. Второе поле &#8211; <strong>idkey</strong> &#8211; генерируется при заходе на какую-либо страницу Яндекса. И самое простое &#8211; получить его значение из кода страницы следующим образом:</p>
<div class="codecolorer-container perl default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="perl codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">sub</span> ya_get_idkey <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ua</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$opt</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">@_</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$response</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">get</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$opt</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>ya_login_url<span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">die</span> <span style="color: #ff0000;">&quot;$response-&gt;status_line<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #b1b100;">unless</span> <span style="color: #0000ff;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">is_success</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">#my $idkey = $1 if</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@idkey</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">decoded_content</span> <span style="color: #339933;">=~</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">m</span><span style="color: #009900;">&#123;</span> name<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;idkey&quot;</span> \<span style="color: #000066;">s</span> value<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;([<span style="color: #000099; font-weight: bold;">\d</span><span style="color: #000099; font-weight: bold;">\w</span>]{22})&quot;</span> \<span style="color: #000066;">s</span> <span style="color: #339933;">/&gt;</span> <span style="color: #009900;">&#125;</span>msx<span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000066;">return</span> <span style="color: #0000ff;">$idkey</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">#return $idkey;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Остальные поля формы авторизации вопросов вызывать не должны &#8211; логин и пароль от Яндекса указываются внутри скрипта как значения <em>ya_login</em> и <em>ya_pass</em>.</p>
<p>Сайты, для которых нужно сохранять значения внешних входящих ссылок, перечисляются в <em>$hosts</em>:</p>
<div class="codecolorer-container perl default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="perl codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$hosts</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #ff0000;">'dimio.org'</span> &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'0000001'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #ff0000;">'dimio-blog.lj'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'0000002'</span><span style="color: #339933;">,</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></div></div>
<p>Названия указываются произвольные (они будут присвоены именам файлов, хранящих статистику, так что не стоит использовать неподдерживаемые оболочкой символы), цифры &#8211; копируются из панели Я.Вебмастер (id сайтов). В <em>savedir</em> указывается путь до каталога, в котором будут созданы файлы со статистикой.</p>
<p>Я добавил вызов скрипт в расписание cron несколько раз в сутки (поскольку значения числа входящих внешних ссылок и ссылающихся сайтов имеют свойство колебаться от запроса к запросу). Результаты можно обработать в электронных таблицах типа Calc или Excell либо каким-то скриптом с построением графика по среднесуточным значениям через gnuplot например.</p>

	Метки:<a href="http://dimio.org/tag/perl" title="perl" rel="tag">perl</a>, <a href="http://dimio.org/tag/yandex" title="yandex" rel="tag">yandex</a>, <a href="http://dimio.org/tag/parser" title="парсер" rel="tag">парсер</a>, <a href="http://dimio.org/tag/skript" title="скрипт" rel="tag">скрипт</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/quTbqs1Qi9xrIk2K5nkOycZYWi4/0/da"><img src="http://feedads.g.doubleclick.net/~a/quTbqs1Qi9xrIk2K5nkOycZYWi4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/quTbqs1Qi9xrIk2K5nkOycZYWi4/1/da"><img src="http://feedads.g.doubleclick.net/~a/quTbqs1Qi9xrIk2K5nkOycZYWi4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/6cOLudoad8k" height="1" width="1"/>]]></content:encoded><description>Решил ради интереса посмотреть статистику изменения количества входящих внешних ссылок (и ссылаюшихся сайтов) через Я.Вебмастер &amp;#8211; и с удивлением не обнаружил в нем такой возможности. Может быть &amp;#8220;Выгрузка внешних ссылок в виде архива&amp;#8221; &amp;#8211; то, что мне нужно, но формирования архива придется ждать неделю и только потом можно будет узнать, что же в нем. Запрос [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/soxranenie-statistiki-vneshnix-vxodyashhix-ssylok-iz-yandeks-vebmaster.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://dimio.org/soxranenie-statistiki-vneshnix-vxodyashhix-ssylok-iz-yandeks-vebmaster.html</feedburner:origLink></item><item><title>Подключение и настройка сетевого USB-принетра к dd-wrt на примере DIR-620 и Xerox Phaser 3140</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/8vsGAxsrtKU/podklyuchenie-i-nastrojka-setevogo-usb-prinetra-k-dd-wrt-na-primere-dir-620-i-xerox-phaser-3140.html</link><category>Linux</category><category>Интернет</category><category>Технократия</category><category>ddwrt</category><category>dir620</category><category>how-to</category><category>принтер</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Wed, 15 Feb 2012 08:05:56 PST</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=610</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Следующим шагом после <a href="http://dimio.org/d-link-dir-620-i-dd-wrt-byudzhetnyj-nas-i-torrentokachalka.html">установки на DIR-620 прошивки dd-wrt</a> и создания из него <a href="http://dimio.org/d-link-dir-620-i-dd-wrt-podklyuchenie-flash-ustanovka-programm-nastrojka-nas.html">сетевого хранилища и торрентокачалки</a> стало подключение сетевого принтера по USB. В принципе задача совершенно не сложная, исходные данные следующие:</p>
<ul>
<li>Роутер D-Link DIR-620 с прошивкой dd-wrt и подключенным к нему USB-хабом;</li>
<li>Лазерный принтер Xerox Phaser 3140 (имеется штатный драйвер под *nix);</li>
<li>Linux и Windows машины в локальной сети, которые должны печатать на сетевом принтере;</li>
<li>Ресурсы роутера ограничены, следовательно использование демона печати CUPS возможно, но может быть проблематично.</li>
</ul>
<p>При таких исходных данных логичной выглядит схема связи машин из локальной сети с принтером, подключенным к роутеру, при которой вся обработка заданий печати будет выполняться на самих клиентах (там же должны быть установлены драйверы принтера), а роутер займется простой переадресацией готовых заданий печати на принтер. Наряду с плюсом этого решения &#8211; экономией ресурсов роутера, есть и минус, который я пока не знаю, как победить &#8211; для просмотра оставшегося уровня тонера нужно печатать тестовую страницу.<br />
<span id="more-610"></span></p>
<h3>Подключение принтера к роутеру с dd-wrt через USB</h3>
<p>Для связи роутера с принтером я использовал распространённый демон печати <a href="http://p910nd.sourceforge.net/" >p910nd</a> &#8211; маленький и легкий, рекомендуется в том числе и для использования в embedded linux системах, к которым можно отнести dd-wrt. Демон связывает usb/lp0 порты с ipp очередью печати клиентов (своего обработчика очереди печати он соответственно не имеет).</p>
<blockquote><p><strong>ВАЖНО!</strong> Если на роутере используется прошивка с поддержкой SWAP из заметки <a href="http://dimio.org/d-link-dir-620-i-dd-wrt-podklyuchenie-flash-ustanovka-programm-nastrojka-nas.html"><strong>D-Link DIR-620 и dd-wrt – бюджетный NAS и торрентокачалка</strong></a> &#8211; в ней отсутствует поддержка USB-принтеров в ядре. Соответственно нужно либо пересобирать ядро и затем упаковывать и заново устанавливать саму прошивку, либо <a href="http://dimio.org/cborka-modulej-yadra-dlya-dd-wrt.html" title="Cборка модулей ядра для dd-wrt">собрать поддержку принтеров в виде модуля ядра</a> и загружать его при старте роутера. Я выбрал второй путь, можно <a href="http://dimio.org/wp-content/uploads/soft/usblp.ko.zip">скачать готовый модуль поддержки принетров для версии ядра 2.7.23 под DIR-620</a>, сохранить его на подключенном к роутеру внешнем носителе (я положил в директорию <em>/opt/lib</em>) и дописать в скрипт автозагрузки <code class="codecolorer text default"><span class="text">insmod /opt/lib/usblp.ko</span></code> (после монтирования ФС, на которой хранится модуль). Проверить, что модуль загружен, можно командой <code class="codecolorer text default"><span class="text">lsmod</span></code>.</p></blockquote>
<p>Затем необходимо проверить, что в веб-интерфейсе прошивки включена поддержка USB-принтеров: <em>Services -> USB -> USB Printer Support -> Enabled</em>.<br />
<a href="http://dimio.org/wp-content/uploads/2012/02/dd-wrt_printer_support.png"><img src="http://dimio.org/wp-content/uploads/2012/02/dd-wrt_printer_support.png" alt="dd wrt принтер - включение поддержки" title="Включение принтера в dd-wrt" width="500" height="234" class="aligncenter size-full wp-image-688" /></a></p>
<p>Далее устанавливаем демон печати <em>p910nd</em>: <code class="codecolorer text default"><span class="text">ipkg-opt install p910nd</span></code>. После установки в директории <em>/opt/etc/init.d</em> будет создан скрипт для автозапуска демона &#8211; <em>S95p910nd</em> (кому интересно &#8211; цифры вида <em>SNN</em> в именах означают порядок запуска скриптов из этой директории). На всякий случай, параметры запуска демона такие: <code class="codecolorer text default"><span class="text">p9100d -f /dev/lp0 0 -t 5</span></code>.</p>
<p>Если все прошло успешно (модуль ядра загружен в память, демон печати запущен и работает), то при подключении к роутеру принтера в выводе <code class="codecolorer text default"><span class="text">dmesg</span></code> должны быть примерно такие строки:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;6&gt;usb 1-1.3: new full speed USB device using dwc_otg and address 6<br />
&lt;6&gt;usb 1-1.3: configuration #1 chosen from 1 choice<br />
&lt;6&gt;usblp0: USB Bidirectional printer dev 6 if 0 alt 0 proto 2 vid 0x0924 pid 0x3CF4</div></div>
<h3>Установка/подключение сетевого принтера на клиентах</h3>
<p>Теперь нужно подключить принтер к клиентским машинам (драйвера должны быть установлены на них или будут установлены в процессе подключения принтера).</p>
<h4>Установка принтера с использованием CUPS</h4>
<p>Систему печати CUPS удобней всего на мой взгляд конфигурировать через ее штатный веб-интерфейс, по умолчанию доступный по адресу <em>http://localhost:631</em>. После настройки веб-интефейс при отсутствии необходимости в нём можно отключить, изменив значение в строке <em>WebInterface</em> конфигурационного файла (который доступен там же через меню <em>Администрирование -> Редактирование конфигурационного файла</em>) с <em>Yes</em> на <em>No</em>. Если для внесения изменений запрашиватся логин и пароль и в конфиге CUPS выставлено <em>DefaultAuthType Basic</em>, то логин и пароль те же, что у текущего пользователя системы.<br />
Итак, заходим в <em>Администрирование -> Добавить принтер</em>, там выбираем <em>AppSocket/HP JetDirect</em>, на следующем шаге вводим <code class="codecolorer text default"><span class="text">socket://192.168.0.1:9100</span></code> (где 192.168.0.1 &#8211; адрес роутера), затем потребуется задать название принтера (при желании &#8211; и описание). Если CUPS обнаружит драйвр принтера (который к этому моменту должен быть уже установлен) &#8211; принтер будет подключен, можно печатать пробную страницу. Пользователям Ubuntu и его производных проще использовать встроенную программу работы с CUPS, которая позволяет установить драйвер в процессе подключения.</p>
<h4>Установка принтера в Windows</h4>
<p>Под Windows сетевой принтер подключается следующим образом (замечу, что все это я проделывал в WinXP и не знаю, совпадут ли названия настроек полностью с другими версиями ОС): <em>Управление принтерам (Принтеры и факсы) -> Добавить новый -> Локальный принтер -> Порт 9100</em> (стандартный TCP/IP порт, если его нет &#8211; создать там же во вкладке ниже), затем выбор нужного драйвера и его установка, принтер создан. Теперь нужно зайти в свойства принтера на вкладку <em>Порты</em>, на ней &#8211; <em>Настройка порта</em>, указать IP-адрес роутера и протокол <em>Raw</em>. Настройка закончена, можно распечатать тестовую страницу!<br />
<a href="http://dimio.org/wp-content/uploads/2012/02/net_printer_win.jpg"><img src="http://dimio.org/wp-content/uploads/2012/02/net_printer_win.jpg" alt="Настройка сетевого принтера WinXP" title="Адрес, порт и протокол для подлкючения сетевого принтера" width="443" height="498" class="aligncenter size-full wp-image-618" /></a></p>
<h3>Другие заметки по теме D-Link DIR-620 и dd-wrt</h3>
<ul>
<li><a href="http://dimio.org/d-link-dir-620-i-dd-wrt-byudzhetnyj-nas-i-torrentokachalka.html">D-Link DIR-620 и dd-wrt &#8211; бюджетный NAS и торрентокачалка</a></li>
<li><a href="http://dimio.org/cborka-modulej-yadra-dlya-dd-wrt.html">Cборка модулей ядра для dd-wrt</a></li>
<li><a href="http://dimio.org/zagruzka-i-vosstanovlenie-proshivki-dd-wrt-cherez-tftp.html">Загрузка и восстановление прошивки dd-wrt через tftp</a></li>
<li><a href="http://dimio.org/torrent-klient-transmission-ustanovka-na-dir-620-pod-upravleniem-dd-wrt.html">Торрент-клиент transmission &#8211; установка на DIR-620 под управлением dd-wrt</a></li>
<li><a href="http://dimio.org/d-link-dir-620-i-dd-wrt-podklyuchenie-flash-ustanovka-programm-nastrojka-nas.html">D-Link DIR-620 и dd-wrt &#8211; подключение flash, установка программ, настройка NAS</a></li>
</ul>

	Метки:<a href="http://dimio.org/tag/ddwrt" title="ddwrt" rel="tag">ddwrt</a>, <a href="http://dimio.org/tag/dir620" title="dir620" rel="tag">dir620</a>, <a href="http://dimio.org/tag/how-to" title="how-to" rel="tag">how-to</a>, <a href="http://dimio.org/tag/printer" title="принтер" rel="tag">принтер</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/7TYpRHY2TzBNaqhCWQRjFOFf9xQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/7TYpRHY2TzBNaqhCWQRjFOFf9xQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/7TYpRHY2TzBNaqhCWQRjFOFf9xQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/7TYpRHY2TzBNaqhCWQRjFOFf9xQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/8vsGAxsrtKU" height="1" width="1"/>]]></content:encoded><description>Подключение сетевого USB-принтера через роутер D-Link DIR-620 к Windows и Linux. Установки и настройка демона печати на роутере, установка и настройка принтера на клиентах.</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/podklyuchenie-i-nastrojka-setevogo-usb-prinetra-k-dd-wrt-na-primere-dir-620-i-xerox-phaser-3140.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://dimio.org/podklyuchenie-i-nastrojka-setevogo-usb-prinetra-k-dd-wrt-na-primere-dir-620-i-xerox-phaser-3140.html</feedburner:origLink></item><item><title>Знакомство с компьютерным форумом IT-talk</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/B0Ab76_otrA/znakomstvo-s-kompyuternym-forumom-it-talk.html</link><category>Интернет</category><category>Новости</category><category>it</category><category>программинг</category><category>форум</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Mon, 06 Feb 2012 07:21:26 PST</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=605</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Года полтора назад я писал заметку про анонимайзеры &#8211; <a href="http://dimio.org/anonimajzer-kak-zamena-proksi-proverka-anonimajzerov-na-validnost.html"><strong>Анонимайзер как замена прокси. Проверка анонимайзеров на валидность</strong></a>, посвященную использованию публичных анонимайзеров вместо &#8220;классических&#8221; прокси. Поднять эту тему я решил после знакомства с публикацией <a href="http://eax.me/google-hack/" ><strong>Еще немного про Google Hack</strong></a>, размещенной в блоге Александра &#8220;afiskon&#8221;. Собственно именно с неё и началось моё знакомство с его блогом, я подписался на <a href="http://dimio.org/rss-wordpress-kak-zapretit-indeksaciyu-ssylok-v-vidzhete.html">RSS-канал</a> и с тех пор регулярно его читаю.</p>
<p>Не так давно выяснил, что есть у Александра и свой форум на компьютерную тематику &#8211; <a href="http://it-talk.org/" >IT Talk</a> &#8211; который сейчас переживает второе рождение после объединения с security-teams.net. Процитирую описание тематитки с самого форума: &#8220;Форум о программировании, операционных системах, безопасности, сайтостроении, железе, девайсах, сетях и тп&#8221;.<br />
<span id="more-605"></span></p>
<p>Из всего вышеперечисленного я пролистал раздел о программировании (как ни странно &#8211; отдельного раздела по Perl не нашел, хотя Александр довольно тесно с ним связан), ветку с <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGAoVFBJQD1obWUtXSVUNQREIU1IcW0deXg==/">архивом исходников различных скриптов</a></noindex> (сюда однозначно рекомендую заглянуть до начала изобретения разнообразных велосипедов) и раздел, посвященный <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGAoVFBJQD1obWUtXSVUNQREIUFIcW0deXg==/">созданию, раскрутке и монетизации сайтов</a></noindex> (в отличае от раскрученных форумов веб-мастеров здесь весьма доброжелательная атмосфера в общении, можно заглядывать за советом по продвижению сайта. И касаясь тематики SEO-спама &#8211; ссылки в профилях закрыты от индексации <img src='http://dimio.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ).</p>
<p>Судя по времени отправления сообщений &#8211; форум достаточно живой, отвечают часто. Понравился шаблон оформления &#8211; глаз не напрягает, страницы грузятся быстро, нет буйства красок (вспомнил Античат и вздрогнул). Подводя итог &#8211; если возникла потребность в живом, но не слишком перегруженном модерацией и строгими правилами форуме, есть смысл познакомиться с <a href="http://it-talk.org/" >компьютерным форумом  IT Talk</a> поближе!</p>
<p>P.S. Обзор форума я решил написать по двум причинам &#8211; во-первых, мне интересно читать блог eax.me, а во-вторых &#8211; кризис тем для заметок заставляет радоваться любому подходящему поводу написать что-то полезное. Not for money, just like IT Talk <img src='http://dimio.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

	Метки:<a href="http://dimio.org/tag/it" title="it" rel="tag">it</a>, <a href="http://dimio.org/tag/internet" title="Интернет" rel="tag">Интернет</a>, <a href="http://dimio.org/tag/programmirovanie" title="программинг" rel="tag">программинг</a>, <a href="http://dimio.org/tag/forum" title="форум" rel="tag">форум</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/ccanSghFqhF4W_X-6XiU2iFHEmY/0/da"><img src="http://feedads.g.doubleclick.net/~a/ccanSghFqhF4W_X-6XiU2iFHEmY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ccanSghFqhF4W_X-6XiU2iFHEmY/1/da"><img src="http://feedads.g.doubleclick.net/~a/ccanSghFqhF4W_X-6XiU2iFHEmY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/B0Ab76_otrA" height="1" width="1"/>]]></content:encoded><description>Года полтора назад я писал заметку про анонимайзеры &amp;#8211; Анонимайзер как замена прокси. Проверка анонимайзеров на валидность, посвященную использованию публичных анонимайзеров вместо &amp;#8220;классических&amp;#8221; прокси. Поднять эту тему я решил после знакомства с публикацией Еще немного про Google Hack, размещенной в блоге Александра &amp;#8220;afiskon&amp;#8221;. Собственно именно с неё и началось моё знакомство с его блогом, я [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/znakomstvo-s-kompyuternym-forumom-it-talk.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://dimio.org/znakomstvo-s-kompyuternym-forumom-it-talk.html</feedburner:origLink></item><item><title>D-Link DIR-620 и dd-wrt – подключение flash, установка программ, настройка NAS</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/GF6V5pWRZZs/d-link-dir-620-i-dd-wrt-podklyuchenie-flash-ustanovka-programm-nastrojka-nas.html</link><category>Linux</category><category>Интернет</category><category>Технократия</category><category>ddwrt</category><category>dir620</category><category>how-to</category><category>nas</category><category>гаджет</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Sat, 24 Dec 2011 06:20:18 PST</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=557</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Итак, после <a href="http://dimio.org/d-link-dir-620-i-dd-wrt-byudzhetnyj-nas-i-torrentokachalka.html">установки на роутер DIR-620 прошивки dd-wrt</a>, можно подключить к нему флешку или внешний диск по USB, установить нужные программы и получить помимо самого роутера &#8211; NAS с <a href="http://dimio.org/torrent-klient-transmission-ustanovka-na-dir-620-pod-upravleniem-dd-wrt.html">закачкой торрентов</a>.</p>
<h3>Монтирование внешнего диска в dd-wrt</h3>
<p>Для начала нужно включить поддержку USB на роутере через веб-интерфейс: <em>Services &#8211; USB &#8211; USB Support &#8211; Core USB Support + USB Storage Support</em>. После подключения внешнего диска проверить успешность при помощи вызова <code class="codecolorer bash default"><span class="bash"><span style="color: #c20cb9; font-weight: bold;">dmesg</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> scsi</span></code>, где строки вида <code class="codecolorer text default"><span class="text">/dev/scsi/host2/bus0/target0/lun0: p1 p2</span></code> укажут на подключенный диск (в данном случае мой диск подключен к третьему порту USB-хаба &#8211; <strong>host2</strong> и имеет два раздела &#8211; <strong>p1 p2</strong>.<br />
<span id="more-557"></span></p>
<h4>Монтирование на прошивке с поддержкой файловых систем</h4>
<p>Поскольку при каждой загрузке роутера его состояние обнуляется до того, что штатно позволяет прошивка, монтирование USB-дисков, применение нужных настроек и запуск требуемых программ следует прописать в startup-скрипте (<em>Administration &#8211; Commands &#8211; Startup</em>) через веб-интерфейс:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">switch reg w 90 10007f7f<br />
insmod jbd.ko<br />
insmod mbcache.ko<br />
insmod ext3.ko<br />
sleep 10<br />
mount -t ext3 -o noatime,nodiratime /dev/scsi/host0/bus0/target0/lun0/part1 /jffs<br />
mount -o bind /jffs/opt /opt<br />
mount -o bind /opt/etc/profile /etc/profile<br />
mount -t ext3 /dev/scsi/host1/bus0/target0/lun0/part1 /mnt<br />
/opt/bin/busybox swapon /mnt/routerswap.swp<br />
sleep 1<br />
/opt/bin/transmission-daemon -g /opt/etc/transmission</div></td></tr></tbody></table></div>
<p>О некоторых строках расскажу подробней сразу, другие рассмотрены дальше в заметке. Первая &#8211; исправляет ошибку невключения LAN-порта, возникующую в dd-wrt 17201. Вторая-четвертая &#8211; загрузка модулей для поддержки работы с файловыми системами, модули находятся в <em>/lib/modules/версия_ядра</em>, если прошивка без модулей поддержки ФС &#8211; см. ниже. Шестая и девятая строки отвечают за монтирование внешних дисков (флешки для установки софта и USB-HDD, выступающего в роли NAS). Седьмая &#8211; монтирование каталога с флешки в каталог ФС роутера, восьмая &#8211; замена штатного <em>/etc/profile</em> на измененный (см. ниже). Десятая &#8211; подключение своп-файла, создание которого подробно рассмотрено ниже. Последняя &#8211; запуск <em>transmission</em> с указанным каталогом в качестве рабочего (в частности там хранится файл настроек).</p>
<h4>Монтирование при отсутствии встроенной поддержки файловых систем</h4>
<p>Если установленная прошивка не имеет в комплекте модулей поддержки файловых систем &#8211; можно поступить следующим образом &#8211; записать поблочно <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGAsOVAMfCFBHWFxGB19MUB5KUFYDAwEBAgcXAhZLVk8=/">архив</a></noindex> с нужными модулями <a href="http://dimio.org/pamyatki-po-rabote-v-linux.html">при помощи dd</a> на <a href="http://dimio.org/nizkourovnevoe-formatirovanie-flash-pod-linux.html">отдельный раздел флешки</a> (достаточно раздела размером в 1 Мб) и прописать их распаковку и подгрузку при старте роутера, изменив соответствующим образом startup-скрипт (<noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhVBxxCRE0eBVwPHBMMCg8dWl1XV0gWFA0VHnhYFg9ND18EbmBle28CQQtFAToWD0ZbXEZGb1QLBgRFUFM8DlcEXgJDUWlfQzleDVcRCQQV/">подробная инструкция на английском</a></noindex>):</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mkdir /var/lib/fs<br />
cd /var/lib/fs<br />
tar -zxvf /dev/scsi/host0/bus0/target0/lun0/part2<br />
insmod jbd.ko<br />
insmod mbcache.ko<br />
insmod ext3.ko</div></div>
<p>После этого ext3 монтируется без проблем. Кстати поддержки ext4 я в dd-wrt не обнаружил (по крайней мере на их ftp модулей нет), обратная конвертация из ext3 в ext4 судя по всему невозможна &#8211; стоит учесть это заранее.</p>
<h3>Включение SWAP на роутере с dd-wrt</h3>
<p>Если установлена <strong>прошивка с поддержкой swap</strong> (см. <a href="http://dimio.org/d-link-dir-620-i-dd-wrt-byudzhetnyj-nas-i-torrentokachalka.html#how-to-install-ddwrt-on-DIR620"><strong>Как прошить DIR-620 прошивкой dd-wrt</strong></a>), то нужно выделить отдельный раздел под него на внешнем диске или создать своп-файл, как поступил я (можно воспользоваться Linux-машиной, можно установить расширенную версию <em>busybox</em> на роутер):</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">dd if=/dev/zero of=/mnt/myswap.swp bs=1k count=16000<br />
/opt/bin/busybox mkswap /mnt/myswap.swp<br />
/opt/bin/busybox swapon /mnt/myswap.swp</div></div>
<p>где <strong>count=16000</strong> &#8211; 16 тысяч блоков размером по одному килобайту, т.е. размер своп-файла составит 16 мегабайт. Советую сделать не меньше 32-х мегабайт, при большом количестве закачек в <em>transmission</em> легко используется по 20-25 Мб подкачки.</p>
<h3>Установка программ в dd-wrt</h3>
<p>Для установки софта из репозиториев под dd-wrt применяются следующие команды:</p>
<ul>
<li><strong>ipkg-opt update</strong> &#8211; обновить список пакетов, доступных в репозитории;</li>
<li><strong>ipkg-opt upgrade</strong> &#8211; обновить установленные пакеты;</li>
<li><strong>ipkg-opt install</strong> &#8211; установить пакет;</li>
<li><strong>ipkg-opt remove</strong> &#8211; удалить пакет;</li>
<li><strong>ipkg list</strong> &#8211; показать список всех доступных пакетов.</li>
</ul>
<h3>Настройка NFS для доступа к NAS</h3>
<p>Из вариантов сетевого доступа к внешнему диску я выбрал доступ по NFS &#8211; samba медленней и сложней в настройке, большинство машин у меня дома &#8211; с Linux или Android, а кроме того &#8211; для Windows XP есть официальный NFS-клиент (точнее &#8211; клон mount), доступный на сайте Microsoft, а Vindows Vista и старше &#8211; поддерживают NFS изначально.<br />
Настройка NFS на роутере производится следующим образом &#8211; устанавливаем пакеты portmap (для динамического выделения портов) и unfs3 (NFS-демон). В созданные после установки файлы <strong>/opt/etc/init.d/S56unfsd</strong> и <strong>/opt/etc/init.d/S55portmap</strong> добавляем строку <code class="codecolorer text default"><span class="text">LD_LIBRARY_PATH=/opt/lib:${LD_LIBRARY_PATH}</span></code> &#8211; путь к дополнительным библиотекам на внешнем диске. Создаем файл настроек для NFS-демона <strong>/opt/etc/exports</strong>:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/mnt/точка_монтирования_внешнего_диска &nbsp; &nbsp; &nbsp; 192.168.0.1/255.255.255.0(rw,sync,no_subtree_check,no_root_squash)</div></div>
<p>Точку монтирования NAS-диска и маску подсети надо естественно изменить на свои. При перезагрузке роутера portmap и unfs будут стартовать автоматически.<br />
Затем я на <a href="http://dimio.org/kak-ya-xotel-menyat-noutbuk.html">ноутбуке</a> установил пакет <em>nfs-client</em>, после чего можно монтировать NAS:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mount -t nfs 192.168.0.1:/mnt /media/NAS</div></div>
<p>В каталог /mnt примонтирован на роутере внешний HDD. </p>
<h3>Небольшие настройки для удобства работы в ash</h3>
<p>Штатно в dd-wrt используется оболочка командной строки ash. Конечно можно установить из репозитория bash или любую другую и прописать ее в автозагрузку, но фактически возможностей ash более чем достаточно для роутера. Единственное реальное неудобство, которое возникло у меня при работе с ней &#8211; невозможность прописать свои алиасы в конфиге, поскольку при каждой загрузке роутера все системные файлы откатываются к исходному состоянию. Выход &#8211; монтировать поверх штатного конфига командной оболочки (<strong>/etc/profile</strong>) свой, расположенный на внешнем диске (например у меня &#8211; <strong>/opt/etc/profile</strong>)  и дополненный нужными опциями, дописав в startup скрипте такую строку:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mount -o bind /opt/etc/profile /etc/profile</div></div>
<p>Мой <strong>profile</strong> дополнен следующими командами:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">alias vim='vim -u /opt/etc/vim/.vimrc'<br />
alias top='htop'<br />
alias transmission='/opt/bin/transmission-daemon -g /opt/etc/transmission'<br />
alias halt='/opt/sbin/shutdown'<br />
alias ll='ls -lh'<br />
alias la='ls -lha</div></div>
<p>Полезно сделать <em>shutdown-скрипт</em>, копирующий содержимое секции shutdown (<em>Administration &#8211; Commands &#8211; Shutdown</em>) из веб-интрефейса, которое выполняется при перезагрузке роутера. Скрипт будет точно также выгружать определенные процессы и отмонтировать внешние диски для последующего безопасного выключения роутера. Мой скрипт выглядит так:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">killall transmission-daemon<br />
killall unfsd<br />
sleep 1<br />
/opt/bin/busybox swapoff /mnt/routerswap.swp<br />
umount /dev/scsi/host1/bus0/target0/lun0/part1</div></div>
<h3>Другие заметки по теме D-Link DIR-620 и dd-wrt</h3>
<ul>
<li><a href="http://dimio.org/torrent-klient-transmission-ustanovka-na-dir-620-pod-upravleniem-dd-wrt.html">Торрент-клиент transmission &#8211; установка на DIR-620 под управлением dd-wrt</a></li>
<li><a href="http://dimio.org/cborka-modulej-yadra-dlya-dd-wrt.html">Cборка модулей ядра для dd-wrt</a></li>
<li><a href="http://dimio.org/d-link-dir-620-i-dd-wrt-byudzhetnyj-nas-i-torrentokachalka.html">D-Link DIR-620 и dd-wrt &#8211; бюджетный NAS и торрентокачалка</a></li>
<li><a href="http://dimio.org/podklyuchenie-i-nastrojka-setevogo-usb-prinetra-k-dd-wrt-na-primere-dir-620-i-xerox-phaser-3140.html">Подключение и настройка сетевого USB-принетра к dd-wrt на примере DIR-620 и Xerox Phaser 3140</a></li>
<li><a href="http://dimio.org/zagruzka-i-vosstanovlenie-proshivki-dd-wrt-cherez-tftp.html">Загрузка и восстановление прошивки dd-wrt через tftp</a></li>
</ul>

	Метки:<a href="http://dimio.org/tag/ddwrt" title="ddwrt" rel="tag">ddwrt</a>, <a href="http://dimio.org/tag/dir620" title="dir620" rel="tag">dir620</a>, <a href="http://dimio.org/tag/how-to" title="how-to" rel="tag">how-to</a>, <a href="http://dimio.org/tag/nas" title="nas" rel="tag">nas</a>, <a href="http://dimio.org/tag/gadzhet" title="гаджет" rel="tag">гаджет</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/2V38X2emNQ5VVZ_WslSgUVUlToE/0/da"><img src="http://feedads.g.doubleclick.net/~a/2V38X2emNQ5VVZ_WslSgUVUlToE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2V38X2emNQ5VVZ_WslSgUVUlToE/1/da"><img src="http://feedads.g.doubleclick.net/~a/2V38X2emNQ5VVZ_WslSgUVUlToE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/GF6V5pWRZZs" height="1" width="1"/>]]></content:encoded><description>Итак, после установки на роутер DIR-620 прошивки dd-wrt, можно подключить к нему флешку или внешний диск по USB, установить нужные программы и получить помимо самого роутера &amp;#8211; NAS с закачкой торрентов. Монтирование внешнего диска в dd-wrt Для начала нужно включить поддержку USB на роутере через веб-интерфейс: Services &amp;#8211; USB &amp;#8211; USB Support &amp;#8211; Core USB [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/d-link-dir-620-i-dd-wrt-podklyuchenie-flash-ustanovka-programm-nastrojka-nas.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">5</slash:comments><feedburner:origLink>http://dimio.org/d-link-dir-620-i-dd-wrt-podklyuchenie-flash-ustanovka-programm-nastrojka-nas.html</feedburner:origLink></item><item><title>Изменить имя сетевого интерфейса в Debian/Ubuntu Linux</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/7YE4sbU_ypQ/izmenit-imya-setevogo-interfejsa-v-debianubuntu-linux.html</link><category>Linux</category><category>how-to</category><category>linux</category><category>памятка</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Wed, 07 Dec 2011 00:50:36 PST</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=571</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Задался целью домашнюю wi-fi сеть перевести на современный протокол шифрования &#8211; wpa2. Вроде всё предельно просто должно быть даже в линуксе &#8211; ставишь <em>wpa-supplicant</em>, прописываешь имя точки, тип шифрования и ключ в /etc/network/interfaces &#8211; и всё работает. Но нет &#8211; бился часа четыре, пробовал по-разному &#8211; не подключается ноут мой к сети, хотя нетбук и <a href="http://dimio.org/elektronnyj-kombajn-razmerom-s-ladon.html">смартфоны</a> легко её подхватывают.</p>
<p>Оказалось, что wi-fi карточка в <a href="http://dimio.org/kak-ya-xotel-menyat-noutbuk.html">ThinkPad T40</a> не поддерживает wpa2 (и wpa тоже) на аппаратном уровне. Я думал, что это исключительно программные решения и даже не догадывался покопать в сторону аппаратной поддержки. В итоге пришлось карточку поменять, благо на e-bay их продаётся много.<br />
<span id="more-571"></span></p>
<p>Но это всё предыстория. Новая карточка в итоге встала нормально, выглядит в выводе <code class="codecolorer text default"><span class="text">dmesg</span></code> и <code class="codecolorer text default"><span class="text">lspci</span></code> как <em>Intel PRO/Wireless 2200BG Mini-PCI Adapter</em>, <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhFC1hbXU5ZDVpMXBYCThFbWFoce0BPVldVAQ==/">драйвера под Linux для неё имеются</a></noindex>, но она автоматически прописалась под именем <em>eth2</em>, а у меня в скриптах и в <em>conky</em> беспроводной интерфейс прописан как <em>eth1</em>. Соответственно встал вопрос &#8211; <strong>как в Linux переименовать сетевой интерфейс</strong>?</p>
<p>Для <em>Debian</em> (и соответственно <em>Ubuntu</em>) подходит такой рецепт: в файле <strong>70-persistent-net.rules</strong>, находящемся по адресу <code class="codecolorer text default"><span class="text">/etc/udev/rules.d/</span></code>, в спецификации нужной сетевой карты изменяем в конце строки параметр <code class="codecolorer text default"><span class="text">NAME=</span></code>, вписывая туда нужное имя интерфейса для сетевой карты с нужным MAC-адресом. Например я вписал вместо <code class="codecolorer text default"><span class="text">NAME=eth2</span></code> &#8211; <code class="codecolorer text default"><span class="text">NAME=eth1</span></code>, а строку с конфигурацией старой wi-fi карты просто закомментировал.</p>

	Метки:<a href="http://dimio.org/tag/how-to" title="how-to" rel="tag">how-to</a>, <a href="http://dimio.org/tag/linux" title="linux" rel="tag">linux</a>, <a href="http://dimio.org/tag/pamyatka" title="памятка" rel="tag">памятка</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/dqBrzoUCOn4EzjPAw0x9z4CKCFQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/dqBrzoUCOn4EzjPAw0x9z4CKCFQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/dqBrzoUCOn4EzjPAw0x9z4CKCFQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/dqBrzoUCOn4EzjPAw0x9z4CKCFQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/7YE4sbU_ypQ" height="1" width="1"/>]]></content:encoded><description>Задался целью домашнюю wi-fi сеть перевести на современный протокол шифрования &amp;#8211; wpa2. Вроде всё предельно просто должно быть даже в линуксе &amp;#8211; ставишь wpa-supplicant, прописываешь имя точки, тип шифрования и ключ в /etc/network/interfaces &amp;#8211; и всё работает. Но нет &amp;#8211; бился часа четыре, пробовал по-разному &amp;#8211; не подключается ноут мой к сети, хотя нетбук и [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/izmenit-imya-setevogo-interfejsa-v-debianubuntu-linux.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><feedburner:origLink>http://dimio.org/izmenit-imya-setevogo-interfejsa-v-debianubuntu-linux.html</feedburner:origLink></item><item><title>D-Link DIR-620 и dd-wrt – бюджетный NAS и торрентокачалка</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/O2psGD1lTNA/d-link-dir-620-i-dd-wrt-byudzhetnyj-nas-i-torrentokachalka.html</link><category>Linux</category><category>Интернет</category><category>Технократия</category><category>ddwrt</category><category>dir620</category><category>how-to</category><category>nas</category><category>гаджет</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Mon, 05 Dec 2011 07:58:09 PST</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=566</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Давно подумывал о необходимости <a href="http://dimio.org/d-link-dir-620-i-dd-wrt-podklyuchenie-flash-ustanovka-programm-nastrojka-nas.html">сделать дома NAS (сетевой диск)</a>, чтобы иметь общее для всех домашних компьютеров (а теперь &#8211; и смартфонов) хранилище музыки, фильмов, <a href="http://dimio.org/o-polze-rezervnogo-kopirovaniya.html">резервных копий</a> и каких-то общих файлов, которые нужно <a href="http://dimio.org/sinxronizaciya-tekstovyx-fajlov-prostoj-skript-na-perl.html">синхронизировать между несколькими машинами</a>. Идея собрать еще один компьютер на чём-нибудь типа Атома после размышлений была отброшена &#8211; получается долго и относительно дорого, хотя конечно интересно. Поэтому решил посмотреть в сторону готовых устройств с возможностью перепрошивки, конкретно &#8211; роутеры, поддерживающие <strong>dd-wrt/openwrt</strong> и т.п.</p>
<p>Сначала остановился на D-Link DIR-320 &#8211; ставший уже классическим вариант для создания домашнего NAS, организации небольшой полноценной сети и решения других подобных задач. Плюсы &#8211; весьма умеренная цена, давно на рынке и уже плотно оброс всевозможными руководствами по переделке и доработке. Однако получилось так, что в магазине его не оказалось и я купил <strong>DIR-620</strong> &#8211; более современную версию 320-го. В остальном особой разницы нет &#8211; DIR-620 также имеет возможность перепрошивки сторонними прошивками, оборудован USB-выходом (USB-хостом, если быть точным) и стоит примерно тех же денег (в моём случае он даже оказался на 70 руб. дешевле).<br />
<span id="more-566"></span></p>
<h3>Альтернативные прошивки для DIR-620</h3>
<p>Поскольку положительных отзывов о штатной прошивке роутера я не обнаружил (в моём шла версия 1.21), а нашел, напротив, &#8211; немало отрицательных (о всех версиях до 1.21 включительно), я даже не стал её настраивать и сразу начал искать альтернативные прошивки для DIR-620. Таковых обнаружилось достаточно, я остановился на трёх &#8211; <em>dd-wrt</em>, <em>zyxel keenetic</em> и <em>openwrt</em>. После ознакомления с теорией себе установил только dd-wrt, ей и пользуюсь. OpenWRT нашел слишком поздно &#8211; просто почитал о ней, но пробовать не стал. Zuxel Keenetic думал поставить на случай, если не разберусь с dd-wrt &#8211; не пригодилось. Сборник прошивок, обновление загрузчика и инструкции по перепрошивке собраны на сайте <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhVBlBRVQlUAx0QRks=/">deadc0de.ru</a></noindex>.</p>
<h4>Прошивка Zyxel Keenetic под DIR-620</h4>
<p>Zyxel Keenetic по железу практически аналогичен D-Link DIR-620 и потому последний может быть прошит прошивкой от первого (оригинальной в случае небольшой переделки &#8211; нужно впаять резистор на плату или модифицированной &#8211; переделки в этом случае не требуется). К достоинствам этой прошивки можно отнести <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGAoVXAofAF5YGExRSVYPRggEFQ9dXUAcWVVdCgARWFYYCg9dA0lNWUFb/">очень приятный веб-интерфейс</a></noindex>, где всё просто и понятно; <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBkYQQNdTUNAGVJSSQFTA10=/">поддержку USB-принтера с простой установкой драйверов</a></noindex>, наличие встроенного torrent-клиента (<em>transmission-daemon</em>) и dlna-сервера (<em>minidlna</em>). Сразу скажу, что последний не нужен, если различный медиа-контентс с NAS будет открываться на компьютере и нужен, если есть желание подключить к NAS например телевизор (который естественно должен dlna поддерживать). Почему я не стал прошиваться этой прошивкой? Во-первых &#8211; красота веб-интрефейса нужна только во время настройки, т.е. в идеале &#8211; один раз (а я и вовсе предпочитаю настраивать через консоль), во-вторых &#8211; хотя <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGAAOXQMfBF5aUVVVSFANXksVThxLS1ZfH1tdAQsARVxUThFYBVoCVlBFFkcPWAscMwANBV1eVg==/">устанавливать софт через пакетный менеджер</a></noindex> и есть возможность (только для &#8220;полноценного&#8221; Keenetic) &#8211; пакетов достаточно мало, в-третьих &#8211; прошивка эта закрытая и с ней связана достоточно неприятная история &#8211; в последнее время много DIR-620, прошитых в Keenetic, <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhVBxxCRE0eBVwPHBQNESRwARxFW1VPEAoVWFYZEwlJWUVeCQIHAQFAEFIAXF4RCUFHV1JLQwVUQ0YBBg9YEVYVRQxDUVNLDQdAARVHVVJeCUBHUkBEBV1VUA==/">вышли из строя</a></noindex> (а также не ясно, не сделают ли проверки на оригинальность железа в будущем &#8211; всё зависит от доброй воли Zyxel). Так что я остановился на <em>dd-wrt</em>.</p>
<h4>Прошивка dd-wrt под DIR-620</h4>
<p>Для DIR-620 подходит сборка прошивки от роутера с аналогичным железом &#8211; Asus RT-N13U. Основные достоинства &#8211; открытый исходный код, что влечёт за собой возможность самостоятельной сборки прошивки и наличие большого сообщества, где всегда можно получить помощь. Богатство настроек, доступное как через веб-интерфейс, так и из консоли (ssh установлен из коробки), возможность простой установки дополнительного софта через пакетный менеджер из репозитариев (<a href="http://dimio.org/torrent-klient-transmission-ustanovka-na-dir-620-pod-upravleniem-dd-wrt.html">торрент-клиент</a>, dc++ клиент, samba, <a href="http://dimio.org/perl-practical-extraction-and-report-language.html">perl</a>, <a href="http://dimio.org/php-personal-home-page-tools.html">php</a>, <a href="http://dimio.org/tor-the-onion-router-luchshij-iz-besplatnyx-proksi.html">tor</a> и например <a href="http://dimio.org/videoregistraciya-v-linux.html">motion</a>, что вкупе с USB-хабом и/или свободными LAN-портами даст возможность подключить к роутеру <a href="http://dimio.org/sozdanie-infrakrasnoj-kamery-nochnogo-videniya-iz-veb-kamery.html">камеры для видеонаблюдения</a>). Естественно, так же, как и в случае с Keenetic, <a href="http://dimio.org/podklyuchenie-i-nastrojka-setevogo-usb-prinetra-k-dd-wrt-na-primere-dir-620-i-xerox-phaser-3140.html">в dd-wrt присутствует возможность подключения сетевого принтера</a> к роутеру через USB. К минусам можно причислить достаточно аскетичный веб-интерфейс разве что, других проблем за месяц использования не встретил. Заочно познакомиться с dd-wrt можно при помощи <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhVBxxCRE0eBVwPHAAADAkd/">веб-эмулятора прошивки</a></noindex>.</p>
<p><a name="how-to-install-ddwrt-on-DIR620"></a></p>
<h3>Как прошить DIR-620 прошивкой dd-wrt</h3>
<p>Под описываемые задачи (закачка торрентов, сетевой диск, DC++) на мой взгляд лучше всего подходит следующий порядок прошивки (для устройства с заводской прошивкой):</p>
<ul>
<li>Сначала <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhVBlBRVQlUAx0QRksQAwldRx1bRl1U/">обновить загрузчик uboot</a></noindex>, чтобы иметь возможность заливать на роутере прошивки через tftp, не занимаясь их конвертацией;</li>
<li>Затем взять <a href="http://dimio.org/wp-content/uploads/soft/dir-620-to-ddwrt-fs-swap.fwz">прошивку от Asus RT-N13U</a>, имеющую встроенную поддержку ext2, ext3, fat, NTFS и swap (без swap-раздела transmission работает очень нестабильно и нужно постоянно контролировать, чтобы закаче было не больше двух-трёх штук);</li>
<li>Эту прошивку и загрузить на роутер, <a href="http://dimio.org/zagruzka-i-vosstanovlenie-proshivki-dd-wrt-cherez-tftp.html">используя tftp</a> (заодно и проверить, что этот способ работает) или веб-интерфейс стандартной прошивки (вкладки Система -> Обновление ПО), после чего можно будет спокойно подключать флешку для установки софта и хранения настроек (её лучше <a href="http://dimio.org/nizkourovnevoe-formatirovanie-flash-pod-linux.html">отформатировать</a> в ext2 или ext3) и USB-HDD, который будет выступать в роли NAS.</li>
</ul>
<p>Как видно &#8211; ничего особо сложного. После установки веб-интерфейс для настройки dd-wrt доступен по адресу <strong>192.168.1.1</strong>, ssh можно включить в нём же (логин &#8211; root, пароль совпадает с паролем от веб-интерфейса). А я про <a href="http://dimio.org/d-link-dir-620-i-dd-wrt-podklyuchenie-flash-ustanovka-programm-nastrojka-nas.html">подключение флешки и внешнего диска, а также про установку пакетов и включение swap расскажу в следующей заметке</a>.</p>
<h3>Другие заметки по теме D-Link DIR-620 и dd-wrt</h3>
<ul>
<li><a href="http://dimio.org/cborka-modulej-yadra-dlya-dd-wrt.html">Cборка модулей ядра для dd-wrt</a></li>
<li><a href="http://dimio.org/torrent-klient-transmission-ustanovka-na-dir-620-pod-upravleniem-dd-wrt.html">Торрент-клиент transmission &#8211; установка на DIR-620 под управлением dd-wrt</a></li>
<li><a href="http://dimio.org/zagruzka-i-vosstanovlenie-proshivki-dd-wrt-cherez-tftp.html">Загрузка и восстановление прошивки dd-wrt через tftp</a></li>
<li><a href="http://dimio.org/d-link-dir-620-i-dd-wrt-podklyuchenie-flash-ustanovka-programm-nastrojka-nas.html">D-Link DIR-620 и dd-wrt &#8211; подключение flash, установка программ, настройка NAS</a></li>
<li><a href="http://dimio.org/podklyuchenie-i-nastrojka-setevogo-usb-prinetra-k-dd-wrt-na-primere-dir-620-i-xerox-phaser-3140.html">Подключение и настройка сетевого USB-принетра к dd-wrt на примере DIR-620 и Xerox Phaser 3140</a></li>
</ul>

	Метки:<a href="http://dimio.org/tag/ddwrt" title="ddwrt" rel="tag">ddwrt</a>, <a href="http://dimio.org/tag/dir620" title="dir620" rel="tag">dir620</a>, <a href="http://dimio.org/tag/how-to" title="how-to" rel="tag">how-to</a>, <a href="http://dimio.org/tag/nas" title="nas" rel="tag">nas</a>, <a href="http://dimio.org/tag/gadzhet" title="гаджет" rel="tag">гаджет</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/ljHAB5JjfFAIgwgj0ZmjiGY3r98/0/da"><img src="http://feedads.g.doubleclick.net/~a/ljHAB5JjfFAIgwgj0ZmjiGY3r98/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ljHAB5JjfFAIgwgj0ZmjiGY3r98/1/da"><img src="http://feedads.g.doubleclick.net/~a/ljHAB5JjfFAIgwgj0ZmjiGY3r98/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/O2psGD1lTNA" height="1" width="1"/>]]></content:encoded><description>Расширение возможностей роутера D-Link DIR-420 - краткое сравнение возможностей альтернативных прошивок Zyxel Keenetic и dd-wrt, описание перепрошивки роутера на dd-wrt и ее первичной настройки. Установка пакетов, подключение внешнего диска, настройка torrent-клиента и сетевого принтера.</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/d-link-dir-620-i-dd-wrt-byudzhetnyj-nas-i-torrentokachalka.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">12</slash:comments><feedburner:origLink>http://dimio.org/d-link-dir-620-i-dd-wrt-byudzhetnyj-nas-i-torrentokachalka.html</feedburner:origLink></item><item><title>Памятки по работе в Linux</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/LP64nLid50I/pamyatki-po-rabote-v-linux.html</link><category>Linux</category><category>how-to</category><category>linux</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Fri, 18 Nov 2011 02:04:09 PST</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=538</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Накопилось несколько простых рецептов работы в Linux, которые в силу низкой частоты использования наизусть не помню. Пока лежали в черновиках &#8211; некоторые по несколько раз успел перечитать, чтобы вспомнить, как и что делать &#8211; польза налицо.</p>
<h4>Порядок вывода аргументов в xargs</h4>
<p>Как-то раз столкнулся с проблемой порядка подстановки аргументов в <em>xargs</em>. И man вроде почитал, и погуглил, и встретил нужный ключ <em>-I</em>, но ни из мана, ни из гугля не понять было точно, что он делает именно то, что надо. Итак, ключ <em>-I</em> задаёт нужный порядок вывода аргумента в <em>xargs</em>, используя подстановку.<br />
<code class="codecolorer text default"><span class="text">xargs -I arg_name command arg1 arg_name arg3</span></code> &#8211; аргументы при вызове команды <em>command</em> будут выведены именно в таком порядке, тогда как в обычном случае <em>arg_name</em> будет подставлен в конец строки вызова команды.</p>
<h4>Чтение N строк из начала файла</h4>
<p>Совместно с предыдущим решением удобно использовать чтение из файла неких строк, которые затем и преобразовывать в набор аргументов. Банальный <em>cat</em> известен думаю всем. Обратный порядок &#8211; <em>tac</em>. Прочитать N строк с конца: <code class="codecolorer text default"><span class="text">tail -n N</span></code>. Аналогично, но с начала файла: <code class="codecolorer text default"><span class="text">head -n N</span></code>  (возм. head отсутствует в BSD-системах). И прочтитать строки с X по Y: <code class="codecolorer text default"><span class="text">awk 'NR &gt;=X &amp;&amp; NR &lt;=Y'</span></code><br />
<span id="more-538"></span></p>
<h4>Прокси через SSH (ssh-туннель)</h4>
<p>Банальная вещь, которую использую довольно редко (и потому приходится гуглить каждый раз) &#8211; прокси чеез SSH. Особенно помогает при необходимости скачать что-то с разных файлопомоек типа депозита, которые считают закачки по IP всей сети и регулярно предлагают подождать 7 часов.<br />
<code class="codecolorer text default"><span class="text">ssh user@host -D portN</span></code><br />
Затем в программе, которую надо пропустить через прокси (напр. браузер) указать SOCKS-прокси с адресом <em>localhost</em> и портом <em>portN</em>.</p>
<h4>Сохранение ключей SSH в памяти</h4>
<p>Еще SSH: <em>ssh-agent</em> &#8211; хранит ключи (не требуется каждый раз вводить код от ключа), добавить ключ в агент: <code class="codecolorer text default"><span class="text">ssh-add /путь/до_ключа</span></code>. Чтобы все процессы, запущенные из-под иксов, использовали ключи из <em>ssh-agent</em>, нужно запустить сессию WM через него <em>ssh-agent</em>, например (для Debian): в <em>~/.xinitrc</em> дописать <code class="codecolorer text default"><span class="text">exec ssh-agent openbox-session</span></code>.</p>
<h4>Монтирование/размонитрование удалённой ФС через <em>sshfs</em></h4>
<p>Для монтирования без необходимости ввода пароля нужно настроить fuse, добавить пользователя в группу fuse и разрешить этой группе монтирование устройства /dev/fuse. Далее в дело вступает <em>sshfs</em>:<br />
<code class="codecolorer text default"><span class="text">sshfs &lt;login&gt;@&lt;server&gt;:/путь /куда/монтировать</span></code><br />
Примонтированная ФС будет доступна как локальный каталог. Размонитровать так:<br />
<code class="codecolorer text default"><span class="text">fusermount -u /куда/примонтировано</span></code></p>
<h4>Выполнение локального скрипта на удаленной машине через ssh</h4>
<p>Чтобы не загружать на удалённую машину копию какого-то скрипта (например когда один и тот же скрипт нужно запускать на многих машинах или когда разработка идет локально, а тестирование &#8211; на сервере хостера и т.п.), можно запустить его на выполнение через ssh следующим образом:<br />
<code class="codecolorer text default"><span class="text">&nbsp;ssh user@host 'perl' &lt; /путь/к локальному/скрпту.pl</span></code><br />
или для <a href="http://dimio.org/bash-born-again-shell-obolochka-komandnoj-stroki.html">шелла bash</a>:<br />
<code class="codecolorer text default"><span class="text">&nbsp;ssh user@host 'bash -s' &lt; /путь/к локальному/скрпту.sh</span></code></p>
<h4>Создание образа CD-диска</h4>
<p>Задача для меня тоже не слишком частая, поэтому с ходу решения не вспоминаются. Первое решение &#8211; банальное &#8211; использовать dd, указав на выход нужный файл, а на вход свой cd-rom, с которого образ снимается: <code class="codecolorer text default"><span class="text">dd -if=/dev/sr0 of=/tmp/my.iso</span></code>, CD должен быть отмонтирован; скопирует всё поблочно (т.е. если на диске реально записан 1 Мб данных, образ будет равен объёму всего диска).<br />
Второе &#8211; использовать genisoimage, в Debian идёт из коробки, не факт, что так же везде. Создаёт &#8220;правильный&#8221; образ, диск должен быть примонтирован, на вход подавать точку монтирования диска: <code class="codecolorer text default"><span class="text">genisoimage -V 'disk label' -r -o /tmp/my.iso /mnt/cdrom</span></code></p>
<h4>Прогресс работы dd</h4>
<p>В дополнение к предыдущему или к <a href="http://dimio.org/nizkourovnevoe-formatirovanie-flash-pod-linux.html">форматированию флешки под Linux</a>. При использовании dd на больших объемах (напр. когда флешку 16 Гб форматируешь) бывает полезно. Нужно передать сигнал <em>USR1</em>: <code class="codecolorer text default"><span class="text">kill -USR1 dd_PID</span></code> &#8211; выведет прогресс записи и ее скорость. Если процесс dd один или не важно узнать прогресс конкретного, можно поступить проще: <code class="codecolorer text default"><span class="text">killall -USR1 dd</span></code>.</p>

	Метки:<a href="http://dimio.org/tag/how-to" title="how-to" rel="tag">how-to</a>, <a href="http://dimio.org/tag/linux" title="linux" rel="tag">linux</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/zn845zdVFiIrYuj_fWrlzdhqywo/0/da"><img src="http://feedads.g.doubleclick.net/~a/zn845zdVFiIrYuj_fWrlzdhqywo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/zn845zdVFiIrYuj_fWrlzdhqywo/1/da"><img src="http://feedads.g.doubleclick.net/~a/zn845zdVFiIrYuj_fWrlzdhqywo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/LP64nLid50I" height="1" width="1"/>]]></content:encoded><description>Накопилось несколько простых рецептов работы в Linux, которые в силу низкой частоты использования наизусть не помню. Пока лежали в черновиках &amp;#8211; некоторые по несколько раз успел перечитать, чтобы вспомнить, как и что делать &amp;#8211; польза налицо. Порядок вывода аргументов в xargs Как-то раз столкнулся с проблемой порядка подстановки аргументов в xargs. И man вроде почитал, [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/pamyatki-po-rabote-v-linux.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><feedburner:origLink>http://dimio.org/pamyatki-po-rabote-v-linux.html</feedburner:origLink></item><item><title>О пользе тестирования, блин!</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/TypejK5EMXc/o-polze-testirovaniya-blin.html</link><category>Кодинг</category><category>Новости</category><category>perl</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Wed, 09 Nov 2011 05:34:09 PST</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=556</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Напоролся на неприятную ошибку в модуле Time::Local (по-моему даже в <a href="http://dimio.org/biblioteka">кукбуке</a> описан) &#8211; похоже, что номер месяца подставлялся в индкес элемента массива напрямую, вопреки тому, что нумерация начинается с нулевого элемента и вместо января выдавалось количество дне для февраля и т.д. Соответственно какие-то месяца обрабатывались корректно, а какие-то &#8211; вызывали ошибку вида <em>Day &#8217;31&#8242; out of range 1..30</em>, которую в силу редкости трудно было обнаружить.</p>
<p>А ведь что мешало автору проcтейшим образом сгенерировать тестовый календарь и прогнать на нём модуль? Ладно бы &#8211; &#8220;для себя&#8221; делал, так модуль на CPAN лежит, в литературе упомянут &#8211; и такие детские баги. Причём <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGAARWAhXDENAWxdTCV5NRwwXBAdWQBwBCggJ/">сообщение об ошибке на форуме CPAN</a></noindex> было еще для версии 1.13, к версии 1.20 ничего не изменилось &#8211; так же перебирает с первого элемента&#8230;</p>

	Метки:<a href="http://dimio.org/tag/perl" title="perl" rel="tag">perl</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/iet1OSa8DFlDBIwSJsqewn_WFbk/0/da"><img src="http://feedads.g.doubleclick.net/~a/iet1OSa8DFlDBIwSJsqewn_WFbk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/iet1OSa8DFlDBIwSJsqewn_WFbk/1/da"><img src="http://feedads.g.doubleclick.net/~a/iet1OSa8DFlDBIwSJsqewn_WFbk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/TypejK5EMXc" height="1" width="1"/>]]></content:encoded><description>Напоролся на неприятную ошибку в модуле Time::Local (по-моему даже в кукбуке описан) &amp;#8211; похоже, что номер месяца подставлялся в индкес элемента массива напрямую, вопреки тому, что нумерация начинается с нулевого элемента и вместо января выдавалось количество дне для февраля и т.д. Соответственно какие-то месяца обрабатывались корректно, а какие-то &amp;#8211; вызывали ошибку вида Day &amp;#8217;31&amp;#8242; out [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/o-polze-testirovaniya-blin.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://dimio.org/o-polze-testirovaniya-blin.html</feedburner:origLink></item><item><title>Низкоуровневое форматирование flash под Linux</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/eYdt565uWmM/nizkourovnevoe-formatirovanie-flash-pod-linux.html</link><category>Linux</category><category>Полезности</category><category>how-to</category><category>памятка</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Tue, 01 Nov 2011 09:19:38 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=546</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Несколько раз приходилось форматировать флешки, а поскольку происходит это довольно редко &#8211; вынужден был лезть в гугл. Конспективная памятка по форматированию флешек под Linux:</p>
<h4>Проверить подключение flash</h4>
<p><code class="codecolorer text default"><span class="text">fdisk -l</span></code><br />
Выведет список подключенных дисков и их разделов. Обычно флешка &#8211; <em>/dev/sdb</em></p>
<h4>Проверить, примонтирована ли флешка</h4>
<p><code class="codecolorer text default"><span class="text">df -h</span></code><br />
Если флешка примонтирована &#8211; покажет это и точку монтирования. Перед форматированием &#8211; отмонтировать: <code class="codecolorer text default"><span class="text">umount /dev/sdb</span></code></p>
<h4>Проверить защиту от записи и геометрию</h4>
<p>При желании &#8211; можно проверить защиту от записи и геометрию (защита от записи в линуксе не важна):<br />
<code class="codecolorer text default"><span class="text">hdparm /dev/sdb</span></code></p>
<h4>Если нужно низкоуровневое форматирование &#8211; забить нулями</h4>
<p><code class="codecolorer text default"><span class="text">dd if=/dev/zero of=/dev/sdb</span></code><br />
В выводе покажет объем флешки (должен соответствовать заявленному), скорость и время записи. Также покажет, сколько было записано байт на флешку, что полезно при проверке флешки на физические ошибки (см. ниже).</p>
<h4>Проверить на физические ошибки</h4>
<p><code class="codecolorer text default"><span class="text">head -c N /dev/sdb | md5sum</span></code><br />
<code class="codecolorer text default"><span class="text">head -c N /dev/zero | md5sum</span></code><br />
где N равно числу байт, записанных на флешку при помощи <strong>dd</strong>. Если контрольные суммы не совпадают &#8211; флешка &#8220;битая&#8221; или были ошибки записи (в реальности сталкивался с форматированием microSD через плохой кард-ридер &#8211; даже когда не выскакивали ошибки ввода-вывода при операциях &#8211; контрольные суммы не совпадали, с заменой кард-ридера проблема ушла).<br />
<em>Пример:</em></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">dimio@ibm $ dd if=/dev/zero of=/dev/sdb<br />
dd: запись в «/dev/sdb»: На устройстве кончилось место<br />
3932161+0 записей считано<br />
3932160+0 записей написано<br />
&nbsp;скопировано 2013265920 байт (2,0 GB), 1010,99 c, 2,0 MB/c<br />
dimio@ibm $ head -c 2013265920 /dev/zero | md5sum<br />
5d0fd6273bed1c500c6fc22d86a59630 &nbsp;-<br />
dimio@ibm $ head -c 2013265920 /dev/sdb | md5sum<br />
5d0fd6273bed1c500c6fc22d86a59630 &nbsp;-</div></div>
<p><em>Ну и для полного счастья при желании:</em></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">dimio@ibm $ perl -we '<br />
&gt; print &quot;OK&quot; if q{5d0fd6273bed1c500c6fc22d86a59630} <br />
&gt; eq q{5d0fd6273bed1c500c6fc22d86a59630};'<br />
OK</div></div>
<h4>Разбиваем на разделы при помощи fdisk</h4>
<p><code class="codecolorer text default"><span class="text">fdisk /dev/sdb</span></code><br />
Опции: <strong>m</strong> &#8211; справка, <strong>d</strong> &#8211; удалить раздел, <strong>p</strong> &#8211; просмотреть список разделов, <strong>n</strong> &#8211; создать раздел, <strong>t</strong> &#8211; поменять тип раздела, <strong>w</strong> &#8211; сохранить изменения.</p>
<h4>Последний шаг &#8211; создать файловые системы на разделах флешки</h4>
<p><code class="codecolorer text default"><span class="text">mkfs.ext{2,3,4} /dev/sdbX</span></code><br />
где X &#8211; порядковый номер раздела, на котором нужно создать файловую систему.<br />
Также полезны: <strong>mkfs.msdos</strong>, <strong>mkfs.vfat</strong>.</p>
<p><a href="http://moskva.sravni.com/" ><img src="http://dimio.org/wp-content/uploads/2011/11/create_usb_flash_on_linux.jpg" alt="каталог интернет магазинов Москвы" title="Сравнение цен на электронику, бытовую технику, сайт sravni.com" width="150" height="126" class="aligncenter size-full wp-image-547" /></a></p>

	Метки:<a href="http://dimio.org/tag/how-to" title="how-to" rel="tag">how-to</a>, <a href="http://dimio.org/tag/pamyatka" title="памятка" rel="tag">памятка</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/_byOTNheeuC09krlhvd3j2G_1JM/0/da"><img src="http://feedads.g.doubleclick.net/~a/_byOTNheeuC09krlhvd3j2G_1JM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_byOTNheeuC09krlhvd3j2G_1JM/1/da"><img src="http://feedads.g.doubleclick.net/~a/_byOTNheeuC09krlhvd3j2G_1JM/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/eYdt565uWmM" height="1" width="1"/>]]></content:encoded><description>Несколько раз приходилось форматировать флешки, а поскольку происходит это довольно редко &amp;#8211; вынужден был лезть в гугл. Конспективная памятка по форматированию флешек под Linux: Проверить подключение flash fdisk -l Выведет список подключенных дисков и их разделов. Обычно флешка &amp;#8211; /dev/sdb Проверить, примонтирована ли флешка df -h Если флешка примонтирована &amp;#8211; покажет это и точку монтирования. [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/nizkourovnevoe-formatirovanie-flash-pod-linux.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://dimio.org/nizkourovnevoe-formatirovanie-flash-pod-linux.html</feedburner:origLink></item><item><title>Халявная реклама на twite.ru</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/hBlZ5q_IHCo/xalyavnaya-reklama-na-twite-ru.html</link><category>seo</category><category>Блоггинг</category><category>twite</category><category>заработок</category><category>программинг</category><category>реклама</category><category>скрипт</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Thu, 20 Oct 2011 03:01:40 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=503</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhFFFhBUxdCExxdQQEDBBRAUl8OAAEPVFQ=/"><img src="http://dimio.org/wp-content/uploads/2011/10/dengitwitter-200x200-150x150.jpg" alt="Рекалама на twite.ru бесплатно!" title="Рекалама на twite.ru бесплатно!" width="150" height="150" class="alignleft size-thumbnail wp-image-525" /></a></noindex></p>
<p>Про сервис рекламы (и набора фолловеров) в твиттере, ЖЖ и фейсбуке &#8211; <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhFFFhBUxdCExxdQQEDBBRAUl8OAAEPVFQ=/">twite.ru</a></noindex> &#8211; знают, полагаю, уже многие. Немало встречается заметок о том, как заработать в твайте (заработок в твайте сравни <a href="http://dimio.org/zarabatyvaj-s-gogetlinks-publikaciya-ssylok-zametok-i-kartinok-za-dengi.html">заработку в GoGetLinks</a>, только вместо ссылок &#8211; перепосты и ретвиты). Проблема только в одном &#8211; там присутствует постмодерация и в момент вывода средств &#8220;наружу&#8221; администрация проверит ваш блоггерский аккаунт. Значит, придётся или раскручивать аккаунт под рекламу, или портить рекламой свой личный блог. Ни того, ни другого мне делать не захотелось.</p>
<p>Существует еще одна возможность распорядиться своими средствами на twite.ru &#8211; их можно перекинуть на свой &#8220;аккаунт рекламодателя&#8221;, при этом не нужно проходить проверку модераторами, средства остаются в системе. Вывод простой &#8211; можно зарабатывать средства на рекламу своего сайта при помощи ботов. И если твиттер-аккаунт для добавления в систему в качестве рекламной площадки нужно минимально раскрутить, то ЖЖ добавляется элементарно и без всяких проверок (хотя для раскрученного ЖЖ-аккаунта естественно выдаются более привлекательные рекламные предложения).<br />
<span id="more-503"></span></p>
<h4>Итак, способ получения халявной рекламы через twite.ru прост:</h4>
<ul>
<li>регистрируем новый аккаунт в ЖЖ, при желании &#8211; <a href="http://dimio.org/lj-mass-add-remove-friends">набираем для него друзей</a>;</li>
<li>регистрируемся на <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhFFFhBUxdCExxdQQEDBBRAUl8OAAEPVFQ=/">twite.ru</a></noindex> (просто введя имя своего ЖЖ-аккаунта и подтвердив авторизацию по OpenID);</li>
<li>устанавливаем плагин iMacros (есть версии под Firefox, Chrome, InternetExplorer, по заверениям авторов плагина, макросы полностью переносимы между поддерживаемыми браузерами);</li>
<li>создаём новый макрос, открываем его на редактирование и копируем туда текст приведенного ниже макроса для автоматического репоста записей из twite.ru в ЖЖ (кстати создание его заняло всего 20 минут и пока он делает своё дело &#8211; можно подумать на тему скриптового бота для твайта);</li>
<li>в макрос нужно вписать имя и пароль от своего рекламного ЖЖ-аккаунта (вместо <em>lj_username</em> и <em>lj_password</em> соответственно), после логина в твайте из ЖЖ лучше выйти &#8211; всё равно через некоторое время выполнится автовыход, а так макрос каждый раз публикует репост без проблем с логином;</li>
<li>находясь на странице с рекламными предложениями twite.ru (советую открыть новое окно браузера и оставить в нём только одну вкладку) &#8211; делаем тестовый запуск макроса, настраиваем по вкусу величину пауз между действиями, проверяем работоспособность;</li>
<li>если всё в порядке &#8211; запускаем цикличное выполнение макроса нужное число раз.</li>
</ul>
<p>Ничего сложного, под Firefox у меня работает без проблем и в Linux, и в Windows, если покопаться в справке на сайте iMacros &#8211; можно найти ключи для запуска из <a href="http://dimio.org/bash-born-again-shell-obolochka-komandnoj-stroki.html">командной строки</a> (или через планировщик заданий Windows). За выходные на нулевом бросовом ЖЖ-аккаунте макрос у меня набивает до 50 рублей, на которые можно сделать несколько неплохих ретвитов нужных материалов. </p>
<h4>А вот и сам текст макроса для автоматического заработка на twite.ru:</h4>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;height:400px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">VERSION BUILD=7400919 RECORDER=FX<br />
SET !ERRORIGNORE YES<br />
'<br />
TAB T=1<br />
URL GOTO=http://www.twite.ru/blogger/livejournal<br />
TAG POS=1 TYPE=A ATTR=TXT:репост<br />
'<br />
TAB T=2<br />
'WAIT SECONDS=#DOWNLOADCOMPLETE#<br />
WAIT SECONDS=5<br />
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:updateForm ATTR=ID:altlogin_username CONTENT=lj-username<br />
SET !ENCRYPTION NO<br />
TAG POS=1 TYPE=INPUT:PASSWORD FORM=NAME:updateForm ATTR=ID:altlogin_password CONTENT=lj-password<br />
TAG POS=1 TYPE=INPUT:SUBMIT FORM=NAME:updateForm ATTR=ID:formsubmit<br />
WAIT SECONDS=5<br />
TAB CLOSE<br />
'<br />
TAB T=1<br />
WAIT SECONDS=35<br />
TAG POS=2 TYPE=SPAN ATTR=TXT:Нажмите&lt;SP&gt;сюда&lt;SP&gt;после&lt;SP&gt;написания&lt;SP&gt;поста.<br />
WAIT SECONDS=15</div></div>
<p><strong>UPD</strong></p>
<h4>И скрипт для автоматического ретвита на twite.ru:</h4>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">SET !ERRORIGNORE YES<br />
TAB T=1<br />
TAG POS=1 TYPE=SPAN ATTR=TXT:Обновить<br />
WAIT SECONDS=3<br />
TAG POS=1 TYPE=IMG ATTR=SRC:/images/icons/retweet.png&amp;&amp;ALT:Разместить&lt;SP&gt;рекламный&lt;SP&gt;ретвит<br />
TAG POS=1 TYPE=IMG ATTR=SRC:/images/icons/ok.png&amp;&amp;ALT:Разместить&lt;SP&gt;рекламный&lt;SP&gt;твит<br />
<br />
WAIT SECONDS=1<br />
TAB T=2<br />
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:update-form ATTR=VALUE:Твитнуть<br />
WAIT SECONDS=3<br />
TAB T=1<br />
WAIT SECONDS=10<br />
TAG POS=1 TYPE=SPAN ATTR=TXT:сюда<br />
WAIT SECONDS=5</div></div>

	Метки:<a href="http://dimio.org/tag/seo" title="seo" rel="tag">seo</a>, <a href="http://dimio.org/tag/twite" title="twite" rel="tag">twite</a>, <a href="http://dimio.org/tag/zarabotok" title="заработок" rel="tag">заработок</a>, <a href="http://dimio.org/tag/programmirovanie" title="программинг" rel="tag">программинг</a>, <a href="http://dimio.org/tag/reklama" title="реклама" rel="tag">реклама</a>, <a href="http://dimio.org/tag/skript" title="скрипт" rel="tag">скрипт</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/J9ZPLRJN9dFzZvR35_jp0feHdAU/0/da"><img src="http://feedads.g.doubleclick.net/~a/J9ZPLRJN9dFzZvR35_jp0feHdAU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/J9ZPLRJN9dFzZvR35_jp0feHdAU/1/da"><img src="http://feedads.g.doubleclick.net/~a/J9ZPLRJN9dFzZvR35_jp0feHdAU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/hBlZ5q_IHCo" height="1" width="1"/>]]></content:encoded><description>Про сервис рекламы (и набора фолловеров) в твиттере, ЖЖ и фейсбуке &amp;#8211; twite.ru &amp;#8211; знают, полагаю, уже многие. Немало встречается заметок о том, как заработать в твайте (заработок в твайте сравни заработку в GoGetLinks, только вместо ссылок &amp;#8211; перепосты и ретвиты). Проблема только в одном &amp;#8211; там присутствует постмодерация и в момент вывода средств &amp;#8220;наружу&amp;#8221; [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/xalyavnaya-reklama-na-twite-ru.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">9</slash:comments><feedburner:origLink>http://dimio.org/xalyavnaya-reklama-na-twite-ru.html</feedburner:origLink></item><item><title>Openbox+sbxkb: переключение раскладок клавиатуры</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/TgQjTfiBXjE/openboxsbxkb-pereklyuchenie-raskladok-klaviatury.html</link><category>Linux</category><category>debian</category><category>how-to</category><category>linux</category><category>openbox</category><category>sbxkb</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Wed, 12 Oct 2011 03:45:16 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=514</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://dimio.org/wp-content/uploads/2011/10/openbox-wm-logo.png"><img src="http://dimio.org/wp-content/uploads/2011/10/openbox-wm-logo-150x150.png" alt="Openbox WM logo" title="Openbox - лекговесный Window Manager" width="150" height="150" class="alignleft size-thumbnail wp-image-515" /></a></p>
<p>Cлегка подустав от ставших довольно заметными тормозов <em>Gnome</em> с <em>Metacity</em> и <em>Nautilus</em> в компании (ноут у меня довольно старый по современным меркам &#8211; <a href="http://dimio.org/kak-ya-xotel-menyat-noutbuk.html">IBM ThinkPad T40</a> с Pentium M 1,5 ГГц и 1 Гб ОЗУ на борту), решил попробовать Openbox. Создал тестового пользователя, прописал ему Openbox в качестве WM, немного настроил, попользовался час и перевёл основную учётку на него.</p>
<p>Разница в скорости отклика по субъективным ощущениям (что впрочем и важно в данном случае) оказалась просто колоссальной &#8211; эмулятор терминала (<a href="http://dimio.org/nastrojka-rxvt-cherez-xdefaults.html"><strong>rxvt</strong></a>) открывается в пределах секунды, против 7-10 сек. в гноме. Окна сворачиваются-разворачиваются также в пределах секунды, в гноме Firefox с десятком открытых вкладок мог разворачиваться из панели 3-5 секунд, при этом постоянно треща HDD, который у меня тоже не казённый. В Openbox же индикатор обращения к жесткому диску срабатывает довольно редко (вообще стало казаться, что гном с его &#8220;реестром&#8221; всё ближе к windows &#8211; уже и тормоза накапливать за время эксплуатации научился).</p>
<p>Даже Google Chrome по ощущениям из-под Openbox заработал быстрее (и стал быстрее Firefox, чего не было под Gnome), хотя может это уже самообман на волне общей эйфории от легковесности и скорости WM.<br />
<span id="more-514"></span></p>
<p>В общем в процессе настройки Openbox встал вопрос о переключателе раскладок клавиатуры. Можно было использовать гномовский, но хотелось нативного решения. По итогам изучения интернетов в качестве такового был признан <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBAOTBRSBldaRF5VSF0HR0sVEwlYVlBHQR9LEAQcU1pPTAdQClQQHg==/"><strong>sbxkb</strong></a></noindex> &#8211; простая маленькая переключалка-индикатор, умеющая запоминать раскладки для окон и поддерживающая отображение флагов-значков для раскладок. Основан <em>sbxkb</em> на библиотеке GTK2 и только она нужна ему для работы.</p>
<p>Минусом переключалки оказалось ее отсутствие в репозиториях дебиана, а на пару найденных deb-пакетов вели мёртвые ссылки (кроме того, по обеим <em>sbxkb</em> был младше текущей версии 0.7.6). В общем-то собирается из исходников он не долго и не сложно, но всё равно надо ставить кучку различных *-dev библиотек и утилит. Поэтому я собрал .deb-пакет с последней на данный момент версией: <a href="http://dimio.org/wp-content/uploads/soft/sbxkb_0.7.6-1_i386.deb" title="Скачать .deb пакет sbxkb_0.7.6"><strong>sbxkb_0.7.6-1_i386.deb</strong></a>. Проверил на 3 системах (Debian, Ubuntu) &#8211; везде установка прошла без проблем (<code class="codecolorer bash default"><span class="bash"><span style="color: #c20cb9; font-weight: bold;">dpkg</span> <span style="color: #660033;">-i</span> .<span style="color: #000000; font-weight: bold;">/</span>sbxkb_0.7.6-<span style="color: #000000;">1</span>_i386.deb</span></code>).</p>
<p>После установки для автоматической загрузки достаточно в <code class="codecolorer text default"><span class="text">~/.config/openbox/autostart.sh</span></code> добавить строку <code class="codecolorer bash default"><span class="bash"><span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">3</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>sbxkb <span style="color: #000000; font-weight: bold;">&amp;</span></span></code>.<br />
Чтобы задать горячие клавиши для переключения раскладок, можно использовать след. команду:<br />
<code class="codecolorer bash default"><span class="bash">setxkbmap <span style="color: #660033;">-model</span> pc104 <span style="color: #660033;">-layout</span> us,ru <span style="color: #660033;">-variant</span> &nbsp;,winkeys <span style="color: #660033;">-option</span> grp:alt_shift_toggle <span style="color: #000000; font-weight: bold;">&amp;</span> sbxkb</span></code><br />
Опции вполне прозрачны, а более никаких шагов для настройки <em>sbxkb</em> предпринимать не нужно!</p>

	Метки:<a href="http://dimio.org/tag/debian" title="debian" rel="tag">debian</a>, <a href="http://dimio.org/tag/how-to" title="how-to" rel="tag">how-to</a>, <a href="http://dimio.org/tag/linux" title="linux" rel="tag">linux</a>, <a href="http://dimio.org/tag/openbox" title="openbox" rel="tag">openbox</a>, <a href="http://dimio.org/tag/sbxkb" title="sbxkb" rel="tag">sbxkb</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/PYRecDjX38NodC8XQ3xKvrVzk3g/0/da"><img src="http://feedads.g.doubleclick.net/~a/PYRecDjX38NodC8XQ3xKvrVzk3g/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PYRecDjX38NodC8XQ3xKvrVzk3g/1/da"><img src="http://feedads.g.doubleclick.net/~a/PYRecDjX38NodC8XQ3xKvrVzk3g/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/TgQjTfiBXjE" height="1" width="1"/>]]></content:encoded><description>Cлегка подустав от ставших довольно заметными тормозов Gnome с Metacity и Nautilus в компании (ноут у меня довольно старый по современным меркам &amp;#8211; IBM ThinkPad T40 с Pentium M 1,5 ГГц и 1 Гб ОЗУ на борту), решил попробовать Openbox. Создал тестового пользователя, прописал ему Openbox в качестве WM, немного настроил, попользовался час и перевёл [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/openboxsbxkb-pereklyuchenie-raskladok-klaviatury.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">3</slash:comments><feedburner:origLink>http://dimio.org/openboxsbxkb-pereklyuchenie-raskladok-klaviatury.html</feedburner:origLink></item><item><title>Ответы@Mail.Ru – мечта спамера</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/Xmf_vPy4R4A/otvetymail-ru-mechta-spamera.html</link><category>Интернет</category><category>Новости</category><category>mail.ru</category><category>парсер</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Wed, 28 Sep 2011 04:14:30 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=502</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>С удивлением заметил, что e-mail адреса пользователей сервиса &#8220;ответы&#8221; на mail.ru хранятся в коде страниц в открытом виде, как на заре интернетов прямо. Никаких попыток скрыть адреса &#8211; даже странно в наше время. Можно легко и непринуждённо сграбить базу email для дальнейшего брутфорса паролей к ним или например спама (поскольку на сервисе есть категории &#8211; вероятно и целевую аудиторию можно прикинуть по ним).</p>
<p>В общем всё делается предельно примитивно, в старом добром шелле, без разных модных многопоточных грабберов из облака (для брутфорса кстати облако наверное очень интересным может быть):</p>
<div class="codecolorer-container bash default" style="border:1px solid #9F9F9F;width:100%;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;<span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-q</span> <span style="color: #660033;">-O</span> - http:<span style="color: #000000; font-weight: bold;">//</span>otvet.mail.ru<span style="color: #000000; font-weight: bold;">/</span>open<span style="color: #000000; font-weight: bold;">/</span>?<span style="color: #007800;">pg</span>=<span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #000000;">1</span>..<span style="color: #000000;">10</span><span style="color: #7a0874; font-weight: bold;">&#125;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-ioE</span> <span style="color: #ff0000;">'\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #660033;">-ui</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> .<span style="color: #000000; font-weight: bold;">/</span>otveti_email.txt</div></div>
<p>Как видно из примера &#8211; я сграбил для проверки первые 10 страниц открытых ответов получив в итоге 197 уникальных адресов. В принципе для скорости и удобства можно каждую категорию в отдельном процессе выкачивать, с сортировкой результатов уже после загрузки, непосредственно из файла.</p>
<p>Напоследок <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhDBlZAWlhCS1YaQxYAEhVbXF1AHFlWAgpKVFhWCg0XDkUOXQ==/">ссылка</a></noindex> для тюнинга регулярки под grep по поиску email-адресов.</p>
<p><strong>UDP</strong>: Под катом для примера выложил простой скрипт на <a href="http://dimio.org/bash-born-again-shell-obolochka-komandnoj-stroki.html">bash</a>, который парсит некоторые страницы раздела &#8220;Компьютеры и интернет&#8221; с Ответы@Mail.ru и раскладывает полученные e-mail адреса по категориям. Его несложно дополнить всё теми же штатными средствами оболочки чтобы автоматически обходить дерево разделов и парсить e-mail адреса из всех категорий.</p>
<p><span id="more-502"></span></p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;height:400px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<span style="color: #666666; font-style: italic;"># v.0.22</span><br />
<span style="color: #666666; font-style: italic;"># Простой скрипт парсинга e-mail адресов с сервиса Ответы@Mail.ru</span><br />
<span style="color: #666666; font-style: italic;"># с разбиением по тематическим категориям</span><br />
<span style="color: #666666; font-style: italic;"># dimio (http://dimio.org), 2011</span><br />
<br />
<span style="color: #666666; font-style: italic;">#Путь к каталогу, в котором будут храниться адреса</span><br />
<span style="color: #007800;">PWD</span>=<span style="color: #ff0000;">'.'</span><br />
<span style="color: #666666; font-style: italic;">#Сколько страниц в каждом разделе парсить (max = 50)</span><br />
<span style="color: #007800;">PG_LIM</span>=<span style="color: #ff0000;">&quot;$1&quot;</span><br />
<br />
<span style="color: #666666; font-style: italic;">#Пример:</span><br />
<span style="color: #666666; font-style: italic;">#Раздел 'it' - компьютеры и интернет. Названия категорий берутся из соответствующих ссылок сервиса ответов</span><br />
<span style="color: #000000; font-weight: bold;">for</span> SECTION <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #ff0000;">'hardware'</span> <span style="color: #ff0000;">'internet'</span> <span style="color: #ff0000;">'programming'</span> <span style="color: #ff0000;">'software'</span> <span style="color: #ff0000;">'pc_other'</span><br />
<span style="color: #666666; font-style: italic;">#for SECTION in &quot;$@&quot;; do</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PWD</span>/<span style="color: #007800;">$SECTION</span>&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">then</span> <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PWD</span>/<span style="color: #007800;">$SECTION</span>&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Create directory: <span style="color: #007800;">$PWD</span>/<span style="color: #007800;">$SECTION</span>&quot;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Parsing <span style="color: #007800;">$SECTION</span>&quot;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">PAGE</span>=<span style="color: #000000;">1</span>; PAGE <span style="color: #000000; font-weight: bold;">&lt;</span>= PG_LIM; PAGE++<span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>; <span style="color: #000000; font-weight: bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-q</span> <span style="color: #660033;">-O</span> - <span style="color: #ff0000;">&quot;http://otvet.mail.ru/<span style="color: #007800;">$SECTION</span>/?pg=<span style="color: #007800;">$PAGE</span>&quot;</span> <span style="color: #000000; font-weight: bold;">|</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-ioE</span> <span style="color: #ff0000;">'\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b'</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PWD</span>/<span style="color: #007800;">$SECTION</span>/emails.txt&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'.'</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">done</span>;<br />
<br />
&nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #660033;">-ui</span> <span style="color: #660033;">-o</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PWD</span>/<span style="color: #007800;">$SECTION</span>/emails.txt&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PWD</span>/<span style="color: #007800;">$SECTION</span>/emails.txt&quot;</span><br />
&nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PWD</span>/<span style="color: #007800;">$SECTION</span>/emails.txt&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PWD</span>/summary_emails.txt&quot;</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<br />
<span style="color: #007800;">$SECTION</span> (<span style="color: #007800;">$PG_LIM</span> pages): parsing done&quot;</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'Unique e-mails: '</span> <span style="color: #000000; font-weight: bold;">`/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">wc</span> <span style="color: #660033;">-l</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PWD</span>/<span style="color: #007800;">$SECTION</span>/emails.txt&quot;</span><span style="color: #000000; font-weight: bold;">`</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span><br />
<span style="color: #000000; font-weight: bold;">done</span>;<br />
<br />
<span style="color: #666666; font-style: italic;"># Для повторных запусков (если не было вручную уничтожено созданное</span><br />
<span style="color: #666666; font-style: italic;">#дерево каталогов с адресами) - сохранять только уникальные вновь добавленные адреса</span><br />
<span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #660033;">-ui</span> <span style="color: #660033;">-o</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PWD</span>/summary_emails.txt&quot;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PWD</span>/summary_emails.txt&quot;</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'Total unique e-mails: '</span> <span style="color: #000000; font-weight: bold;">`/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">wc</span> <span style="color: #660033;">-l</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PWD</span>/summary_emails.txt&quot;</span><span style="color: #000000; font-weight: bold;">`</span></div></div>
<p>P.S.:</p>
<pre>
  .-´¯¯¯`-.
,´         `.
|            \
|             \
\           _  \
,\  _    ,´¯,/¯)\
( q \ \,´ ,´ ,´¯)
 `._,)     -´,-´)
   \/         ,´/
    )        / /
   /       ,´-´
</pre>

	Метки:<a href="http://dimio.org/tag/mail-ru" title="mail.ru" rel="tag">mail.ru</a>, <a href="http://dimio.org/tag/internet" title="Интернет" rel="tag">Интернет</a>, <a href="http://dimio.org/tag/parser" title="парсер" rel="tag">парсер</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/xvh0zsrov7qlWNMQqvphJENwqc8/0/da"><img src="http://feedads.g.doubleclick.net/~a/xvh0zsrov7qlWNMQqvphJENwqc8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/xvh0zsrov7qlWNMQqvphJENwqc8/1/da"><img src="http://feedads.g.doubleclick.net/~a/xvh0zsrov7qlWNMQqvphJENwqc8/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/Xmf_vPy4R4A" height="1" width="1"/>]]></content:encoded><description>С удивлением заметил, что e-mail адреса пользователей сервиса &amp;#8220;ответы&amp;#8221; на mail.ru хранятся в коде страниц в открытом виде, как на заре интернетов прямо. Никаких попыток скрыть адреса &amp;#8211; даже странно в наше время. Можно легко и непринуждённо сграбить базу email для дальнейшего брутфорса паролей к ним или например спама (поскольку на сервисе есть категории &amp;#8211; [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/otvetymail-ru-mechta-spamera.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">4</slash:comments><feedburner:origLink>http://dimio.org/otvetymail-ru-mechta-spamera.html</feedburner:origLink></item><item><title>Поиск по мобильным проложениям от Яндекса (Андройд и Айфон)</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/391nw0DVh3o/poisk-po-mobilnym-prolozheniyam-ot-yandeksa-androjd-i-ajfon.html</link><category>Гаджеты</category><category>Интернет</category><category>android</category><category>yandex</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Thu, 15 Sep 2011 22:28:13 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=486</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://www.towerdefence.ru/game/23/vector-tower-defence-2.html" ><img src="http://dimio.org/wp-content/uploads/2011/09/yandex-mobile-apps-search_screen4.png" alt="master of defence" title="master of defence" width="498" height="374" class="aligncenter size-full wp-image-492" /></a></p>
<p>Яндекс порадовал недовно (а именно &#8211; 13 сентября с.г.) запустив <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGAIRSRUfGlBbUlxISEEX/">сервис поиска по мобильным приложениям</a></noindex> (для <a href="http://dimio.org/samsung-galaxy-spica-kak-ya-obzavyolsya-android-kommunikatorom.html">андройд</a> маркета и аппсторе под айфон &#8211; <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBoAVwJUGx9ZX09VDFwXQQoEDUhRXF4cAwYNVlJRH11DDg0=/"><strong>Как найти «ну-вот-это-как-его-там» мобильное приложение?</strong></a></noindex>). Попользовался &#8211; остался доволен, действительно удобно.</p>
<p>На маркете тематического поиска как такового нет &#8211; можно только ходить по категориям, листая всё подряд. Поэтому чтобы найти какую-то тематическую софтину я шел на форумы 4pda и искал там, затем вбивал название или баркод в телефон и только тогда получал искомое.</p>
<p>Сервис поиска использует HTML5 и поэтому заработает не во всех браузерах (в Opera Mini например работать отказался, только в штатном браузере андройда). Модель телефона определяет автоматически, что удобно. Для выбранного приложения будут показаны описание, отзывы и скриншоты с маркета. После выбора установки перебрасывает на маркет и весь процесс идёт как обычно, затем следует возврат к окну поиска.</p>
<p>Не имея айфона &#8211; не могу сказать, насколько оправдан такой поиск для него. Под андройд сейчас он оказался для меня достаточно удобен, но вот сколь долго подобный функционал не будет реализован средствами маркета &#8211; вопрос.<br />
<a href="http://dimio.org/wp-content/uploads/2011/09/yandex-mobile-apps-search.gif"><img src="http://dimio.org/wp-content/uploads/2011/09/yandex-mobile-apps-search.gif" alt="Поиск по мобильным приложениям для андройд и айфон" title="yandex-mobile-apps-search" width="124" height="124" class="aligncenter size-full wp-image-487" /></a></p>

	Метки:<a href="http://dimio.org/tag/android" title="android" rel="tag">android</a>, <a href="http://dimio.org/tag/yandex" title="yandex" rel="tag">yandex</a>, <a href="http://dimio.org/tag/internet" title="Интернет" rel="tag">Интернет</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/Vvc41XIMhFPkvnhteYHh4JW9ZGo/0/da"><img src="http://feedads.g.doubleclick.net/~a/Vvc41XIMhFPkvnhteYHh4JW9ZGo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Vvc41XIMhFPkvnhteYHh4JW9ZGo/1/da"><img src="http://feedads.g.doubleclick.net/~a/Vvc41XIMhFPkvnhteYHh4JW9ZGo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/391nw0DVh3o" height="1" width="1"/>]]></content:encoded><description>Яндекс порадовал недовно (а именно &amp;#8211; 13 сентября с.г.) запустив сервис поиска по мобильным приложениям (для андройд маркета и аппсторе под айфон &amp;#8211; Как найти «ну-вот-это-как-его-там» мобильное приложение?). Попользовался &amp;#8211; остался доволен, действительно удобно. На маркете тематического поиска как такового нет &amp;#8211; можно только ходить по категориям, листая всё подряд. Поэтому чтобы найти какую-то тематическую [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/poisk-po-mobilnym-prolozheniyam-ot-yandeksa-androjd-i-ajfon.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://dimio.org/poisk-po-mobilnym-prolozheniyam-ot-yandeksa-androjd-i-ajfon.html</feedburner:origLink></item><item><title>Загрузка и восстановление прошивки dd-wrt через tftp</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/bgR1_rVg_hM/zagruzka-i-vosstanovlenie-proshivki-dd-wrt-cherez-tftp.html</link><category>Linux</category><category>Интернет</category><category>Технократия</category><category>ddwrt</category><category>dir620</category><category>how-to</category><category>tftp</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Sat, 03 Sep 2011 02:04:04 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=612</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>В <a href="http://dimio.org/d-link-dir-620-i-dd-wrt-byudzhetnyj-nas-i-torrentokachalka.html">заметке про установку прошивки dd-wrt на D-Link DIR-620</a> я упоминал о замене стандартного загрузчика роутера на загрузчик от Zyxel Keenetic, после чего становится возможной загрузка прошивок в DIR-620 при момощи tftp. Нужно это может быть во-первых для того, чтобы не пересобирать сторонние прошивки в формат, понятный загрузчику, доступному через веб-интерфейс; во-вторых &#8211; для восстановления прошивки роутера, если что-то пошло не так и веб-интерфейс недоступен.<br />
Поскольку процесс установки прошивки через tftp под Windows <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhVBlBRVQlUAx0QRksIAAhHUl8dWkRVCEYDRkdSEBVWFA==/">детально рассмотрен</a></noindex> на сайте deadc0de, а я в основном использую Linux-машины дома, опишу <strong>загрузку dd-wrt в DIR-620 через tftp именно для Linux</strong>.</p>
<ul>
<li>Для начала устанавливаем tftp-сервер &#8211; либо сам <strong>tftpd</strong> (работает в интерактивном режиме), либо <strong>atftp</strong>(клиент, можно использовать для проверки работы сервера)/<strong>atftpd</strong>(сервер), работающий в неинтерактивном режиме. atftp для загрузки прошивки удобней, чем tftp:</li>
<li>Выключаем питание роутера, соединяем кабелем порт <em>LAN1</em> роутера с выходом сетевой карты компьютера, в моем случае проводной интерфейс имеет имя <em>eth0</em> (при необходимости <a href="http://dimio.org/izmenit-imya-setevogo-interfejsa-v-debianubuntu-linux.html">изменить имя сетевого интерфейса в Linux</a> можно за пару минут);</li>
<li>Меняем IP-адрес и маску подсети на компьютере, с которого будет устанавливаться прошивка:
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ifconfig eth0 10.10.10.3 netmask 255.255.255.0</div></div>
<p>Команду нужно выполнять от суперпользователя, например при помощи <em>sudo</em>;</li>
<li>Набираем в консоли следующую команду:
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">atftpd --tftpd-timeout 60 --verbose --trace /путь/к_прошивке</div></div>
</li>
<li>Включаем питание роутера, 5 секунд держим нажатой кнопку Reset, на компьютере запускаем набранную выше команду, после этого отпускаем Reset &#8211; должна начаться загрузка прошивки.</li>
</ul>
<h3>Другие заметки по теме D-Link DIR-620 и dd-wrt</h3>
<ul>
<li><a href="http://dimio.org/d-link-dir-620-i-dd-wrt-byudzhetnyj-nas-i-torrentokachalka.html">D-Link DIR-620 и dd-wrt &#8211; бюджетный NAS и торрентокачалка</a></li>
<li><a href="http://dimio.org/d-link-dir-620-i-dd-wrt-podklyuchenie-flash-ustanovka-programm-nastrojka-nas.html">D-Link DIR-620 и dd-wrt &#8211; подключение flash, установка программ, настройка NAS</a></li>
<li><a href="http://dimio.org/torrent-klient-transmission-ustanovka-na-dir-620-pod-upravleniem-dd-wrt.html">Торрент-клиент transmission &#8211; установка на DIR-620 под управлением dd-wrt</a></li>
<li><a href="http://dimio.org/cborka-modulej-yadra-dlya-dd-wrt.html">Cборка модулей ядра для dd-wrt</a></li>
<li><a href="http://dimio.org/podklyuchenie-i-nastrojka-setevogo-usb-prinetra-k-dd-wrt-na-primere-dir-620-i-xerox-phaser-3140.html">Подключение и настройка сетевого USB-принетра к dd-wrt на примере DIR-620 и Xerox Phaser 3140</a></li>
</ul>

	Метки:<a href="http://dimio.org/tag/ddwrt" title="ddwrt" rel="tag">ddwrt</a>, <a href="http://dimio.org/tag/dir620" title="dir620" rel="tag">dir620</a>, <a href="http://dimio.org/tag/how-to" title="how-to" rel="tag">how-to</a>, <a href="http://dimio.org/tag/tftp" title="tftp" rel="tag">tftp</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/tIswpMZlKbSbC7ZiiQY0fYkphy0/0/da"><img src="http://feedads.g.doubleclick.net/~a/tIswpMZlKbSbC7ZiiQY0fYkphy0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/tIswpMZlKbSbC7ZiiQY0fYkphy0/1/da"><img src="http://feedads.g.doubleclick.net/~a/tIswpMZlKbSbC7ZiiQY0fYkphy0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/bgR1_rVg_hM" height="1" width="1"/>]]></content:encoded><description>В заметке про установку прошивки dd-wrt на D-Link DIR-620 я упоминал о замене стандартного загрузчика роутера на загрузчик от Zyxel Keenetic, после чего становится возможной загрузка прошивок в DIR-620 при момощи tftp. Нужно это может быть во-первых для того, чтобы не пересобирать сторонние прошивки в формат, понятный загрузчику, доступному через веб-интерфейс; во-вторых &amp;#8211; для восстановления [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/zagruzka-i-vosstanovlenie-proshivki-dd-wrt-cherez-tftp.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">5</slash:comments><feedburner:origLink>http://dimio.org/zagruzka-i-vosstanovlenie-proshivki-dd-wrt-cherez-tftp.html</feedburner:origLink></item><item><title>NO WAY</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/FAVPkwKW5zU/no-way.html</link><category>Гаджеты</category><category>Технократия</category><category>гаджет</category><category>жизненное</category><category>роисся вперде</category><category>самодел</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Mon, 20 Jun 2011 02:27:49 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=475</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://www.ecocomfort.ru/catalog/multisplit/" ><img src="http://dimio.org/wp-content/uploads/2011/06/0-011-82-superseal-connector-2.8mm-female-pin-housing-2-way-2448-p-150x150.jpg" alt="сплит система panasonic" title="сплит системы, мульти сплит системы" width="150" height="150" class="alignleft size-thumbnail wp-image-474" /></a></p>
<p>Не так давно рассказывал про свою переделку автомобильного компрессора Беркут R17 (приделывал к нему &#8220;дистанционное управление&#8221;, которое создатели по какой-то причине проигнорировали, хотя конструкция компрессора прямо-таки кричит о его необходимости &#8211; <a href="http://dimio.org/distancionnoe-upravlenie-dlya-avtomobilnogo-kompressora-berkut.html"><strong>Дистанционное управление для автомобильного компрессора Беркут</strong></a>). А вот в процессе дальнейшего монтажа компрессора непосредственно на автомобиль &#8211; столкнулся с мелкой, но весьма неприятной проблемой.</p>
<p>Помешало закончить начатое банальное отсутствие в продаже нужных силовых разъёмов &#8211; на две жилы, сечением до 2.5 квадратов каждая. К тому, что различный инструмент и снаряжение нужно покупать напрямую из-за границы, я уже давно привык &#8211; выходит намного дешевле и без мучений с обзвоном бесконечных &#8220;интернет-магазинов&#8221;, где нужная вещь присутствует в прайсе и отсутствует по факту. Но с электроникой до сей поры всё было довольно неплохо &#8211; хоть и дороже, чем у тех же китайцев напрямую, но если что-то срочно надо &#8211; можно пойти и купить. Как оказалось &#8211; далеко не всё. Такой банальной вещи, как разъемы, найти не удалось.</p>
<p>Во время бесплодных поисков посетил два авторынка, несколько магазинов автозапчастей и магазинов электроники. Нашел в интернете сайты фирм, якобы торгующих нужными разъемами &#8211; по электронной почте ответить не соизволили &#8211; звонить уже не хотелось. В итоге нужные разъемы были за 20 минут обнаружены за границей и ещё за 5 минут заказаны. Если бы я не пытался поддержать отечественного &#8220;производителя&#8221;-импотента, а сразу бы обратился к тем, кого мы давно &#8220;догнали и перегнали, оставив далеко позади&#8221; &#8211; давно бы получил нужное и закончил апгрейд машины. Морали не будет, всё вполне очевидно&#8230;</p>

	Метки:<a href="http://dimio.org/tag/gadzhet" title="гаджет" rel="tag">гаджет</a>, <a href="http://dimio.org/tag/zhiznennoe" title="жизненное" rel="tag">жизненное</a>, <a href="http://dimio.org/tag/roissya-vperde" title="роисся вперде" rel="tag">роисся вперде</a>, <a href="http://dimio.org/tag/samodel" title="самодел" rel="tag">самодел</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/g4r8wFXdKaoIw41AwZRg7o1R4PQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/g4r8wFXdKaoIw41AwZRg7o1R4PQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/g4r8wFXdKaoIw41AwZRg7o1R4PQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/g4r8wFXdKaoIw41AwZRg7o1R4PQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/FAVPkwKW5zU" height="1" width="1"/>]]></content:encoded><description>Не так давно рассказывал про свою переделку автомобильного компрессора Беркут R17 (приделывал к нему &amp;#8220;дистанционное управление&amp;#8221;, которое создатели по какой-то причине проигнорировали, хотя конструкция компрессора прямо-таки кричит о его необходимости &amp;#8211; Дистанционное управление для автомобильного компрессора Беркут). А вот в процессе дальнейшего монтажа компрессора непосредственно на автомобиль &amp;#8211; столкнулся с мелкой, но весьма неприятной проблемой. [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/no-way.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://dimio.org/no-way.html</feedburner:origLink></item><item><title>Как я ремонтировал шланг горелки Kovea 0211L</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/qF7qzgLQBrc/kak-ya-remontiroval-shlang-gorelki-kovea-0211l.html</link><category>Путешествия</category><category>жизненное</category><category>отдых</category><category>путешествия</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Fri, 10 Jun 2011 01:18:00 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=467</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Давно пользуюсь горелкой от Kovea, но на одной из последних охот не уследили за шлангом (поставили баллон с газом на котёл, чтобы подогревался и газ лучше выходил) &#8211; перегорел от факела горелки, причём металлическая оплётка осталась цела, а во внутренней резиновой трубке прогорело отверстие &#8211; снаружи не заклеить.</p>
<p>Способ ремонта довольно тривиальный &#8211; вырезать повреждённый участок и срастить шланг через штуцер. Однако поиски по интернету показали, что штуцеры под такие газовые шланги хоть и есть (теоретически) в продаже, но стоят довольно дорого (а сами шланги и того дороже) и ждать их доставки тоже придётся довольно долго. Прогулки по автозапчастям тоже результата не принесли &#8211; слишком мал внутренний диаметр газопроводного шланга горелки. Собственно решению проблемы с отсутствием подходящих запчастей и посвящена заметка, поскольку в интернете на эту тему ничего толкового накопать не удалось.<br />
<span id="more-467"></span></p>
<p>Итак, для ремонта шланга горелки <strong>Kovea 0211L</strong> идеально подошёл кусочек использованного стержня от шариковой ручки! Входит в шланг внатяг и обеспечивает достаточную герметичность соединения сам по себе даже. Я посадил его на силиконовый клей-герметик, при этом при сближении концов шланга лишний герметик заполнил шов стыка. В результате &#8211; работоспособность горелки восстановлена, шланг гибкость не утратил (штуцер не слишком длинный, а герметик эластичен даже после вулканизации), стык нигде не травит. И самое приятное &#8211; ремонт занимает 10 минут и практически ничего не стоит (если герметик есть в хозяйстве).<br />
<a href="http://dimio.org/wp-content/uploads/2011/06/IMG_20110610_093250.jpg"><img src="http://dimio.org/wp-content/uploads/2011/06/IMG_20110610_093250-300x225.jpg" alt="Ремонт шланга горелки Kovea 0211L" title="Ремонт шланга горелки Kovea 0211L" width="300" height="225" class="aligncenter size-medium wp-image-468" /></a></p>

	Метки:<a href="http://dimio.org/tag/zhiznennoe" title="жизненное" rel="tag">жизненное</a>, <a href="http://dimio.org/tag/otdyx" title="отдых" rel="tag">отдых</a>, <a href="http://dimio.org/tag/puteshestviya" title="путешествия" rel="tag">путешествия</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/cUiTCkPZNklz1fqDOOF1sLV7jWY/0/da"><img src="http://feedads.g.doubleclick.net/~a/cUiTCkPZNklz1fqDOOF1sLV7jWY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/cUiTCkPZNklz1fqDOOF1sLV7jWY/1/da"><img src="http://feedads.g.doubleclick.net/~a/cUiTCkPZNklz1fqDOOF1sLV7jWY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/qF7qzgLQBrc" height="1" width="1"/>]]></content:encoded><description>Давно пользуюсь горелкой от Kovea, но на одной из последних охот не уследили за шлангом (поставили баллон с газом на котёл, чтобы подогревался и газ лучше выходил) &amp;#8211; перегорел от факела горелки, причём металлическая оплётка осталась цела, а во внутренней резиновой трубке прогорело отверстие &amp;#8211; снаружи не заклеить. Способ ремонта довольно тривиальный &amp;#8211; вырезать повреждённый [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/kak-ya-remontiroval-shlang-gorelki-kovea-0211l.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><feedburner:origLink>http://dimio.org/kak-ya-remontiroval-shlang-gorelki-kovea-0211l.html</feedburner:origLink></item><item><title>Perl YAPC::Russia – no threads + новинки Perl 5.14</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/ypX-IxyRLfY/perl-yapcrussia-no-threads-novinki-perl-5-14.html</link><category>Новости</category><category>Технократия</category><category>perl</category><category>многопоточность</category><category>программинг</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Wed, 25 May 2011 02:44:53 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=444</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Две презентации (под катом) с недавно прошедшей конференции YAPC::Russia (посвящённой языку <a href="http://dimio.org/perl-practical-extraction-and-report-language.html">Perl</a>), которые мне захотелось сохранить для памяти.</p>
<ul>
<li><strong>no threads</strong> &#8211; обзор многопоточности (реализованной через модуль <em>threads</em>) в Perl с замерами скорости выполнения однопоточного и многопоточного приложения. Выводы &#8211; многопоточность через <em>threads</em> &#8211; не выход, время исполнения больше. Приводятся модули и краткие рецепты для реализации многопоточных элементов приложения, специфичные для каждого из возможных случаев распараллеливания вычислений &#8211; <a href="http://dimio.org/sravnenie-proizvoditelnosti-setevyx-bibliotek-v-perl.html">повышение производительности Perl-приложения при работе с сетью</a>; при выполнении большого количества дисковых операций; при ограниченных вычислительных ресурсах (один процессор).</li>
<li><strong>Что нового в Perl 5.14</strong> &#8211; обзор новинок Perl версий 5.12 и 5.14 &#8211; самое заметное сжато и в примерах. Неплохая памятка, позволит не отстать от жизни <img src='http://dimio.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Самое заметное на мой взгляд &#8211; поддержка Unicode 6.0 и добавление в связи с этим новых модификаторов работы с регулярными выражениями. Ознакомиться и использовать по крайней мере &#8220;для себя&#8221; &#8211; полезно.</li>
</ul>
<p><span id="more-444"></span></p>
<div style="width:425px" id="__ss_8079174"> <strong style="display:block;margin:12px 0 4px"><noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhCD1hRU0pYB0EHHQoAFUlWRkEeQFFWAAwXHltYThVRFFQCVUY=/" title="No threads">No threads</a></noindex></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8079174" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhCD1hRU0pYB0EHHQoAFUk=/">presentations</a></noindex> from <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhCD1hRU0pYB0EHHQoAFUlWRkEeQFFWAAwX/">dur-randir</a></noindex> </div>
</p></div>
<div style="width:425px" id="__ss_7976715"> <strong style="display:block;margin:12px 0 4px"><noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhCD1hRU0pYB0EHHQoAFUlTXVdKHENQSxUAQ1kaVlAN/" title="Что нового в Perl 5.14">Что нового в Perl 5.14</a></noindex></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/7976715" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhCD1hRU0pYB0EHHQoAFUk=/">presentations</a></noindex> from <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhCD1hRU0pYB0EHHQoAFUlTXVdKHENQ/">andy.sh</a></noindex> </div>
</p></div>

	Метки:<a href="http://dimio.org/tag/perl" title="perl" rel="tag">perl</a>, <a href="http://dimio.org/tag/mnogopotochnost" title="многопоточность" rel="tag">многопоточность</a>, <a href="http://dimio.org/tag/programmirovanie" title="программинг" rel="tag">программинг</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/9kG6WpISqJZ0YlUuw4my2g7TxaI/0/da"><img src="http://feedads.g.doubleclick.net/~a/9kG6WpISqJZ0YlUuw4my2g7TxaI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/9kG6WpISqJZ0YlUuw4my2g7TxaI/1/da"><img src="http://feedads.g.doubleclick.net/~a/9kG6WpISqJZ0YlUuw4my2g7TxaI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/ypX-IxyRLfY" height="1" width="1"/>]]></content:encoded><description>Две презентации (под катом) с недавно прошедшей конференции YAPC::Russia (посвящённой языку Perl), которые мне захотелось сохранить для памяти. no threads &amp;#8211; обзор многопоточности (реализованной через модуль threads) в Perl с замерами скорости выполнения однопоточного и многопоточного приложения. Выводы &amp;#8211; многопоточность через threads &amp;#8211; не выход, время исполнения больше. Приводятся модули и краткие рецепты для реализации [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/perl-yapcrussia-no-threads-novinki-perl-5-14.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><feedburner:origLink>http://dimio.org/perl-yapcrussia-no-threads-novinki-perl-5-14.html</feedburner:origLink></item><item><title>Быстрая индексация страниц Яндексом</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/JKnYDMqyTn0/bystraya-indeksaciya-stranic-yandeksom.html</link><category>seo</category><category>Блоггинг</category><category>Хитрости</category><category>how-to</category><category>индексация</category><category>поисковики</category><category>трюки</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Fri, 13 May 2011 03:59:50 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=417</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Решил вернуться, так сказать, к истокам ненадолго и снова поднять тему про <a href="http://dimio.org/bystraya-indeksaciya-sajta-v-poiskovikax.html"><strong>быструю индексацию сайта в поисковиках</strong></a>, о чём уже писал почти два года назад. Теперь надобность непосредственно в индексации сайта целиком уже отпала &#8211; он и так давно в индексе, а вот ускорение индексации новых страниц может быть полезным.<br />
Уже рассказывал про социальные закладки (в заметке <a href="http://dimio.org/prodvizhenie-socialnymi-zakladkami.html"><strong>Продвижение социальными закладками</strong></a>), на тот момент они действительно ускоряли индексацию, а в последнее время стал замечать, что в отношении Яндекса закладки стали совершенно неэффективны &#8211; никакого ускорения индексации не происходит. Стал искать другой способ и вспомнил, что среди прочего, при регистрации почты на Яндексе появляется возможность вести свой блог. Его и решил попробовать в качестве ускорителя индексации Яндексом.<br />
<span id="more-417"></span></p>
<p>Не стану утверждать, будто бы это эксклюзивная находка &#8211; уверен, что далеко не я один додумался до этого. Впрочем, если зациклиться на вторичности, то лучше вовсе ничего не делать, ведь как известно &#8211; &#8220;всё уже придумано до нас&#8221; <img src='http://dimio.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>В самом способе нет никакой тайны &#8211; при необходимости ускорить индексацию какой-то страницы я делаю анонс в яндекс-блоге (от пары коротеньких абзацев текста до полноценной заметки) со ссылкой на эту страницу. Поскольку блог-движки постоянно посещаются и быстро индексируются <a href="http://dimio.org/bystrorobot-chto-eto-takoe.html">быстророботом Яндекса</a>, а тут ещё и платформа принадлежит самому же Яндексу &#8211; так же быстро индексируются ссылки из анонсов в блоге. Всё весьма несложно, времени требует не много (во время перерыва на чай анонс накидать вполне можно успеть) и весьма эффективно &#8211; проиндексированные быстророботом ссылки попадают в основной индекс спустя двое суток.</p>
<p>В заключение &#8211; некоторые наблюдения: запись в Яндекс-блоге индексируется от тридцати минут до полутора часов, после чего страница по ссылке индексируется в промежуток от двух до двенадцати часов (если ссылок в анонсе несколько &#8211; они могут проиндексироваться партиями, например две могут &#8211; за 2 часа, а еще две &#8211; за 8). Обратил внимание, что на скорость индексации может повлиять дата публикации страницы (в WordPress можно сделать &#8220;отложенную публикацию&#8221; как вперёд, так и назад по времени) &#8211; &#8220;старые&#8221; записи индексируются медленней.</p>
<p>Кстати, проиндексированные быстророботом ссылки не оплачиваются в <a href="http://dimio.org/zarabatyvaj-s-gogetlinks-publikaciya-ssylok-zametok-i-kartinok-za-dengi.html">GoGetLinks</a> до их индексации основным роботом Яндекса и отмечены соответствующим статусом, однако они участвуют в расчете процента проиндексированных ссылок для площадки.</p>

	Метки:<a href="http://dimio.org/tag/how-to" title="how-to" rel="tag">how-to</a>, <a href="http://dimio.org/tag/seo" title="seo" rel="tag">seo</a>, <a href="http://dimio.org/tag/indeksaciya" title="индексация" rel="tag">индексация</a>, <a href="http://dimio.org/tag/poiskoviki" title="поисковики" rel="tag">поисковики</a>, <a href="http://dimio.org/tag/tryuki" title="трюки" rel="tag">трюки</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/40hHsJ09vLri9QGblqYL2Un0Daw/0/da"><img src="http://feedads.g.doubleclick.net/~a/40hHsJ09vLri9QGblqYL2Un0Daw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/40hHsJ09vLri9QGblqYL2Un0Daw/1/da"><img src="http://feedads.g.doubleclick.net/~a/40hHsJ09vLri9QGblqYL2Un0Daw/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/JKnYDMqyTn0" height="1" width="1"/>]]></content:encoded><description>Решил вернуться, так сказать, к истокам ненадолго и снова поднять тему про быструю индексацию сайта в поисковиках, о чём уже писал почти два года назад. Теперь надобность непосредственно в индексации сайта целиком уже отпала &amp;#8211; он и так давно в индексе, а вот ускорение индексации новых страниц может быть полезным. Уже рассказывал про социальные закладки [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/bystraya-indeksaciya-stranic-yandeksom.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">6</slash:comments><feedburner:origLink>http://dimio.org/bystraya-indeksaciya-stranic-yandeksom.html</feedburner:origLink></item><item><title>Стандартные пароли для устройств – большой список</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/nd97PRBdlu8/standartnye-paroli-dlya-ustrojstv-bolshoj-spisok.html</link><category>Гаджеты</category><category>гаджет</category><category>железо</category><category>закладки</category><category>памятка</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Wed, 11 May 2011 04:01:18 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=418</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Ссылка на память &#8211; список стандартных паролей для большого числа различных устройств: <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhBC1RbWVxcD0dPRhdLDhRVHFdDXh9cFAlLWUFaDw==/">Default Password List</a></noindex>. Стандартные пароли для роутеров, МФУ и т.п. устройств. Указаны протоколы доступа для авторизации (telnet, http и т.д.)</p>

	Метки:<a href="http://dimio.org/tag/gadzhet" title="гаджет" rel="tag">гаджет</a>, <a href="http://dimio.org/tag/zhelezo" title="железо" rel="tag">железо</a>, <a href="http://dimio.org/tag/zakladki" title="закладки" rel="tag">закладки</a>, <a href="http://dimio.org/tag/pamyatka" title="памятка" rel="tag">памятка</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/jECQqoNl4Z9mZom-pR73eVZBdAo/0/da"><img src="http://feedads.g.doubleclick.net/~a/jECQqoNl4Z9mZom-pR73eVZBdAo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/jECQqoNl4Z9mZom-pR73eVZBdAo/1/da"><img src="http://feedads.g.doubleclick.net/~a/jECQqoNl4Z9mZom-pR73eVZBdAo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/nd97PRBdlu8" height="1" width="1"/>]]></content:encoded><description>Ссылка на память &amp;#8211; список стандартных паролей для большого числа различных устройств: Default Password List. Стандартные пароли для роутеров, МФУ и т.п. устройств. Указаны протоколы доступа для авторизации (telnet, http и т.д.) Метки:гаджет, железо, закладки, памятка</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/standartnye-paroli-dlya-ustrojstv-bolshoj-spisok.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://dimio.org/standartnye-paroli-dlya-ustrojstv-bolshoj-spisok.html</feedburner:origLink></item><item><title>TOR NEWNYM – автоматическая смена IP в TOR</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/ELGZpKDHMbY/tor-newnym-avtomaticheskaya-smena-ip-v-tor.html</link><category>Linux</category><category>Windows</category><category>Интернет</category><category>how-to</category><category>linux</category><category>perl</category><category>proxy</category><category>tor</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Thu, 05 May 2011 08:40:47 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=406</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://ht-news.com/" ><img src="http://dimio.org/wp-content/uploads/2011/05/the_onion_router-300x235.png" alt="Высокие технологии" title="Автоматическая смена IP-адреса в TOR" width="300" height="235" class="aligncenter size-medium wp-image-409" /></a></p>
<p>Время от времени использую в качестве прокси  сеть <a href="http://dimio.org/tor-the-onion-router-luchshij-iz-besplatnyx-proksi.html">TOR</a>, недавно вот пригодилось при проверке готовности загранпаспорта через интернет, когда постоянно получал ошибку о превышении числа запросов к серверу &#8211; пришлось сделать макрос на <em>lynx</em>, который через <em>TOR</em> периодически проверял готовность загранпаспорта (<strong><a href="http://dimio.org/avtomaticheskaya-proverka-gotovnosti-zagranpasporta.html">Автоматическая проверка готовности загранпаспорта</a></strong>). Удобство <em>TOR</em> не только в том, что это рабочий бесплатный прокси (с шифрованием трафика кстати) &#8211; <em>TOR</em> это сеть и прокси-серверы, а значит и IP-адреса, можно легко менять при необходимости, даже автоматически.</p>
<p>Под <em>Windows</em> сменить прокси и IP-адрес совершенно несложно &#8211; в составе дистрибутива <em>TOR</em> для Windows присутствует графическая оболочка <em>Vidalia</em> и для получения нового IP-адреса достаточно нажать в ней кнопку &#8220;<em>Новый Ним / Новая личина / New NYM</em>&#8220;. Под <em>Linux</em> всё не так очевидно, хотя тоже несложно, как выяснилось &#8211; сделать автоматическую смену IP в <em>TOR</em> можно при помощи простого скрипта.</p>
<p><span id="more-406"></span></p>
<p>Когда мне в очередной раз надо было поменять &#8220;ним&#8221; в TOR из-под Linux, я решил попробовать разобраться в вопросе, поскольку привычное <code class="codecolorer bash default"><span class="bash"><span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>tor restart</span></code> перестало устраивать: во-первых нужно постоянно использовать root-доступ, во-вторых на время перезагрузки сервиса TOR он становится недоступен, а в-третьих &#8211; это просто как-то неправильно &#8211; перезагружать весь сервис ради получения новго IP-адреса.<br />
Полез в документацию к TOR и выяснил, что демон может открывать управляющий порт, на который возможно подключение при помощи <em>telnet</em> с последующей отправкой команд демону TOR.</p>
<h3>Смена НИМа / IP в TOR при помощи telnet</h3>
<p>Чтобы передавать команды демону TOR (и в частности &#8211; команду на смену &#8220;нима&#8221;/IP-адреса), нужно раскомментировать в <strong>/etc/tor/torrc</strong> следующие строки:</p>
<div class="codecolorer-container dot default" style="border:1px solid #9F9F9F;width:100%;"><div class="dot codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">## The port on which Tor will listen for local connections from Tor</span><br />
<span style="color: #339933;">## controller applications, as documented in control-spec.txt.</span><br />
ControlPort <span style="color: #cc66cc;">9051</span></div></div>
<p>После чего перезагружаем TOR, подключаемся к нему: <code class="codecolorer bash default"><span class="bash">telnet 127.0.0.1 <span style="color: #000000;">9051</span></span></code>, вводим команду <strong>AUTHENTICATE</strong> и затем <strong>signal NEWNYM</strong>. В Windwos действия по смене IP аналогичные (при создании скрипта для автоматической смены IP в TOR нужно помнить, что перевод строки для Windows будет выглядеть как <strong>\r\n</strong>). Дополнение <a href="http://dimio.org/tor-newnym-avtomaticheskaya-smena-ip-v-tor.html/comment-page-1#comment-29475">из комментариев</a>: после <strong>AUTHENTICATE</strong> нужно ввести команду <strong>SETEVENTS SIGNAL</strong>, чтобы демон кодом 650 сообщал о завершении смены цепочки серверов (и соответственно &#8211; IP-адреса. Команда работает с версии Tor 0.2.3.1-alpha, на более старых при необходимости контроля смены IP придется использовать внешние средства).</p>
<p>Несложно заметить, что способ не самый безопасный &#8211; подключиться может любой локальный пользователь. Конечно на домашней машине это не так страшно, но лучше сразу сделать правильно, без скидок на &#8220;тепличные условия&#8221;. Я выбрал вариант подключения к TOR с авторизацией по паролю (telnet-трафик впрочем никак не шифруется, так что под Windows вряд ли это вообще имеет смысл &#8211; практически всегда у пользователя там есть административные права, а значит и возможность использовать сниффер).</p>
<p>Для авторизации по паролю там же в <em>torrc</em> нужно сделать вот такие изменения:</p>
<div class="codecolorer-container dot default" style="border:1px solid #9F9F9F;width:100%;"><div class="dot codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">## If you enable the controlport, be sure to enable one of these</span><br />
<span style="color: #339933;">## authentication methods, to prevent attackers from accessing it.</span><br />
HashedControlPassword <span style="color: #cc66cc;">16</span>:B55A3F6B52F34E55609F6676DDBCEF4FD2BA7E318D9AF45AF878DB8A30<br />
<span style="color: #339933;">#CookieAuthentication 1</span><br />
<span style="color: #339933;">## Включение CookieAuthentication заставит tor создавать служебный файл,</span><br />
<span style="color: #339933;">## а подключаться на управляющий порт смогут только процессы, знающие содержимое этого файла.</span></div></div>
<p>Хэш-сумма пароля получается следующим образом: необходимо выполнить команду <code class="codecolorer bash default"><span class="bash">tor <span style="color: #660033;">--hash-password</span> <span style="color: #ff0000;">'new_tor_password'</span></span></code> &#8211; в ответ получим сгенерированный хэш-код пароля</p>
<div class="codecolorer-container bash default" style="border:1px solid #9F9F9F;width:100%;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ibm: $ tor <span style="color: #660033;">--hash-password</span> <span style="color: #ff0000;">'new_tor_password'</span><br />
May 04 <span style="color: #000000;">19</span>:<span style="color: #000000;">29</span>:<span style="color: #000000;">14.173</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>notice<span style="color: #7a0874; font-weight: bold;">&#93;</span> Tor v0.2.1.29 <span style="color: #7a0874; font-weight: bold;">&#40;</span>r318f470bc5f2ad43<span style="color: #7a0874; font-weight: bold;">&#41;</span>. This is experimental software. Do not rely on it <span style="color: #000000; font-weight: bold;">for</span> strong anonymity. <span style="color: #7a0874; font-weight: bold;">&#40;</span>Running on Linux i686<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #000000;">16</span>:B55A3F6B52F34E55609F6676DDBCEF4FD2BA7E318D9AF45AF878DB8A30</div></div>
</p>
<p>Теперь процесс подключения на управляющий порт TOR через telnet и получения нового &#8220;нима&#8221;/IP-адреса будет выглядеть следующим образом:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ibm: $ telnet 127.0.0.1 <span style="color: #000000;">9051</span><br />
Trying 127.0.0.1...<br />
Connected to 127.0.0.1.<br />
Escape character is <span style="color: #ff0000;">'^]'</span>.<br />
AUTHENTICATE <span style="color: #ff0000;">&quot;new_tor_password&quot;</span><br />
<span style="color: #000000;">250</span> OK<br />
signal NEWNYM<br />
<span style="color: #000000;">250</span> OK<br />
quit</div></div>
<p>А в случае использования Tor старше, чем 0.2.3.1-alpha, с применением <strong>SETEVENTS SIGNAL</strong>, смена цепочки серверов может выглядеть так:</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ibm: $ telnet 127.0.0.1 <span style="color: #000000;">9051</span><br />
Trying 127.0.0.1...<br />
Connected to 127.0.0.1.<br />
Escape character is <span style="color: #ff0000;">'^]'</span>.<br />
AUTHENTICATE <span style="color: #ff0000;">&quot;new_tor_password&quot;</span><br />
<span style="color: #000000;">250</span> OK<br />
SETEVENTS SIGNAL<br />
<span style="color: #000000;">250</span> OK<br />
SIGNAL NEWNYM<br />
<span style="color: #000000;">250</span> OK<br />
<span style="color: #000000;">650</span> SIGNAL NEWNYM<br />
quit</div></div>
<p>Строка <code class="codecolorer text default"><span class="text">650 SIGNAL NEWNYM</span></code> как раз и сообщает об успешном завершении смены сервера.
</p>
<h3>Shell скрипт для автоматической смены IP в TOR</h3>
<p>Конечно, постоянно руками лазать и менять &#8220;ним&#8221; &#8211; не очень интересно. Упростить и автоматизировать этот процесс можно при помощи скрипта, выполнение которого в дальнейшем повесить например на <em>alias</em> для <a href="http://dimio.org/bash-born-again-shell-obolochka-komandnoj-stroki.html">bash</a> или кнопку-ярлык в <em>Gnome</em>. Скрипт использует утилиту для автоматизации интерактивных приложений <em>expect</em> (я воспользовался <em>empty-expect</em> чтобы не ставить еще и <em>tcl</em> вдобавок):</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/sh</span><br />
<span style="color: #666666; font-style: italic;"># Автоматическая смена НИМа в TOR</span><br />
empty <span style="color: #660033;">-f</span> <span style="color: #660033;">-i</span> torin <span style="color: #660033;">-o</span> torout telnet 127.0.0.1 <span style="color: #000000;">9051</span><br />
empty <span style="color: #660033;">-s</span> <span style="color: #660033;">-o</span> torin <span style="color: #ff0000;">&quot;AUTHENTICATE <span style="color: #000099; font-weight: bold;">\&quot;</span>new_tor_password<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><br />
empty <span style="color: #660033;">-s</span> <span style="color: #660033;">-o</span> torin <span style="color: #ff0000;">&quot;signal NEWNYM<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><br />
empty <span style="color: #660033;">-s</span> <span style="color: #660033;">-o</span> torin <span style="color: #ff0000;">&quot;quit<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span></div></div>
</p>
<p>
<a name="perl-tor-newnym"></a><br />
<h3>Perl скрипты для автоматической смены IP в TOR</h3>
<p>Такой же скрипт можно реализовать на <a href="http://dimio.org/perl-practical-extraction-and-report-language.html">Perl</a> с использованием модуля <em>Expect</em> (поскольку лично у меня ни этот модуль, ни утилита <em>empty</em> в системе установлены не были &#8211; особой разницы, что поставить, нет):</p>
<div class="codecolorer-container perl default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="perl codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">use</span> Expect<span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># запуск команды в процессе-потомке</span><br />
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$exp</span> <span style="color: #339933;">=</span> Expect<span style="color: #339933;">-&gt;</span><span style="color: #006600;">spawn</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;telnet 127.0.0.1 9051&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># таймаут на отстутствие действий = 3 сек.</span><br />
<span style="color: #0000ff;">$exp</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">expect</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#91;</span> <span style="color: #009966; font-style: italic;">qr/Escape \s char .* \n/x</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">$exp</span><span style="color: #339933;">-&gt;</span><span style="color: #000066;">send</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'AUTHENTICATE &quot;new_tor_password&quot;'</span><span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exp_continue<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#91;</span> <span style="color: #009966; font-style: italic;">qr/250 \s OK/x</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">$exp</span><span style="color: #339933;">-&gt;</span><span style="color: #000066;">send</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;signal NEWNYM<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">$exp</span><span style="color: #339933;">-&gt;</span><span style="color: #000066;">send</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;quit<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exp_continue<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
</p>
<p>Аналогичным образом можно воспользоваться например модулем <em>Net::Telnet</em>, который опять же не является core-модулем Perl, &#8211; он не тянет за собой никаких зависимостей, в отличает от <em>Expect</em>:</p>
<div class="codecolorer-container perl default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;height:400px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br /></div></td><td><div class="perl codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">use</span> Net<span style="color: #339933;">::</span><span style="color: #006600;">Telnet</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$tnet</span> <span style="color: #339933;">=</span> Net<span style="color: #339933;">::</span><span style="color: #006600;">Telnet</span><span style="color: #339933;">-&gt;</span><span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Host указывать не обязательно</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># по умолчанию исп. localhost</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Host &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'127.0.0.1'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Port &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'9051'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Timeout &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Раскомментировать чтобы получать</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># сообщения на станд. вывод</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">#Input_log &nbsp; &nbsp;=&gt; *STDOUT,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">#Output_log &nbsp; &nbsp;=&gt; *STDOUT,</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Вариант первый - использовать методы print</span><br />
<span style="color: #666666; font-style: italic;"># (для отправки команд) и waitfor (для получения</span><br />
<span style="color: #666666; font-style: italic;"># ответов).</span><br />
<span style="color: #0000ff;">$tnet</span><span style="color: #339933;">-&gt;</span><span style="color: #000066;">print</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">q/AUTHENTICATE &quot;new_tor_password&quot;/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #0000ff;">$tnet</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">waitfor</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'/^ 250 \s OK $/x'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #0000ff;">$tnet</span><span style="color: #339933;">-&gt;</span><span style="color: #000066;">print</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">q/signal NEWNYM/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #0000ff;">$tnet</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">waitfor</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'/250 \s OK $/x'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #0000ff;">$tnet</span><span style="color: #339933;">-&gt;</span><span style="color: #000066;">print</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">q/quit/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #0000ff;">$tnet</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">waitfor</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'/250 \s closing \s connection $/x'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Вариант второй - передавать команды каждый раз,</span><br />
<span style="color: #666666; font-style: italic;"># как получено приглашение на ввод (prompt).</span><br />
<span style="color: #666666; font-style: italic;"># Prompt можно определить при создании $tnet</span><br />
<span style="color: #0000ff;">$tnet</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">prompt</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'//'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #0000ff;">$tnet</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">cmd</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">q/AUTHENTICATE &quot;new_tor_password&quot;/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #0000ff;">$tnet</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">cmd</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">q/signal NEWNYM/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #0000ff;">$tnet</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">cmd</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">q/quit/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
</p>
<p>В качестве заключения &#8211; ссылка на <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFUIPGEwGUBJGBlMbQlZCFkENWQEGFUhdQVQcRl9KFxUAUhtQChUGBwwBXVpUZkAKUgtdXw0DW3p2cncJVgUHCgtFR1gPTEoWVAAfQU5N/">подробную документацию по Tor</a></noindex> (на английском), <a href="http://dimio.org/tor-newnym-avtomaticheskaya-smena-ip-v-tor.html/comment-page-1#comment-29492">приведенная в комментариях к заметке</a>.</p>

	Метки:<a href="http://dimio.org/tag/how-to" title="how-to" rel="tag">how-to</a>, <a href="http://dimio.org/tag/linux" title="linux" rel="tag">linux</a>, <a href="http://dimio.org/tag/perl" title="perl" rel="tag">perl</a>, <a href="http://dimio.org/tag/proxy" title="proxy" rel="tag">proxy</a>, <a href="http://dimio.org/tag/tor" title="tor" rel="tag">tor</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/TSCXuiRamsR41dqTAQrPkbGFC20/0/da"><img src="http://feedads.g.doubleclick.net/~a/TSCXuiRamsR41dqTAQrPkbGFC20/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/TSCXuiRamsR41dqTAQrPkbGFC20/1/da"><img src="http://feedads.g.doubleclick.net/~a/TSCXuiRamsR41dqTAQrPkbGFC20/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/ELGZpKDHMbY" height="1" width="1"/>]]></content:encoded><description>Время от времени использую в качестве прокси сеть TOR, недавно вот пригодилось при проверке готовности загранпаспорта через интернет, когда постоянно получал ошибку о превышении числа запросов к серверу &amp;#8211; пришлось сделать макрос на lynx, который через TOR периодически проверял готовность загранпаспорта (Автоматическая проверка готовности загранпаспорта). Удобство TOR не только в том, что это рабочий бесплатный [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/tor-newnym-avtomaticheskaya-smena-ip-v-tor.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">7</slash:comments><feedburner:origLink>http://dimio.org/tor-newnym-avtomaticheskaya-smena-ip-v-tor.html</feedburner:origLink></item><item><title>rsync – отличная замена scp!</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/C6lJGdx7tCQ/rsync-otlichnaya-zamena-scp.html</link><category>Linux</category><category>linux</category><category>rsync</category><category>жизненное</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Thu, 28 Apr 2011 01:44:49 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=389</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Довольно смешно, но впервые воспользовался <em>rsync</em> только три недели назад. До этого пытался один раз, не разобрался с ключами и забросил. Зря, как оказалось!<br />
Главное достоинство <em>rsync</em> по сравнению с <em>scp</em> &#8211; показывает прогресс загрузки. Также рекурсивно загружает директории. Немаловажно &#8211; поддерживает докачку в обе стороны.</p>
<p>Попользовался и сделал себе для <a href="http://dimio.org/bash-born-again-shell-obolochka-komandnoj-stroki.html">bash</a> алиас в <em>bashrc</em> <code class="codecolorer bash default"><span class="bash"><span style="color: #007800;">rsync</span>=<span style="color: #ff0000;">&quot;rsync -P&quot;</span></span></code>, теперь всё время его использую для загрузки на хостинг. Авторизацию по ключам тоже настроил, так что можно делать бэкапы.<br />
Основной синтаксис вызова: <code class="codecolorer text default"><span class="text">rsync логин@хост:/откуда/что логин@хост:/куда/что</span></code>. В случае локальной машины логин и хост указывать естественно не нужно, достаточно только пути.<br />
Основные опции, которыми пользуюсь: <strong>-P</strong> &#8211; выводит прогресс-бар, <strong>-r</strong> &#8211; рекурсивная загрузка.</p>
<p>Если кто ещё тоже до сих пор не знаком с <em>rsync</em> и пользуется <em>scp/sftp</em> &#8211; самое время попробовать!</p>

	Метки:<a href="http://dimio.org/tag/linux" title="linux" rel="tag">linux</a>, <a href="http://dimio.org/tag/rsync" title="rsync" rel="tag">rsync</a>, <a href="http://dimio.org/tag/zhiznennoe" title="жизненное" rel="tag">жизненное</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/ykSHIO3AQL82TMpp5r_H1R8lC8s/0/da"><img src="http://feedads.g.doubleclick.net/~a/ykSHIO3AQL82TMpp5r_H1R8lC8s/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ykSHIO3AQL82TMpp5r_H1R8lC8s/1/da"><img src="http://feedads.g.doubleclick.net/~a/ykSHIO3AQL82TMpp5r_H1R8lC8s/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/C6lJGdx7tCQ" height="1" width="1"/>]]></content:encoded><description>Довольно смешно, но впервые воспользовался rsync только три недели назад. До этого пытался один раз, не разобрался с ключами и забросил. Зря, как оказалось! Главное достоинство rsync по сравнению с scp &amp;#8211; показывает прогресс загрузки. Также рекурсивно загружает директории. Немаловажно &amp;#8211; поддерживает докачку в обе стороны. Попользовался и сделал себе для bash алиас в bashrc [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/rsync-otlichnaya-zamena-scp.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">6</slash:comments><feedburner:origLink>http://dimio.org/rsync-otlichnaya-zamena-scp.html</feedburner:origLink></item><item><title>Mojolicious – знакомство с “вебом из коробки”</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/Oe9wwiKWo9E/mojolicious-znakomstvo-s-vebom-iz-korobki.html</link><category>Интернет</category><category>Кодинг</category><category>how-to</category><category>mojolicious</category><category>perl</category><category>программинг</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Fri, 22 Apr 2011 01:41:58 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=393</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://dimio.org/wp-content/uploads/2011/04/mojolicious.jpg"><img src="http://dimio.org/wp-content/uploads/2011/04/mojolicious.jpg" alt="Mojolicious - веб из коробки" title="Mojolicious - a Perl web framework" width="348" height="206" class="aligncenter size-full wp-image-397" /></a></p>
<h2>Что такое Mojolicious. Введение</h2>
<p>Благодаря <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGAsAWxRQC1BXRBdCExwAXwsCEklCVkFfHQEJU1NcAho=/">заметке на Хабре</a></noindex> (<noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQEWwVQAFlQGF5fCVQOVhEWBBRRXF1HV15MSgYKXBpEBgBLBVlcQAhVWFMOVlhsVgMzUVdkUHJjR3JeDQRTR1YLAFsUHxFEGlRVXwFATUMBFw1JAwIEBQsDF08ICltaWwoCUAlEEBcWBgoIXVAGDldDQlYBCwhbXg1KEUNGAQYPWAJNW1IPX14QGgBVC1lUCFgTExQQAwAKC0sLEBdSUAoUFk5IVgxeUlpcHhRG/">в кэшэ Google</a></noindex>) наконец-то решил познакомиться с набирающим популярность фреймворком для веб-разработки на Perl под названием <strong><noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGA4OUwldClJcWRdFFRw=/">Mojolicious</a></noindex></strong>. В общем-то я взял пример скрипта из этой заметки и сделал его чуть более интересным для себя, чтобы охватить немного больше документации по фреймворку (результат вполне работоспособен, его можно посмотреть <a href="http://dimio.org/cgi-bin/dev/mojo-test.cgi">здесь</a>, а код и скриншот выложены в конце заметки). Сразу отмечу, что ни пример с Хабра, ни мой практически не отражают возможностей фреймворка, а только лишь иллюстрируют простоту его использования.</p>
<p>Итак, <strong>Mojolicious</strong> &#8211; фреймворк для разработки веб-приложений, основанный на &#8220;фреймворке для разработки фреймворков&#8221; <em>Mojo</em>, написанный на языке <a href="http://dimio.org/perl-practical-extraction-and-report-language.html">Perl</a> человеком по имени <em>Sebastian Riedel</em>, одним из авторов Perl-веб-фреймворка <em>Catalyst</em>, фактически для его замены.</p>
<p>Чем мне показался особенно интересен <strong>Mojolicious</strong>? Во-первых тем, что он имеет <a href="http://dimio.org/mojolicious-znakomstvo-s-vebom-iz-korobki.html#apprun">встроенный веб-сервер</a>, что в перспективе позволяет не только удобно разрабатывать и проверять приложение, но и распространять его для локального использования. При этом приложение получается универсальным и будет одинаково работоспособным как на локальной машине, так и на сервере. Во-вторых &#8211; <strong>Mojolicious</strong> зависит только от Perl, что также говорит в пользу &#8220;во-первых&#8221;. В-третьих &#8211; наличием модуля <strong>Mojolicious::Lite</strong>, позволяющего создать лёгкие, маленькие, но полноценные приложения. И в-четвёртых &#8211; автоматической поддержкой разных режимов запуска (CGI, FastCGI, mod_perl, встроенный сервер и т.д.).<br />
<span id="more-393"></span></p>
<h2>Установка фреймворка Mojolicious</h2>
<p>Установить фреймворк можно используя <em>cpan</em> или его производные типа <em>cpan+</em> (<code>cpan Mojolicious</code>), загрузив дистрибутив и установив как любой Perl-модуль при помщи <em>make</em> или же воспользоваться системой управления пакетами своей ОС. Я пробовал первый и третий способы, устанавливал <strong>Mojolicious</strong> под <em>Debian</em> и под <em>Windows XP</em> и нигде проблем не возникло, так что об установке сказать особо нечего. Она проста и не нуждается в пояснениях.</p>
<p>После установки <strong>Mojolicious</strong> в системе становится доступной команда <code class="codecolorer text default"><span class="text">mojo</span></code>, при помощи которой можно создавать, изменять и запускать приложения. Аналогичные действия можно выполнять, вызывая обычным образом любой perl-скрипт, в котором подключен <strong>Mojolicious</strong> (<code class="codecolorer perl default"><span class="perl"><span style="color: #000000; font-weight: bold;">use</span> Mojolicious<span style="color: #339933;">;</span></span></code>).
</p>
<h2>Документация по Mojolicious</h2>
<p>Документация к фреймворку начинает появляться, основная масса естественно доступна на домашнем сайте в разделах <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGA4OUwldClJcWRdFFRwSVhYJBQlR/">Documentacion</a></noindex> и <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFUIPGEwGUBJZFlMbVVZdSVgQUg0NTgtdWVwcRVlTDQ==/">Wiki</a></noindex>. Лучше всего пользоваться именно ей, поскольку не смотря на то, что версия фреймворка является стабильной (1.16 на момент написания заметки), интерфейс всё же иногда меняется и русскоязычная документация за ним не поспевает.
</p>
<p>Самый лучший источник документации на русском (представляет собой перевод официальной документации), который мне встретился, <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFUIPGEwGUBJZFlMbVVZdSUsNXgVKMxNBQFpSXB1MFgQLQllWFwQUCVdOfFpcVlwPUAtcERZMAUdaV1ZB/">расположен тут</a></noindex>. Остальные по-моему просто переписаны с него. Также на русском можно отыскать различные примеры использования Mojolicious, особенно в блогах. Некоторые из них иллюстрируют работу с устаревшими версиями фреймворка &#8211; соответственно и методы работы в них приводятся неверные.
</p>
<h2>Создание приложения</h2>
<p>Создать новое приложение с использованием <strong>Mojolicious</strong> можно двумя путями &#8211; обычным образом создать файл скрипта и вписать в него нужный код или же воспользоваться встроенным генератором приложений фреймворка. Второй путь удобней <img src='http://dimio.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Новое приложение Mojolicious</h3>
<p>Новое приложение <strong>Mojolicious</strong> создаётся командой <code>mojo generate app AppName</code>. Такой способ пригоден для создания больших проектов с возможностью простого масштабирования. При этом будет создан каталог, носящий имя <em>app_name</em> со следующей структурой (на примере приложения <em>TestApp</em>):</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">test_app<br />
|<br />
|-- lib<br />
|   |-- TestApp<br />
|   |   |-- Example.pm<br />
|   |-- TestApp.pm<br />
|<br />
|-- log<br />
|-- public<br />
|   |-- index.html<br />
|<br />
|-- script<br />
|   |-- test_app*<br />
|<br />
|-- t<br />
|   |-- basic.t<br />
|<br />
|-- templates<br />
&nbsp; &nbsp; |-- example<br />
&nbsp; &nbsp; |   |-- welcome.html.ep<br />
&nbsp; &nbsp; |<br />
&nbsp; &nbsp; |-- layouts<br />
&nbsp; &nbsp; |-- default.html.ep</div></div>
<p><strong>lib</strong> &#8211; здесь будут расположены библиотеки приложения;<br />
<strong>log</strong> &#8211; логи (если каталог отстутствует &#8211; выводятся на экран);<br />
<strong>public</strong> &#8211; статика (статические страницы, java-скрипты и т.п.);<br />
<strong>script</strong> &#8211; само приложение;<br />
<strong>t</strong> &#8211; тесты для приложения;<br />
<strong>templates</strong> &#8211; содержит шаблоны страниц и шаблоны макетов (в <strong>layouts</strong> &#8211; это шаблоны, применяемые на большинстве страниц &#8211; например &#8220;шапка&#8221;, &#8220;подвал&#8221;, &#8220;сайдбар&#8221;).</p>
<h3>Новое приложение Mojolicious::Lite</h3>
<p>Приложение <strong>Mojolicious::Lite</strong> создаётся похожей командой: <code>mojo generate lite_app AppName</code>.<br />
Основное различие между ними &#8211; в данном случае создаётся только один исполняемый файл, шаблоны будут содержаться непосредственно в нём, в разделе <em>__DATA__</em>, структура каталогов создаваться не будет. Такой вариант подходит для небольших, буквально &#8220;одностраничных&#8221; приложений. В дальнейшем, если возникнет необходимость разделить шаблоны и логику обработки данных &#8211; достаточно вызвать приложение с параметром <em>inflate</em> &#8211; шаблоны будут вынесены в отдельные файлы в директории <strong>templates</strong>.</p>
<h2>Встроенный шаблонизатор EmbeddedPerl</h2>
<p><strong>Mojolicious</strong> предоставляет обработчик шаблонов &#8211; <em>Embedded Perl</em> (отсюда и расширение <em>.ep</em> у файлов шаблонов). Для встраивания Perl-кода в html используется четыре вида специальных тегов (в примере приложения я некоторые из них продемонстрировал):</p>
<ul>
<li><code class="codecolorer text default"><span class="text">&lt;% %&gt;</span></code> или <code class="codecolorer text default"><span class="text">%</span></code> &#8211; строка Perl без вычисления результата;</li>
<li><code class="codecolorer text default"><span class="text">&lt;%= %&gt;</span></code> или <code class="codecolorer text default"><span class="text">%=</span></code> &#8211; выражение Perl, вычисленный результат возвращается в экранированном виде;</li>
<li><code class="codecolorer text default"><span class="text">&lt;%== %&gt;</span></code> или <code class="codecolorer text default"><span class="text">%==</span></code> &#8211; выражение Perl, вычисленный результат возвращается без обработки (не экранирован);</li>
<li><code class="codecolorer text default"><span class="text">&lt;%# %&gt;</span></code> или <code class="codecolorer text default"><span class="text">%#</span></code> &#8211; комментарий, строка пропускается;</li>
</ul>
<p><strong>Mojolicious</strong> автоматически экаранирует символы <, >, &#038;, &#8216; и &#8220;, добавляет ; в конце строки и выставляет границы начала и конца строки в регулярных выражениях внутри своих методов (например &#8211; при создании маршрутов).<br />
Кроме использования встроенного шаблонизатора, можно подключить любой желаемый сторонний шаблонизатор используя метод <em>add_handler</em>.
</p>
<p><a name="apprun"></a></p>
<h2>Запуск приложения</h2>
<p>Фреймворк <strong>Mojolicious</strong> имеет встроенный <em>http(s)</em> сервер, с помощью которого можно как проверять работоспособность приложения, так и эксплуатировать его. Для запуска сервера используется следующая команда: <code class="codecolorer bash default"><span class="bash"><span style="color: #c20cb9; font-weight: bold;">perl</span> myapp.pl daemon</span></code>.</p>
<p>Во время разработки очень полезно будет запускать сервер с ключём <code class="codecolorer text default"><span class="text">--reload</span></code> &#8211; с его использованием приложение будет перезагружаться &#8220;на лету&#8221; после каждого изменения, таким образом вручную перезапускать скрипт не нужно, достаточно запустить с этим ключом в фоне один раз. В процессе эксплуатации приложения можно добиться подобного &#8220;горячего обновления&#8221; приложения, запустив несколько копий веб-сервера с указанием одного и того же сокета и PID-файла блокировки, т.е. реализуется схема: <em>работающий сервер &#8211;> обновление приложения &#8211;> параллельный запуск сервера с обновлённым приложением &#8211;> мягкое выключение &#8220;старого&#8221; сервера (активные подключения не будут разорваны)</em>.</p>
<p>Кроме того, встроенный сервер из коробки поддерживается TLS с включенным сертификатом разработчика, так что можно запустить https-сервер, использовав ключ <code class="codecolorer text default"><span class="text">--listen</span></code>. Тогда полная команда для запуска сервера может выглядеть так:<br />
<code class="codecolorer bash default"><span class="bash"><span style="color: #c20cb9; font-weight: bold;">perl</span> myapp.pl daemon <span style="color: #660033;">--reload</span> <span style="color: #660033;">--listen</span> https:<span style="color: #000000; font-weight: bold;">//</span>localhost:PORT</span></code></p>
<p>Если веб-сервер планируется применять не только для разработки/локального использования &#8211; можно увеличить его производительность, запустив с опцией <code class="codecolorer text default"><span class="text">daemon prefork</span></code> &#8211; на каждое соединение будет создаваться свой процесс-обработчик (как в Apache), ключ <code class="codecolorer text default"><span class="text">--clients N</span></code> позволяет изменить это число, задав максимальное количество клиентских подключений к одному обработчику.
</p>
<h2>Пример простого приложения на Mojolicious::Lite</h2>
<div class="codecolorer-container perl default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;height:550px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br /></div></td><td><div class="perl codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl</span><br />
<br />
<span style="color: #000066;">require</span> <span style="color: #cc66cc;">5.008</span>_008<span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;"># при подключении Mojolicious::Lite автоматически подключаются warnings и strict</span><br />
<span style="color: #666666; font-style: italic;"># но лучше перебдеть ;)</span><br />
<span style="color: #000000; font-weight: bold;">use</span> warnings<span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">use</span> utf8<span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">use</span> Mojolicious<span style="color: #339933;">::</span><span style="color: #006600;">Lite</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">use</span> Mojo<span style="color: #339933;">::</span><span style="color: #006600;">UserAgent</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #0000ff;">$ENV</span><span style="color: #009900;">&#123;</span><span style="color: #ff0000;">'MOJO_MODE'</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'production'</span><span style="color: #339933;">;</span><br />
<br />
<br />
get <span style="color: #ff0000;">'/'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$self</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># адреса сайтов берутся из адресной строки, очистки нет поскольку</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># ссылки пойдут транзитом к поисковикам. При печати Mojolicious</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># по умолчанию экранирует символы &lt; &gt; &amp; ' &quot; против XSS-атак.</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$sites</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066;">map</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066;">lc</span> <span style="color: #0000ff;">$_</span><span style="color: #339933;">,</span> <span style="color: #339933;">+</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span> <span style="color: #000066;">split</span> <span style="color: #009966; font-style: italic;">/\r\n/</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">param</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'site_url'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$sites</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># метод client устарел, нужно использовать метод ua,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># или создать объект UserAgent явно и с нужными настройками.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># устарел: &nbsp;$self-&gt;client-&gt;get($g_req_url)-&gt;res-&gt;dom-&gt;at('div#resultStats');</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># работает: $self-&gt;ua-&gt;get($g_req_url)-&gt;res-&gt;dom-&gt;at('div#resultStats');</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># Создаем объект UserAgent</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$ua</span> <span style="color: #339933;">=</span> Mojo<span style="color: #339933;">::</span><span style="color: #006600;">UserAgent</span><span style="color: #339933;">-&gt;</span><span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; max_redirects &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'Mozilla/5.0 (Windows; Windows NT 6.1; rv:2.0)'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000066;">keys</span> <span style="color: #0000ff;">%$sites</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># GOOGLE</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># запрашиваем страницу по адресу</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># &quot;http://www.google.com/search?q=site%3A$site&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># и из полученной страницы берем содержимое</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># блока &lt;div id=&quot;resultStats&quot;&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># at - ищет элемент по html-тегу</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$g_req_url</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'http://www.google.ru/search?q=site%3A'</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$_</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">$sites</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#123;</span>google<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#123;</span>req_url<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$g_req_url</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">$sites</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#123;</span>google<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#123;</span>result<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$g_req_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">res</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">dom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">at</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'div#resultStats'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">text</span> <span style="color: #339933;">=~</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009966; font-style: italic;">m/[\w:]+ \s ([\d\s]+)$/msx</span> <span style="color: #339933;">?</span> <span style="color: #0000ff;">$1</span> <span style="color: #339933;">:</span> <span style="color: #ff0000;">'---'</span><span style="color: #339933;">;</span><br />
<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># YANDEX</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># извлекает содержимое &lt;strong class=&quot;b-head-logo__text&quot;&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$y_req_url</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'http://yandex.ru/yandsearch?text=site%3A'</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$_</span><span style="color: #339933;">.</span><span style="color: #ff0000;">'&amp;lr=2'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">$sites</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#123;</span>yandex<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#123;</span>req_url<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$y_req_url</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">$sites</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#123;</span>yandex<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#123;</span>result<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">$ua</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$y_req_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">res</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">dom</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">at</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'strong.b-head-logo__text'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">text</span> <span style="color: #339933;">=~</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009966; font-style: italic;">m/^Наш(?:лось|ёлся) ([\d\w\s\.]+) \s \w+$/msx</span> <span style="color: #339933;">?</span> <span style="color: #0000ff;">$1</span> <span style="color: #339933;">:</span> <span style="color: #ff0000;">'---'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #0000ff;">$self</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">render</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># название шаблона</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; template &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'index'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">format</span> &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=&gt;</span> <span style="color: #ff0000;">'html'</span><span style="color: #339933;">,</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; sites &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">$sites</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Секретная фраза - используется для подписания кукисов,</span><br />
<span style="color: #666666; font-style: italic;"># по умолчанию равна названию скрипта (имени приложения)</span><br />
app<span style="color: #339933;">-&gt;</span><span style="color: #006600;">secret</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'P@r0L-dl!a_MoJ0!'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
app<span style="color: #339933;">-&gt;</span><span style="color: #006600;">start</span><span style="color: #339933;">;</span><br />
<br />
<br />
<span style="color: #666666; font-style: italic;"># ниже в этом же файле объявляем шаблон index.html.ep</span><br />
<span style="color: #666666; font-style: italic;"># index - название шаблона</span><br />
<span style="color: #666666; font-style: italic;"># html - формат шаблона (кроме html - напр. text)</span><br />
<span style="color: #666666; font-style: italic;"># ep - обработчик шаблона (от EmbeddedPerl, ещё - epl)</span><br />
<span style="color: #666666; font-style: italic;"># название, формат и обработчик могут быть переданы методу render</span><br />
<span style="color: #666666; font-style: italic;"># template =&gt; 'название', format =&gt; 'формат', handler =&gt; 'обработчик'</span><br />
<br />
<span style="color: #000000; font-weight: bold;">__DATA__</span><br />
<br />
<span style="color: #339933;">@@</span> <span style="color: #000066;">index</span><span style="color: #339933;">.</span>html<span style="color: #339933;">.</span>ep<br />
<span style="color: #339933;">%</span> layout <span style="color: #ff0000;">'default'</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">%</span> title <span style="color: #ff0000;">'Mojolicious::Lite test'</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #339933;">&lt;</span>table cols<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;3&quot;</span> cellpadding<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;2&quot;</span> cellspacing<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;4&quot;</span> width<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;350px&quot;</span><span style="color: #339933;">&gt;</span><br />
<span style="color: #009999;">&lt;thead&gt;</span><br />
<span style="color: #009999;">&lt;tr&gt;</span> <span style="color: #339933;">&lt;</span>th colspan<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;3&quot;</span><span style="color: #339933;">&gt;</span>Количество страниц в индексе поисковиков<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span><br />
<span style="color: #009999;">&lt;tr&gt;</span> <span style="color: #009999;">&lt;th&gt;</span>Сайт<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span><span style="color: #009999;">&lt;th&gt;</span>Google<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span><span style="color: #009999;">&lt;th&gt;</span>Yandex<span style="color: #339933;">&lt;/</span>th<span style="color: #339933;">&gt;</span> <span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span><br />
<span style="color: #339933;">&lt;/</span>thead<span style="color: #339933;">&gt;</span><br />
<span style="color: #009999;">&lt;tbody&gt;</span><br />
<span style="color: #339933;">%</span> <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000066;">sort</span> <span style="color: #000066;">keys</span> <span style="color: #0000ff;">%$sites</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #009999;">&lt;tr&gt;</span><br />
&nbsp; &nbsp; <span style="color: #339933;">&lt;</span>td align<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;center&quot;</span><span style="color: #339933;">&gt;&lt;%=</span> <span style="color: #0000ff;">$_</span> <span style="color: #339933;">%&gt;&lt;/</span>td<span style="color: #339933;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #339933;">&lt;</span>td align<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;center&quot;</span><span style="color: #339933;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;&lt;%= $sites-&gt;{$_}-&gt;{google}-&gt;{req_url} %&gt;&quot;</span><span style="color: #339933;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">&lt;%=</span> <span style="color: #0000ff;">$sites</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>google<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>result<span style="color: #009900;">&#125;</span> <span style="color: #339933;">%&gt;&lt;/</span>a<span style="color: #339933;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #339933;">&lt;/</span>td<span style="color: #339933;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #339933;">&lt;</span>td align<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;center&quot;</span><span style="color: #339933;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;&lt;%= $sites-&gt;{$_}-&gt;{yandex}-&gt;{req_url} %&gt;&quot;</span><span style="color: #339933;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">&lt;%=</span> <span style="color: #0000ff;">$sites</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">$_</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>yandex<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>result<span style="color: #009900;">&#125;</span> <span style="color: #339933;">%&gt;&lt;/</span>a<span style="color: #339933;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #339933;">&lt;/</span>td<span style="color: #339933;">&gt;</span><br />
<span style="color: #339933;">&lt;/</span>tr<span style="color: #339933;">&gt;</span><br />
<span style="color: #339933;">%</span> <span style="color: #009900;">&#125;</span><br />
<span style="color: #339933;">&lt;/</span>tbody<span style="color: #339933;">&gt;</span><br />
<span style="color: #339933;">&lt;/</span>table<span style="color: #339933;">&gt;</span><br />
<br />
<span style="color: #339933;">&lt;%</span><span style="color: #666666; font-style: italic;"># вспомогательная функция dumper - использует Data::Dumper %&gt;</span><br />
<span style="color: #339933;">&lt;%</span><span style="color: #666666; font-style: italic;">#= dumper($sites) %&gt;</span><br />
<span style="color: #009999;">&lt;hr&gt;</span><br />
<br />
<span style="color: #339933;">&lt;</span>form action<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;./&lt;%= $0 %&gt;&quot;</span><span style="color: #339933;">&gt;</span><br />
URL<span style="color: #339933;">&lt;</span>br <span style="color: #339933;">/&gt;</span><br />
<span style="color: #339933;">&lt;</span>textarea rows<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;5&quot;</span> cols<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;65&quot;</span> name<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;site_url&quot;</span><span style="color: #339933;">&gt;</span><br />
<span style="color: #339933;">&lt;%=</span> <span style="color: #000066;">join</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #000066;">sort</span> <span style="color: #000066;">keys</span> <span style="color: #0000ff;">%$sites</span> <span style="color: #339933;">%&gt;</span><br />
<span style="color: #339933;">&lt;/</span>textarea<span style="color: #339933;">&gt;</span><br />
<span style="color: #339933;">&lt;</span>br <span style="color: #339933;">/&gt;</span><br />
<span style="color: #339933;">&lt;</span>input type<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #339933;">/&gt;</span><br />
<span style="color: #339933;">&lt;/</span>form<span style="color: #339933;">&gt;</span><br />
<span style="color: #339933;">&lt;</span>br <span style="color: #339933;">/&gt;</span><br />
<br />
<br />
<span style="color: #339933;">@@</span> layouts<span style="color: #339933;">/</span>default<span style="color: #339933;">.</span>html<span style="color: #339933;">.</span>ep<br />
<span style="color: #339933;">&lt;!</span>doctype html<span style="color: #339933;">&gt;</span><span style="color: #009999;">&lt;html&gt;</span><br />
&nbsp; <span style="color: #009999;">&lt;head&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009999;">&lt;title&gt;</span><span style="color: #339933;">&lt;%=</span> title <span style="color: #339933;">%&gt;&lt;/</span>title<span style="color: #339933;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #339933;">&lt;%=</span> javascript <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'http://dimio.org/cgi-bin/js/liveinternet-counter.js'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%&gt;</span><br />
&nbsp; &nbsp; <span style="color: #339933;">&lt;</span>meta http<span style="color: #339933;">-</span>equiv<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;Content-Type&quot;</span> content<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;text/html; charset=utf-8&quot;</span> <span style="color: #339933;">/&gt;</span><br />
&nbsp; &nbsp; <span style="color: #339933;">&lt;</span><span style="color: #000066;">link</span> rel<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;favicon&quot;</span> href<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;http://dimio.org/favicon.ico&quot;</span> type<span style="color: #339933;">=</span><span style="color: #ff0000;">&quot;image/x-icon&quot;</span> <span style="color: #339933;">/&gt;</span><br />
&nbsp; <span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span><br />
&nbsp; <span style="color: #009999;">&lt;body&gt;</span><span style="color: #339933;">&lt;%=</span> content <span style="color: #339933;">%&gt;&lt;/</span>body<span style="color: #339933;">&gt;</span><br />
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></div></td></tr></tbody></table></div>
<h4>Результат работы скрипта-примера</h4>
<p><a href="http://dimio.org/cgi-bin/dev/mojo-test.cgi"><img src="http://dimio.org/wp-content/uploads/2011/04/mojo-test.png" alt="" title="mojo-example-script" width="341" height="356" class="aligncenter size-full wp-image-396" /></a></p>

	Метки:<a href="http://dimio.org/tag/how-to" title="how-to" rel="tag">how-to</a>, <a href="http://dimio.org/tag/mojolicious" title="mojolicious" rel="tag">mojolicious</a>, <a href="http://dimio.org/tag/perl" title="perl" rel="tag">perl</a>, <a href="http://dimio.org/tag/internet" title="Интернет" rel="tag">Интернет</a>, <a href="http://dimio.org/tag/programmirovanie" title="программинг" rel="tag">программинг</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/DhcxxzDQOEzM0A5XfOIHBUTFSxw/0/da"><img src="http://feedads.g.doubleclick.net/~a/DhcxxzDQOEzM0A5XfOIHBUTFSxw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/DhcxxzDQOEzM0A5XfOIHBUTFSxw/1/da"><img src="http://feedads.g.doubleclick.net/~a/DhcxxzDQOEzM0A5XfOIHBUTFSxw/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/Oe9wwiKWo9E" height="1" width="1"/>]]></content:encoded><description>Что такое Mojolicious. Введение Благодаря заметке на Хабре (в кэшэ Google) наконец-то решил познакомиться с набирающим популярность фреймворком для веб-разработки на Perl под названием Mojolicious. В общем-то я взял пример скрипта из этой заметки и сделал его чуть более интересным для себя, чтобы охватить немного больше документации по фреймворку (результат вполне работоспособен, его можно посмотреть [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/mojolicious-znakomstvo-s-vebom-iz-korobki.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">11</slash:comments><feedburner:origLink>http://dimio.org/mojolicious-znakomstvo-s-vebom-iz-korobki.html</feedburner:origLink></item><item><title>Настройка Rxvt через Xdefaults</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/0OngzixIAqY/nastrojka-rxvt-cherez-xdefaults.html</link><category>Linux</category><category>.rc</category><category>console</category><category>linux</category><category>manual</category><category>rxvt</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Tue, 19 Apr 2011 04:30:15 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=379</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://dimio.org/wp-content/uploads/2011/04/urxvt.jpg"><img src="http://dimio.org/wp-content/uploads/2011/04/urxvt.jpg" alt="Настройки Rxvt черезе Xdefaults" title="Настройка эмулятора терминала Rxvt" width="525" height="290" class="aligncenter size-full wp-image-392" /></a></p>
<p>С некоторых пор стал пользоваться эмулятором терминала <strong>urxvt</strong> (unicode-версия <strong>rxvt</strong>) вместо <em>gnome-terminal</em>. Причина простая &#8211; на старом ноуте разница в скорости заметна и эта разница &#8211; в пользу <strong>urxvt</strong> (особенно если запускать его при старте <em>GUI</em> в режиме демона).</p>
<p>В остальном отличий в общем-то нет, <strong>urxvt</strong> тоже поддерживает именованные вкладки (табы), обработку гиперссылок, копирование и вставку мышью. Кроме того, он имеет поиск по выводимым в терминал данным (по Alt+S &#8211; очень удобно) и поддерживает цветной вывод <em>man</em>-страниц. Также <strong>urxvt</strong> существует и для <em><a href="http://dimio.org/cygwin-besplatnaya-realizaciya-unix-podobnogo-okruzheniya-dlya-windows.html" title="Cygwin – бесплатная реализация unix-подобного окружения для Windows">cygwin</a></em>.</p>
<p>На этом вводную часть закончу и ниже просто на память, чтобы не перечитывать ман при необходимости настроить терминал, выложу конфиг для <strong>urxvt</strong>, выполненный в виде отдельного файла, подключаемого из <em>.Xdefaults</em>.</p>
<p><span id="more-379"></span></p>
<h3>Содержимое .Xdefaults для подключения настроек rxvt</h3>
<p><div class="codecolorer-container dot default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="dot codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">!</span>Перечитать файл и применить настройки<br />
<span style="color: #66cc66;">!</span><span style="color: #66cc66;">&#40;</span>при наличии ошибок выведет отчёт<span style="color: #66cc66;">&#41;</span>:<br />
<span style="color: #66cc66;">!</span>xrdb <span style="color: #66cc66;">-</span>load <span style="color: #66cc66;">~/</span>.Xdefaults<br />
<br />
<span style="color: #66cc66;">!</span>Подключение файла нстроек для URxvt<br />
<span style="color: #66cc66;">!</span><span style="color: #66cc66;">&#40;</span>расположен в $HOME<span style="color: #66cc66;">&#41;</span><br />
<span style="color: #339933;">#include &quot;.rxvtrc&quot;</span></div></div>
</p>
<h3>.rxvtrc с комментариями &#8211; конфиг для rxvt</h3>
<p><div class="codecolorer-container dot default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;height:400px;"><div class="dot codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">!</span> Для использования добавить в $HOME<span style="color: #66cc66;">/</span>.Xdefaults строку:<br />
<span style="color: #66cc66;">!</span><span style="color: #339933;">#include &quot;.rxvtrc&quot;</span><br />
<br />
<br />
<span style="color: #66cc66;">!===</span> ВИЗУАЛЬНЫЕ НАСТРОЙКИ <span style="color: #66cc66;">===</span><br />
<span style="color: #66cc66;">!</span> Настройки цветовой схемы<br />
URxvt<span style="color: #66cc66;">*</span>background: <span style="color: #339933;">#212121</span><br />
URxvt<span style="color: #66cc66;">*</span>foreground: <span style="color: #339933;">#C0C0C0</span><br />
URxvt.color0: &nbsp; &nbsp; rgb:00<span style="color: #66cc66;">/</span>00<span style="color: #66cc66;">/</span>00<br />
URxvt.color1: &nbsp; &nbsp; rgb:e0<span style="color: #66cc66;">/</span><span style="color: #cc66cc;">10</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">10</span><br />
URxvt.color2: &nbsp; &nbsp; rgb:<span style="color: #cc66cc;">20</span><span style="color: #66cc66;">/</span>ad<span style="color: #66cc66;">/</span><span style="color: #cc66cc;">20</span><br />
URxvt.color3: &nbsp; &nbsp; rgb:d4<span style="color: #66cc66;">/</span>c2<span style="color: #66cc66;">/</span>4f<br />
URxvt.color4: &nbsp; &nbsp; rgb:<span style="color: #cc66cc;">23</span><span style="color: #66cc66;">/</span>1b<span style="color: #66cc66;">/</span>b8<br />
URxvt.color5: &nbsp; &nbsp; rgb:9c<span style="color: #66cc66;">/</span><span style="color: #cc66cc;">38</span><span style="color: #66cc66;">/</span><span style="color: #cc66cc;">85</span><br />
URxvt.color6: &nbsp; &nbsp; rgb:1d<span style="color: #66cc66;">/</span>bd<span style="color: #66cc66;">/</span>b8<br />
URxvt.color7: &nbsp; &nbsp; rgb:fe<span style="color: #66cc66;">/</span>fe<span style="color: #66cc66;">/</span>fe<br />
URxvt.color8: &nbsp; &nbsp; rgb:6a<span style="color: #66cc66;">/</span>6a<span style="color: #66cc66;">/</span>6a<br />
URxvt.color9: &nbsp; &nbsp; rgb:e8<span style="color: #66cc66;">/</span>3a<span style="color: #66cc66;">/</span>3d<br />
URxvt.color10: &nbsp; &nbsp;rgb:<span style="color: #cc66cc;">35</span><span style="color: #66cc66;">/</span>e9<span style="color: #66cc66;">/</span><span style="color: #cc66cc;">56</span><br />
URxvt.color11: &nbsp; &nbsp;rgb:ff<span style="color: #66cc66;">/</span>ff<span style="color: #66cc66;">/</span>2f<br />
URxvt.color12: &nbsp; &nbsp;rgb:3a<span style="color: #66cc66;">/</span><span style="color: #cc66cc;">53</span><span style="color: #66cc66;">/</span>f0<br />
URxvt.color13: &nbsp; &nbsp;rgb:e6<span style="color: #66cc66;">/</span><span style="color: #cc66cc;">28</span><span style="color: #66cc66;">/</span>ba<br />
URxvt.color14: &nbsp; &nbsp;rgb:1c<span style="color: #66cc66;">/</span>f5<span style="color: #66cc66;">/</span>f5<br />
URxvt.color15: &nbsp; &nbsp;rgb:ff<span style="color: #66cc66;">/</span>ff<span style="color: #66cc66;">/</span>ff<br />
<br />
<span style="color: #66cc66;">!</span> Будет ли курсор мигать<br />
URxvt.cursorBlink: &nbsp; &nbsp; &nbsp;<span style="color: #993333;">true</span><br />
<span style="color: #66cc66;">!</span> Цвет курсора<br />
<span style="color: #66cc66;">!</span>URxvt.cursorColor: &nbsp; &nbsp; <span style="color: #b1b100;">yellow</span><br />
<span style="color: #66cc66;">!</span> Цвет текста, находящегося под курсором<br />
URxvt.cursorColor2: &nbsp; &nbsp; <span style="color: #b1b100;">red</span><br />
<br />
<span style="color: #66cc66;">!</span> Псевдопрозрачность <span style="color: #66cc66;">-</span> в кач<span style="color: #66cc66;">-</span>ве фона<br />
<span style="color: #66cc66;">!</span> поставить обои рабочего стола<br />
<span style="color: #66cc66;">!</span>URxvt<span style="color: #66cc66;">*</span>transparent: &nbsp; &nbsp; <span style="color: #993333;">true</span><br />
<span style="color: #66cc66;">!</span> Яркость прозрачного фона <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">-</span><span style="color: #cc66cc;">100</span> .. <span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">!</span>URxvt<span style="color: #66cc66;">*</span>shading: &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc66cc;">40</span><br />
<span style="color: #66cc66;">!</span> Та же псевдопрозрачность, без настройки яркости<br />
<span style="color: #66cc66;">!</span>URxvt.inheritPixmap: &nbsp; &nbsp; <span style="color: #993333;">true</span><br />
<span style="color: #66cc66;">!</span> Цвет окрашивания прозрачного фона<br />
<span style="color: #66cc66;">!</span>URxvt<span style="color: #66cc66;">*</span>tintColor: &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">blue</span><br />
<br />
<span style="color: #66cc66;">!</span> Иконка окна терминала<br />
URxvt<span style="color: #66cc66;">*</span>iconFile: <span style="color: #66cc66;">/</span>usr<span style="color: #66cc66;">/</span>share<span style="color: #66cc66;">/</span>pixmaps<span style="color: #66cc66;">/</span>gnome<span style="color: #66cc66;">-</span>terminal.xpm<br />
<br />
<span style="color: #66cc66;">!</span> Настройки шрифтов<br />
URxvt<span style="color: #66cc66;">*</span>font:<span style="color: #66cc66;">-</span>xos4<span style="color: #66cc66;">-</span>terminus<span style="color: #66cc66;">-</span>medium<span style="color: #66cc66;">-</span>r<span style="color: #66cc66;">-</span>normal<span style="color: #66cc66;">--</span><span style="color: #cc66cc;">14</span><span style="color: #66cc66;">-*-*-*-*-*-</span>u<br />
<span style="color: #66cc66;">!</span> Горячие клавиши для изменения размера шрифта <span style="color: #ff0000;">&quot;на лету&quot;</span><br />
<span style="color: #66cc66;">!</span> <span style="color: #66cc66;">&#40;</span>Ctrl<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span> <span style="color: #66cc66;">-</span> норма, Ctrl<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">-</span> увеличить до <span style="color: #cc66cc;">24</span><span style="color: #66cc66;">&#41;</span><br />
URxvt.keysym.C<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span>: command:\033<span style="color: #66cc66;">&#93;</span><span style="color: #cc66cc;">710</span>;<span style="color: #66cc66;">-</span>xos4<span style="color: #66cc66;">-</span>terminus<span style="color: #66cc66;">-</span>medium<span style="color: #66cc66;">-</span>r<span style="color: #66cc66;">-</span>normal<span style="color: #66cc66;">--</span><span style="color: #cc66cc;">14</span><span style="color: #66cc66;">-*-*-*-*-*-</span>u\007\033<span style="color: #66cc66;">&#93;</span><span style="color: #cc66cc;">711</span>;<span style="color: #66cc66;">-</span>xos4<span style="color: #66cc66;">-</span>terminus<span style="color: #66cc66;">-</span>bold<span style="color: #66cc66;">-</span>r<span style="color: #66cc66;">-</span>normal<span style="color: #66cc66;">--</span><span style="color: #cc66cc;">14</span><span style="color: #66cc66;">-*-*-*-*-*-</span>u\007<br />
URxvt.keysym.C<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">2</span>: command:\033<span style="color: #66cc66;">&#93;</span><span style="color: #cc66cc;">710</span>;<span style="color: #66cc66;">-</span>xos4<span style="color: #66cc66;">-</span>terminus<span style="color: #66cc66;">-</span>medium<span style="color: #66cc66;">-</span>r<span style="color: #66cc66;">-</span>normal<span style="color: #66cc66;">--</span><span style="color: #cc66cc;">24</span><span style="color: #66cc66;">-*-*-*-*-*-</span>u\007\033<span style="color: #66cc66;">&#93;</span><span style="color: #cc66cc;">711</span>;<span style="color: #66cc66;">-</span>xos4<span style="color: #66cc66;">-</span>terminus<span style="color: #66cc66;">-</span>bold<span style="color: #66cc66;">-</span>r<span style="color: #66cc66;">-</span>normal<span style="color: #66cc66;">--</span><span style="color: #cc66cc;">22</span><span style="color: #66cc66;">-*-*-*-*-*-</span>u\007<br />
<br />
<span style="color: #66cc66;">!</span> Цвета в man<span style="color: #66cc66;">-</span>страницах<br />
URxvt.colorMode: &nbsp; &nbsp; &nbsp; &nbsp; on<br />
URxvt.boldColors: &nbsp; &nbsp; &nbsp; &nbsp;on<br />
URxvt.dynamicColors: &nbsp; &nbsp; on<br />
URxvt.colorULMode: &nbsp; &nbsp; &nbsp; on<br />
URxvt.underLine: &nbsp; &nbsp; &nbsp; &nbsp; off<br />
URxvt.colorBDMode: &nbsp; &nbsp; &nbsp; on<br />
URxvt.colorBD: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">cyan</span><br />
<br />
<span style="color: #66cc66;">!</span> Скроллинг <span style="color: #66cc66;">+</span> скроллбар<br />
URxvt<span style="color: #66cc66;">*</span>scrollBar: &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333;">false</span><br />
URxvt<span style="color: #66cc66;">*</span>scrollBar_right: &nbsp;<span style="color: #993333;">true</span><br />
URxvt<span style="color: #66cc66;">*</span>scrollstyle: &nbsp; &nbsp; &nbsp;rxvt<br />
<br />
<span style="color: #66cc66;">!</span> Отображать символ табуляции как один широкий символ<br />
<span style="color: #66cc66;">!</span> <span style="color: #66cc66;">&#40;</span>иначе <span style="color: #66cc66;">-</span> как перемещения курсора<span style="color: #66cc66;">&#41;</span><br />
URxvt.pastableTabs: &nbsp; &nbsp; <span style="color: #993333;">true</span><br />
<br />
<br />
<span style="color: #66cc66;">!===</span> НАСТРОЙКИ ОБРАБОТКИ ССЫЛОК <span style="color: #66cc66;">===</span><br />
<span style="color: #66cc66;">!</span> Внешняя программа для открытия ссылок<br />
URxvt.urlLauncher: &nbsp; &nbsp; &nbsp;firefox<br />
<span style="color: #66cc66;">!</span> Кнопка мыши, которая открывает ссылку<br />
URxvt.matcher.button: &nbsp; <span style="color: #cc66cc;">1</span><br />
<span style="color: #66cc66;">!</span> Горячие клавиши для выделения ссылок <span style="color: #66cc66;">&#40;</span>Alt<span style="color: #66cc66;">+</span>U<span style="color: #66cc66;">&#41;</span>,<br />
<span style="color: #66cc66;">!</span> после выделения ссылка открывается по Enter<br />
URxvt.keysym.M<span style="color: #66cc66;">-</span>u: &nbsp; &nbsp; &nbsp; perl:url<span style="color: #66cc66;">-</span>select:select_next<br />
<span style="color: #66cc66;">!</span> Выделять ссылки голубым цветом<br />
URxvt.colorUL: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">#86a2be</span><br />
<span style="color: #66cc66;">!</span> Подчеркивать ссылки<br />
URxvt.underlineURLs: &nbsp; &nbsp;<span style="color: #993333;">true</span><br />
<span style="color: #66cc66;">!</span>URxvt.underlineColor: &nbsp; <span style="color: #b1b100;">yellow</span><br />
<br />
<br />
<span style="color: #66cc66;">!===</span> НАСТРОЙКИ ФУНКЦИОНАЛА <span style="color: #66cc66;">===</span><br />
<span style="color: #66cc66;">!</span> Сколько строк хранить в памяти<br />
URxvt<span style="color: #66cc66;">*</span>saveLines: &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #cc66cc;">5000</span><br />
<span style="color: #66cc66;">!</span> Настройки табов<br />
URxvt.tabbed.new<span style="color: #66cc66;">-</span>button: &nbsp; &nbsp;no<br />
URxvt.tabbed.tabbar<span style="color: #66cc66;">-</span>fg: &nbsp; &nbsp; <span style="color: #cc66cc;">15</span><br />
URxvt.tabbed.tabbar<span style="color: #66cc66;">-</span>bg: &nbsp; &nbsp; <span style="color: #cc66cc;">0</span><br />
URxvt.tabbed.tab<span style="color: #66cc66;">-</span>fg: &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #cc66cc;">0</span><br />
URxvt.tabbed.tab<span style="color: #66cc66;">-</span>bg: &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #cc66cc;">14</span><br />
<span style="color: #66cc66;">!</span> Оболочка<br />
URxvt.geometry: &nbsp; &nbsp; &nbsp; &nbsp; 130x25<br />
URxvt.loginShell: &nbsp; &nbsp; &nbsp; <span style="color: #993333;">false</span><br />
URxvt.meta: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ignore<br />
URxvt.utmpInhibit: &nbsp; &nbsp; &nbsp;<span style="color: #993333;">true</span><br />
<br />
<br />
<span style="color: #66cc66;">!===</span> НАСТРОЙКИ РАСШИРЕНИЙ <span style="color: #66cc66;">===</span><br />
<span style="color: #66cc66;">!</span> Путь для поиска пользовательских расширений<br />
URxvt.perl<span style="color: #66cc66;">-</span>lib: &nbsp; &nbsp; &nbsp; &nbsp; $HOME<span style="color: #66cc66;">/</span>.config<span style="color: #66cc66;">/</span>urxvt<span style="color: #66cc66;">/</span>perl<span style="color: #66cc66;">/</span><br />
<span style="color: #66cc66;">!</span> Загружаемые по умолчанию расширения<br />
<span style="color: #66cc66;">!</span> Основные; расширенные табы <span style="color: #66cc66;">&#40;</span>без кнопки NEW, можно устанавливать<br />
<span style="color: #66cc66;">!</span> заголовок окна: https:<span style="color: #808080; font-style: italic;">//github.com/stepb/urxvt-tabbedex);</span><br />
<span style="color: #66cc66;">!</span> регэкспы для выделения ссылок в тексте; выбор ссылок горячими<br />
<span style="color: #66cc66;">!</span> клавишами<span style="color: #66cc66;">&#41;</span>; копирование в буфер обмена<br />
URxvt.perl<span style="color: #66cc66;">-</span>ext<span style="color: #66cc66;">-</span>common: &nbsp;default,tabbedex,matcher,url<span style="color: #66cc66;">-</span>select,clipboard<span style="color: #66cc66;">-</span>osc</div></div>
</p>
<h3>Горячие клавиши rxvt</h3>
<p>После применения всех указанных выше настроек, <strong>rxvt</strong> будет реагировать на следующие сочетания клавишей:</p>
<ul>
<li><strong>Shift+Down</strong> (стрелка вниз) &#8211; создать новую вкладку (таб);</li>
<li><strong>Shift+Up</strong> (стрелка вверх) &#8211; задать имя вкладке (Esc &#8211; отмена);</li>
<li><strong>Shift+Left/Right</strong> (стрелки влево/вправо) &#8211; переключение между вкладками (можно мышью кликать на нужную вкладку);</li>
<li><strong>Ctrl+Left/Right</strong> &#8211; перемещение текущей вкладки влево/вправо;</li>
<li><strong>Ctrl+D</strong> &#8211; закроет вкладку (если командная строка пустая &#8211; защита от случайного нажатия);</li>
</ul>
<p>Еще несколько конфигов для различных программ собраны на <a href="http://dimio.org/config-dotfiles">отдельной странице</a> блога.</p>

	Метки:<a href="http://dimio.org/tag/rc" title=".rc" rel="tag">.rc</a>, <a href="http://dimio.org/tag/console" title="console" rel="tag">console</a>, <a href="http://dimio.org/tag/linux" title="linux" rel="tag">linux</a>, <a href="http://dimio.org/tag/manual" title="manual" rel="tag">manual</a>, <a href="http://dimio.org/tag/rxvt" title="rxvt" rel="tag">rxvt</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/D-xt2SAd8oXFf0tWY5U0WCgvt3c/0/da"><img src="http://feedads.g.doubleclick.net/~a/D-xt2SAd8oXFf0tWY5U0WCgvt3c/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/D-xt2SAd8oXFf0tWY5U0WCgvt3c/1/da"><img src="http://feedads.g.doubleclick.net/~a/D-xt2SAd8oXFf0tWY5U0WCgvt3c/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/0OngzixIAqY" height="1" width="1"/>]]></content:encoded><description>С некоторых пор стал пользоваться эмулятором терминала urxvt (unicode-версия rxvt) вместо gnome-terminal. Причина простая &amp;#8211; на старом ноуте разница в скорости заметна и эта разница &amp;#8211; в пользу urxvt (особенно если запускать его при старте GUI в режиме демона). В остальном отличий в общем-то нет, urxvt тоже поддерживает именованные вкладки (табы), обработку гиперссылок, копирование и [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/nastrojka-rxvt-cherez-xdefaults.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://dimio.org/nastrojka-rxvt-cherez-xdefaults.html</feedburner:origLink></item><item><title>RC Link Redirector и ссылки в текстовом виджете</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/2rf0kcryUXY/rc-link-redirector-i-ssylki-v-tekstovom-vidzhete.html</link><category>Блоггинг</category><category>Хитрости</category><category>how-to</category><category>plugin</category><category>seo</category><category>wordpress</category><category>памятка</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Tue, 12 Apr 2011 10:53:51 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=383</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>На правах мини-совета для тех, кто тоже использует плагин <noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBQWTkhSC1BbX0pYEFoOWkoKEwEdQVAeQFVcDRcAUkFYEU4=/">RC Link Redirector</a></noindex> для закрывания от индексации посторонных ссылок. Изначально плагин умеет оборачивать ссылки в записях, на страницах, в цитатх, в комментарих и текстах комментариев и т.д., но не умеет обрабатывать текстовые виджеты, в которые удобно ставить свои кнопки, баннеры и прочие подобные штуки.</p>
<p>Чтобы плагин научился закрывать ссылки в виджетах, надо добавить в него две строки (можно через <em>Плагины->Редактор</em>, если нет специального редактора для <a href="http://dimio.org/php-personal-home-page-tools.html">PHP</a>).</p>
<p>Первую &#8211; внутрь функции <code>rcr_adminpage</code>, например после <strong>187</strong> строки &#8220;<code class="codecolorer php default"><span class="php"><span style="color: #339933;">&amp;</span>nbsp<span style="color: #339933;">;</span><span style="color: #0000ff;">&quot;Оборачивать&quot;</span> ссылки в <span style="color: #339933;">&lt;</span>strong<span style="color: #339933;">&gt;</span>блогролле<span style="color: #339933;">&lt;/</span>strong<span style="color: #339933;">&gt;&lt;/</span>label<span style="color: #339933;">&gt;&lt;/</span>td<span style="color: #339933;">&gt;&lt;/</span>tr<span style="color: #339933;">&gt;</span></span></code>&#8221; добавить строку:</p>
<div class="codecolorer-container php default" style="border:1px solid #9F9F9F;width:100%;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp;&lt;tr&gt;&lt;td&gt;&lt;label&gt;&lt;input name='rcr_txt_widgets' type='checkbox' value='1' <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$rcr_opt</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'rcr_txt_widgets'</span><span style="color: #009900;">&#93;</span> ? <span style="color: #0000ff;">'checked'</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span> /&gt;<br />
&nbsp; &nbsp; &amp;nbsp;&quot;Оборачивать&quot; ссылки в &lt;strong&gt;виджетах&lt;/strong&gt;&lt;/label&gt;&lt;/td&gt;&lt;/tr&gt;</div></div>
</p>
<p>Вторую &#8211; внутри <code>rcr_redirector_hook</code>, например после строки <strong>241</strong> &#8220;<code class="codecolorer php default"><span class="php"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rcr_opt</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'rcr_comment'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> add_filter<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'comment_text'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rcr_encode'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></span></code>&#8221; вставить строку:</p>
<div class="codecolorer-container php default" style="border:1px solid #9F9F9F;width:100%;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rcr_opt</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'rcr_txt_widgets'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> add_filter<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'widget_text'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rcr_encode'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
</p>
<p>Теперь осталось в админке плагина поставить галку на опции <em>&#8220;Оборачивать&#8221; ссылки в виджетах</em> и наслаждаться результатом <img src='http://dimio.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
P.S. Кому лень редактировать файл плагина &#8211; можно <a href="http://dimio.org/wp-content/uploads/soft/rc_redirector.zip">скачать обновлённый</a> и просто заменить старый в папке <em>/wp-content/plugins/rc_redirector</em></p>

	Метки:<a href="http://dimio.org/tag/how-to" title="how-to" rel="tag">how-to</a>, <a href="http://dimio.org/tag/plugin" title="plugin" rel="tag">plugin</a>, <a href="http://dimio.org/tag/seo" title="seo" rel="tag">seo</a>, <a href="http://dimio.org/tag/wordpress" title="wordpress" rel="tag">wordpress</a>, <a href="http://dimio.org/tag/pamyatka" title="памятка" rel="tag">памятка</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/w5tagElL_vJlDPCmATYmzl9EdwM/0/da"><img src="http://feedads.g.doubleclick.net/~a/w5tagElL_vJlDPCmATYmzl9EdwM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/w5tagElL_vJlDPCmATYmzl9EdwM/1/da"><img src="http://feedads.g.doubleclick.net/~a/w5tagElL_vJlDPCmATYmzl9EdwM/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/2rf0kcryUXY" height="1" width="1"/>]]></content:encoded><description>На правах мини-совета для тех, кто тоже использует плагин RC Link Redirector для закрывания от индексации посторонных ссылок. Изначально плагин умеет оборачивать ссылки в записях, на страницах, в цитатх, в комментарих и текстах комментариев и т.д., но не умеет обрабатывать текстовые виджеты, в которые удобно ставить свои кнопки, баннеры и прочие подобные штуки. Чтобы плагин [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/rc-link-redirector-i-ssylki-v-tekstovom-vidzhete.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://dimio.org/rc-link-redirector-i-ssylki-v-tekstovom-vidzhete.html</feedburner:origLink></item><item><title>Сравнение производительности сетевых библиотек в Perl</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/JX2vuHIkJbk/sravnenie-proizvoditelnosti-setevyx-bibliotek-v-perl.html</link><category>Интернет</category><category>Кодинг</category><category>curl</category><category>perl</category><category>wget</category><category>многопоточность</category><category>парсер</category><category>программинг</category><category>скрипт</category><category>тиц</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Thu, 07 Apr 2011 03:46:26 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=364</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Когда задумал сделать парсер тИЦ для <a href="http://dimio.org/lj-mass-add-remove-friends">LJ Add/Remove Fiends</a> &#8211; решил для начала проверить, какой способ загрузки страниц с показателями тИЦ из скрипта окажется быстрее, поскольку это в любом случае окажется самым узким местом в производительности парсера (любая обработка уже полученных данных, если она сделана без грубых ошибок типа бесконечного цикла, происходит гораздо быстрее загрузки этих данных по сети).</p>
<p>Для начала проверил на локальной машине (первый тест), затем на сервере (второй тест). Воспользовался модулем <code>Benchmark::Timer</code>, по сути он ставит метки начала и конца, после чего вычисляет разницу между ними (то же самое несложно получить с использованием <code>Time::HiRes</code>). У <code>Benchmark::Timer</code> правда есть дополнительная возможность &#8211; он может гонять тест до получения результата с заданной обеспеченностью и заданным процентом ошибки.</p>
<p>Третьим тестом, уже из чистого любопытства (поскольку результат был предсказуем) был тест многопоточной загрузки. Естественно этот вариант оказался быстрее любого из однопоточных, в среднем в два раза (при 15 потоках).</p>
<p><strong>Выводы</strong> &#8211; библиотеки <em><a href="http://dimio.org/perl-practical-extraction-and-report-language.html">Perl</a></em> не только выгодней с точки зрения безопасности, но и работают стабильно быстрее вызовов системных утилит. <strong>Самую медленную загрузку показал <em>Wget</em></strong>, основывать парсер на нём &#8211; явно плохая идея. Многопточность естественно вне конкуренции. Подробности ниже.</p>
<p><span id="more-364"></span></p>
<h3>Объекты и условия тестирования</h3>
<ul>
<li>Модули Perl:
<ul>
<li>LWP::UserAgent 6.02</li>
<li>LWP::Curl 0.07-1</li>
<li>WWW::Curl::Easy 4.15</li>
<li>LWP::Parallel::UserAgent 2.57 (15 потоков)</li>
</ul>
</li>
<li>Внешние загрузчики:
<ul>
<li>Wget 1.12</li>
<li>Curl 7.21.3</li>
</ul>
</li>
</ul>
<p>На локальной машине каждым способом загружалось по 200 страниц, с сервера &#8211; 100. Тесты выполнял по 5 раз, результаты усреднил (меня интересовали отношения результатов между собой, а не абсолютные значения). Ссылки передавались скрипту из файла, содержащего запрос тИЦ для 400 различных адресов, например:<br />
<code>http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://nadonenado.livejournal.com</code></p>
<h3>Результаты тестирования скорости загрузки страниц в Perl</h3>
<table cellpadding="10" cellspacing="8" cols="4">
<tr>
<th colspan="4">200 запросов с локальной машины:<br /> tail -n 200  www-get-speed-data.txt | perl www-get-speed.pl</th>
</tr>
<tr>
<td rowspan="5">Trails:<br />200</td>
<td width="50">LWP-UA</td>
<td>9.523s total</td>
<td>47.615 ms/trial</td>
</tr>
<tr>
<td>LWP-Curl</td>
<td>8.500s total</td>
<td>42.499 ms/trial</td>
</tr>
<tr>
<td>Wget 1.12 qx{}</td>
<td>15.392s total</td>
<td>76.958 ms/trial</td>
</tr>
<tr>
<td>WWW-Curl-Easy</td>
<td>9.081s total</td>
<td>45.405 ms/trial</td>
</tr>
<tr>
<td>Curl 7.21.3 qx{}</td>
<td>13.340s total</td>
<td>66.698 ms/trial</td>
</tr>
<tr>
<th colspan="4">100 запросов с сервера (США):<br /> tail -n 100  www-get-speed-data.txt | perl www-get-speed.pl</th>
</tr>
<tr>
<td rowspan="5">Trails:<br />100</td>
<td>LWP-UA</td>
<td>42.861s total</td>
<td>428.611 ms/trial</td>
</tr>
<tr>
<td>LWP-Curl</td>
<td>41.762s total</td>
<td>417.615 ms/trial</td>
</tr>
<tr>
<td>Wget 1.10.2 qx{}</td>
<td>46.554s total</td>
<td>465.543 ms/trial</td>
</tr>
<tr>
<td>WWW-Curl-Easy</td>
<td>40.748s total</td>
<td>407.476 ms/trial</td>
</tr>
<tr>
<td>Curl 7.20.0 qx{}
<td>45.750s total),
<td>457.500 ms/trial</tr>
<tr>
<th colspan="4">Параллельные запросы с сервера (100, по 15 одновременных):<br /> tail -n 100  www-get-speed-data.txt | perl lwp-parallel-ua.pl</th>
</tr>
<tr>
<td>100 trial</td>
<td>LWP-PUA</td>
<td>22.967s total</td>
<td>229,670 ms/trial</td>
</tr>
</table>
<h3>Код тестов для проверки скорости выгрузки страниц на Perl</h3>
<h4>Загрузка страниц из Perl в один поток (LWP, CURL, Wget)</h4>
<p><a href='http://dimio.org/sravnenie-proizvoditelnosti-setevyx-bibliotek-v-perl.html#SID364_1_tgl' title='навестить блог, чтобы проверить этот интерцептор'>[[навестить блог, чтобы проверить этот интерцептор]]</a></p>
<h4>Многопоточная загрузка страниц из Perl (15 потоков)</h4>
<p><a href='http://dimio.org/sravnenie-proizvoditelnosti-setevyx-bibliotek-v-perl.html#SID364_2_tgl' title='навестить блог, чтобы проверить этот интерцептор'>[[навестить блог, чтобы проверить этот интерцептор]]</a></p>

	Метки:<a href="http://dimio.org/tag/curl" title="curl" rel="tag">curl</a>, <a href="http://dimio.org/tag/perl" title="perl" rel="tag">perl</a>, <a href="http://dimio.org/tag/wget" title="wget" rel="tag">wget</a>, <a href="http://dimio.org/tag/mnogopotochnost" title="многопоточность" rel="tag">многопоточность</a>, <a href="http://dimio.org/tag/parser" title="парсер" rel="tag">парсер</a>, <a href="http://dimio.org/tag/programmirovanie" title="программинг" rel="tag">программинг</a>, <a href="http://dimio.org/tag/skript" title="скрипт" rel="tag">скрипт</a>, <a href="http://dimio.org/tag/tic" title="тиц" rel="tag">тиц</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/dbqF_NRiog0xLpzA6R41ScePSA0/0/da"><img src="http://feedads.g.doubleclick.net/~a/dbqF_NRiog0xLpzA6R41ScePSA0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/dbqF_NRiog0xLpzA6R41ScePSA0/1/da"><img src="http://feedads.g.doubleclick.net/~a/dbqF_NRiog0xLpzA6R41ScePSA0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/JX2vuHIkJbk" height="1" width="1"/>]]></content:encoded><description>Когда задумал сделать парсер тИЦ для LJ Add/Remove Fiends &amp;#8211; решил для начала проверить, какой способ загрузки страниц с показателями тИЦ из скрипта окажется быстрее, поскольку это в любом случае окажется самым узким местом в производительности парсера (любая обработка уже полученных данных, если она сделана без грубых ошибок типа бесконечного цикла, происходит гораздо быстрее загрузки [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/sravnenie-proizvoditelnosti-setevyx-bibliotek-v-perl.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">4</slash:comments><feedburner:origLink>http://dimio.org/sravnenie-proizvoditelnosti-setevyx-bibliotek-v-perl.html</feedburner:origLink></item><item><title>Вставка PHP кода в WordPress записи и виджеты</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/J296xeA0SaA/vstavka-php-koda-v-wordpress-zapisi-i-vidzhety.html</link><category>Блоггинг</category><category>Хитрости</category><category>php</category><category>wordpress</category><category>блог</category><category>программинг</category><category>трюки</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Thu, 31 Mar 2011 02:15:03 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=359</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>Давно подумывал над тем, чтобы вставлять исполняемый код в посты, страницы и виджеты <em>WordPress</em>. Поскольку сам движок написан на <em><a href="http://dimio.org/php-personal-home-page-tools.html" title="PHP – Personal Home Page Tools">PHP</a></em> &#8211; логично вставлять именно его, хотя можно попробовать встроить например <em><a href="http://dimio.org/perl-practical-extraction-and-report-language.html">Perl</a></em>, воспользовавшись <em>CPAN</em>-модулем <code class="codecolorer text default"><span class="text">PHP::Interpreter</span></code> или <em>PECL</em>-модулем <em>PHP</em> под названием <code class="codecolorer text default"><span class="text">perl</span></code>. Но <em>PHP</em> вставить естественно проще <img src='http://dimio.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Итак, как же вставить в <em>WordPress</em> <em>PHP</em>? Как и в большинстве других случаев, когда надо модифицировать движок &#8211; просто воспользоваться подходящим плагином.<br />
Плагинов находится множество, я попробовал 4 штуки и остановился на <strong>Exec-PHP</strong>.<br />
Он умеет всё, что мне было надо:</p>
<ul>
<li>Вставлять исполняемый <em>PHP</em> код в посты (и соответственно &#8211; в страницы)</li>
<li>Втавлять код в виджеты</li>
</ul>
<p>Прейдём к настройке плаина.
</p>
<p>Настройка может оказаться не совсем очевидной &#8211; с административной страницы плагина всё сделать не получится. Чтобы исполнение <em>PHP</em>-кода в WordPress заработало, нужно убедиться в следующем:</p>
<ul>
<li>Что пункт <code class="codecolorer text default"><span class="text">&quot;WordPress должен исправлять некорректный XHTML код автоматически&quot;</span></code> в меню <em>Настройки->Написание</em> <strong>неактивен</strong></li>
<li>Что выключен &#8220;графический&#8221; редактор в меню <em>Пользователи->Ваш профиль</em> (стоит галка на <code class="codecolorer text default"><span class="text">&quot;Отключить «визуальное редактирование» при написании&quot;</span></code>)</li>
<li>Что нужной группе пользователей (в <em>WordPress</em> это называется &#8220;ролью&#8221;) разрешено исполнение <em>PHP</em>-кода (для роли &#8220;<em>Administrator</em>&#8221; должно быть разрешено по умолчанию)</li>
</ul>
<p>При выполнении вышеперечисленных условий втавленный в записи, страницы и виджеты код должен успешно исполняться. Например мой <a href="http://dimio.org/lj-mass-add-remove-friends">скрипт для массового добавления друзей в ЖЖ</a>, будучи вставленным в страницу <em>WordPress</em>, успешно работает!</p>
<p>Считаю не лишним напомнить про опасность исполнения неочищенного кода. Не знаю, поддерживает ли <em>PHP</em> какую-то аналогичую <code class="codecolorer text default"><span class="text">perl -T</span></code> опцию, поэтому нужно просто помнить про очистку пользовательского ввода (использование недопустимых символов, размеры аргументов опций и т.п.), экранирование всех передаваемых в <em>shell</em> команд и их аргументов и так далее.</p>
<p>В остальном польза от встроенного в WordPress PHP кода очевидна &#8211; это полная свобода действий с содержимым блога, помноженная на простоту выполнения этих действий!</p>

	Метки:<a href="http://dimio.org/tag/php" title="php" rel="tag">php</a>, <a href="http://dimio.org/tag/wordpress" title="wordpress" rel="tag">wordpress</a>, <a href="http://dimio.org/tag/blog" title="блог" rel="tag">блог</a>, <a href="http://dimio.org/tag/programmirovanie" title="программинг" rel="tag">программинг</a>, <a href="http://dimio.org/tag/tryuki" title="трюки" rel="tag">трюки</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/eHakcdu3zrsIW_gzE87vD9Hz8KI/0/da"><img src="http://feedads.g.doubleclick.net/~a/eHakcdu3zrsIW_gzE87vD9Hz8KI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/eHakcdu3zrsIW_gzE87vD9Hz8KI/1/da"><img src="http://feedads.g.doubleclick.net/~a/eHakcdu3zrsIW_gzE87vD9Hz8KI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/J296xeA0SaA" height="1" width="1"/>]]></content:encoded><description>Давно подумывал над тем, чтобы вставлять исполняемый код в посты, страницы и виджеты WordPress. Поскольку сам движок написан на PHP &amp;#8211; логично вставлять именно его, хотя можно попробовать встроить например Perl, воспользовавшись CPAN-модулем PHP::Interpreter или PECL-модулем PHP под названием perl. Но PHP вставить естественно проще . Итак, как же вставить в WordPress PHP? Как и [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/vstavka-php-koda-v-wordpress-zapisi-i-vidzhety.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><feedburner:origLink>http://dimio.org/vstavka-php-koda-v-wordpress-zapisi-i-vidzhety.html</feedburner:origLink></item><item><title>Замена стандартной Windows-консоли. Вкладки-табы и выбор оболочки</title><link>http://feedproxy.google.com/~r/thoughts-archive/~3/8NAMCQntb8M/zamena-standartnoj-windows-konsoli-vkladki-taby-i-vybor-obolochki.html</link><category>Windows</category><category>console</category><category>cygwin</category><category>windows</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">dimio</dc:creator><pubDate>Wed, 23 Mar 2011 03:05:30 PDT</pubDate><guid isPermaLink="false">http://www.dimio.org/?p=340</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://dimio.org/wp-content/uploads/2011/03/console-win.jpg"><img src="http://dimio.org/wp-content/uploads/2011/03/console-win-300x163.jpg" alt="Альтернативная консоль для Window с поддержкой табов/вкладок и оболочек" title="Сonsole-win" width="300" height="163" class="aligncenter size-medium wp-image-341" /></a></p>
<p>Стандартная консоль <em>Windows XP</em> (та, что вызывается командой <code class="codecolorer text default"><span class="text">cmd</span></code>) &#8211; весьма бедна возможностями. Основное, от чего я страдал, пользуясь ей или консолью из состава <em><a href="http://dimio.org/cygwin-besplatnaya-realizaciya-unix-podobnogo-okruzheniya-dlya-windows.html">cygwin</a></em> &#8211; отсутствие вкладок (табов), без которых приходится открывать несколько окон, занимающих место на рабочем столе. После <em>gnome-terminal</em> дома или <em>screen</em> на хостинге &#8211; очень неудобно. Впрочем, такие &#8220;мелочи&#8221;, как невозможность изменить ширину окна растягиванием (надо лезть в настройки окна) тоже не добавляют удовольствия от работы с консолью.</p>
<p>И вот случайно наткнулся в интернете на замечательный проект с незамысловатым названием <strong>Console</strong> (<noindex><a rel="nofollow" target="_blank" href="http://dimio.org/e3f466/UBARFQsaGBAOTBRSBldaRF5VSF0HR0sVEwlYVlBHQR9bCwsWXllSTA==/">домашняя страница</a></noindex>) &#8211; альтернативную консоль для <em>Windows</em>. Она мне понравилась, так что решил поделиться с читателями.<br />
Перечислю основные достоинства:</p>
<ul>
<li>лаконичный интерфейс</li>
<li>сохраняются настройки геометрии окна после выхода из программы</li>
<li>поддержка табов</li>
<li>для каждого таба можно настроить внешний вид, иконку и главное &#8211; задать оболочку (<em>shell</em>), с которой будет открываться данная вкладка (например &#8211; тот же <em><a href="http://dimio.org/bash-born-again-shell-obolochka-komandnoj-stroki.html">bash</a></em> из состава <a href="http://dimio.org/cygwin-besplatnaya-realizaciya-unix-podobnogo-okruzheniya-dlya-windows.html"><em>cygwin</em></a>)</li>
<li>для таба/консоли задаётся каталог запуска по умолчанию</li>
<li>удобный скроллинг</li>
</ul>
<p>В общем <strong>Console</strong> не требует долгого и подробного описания &#8211; это приятная глазу альтернативная консоль для Windows с поддержкой табов (вкладок) и оболочек. Рекомендую просто попробовать!</p>

	Метки:<a href="http://dimio.org/tag/console" title="console" rel="tag">console</a>, <a href="http://dimio.org/tag/cygwin" title="cygwin" rel="tag">cygwin</a>, <a href="http://dimio.org/tag/windows" title="windows" rel="tag">windows</a><br />

<p><a href="http://feedads.g.doubleclick.net/~a/ROAos7xE2TO-_oTlfNtzjbUaj9U/0/da"><img src="http://feedads.g.doubleclick.net/~a/ROAos7xE2TO-_oTlfNtzjbUaj9U/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ROAos7xE2TO-_oTlfNtzjbUaj9U/1/da"><img src="http://feedads.g.doubleclick.net/~a/ROAos7xE2TO-_oTlfNtzjbUaj9U/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/thoughts-archive/~4/8NAMCQntb8M" height="1" width="1"/>]]></content:encoded><description>Стандартная консоль Windows XP (та, что вызывается командой cmd) &amp;#8211; весьма бедна возможностями. Основное, от чего я страдал, пользуясь ей или консолью из состава cygwin &amp;#8211; отсутствие вкладок (табов), без которых приходится открывать несколько окон, занимающих место на рабочем столе. После gnome-terminal дома или screen на хостинге &amp;#8211; очень неудобно. Впрочем, такие &amp;#8220;мелочи&amp;#8221;, как невозможность [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dimio.org/zamena-standartnoj-windows-konsoli-vkladki-taby-i-vybor-obolochki.html/feed</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><feedburner:origLink>http://dimio.org/zamena-standartnoj-windows-konsoli-vkladki-taby-i-vybor-obolochki.html</feedburner:origLink></item></channel></rss>

