<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Блог веселого программиста</title><link>http://www.bloged.org/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/funnyproger" /><description>Я надеюсь здесь собрать все, что мне кажется интересным. Возможно, это понравится и Вам.</description><language>en</language><managingEditor>noreply@blogger.com (Ed)</managingEditor><lastBuildDate>Tue, 01 May 2012 06:55:54 PDT</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">184</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><feedburner:info uri="funnyproger" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><itunes:explicit>no</itunes:explicit><itunes:subtitle>Я надеюсь здесь собрать все, что мне кажется интересным. Возможно, это понравится и Вам.</itunes:subtitle><item><title>Любопытное поведение Adobe Flash Player в OpenSuSe 11.4</title><link>http://feedproxy.google.com/~r/funnyproger/~3/Et7sWImNonc/adobe-flash-player-opensuse-114.html</link><category>Интересное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Sun, 15 Apr 2012 11:05:35 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-2088620165021696894</guid><description>&lt;p align=justify&gt;При просмотре видео в браузере заметил одну &lt;strike&gt;багу&lt;/strike&gt; фичу. Если видео проигрывается в обычном окне, оно показывается нормально; при просмотре же в полноэкранном режиме изображение начинает сильно дергаться. Я грешил на древность Flash Player'а, но оказалось, что он не при чем. У меня были отключены все эффекты рабочего стола, и почему-то это влияло на Flash Player. Как только поставил галку "Включить эффекты рабочего стола" в настройках в центре управления - Flash Player заработал превосходно в полноэкранном режиме.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-2088620165021696894?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/Et7sWImNonc" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-15T22:05:35.280+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.bloged.org/2012/04/adobe-flash-player-opensuse-114.html</feedburner:origLink></item><item><title>D-Link DWL-2100 AP в режиме точки доступа</title><link>http://feedproxy.google.com/~r/funnyproger/~3/3bwFWCdWGAI/d-link-dwl-2100-ap.html</link><category>Wifi</category><category>Точка доступа</category><category>Железо</category><author>noreply@blogger.com (Ed)</author><pubDate>Fri, 16 Mar 2012 03:37:22 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-5604891419043062666</guid><description>&lt;p align=justify&gt;Есть у меня эта замечательная точка доступа, которая служит мне верой и правдой вот уже 4-й год. Использовал ее в режиме Access Point, и вот теперь настал черед попробовать ее как Client. И все меня устраивало до тех пор, пока мне не понадобилось посадить за ней несколько хостов.&lt;/p&gt;&lt;p align=justify&gt;Ну так вот, из всех компьютеров, подсоединенных к точке доступа в режиме клиента, работал только единственный компьютер. Долго искал причину, пока не наткнулся на официальный FAQ от D-Link, где утверждают, что &lt;a href="http://www.d-link.ru/ru/faq/135/836.html" rel="nofollow"&gt;за точкой доступа в режиме "Client" может быть только один хост&lt;/a&gt;.&lt;/p&gt;&lt;p align=justify&gt;На самом деле это не так. Одна из &lt;a href="ftp://ftp.dlink.ru/pub/Wireless/DWL-2100AP/Firmware/DWL2100AP-firmware-v240eup04-rc302(0610183715).tfp" rel="nofollow"&gt;последних&lt;/a&gt; версий прошивок позволяет цеплять несколько клиентов за точкой доступа.&lt;/p&gt;&lt;p align=justify&gt;Еще по теме:&lt;br /&gt;
&lt;a href="http://www.bloged.org/2008/04/blog-post.html"&gt;Проектирование и настройка домашней сети&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.bloged.org/2007/12/blog-post_24.html"&gt;Настройка домашней сети и проблемы несовместимости оборудования&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-5604891419043062666?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/3bwFWCdWGAI" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-16T14:37:22.328+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2012/03/d-link-dwl-2100-ap.html</feedburner:origLink></item><item><title>Про Paypal и регистратора internet.bs</title><link>http://feedproxy.google.com/~r/funnyproger/~3/1H5TOZc93BY/paypal-internetbs.html</link><category>Интересное</category><author>noreply@blogger.com (Ed)</author><pubDate>Thu, 15 Mar 2012 22:52:32 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-4656685172033161511</guid><description>&lt;p align=justify&gt;С начала марта internet.bs перестал принимать Paypal для оплаты доменов. Если верить информации с их стены в фейсбуке, Paypal заблокировл их аккаунт для приема платежей:&lt;/p&gt;&lt;p align=justify&gt;&lt;i&gt;Why have you stopped accepting PayPal?&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
It was not our decision, actually Paypal without notice and without a clear explanation suspended the service. We are working with them to find a solution.&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
We are shocked by their approach, but we are sure they will soon review their position as they might have received wrong or inaccurate reports, after all we are an ICANN domain name Registrar we only sell domains and we have always been in full compliance with their published policies and rules. As such there is really little ground for them to unilaterally suspend their services in particular without notice. Of course we welcome any advice or suggestion to have them reestablish the account without delay.&lt;br/&gt;&lt;br /&gt;
&lt;br /&gt;
You should also notice that we have backup solutions for payment such as Moneybookers, WebMoney, AlertPay and we are working on 2Checkout and WorldPay. Last but not least we have applied for a dedicated merchant account, so we won't be subject to third party "fancy" polices.&lt;/i&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p align=justify&gt;Особенно повезло американцам, которые регистрировали домены у багамского регистратора. Американцам уже давно прикрыли лавочку с &lt;a href="http://www.bloged.org/2009/09/moneybookers.html"&gt;Moneybookers (ныне именуемых Skrill)&lt;/a&gt;, так что американскому трудовому народу придется пересаживаться на Webmoney или палить номера своих кредитных карточек в других сомнительных финансовых сервисах.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-4656685172033161511?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/1H5TOZc93BY" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-16T09:52:32.121+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2012/03/paypal-internetbs.html</feedburner:origLink></item><item><title>COPEAC R.I.P.</title><link>http://feedproxy.google.com/~r/funnyproger/~3/t1oA2hJZlWM/copeac-rip.html</link><category>Партнерки</category><author>noreply@blogger.com (Ed)</author><pubDate>Sun, 29 Jan 2012 11:40:32 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-7158729338169534532</guid><description>&lt;b&gt;28 Jan 2012&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Effective immediately Copeac.com has ceased all operations.&lt;/b&gt;&lt;br /&gt;
Помянем добрым словом и отправим в последний путь очередную партнерку.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-7158729338169534532?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/t1oA2hJZlWM" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-29T23:40:32.881+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2012/01/copeac-rip.html</feedburner:origLink></item><item><title>OpenSuSe 11.4 и некорректное размонтирование дисков при выключении</title><link>http://feedproxy.google.com/~r/funnyproger/~3/6luoEb1blTs/opensuse-114.html</link><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Fri, 09 Dec 2011 22:08:01 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-5155483080556167096</guid><description>&lt;p align=justify&gt;Не так давно заметил багу. При включении OpenSuSe 11.4 замечал, что иногда диски определялись как некорректно выключенные (Transaction replayed ...). И подумал, &lt;strike&gt;а что за хрень,&lt;/strike&gt; почему это происходит?&lt;/p&gt;&lt;p align=justify&gt;Оказалось, что при выключении компьютера скрипты выполняются параллельно, и иногда выключение происходит до того, как раздел диска был корректно размонтирован. Эта бага лечится очень просто, надо лишь отключить параллельный запуск скриптов, т.е. в файле &lt;b&gt;/etc/sysconfig/boot&lt;/b&gt; прописать &lt;b&gt;RUN_PARALLEL="no"&lt;/b&gt; (у меня этот параметр был установлен в "yes").&lt;/p&gt;&lt;p align=justify&gt;С тех пор диски размонтируются корректно при выключении&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-5155483080556167096?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/6luoEb1blTs" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-10T10:08:01.300+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2011/12/opensuse-114.html</feedburner:origLink></item><item><title>Старый ноутбук и KDE4</title><link>http://feedproxy.google.com/~r/funnyproger/~3/ucPJzyspAxY/kde4.html</link><category>Интересное</category><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Sat, 12 Nov 2011 06:05:19 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-9020414878808391208</guid><description>&lt;p align=justify&gt;Есть у меня древний ноутбук (Dell Latitude L110 с 512Mb RAM), на который я установил OpenSuSe 11.4. В качестве оконного менеджера я &lt;strike&gt;с дуру&lt;/strike&gt; поставил KDE4, о чем в последствии сильно пожалел. KDE4 штука красивая, но жутко требовательная к ресурсам - сам оконный менеджер стартует секунд 30, и съедает практически всю доступную память, и все приложения начинают дико тормозить &lt;/p&gt;&lt;p align=justify&gt;Оптимизировать KDE до определенных пределов можно, но все же это полумеры. Наиболее радикальным решением была бы смена оконного менеджера на что-нибудь более легковесное. И я решил попробовать icewm lite вместо KDE.&lt;/p&gt;&lt;p align=justify&gt;В OpenSuSe 11.4 сменить оконный менеджер очень легко, сначала через Yast надо его установить (там буквально 2-3 пакета), и далее редактором /etc/sysconfig в секции Desktop =&gt; Window manager =&gt; DEFAULT_WM заменить на icewm.&lt;/p&gt;&lt;p align=justify&gt;Запускаю иксы и удивляюсь - оконный менеджер загрузился моментально. Выглядит он, мягко говоря, по-спартански (в стиле Windows 95), эффектов графических нет, и благодаря этому примерно 256 мегабайт памяти было свободно. Ура, казалось бы, долгожданный эффект достигнут.&lt;/p&gt;&lt;p align=justify&gt;Однако две вещи меня не устроили. По умолчанию язык у меня был английский, и возможности переключения на русский не было. На привычные мне сочетания клавиш (Ctrl+Shift) оконный менеджер никак не реагировал.&lt;/p&gt;&lt;p align=justify&gt;Эта проблема решилась очень просто. Я создал конфигурационный файл /etc/X11/xorg.conf.d/90-keytable.conf следующего содержания:&lt;/p&gt;&lt;p align=justify&gt;&lt;pre&gt;Section "InputClass"
    Identifier "LocalKeyboard"
    MatchIsKeyboard "on"
    Option "XkbLayout" "us,ru"
    Option "XkbVariant" ",winkeys"
    Option "XkbOptions" "grp:ctrl_shift_toggle" 
EndSection&lt;/pre&gt;&lt;/p&gt;&lt;p align=justify&gt;И со следующего запуска иксов у меня стала нормально работать русская раскладка клавиатуры с переключением между языками по нажатию  Ctrl+Shift.&lt;/p&gt;&lt;p align=justify&gt;Вторая проблема - отсутствие звука. В KDE у меня звук регулировался приложением kmix, и я его решил добавить в автозагрузку icewm, чтобы привычными горячими клавишами его включать, выключать и регулировать громкость. &lt;/p&gt;&lt;p align=justify&gt;Для этого я создал файл /etc/icewm/startup со следующим содержимым:&lt;/p&gt;&lt;p align=justify&gt;&lt;p align=justify&gt;&lt;pre&gt;#!/bin/sh
kmix &amp;&lt;/pre&gt;&lt;/p&gt;&lt;p align=justify&gt;На файл добавил права на исполнение:&lt;/p&gt;&lt;p align=justify&gt;&lt;pre&gt;# chmod a+x /etc/icewm/startup&lt;/pre&gt;&lt;/p&gt;&lt;p align=justify&gt;И все. После запуска звук легко регулируется горячими клавишами (правда, в трее его не видно - но это уже мелочь).&lt;br /&gt;
&lt;/p&gt;&lt;p align=justify&gt;Еще статьи об OpenSuSe 11.4:&lt;/p&gt;&lt;br /&gt;
&lt;li&gt;&lt;a href="http://www.bloged.org/2011/09/opensuse-114.html"&gt;OpenSuSe 11.4 и старый матричный принтер&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&lt;a href="http://www.bloged.org/2011/07/opensuse-114-intel.html"&gt;OpenSuSe 11.4 и встроенные видеокарты Intel&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;&lt;a href="http://www.bloged.org/2011/07/opensuse-114.html"&gt;Переход на OpenSuSe 11.4&lt;br /&gt;
&lt;/a&gt;&lt;/li&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-9020414878808391208?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/ucPJzyspAxY" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-12T18:05:19.994+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://www.bloged.org/2011/11/kde4.html</feedburner:origLink></item><item><title>OpenSuSe 11.4 и старый матричный принтер</title><link>http://feedproxy.google.com/~r/funnyproger/~3/r2Lw-D59-ko/opensuse-114.html</link><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Thu, 29 Sep 2011 08:15:26 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-1709651124285295492</guid><description>&lt;p align=justify&gt;Так случилось, что есть у меня чудо буржуйской техники - древний, но все еще вполне рабочий принтер Epson LX 300+, который служит мне верой и правдой уже много лет. Решил я его подружить с OpenSuSe 11.4 - и тут обнаружил, что во-первых, принтер не определяется системой; и во-вторых, драйверов под него нет.&lt;/p&gt;&lt;p align=justify&gt;Выяснилось, что для автоматического определения принтера на порту LPT, необходимо, чтобы были загружены следующие модули ядра:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;parport&lt;/li&gt;&lt;li&gt;parport_pc&lt;/li&gt;&lt;li&gt;lp&lt;/li&gt;&lt;/ul&gt;&lt;p align=justify&gt;Почему-то модуль lp по умолчанию не загружается в OpenSuSe 11.4, так что этот модуль надо поставить в автозагрузку (например, можно через Yast: Редактор /etc/sysconfig =&gt; System =&gt; Kernel =&gt; MODULES_LOADED_ON_BOOT или любым другим удобным способом).&lt;/p&gt;&lt;p align=justify&gt;С драйверами хуже, родных драйверов именно для этого принтера в OpenSuSe нет. Но вместо них прекрасно подходит Epson Dot Matrix driver (OpenPrintingPPD/ghostscript/Epson-Dot_Matrix.epsonc.ppd.gz), который доступен через кнопку "Пакеты драйверов".&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-1709651124285295492?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/r2Lw-D59-ko" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T19:15:26.610+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2011/09/opensuse-114.html</feedburner:origLink></item><item><title>Управление ответом в php скрипте</title><link>http://feedproxy.google.com/~r/funnyproger/~3/V9XdsoHlDR0/php.html</link><category>Полезное</category><category>Программирование</category><author>noreply@blogger.com (Ed)</author><pubDate>Fri, 23 Sep 2011 03:54:00 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-577693731741116977</guid><description>&lt;p align=justify&gt;Однажды мне понадобилось отправлять ответ пользователю в браузер до завершения работы php-скрипта. Известно, что даже такой простой скрипт не отпустит посетителя со страницы в течение 20 секунд:&lt;/p&gt;&lt;pre&gt;&amp;lt;?php
header("Location: http://www.bloged.org",TRUE,301);
sleep(20);
?&amp;gt;
&lt;/pre&gt;&lt;p align=justify&gt;Т.е. пока скрипт не завершит свою работу, по умолчанию результат не уйдет в браузер и редиректа не случится. Однако, это ограничение можно обойти, например так:&lt;/p&gt;&lt;pre&gt;&amp;lt;?php
set_time_limit(80);
header("Location: http://www.bloged.org",TRUE,301);
header("Content-Length: 0");
header("Connection: close");
flush();
error_log("Это пишется сразу в лог\n", 3, "/ramdisk/log.txt");
sleep(60);
error_log("А это через минуту\n", 3, "/ramdisk/log.txt");
?&amp;gt;
&lt;/pre&gt;&lt;p align=justify&gt;Несмотря на то, что пользователь уже перенаправлен в другое место, скрипт будет работать еще минуту и в логи запишет все, что надо. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-577693731741116977?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/V9XdsoHlDR0" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-23T14:54:00.752+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.bloged.org/2011/09/php.html</feedburner:origLink></item><item><title>OpenSuSe 11.4 и встроенные видеокарты Intel</title><link>http://feedproxy.google.com/~r/funnyproger/~3/IStPX57xJRM/opensuse-114-intel.html</link><category>Интересное</category><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Mon, 25 Jul 2011 08:37:45 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-3044236876691274553</guid><description>&lt;p align=justify&gt;После перехода на OpenSuSe 11.4 я заметил, что видеокарта Radeon HD 5570 с пропиетарными драйверами ATI работает без нареканий; однако две других машины с интегрированными видеокартами Intel работали из рук вон плохо.&lt;/p&gt;&lt;p align=justify&gt;Во-первых, меня очень разочаровал мой ноутбук Dell Latitude L110 c видеокартой на чипсете Intel 915GM. Но не потому, что он плохой; а потому, что железо уже морально устарело (буку стукнуло 5 лет, которые он отслужил верой и правдой в боевых условиях), и &lt;a href="http://intellinuxgraphics.org/2011Q1.html" rel="nofollow"&gt;поддержка некоторых фич прекращена с 1 квартала 2011 года&lt;/a&gt;.  Это значит, что в следующих релизах операционных систем семейства Linux заставить карту работать будет все сложнее, и в конце концов случится то же, что и произошло с картой &lt;a href="http://www.bloged.org/2009/12/opensuse-112-ati-radeon-x1650-series.html"&gt;ATI Radeon X 1650&lt;/a&gt;, т.е. на оборудовании можно будет ставить крест.&lt;/p&gt;&lt;p align=justify&gt;Но на сегодняшний день эта карточка у меня завелась (хотя и со скрипом). Оживить ее можно так. &lt;/p&gt;&lt;p align=justify&gt;1. Обновляем до последних версий пакеты&lt;/p&gt;&lt;p align=justify&gt;&lt;b&gt;xorg-x11-driver-video&lt;br /&gt;
xorg-x11-driver-intel-legacy&lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;2. Сохраняем старый xorg.conf (на всякий случай):&lt;/p&gt;&lt;p align=justify&gt;&lt;b&gt;# mv /etc/X11/xorg.conf /etc/X11/xorg.conf.old&lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;В runlevel 3 (без иксов) запускаем конфигурилку X:&lt;/p&gt;&lt;p align=justify&gt;&lt;b&gt;# X -configure&lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;Он там подумает, и родит файл /root/xorg.conf.new. В нем надо внести некоторые исправления:&lt;/p&gt;&lt;p align=justify&gt;а) если драйвер определился как "intel", меняем его на "intellegacy":&lt;/p&gt;&lt;p align=justify&gt;&lt;b&gt;Driver      "intellegacy" &lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;б) включаем DRI (у меня он был выключен после автоматического конфигурирования, и mplayer показывал видео только в маленьком окошке без возможности развернуть его на весь экран):&lt;/p&gt;&lt;p align=justify&gt;&lt;b&gt;Option     "DRI"                "on"&lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;в) Отключаем фичу, которая больше не поддерживается:&lt;/p&gt;&lt;p align=justify&gt;&lt;b&gt;Option     "XvMC"              "off"&lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;Потом копируем его в xorg.conf и запускаем иксы:&lt;/p&gt;&lt;p align=justify&gt;&lt;b&gt;# cp /root/xorg.conf.new /etc/X11/xorg.conf&lt;br /&gt;
# startx&lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;У меня после этого все заработало на ноутбуке. После этого проверил 3D ускорение:&lt;/p&gt;&lt;p align=justify&gt;&lt;b&gt;$ glxinfo | grep direct&lt;br /&gt;
direct rendering: Yes&lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;На второй машине у меня была другая видеокарта, но тоже интеловская (Intel Corporation 82865G Integrated Graphics Controller).&lt;/p&gt;&lt;p align=justify&gt;Сконфигурировал там xorg.conf аналогичным образом, и в результате X запустились, glxinfo показал direct rendering: Yes, a mplayer перестал работать.&lt;/p&gt;&lt;p align=justify&gt;Лечится исправлением видеодрайвера для mplayer:&lt;/p&gt;&lt;p align=justify&gt;&lt;b&gt;# cat /etc/mplayer/mplayer.conf | grep gl2&lt;br /&gt;
vo=gl2,x11&lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;Теперь и mplayer заработал на ура.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-3044236876691274553?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/IStPX57xJRM" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-25T19:37:45.006+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2011/07/opensuse-114-intel.html</feedburner:origLink></item><item><title>Переход на OpenSuSe 11.4</title><link>http://feedproxy.google.com/~r/funnyproger/~3/G4V6f9UZLlU/opensuse-114.html</link><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Tue, 19 Jul 2011 01:31:35 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-3310334606149926386</guid><description>&lt;p align=justify&gt;Убил выходные на то, чтобы 3 компьютера проапгрейдить со старых ОС на OpenSuSe 11.4. &lt;/p&gt;&lt;p align=justify&gt;Хуже всего проходил upgrade с 11.0 на 11.4 на ноутбуке. Вроде и система установилась нормально, перегружаю ноутбук, и при попытке залогиниться получаю отбивку - "Неизвестный модуль" (или для англоязычной версии "Module is unknown"). &lt;/p&gt;&lt;p align=justify&gt;Выяснилось, что в 11.4 для авторизации используются модули PAM (которые не были установлены на ноутбуке в версии 11.0 и при апгрейде система их "забыла" поставить). Так что есть два варианта решения проблемы - либо доставить модули руками (что проблематично, т.к. так просто залогиниться не получится), либо отключить использование PAM при логине - я так и сделал.&lt;/p&gt;&lt;p align=justify&gt;Процедура следующая. При загрузке системы в меню Grub надо выбрать соответствующий вариант загрузки и руками в опцию загрузки написать single. В однопользовательском режиме надо поправить файл /etc/pam.d/login, и закомментировать строчку:&lt;/p&gt;&lt;p align=justify&gt;&lt;b&gt;#session required pam_resmgr.so&lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;После перезагрузки ноутбука в обычном режиме в систему уже можно было залогиниться, но запустить X с помощью startx мог только root (остальным пользователям не хватало прав). Проблема не наблюдалась в runlevel 5 (т.к. там иксы стартуют от рута), но у меня все работает в runlevel 3 и иксы запускаются только при необходимости. Это лечится добавлением прав на  запуск:&lt;/p&gt;&lt;p align=justify&gt;&lt;b&gt;# chmod a+s /usr/bin/Xorg&lt;/b&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-3310334606149926386?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/G4V6f9UZLlU" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-19T12:31:35.854+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2011/07/opensuse-114.html</feedburner:origLink></item><item><title>Прощай, Google App Engine!</title><link>http://feedproxy.google.com/~r/funnyproger/~3/vipNELV3iD4/google-app-engine.html</link><category>Полезное</category><category>Хостинг</category><author>noreply@blogger.com (Ed)</author><pubDate>Thu, 14 Jul 2011 01:42:50 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-2391029308895584308</guid><description>&lt;p align=justify&gt;Это завершающая статья про Google App Engine. Я принял решение отказаться от использования GAE в своих проектах.&lt;/p&gt;&lt;p align=justify&gt;Сначала &lt;a href="http://www.bloged.org/2009/06/google-app-engine.html"&gt;платформа Google App Engine&lt;/a&gt; мне показалась очень интересной. Я даже наваял на ней пару тестовых приложений, и когда меня все устроило, запустил несколько более-менее серьезных проектов на GAE.&lt;/p&gt;&lt;p align=justify&gt;Потом выяснилось, что &lt;a href="http://www.bloged.org/2011/02/google-app-engine.html"&gt;Google стал блокировать доступ к сайтам на GAE по непонятным причинам&lt;/a&gt;, а спустя какое-то время даже прикрыл свой проект &lt;a href="http://appgallery.appspot.com/" rel="nofollow"&gt;appgallery.appspot.com&lt;/a&gt;, написанный на GAE и предназначенный для популяризации этой платформы.&lt;/p&gt;&lt;p align=justify&gt;Такой зависимости от капризов гугла я терпеть не мог, и решил &lt;a href="http://www.bloged.org/2011/05/google-app-engine.html"&gt;уйти с платформы Google App Engine&lt;/a&gt;.&lt;/p&gt;&lt;p align=justify&gt;Когда я забрал данные из хранилища в Google App Engine в формате sqlite3, я думал, что сконвертировать их, например в mysql, будет совсем не сложно. &lt;/p&gt;&lt;p align=justify&gt;Я ошибался. Данные в дампе оказались нечитаемыми, и с ними нормально работать мог только движок Google App Engine.  Поэтому мне пришлось сделать реэкспорт данных из хранилища GAE в другой читабельный формат.&lt;/p&gt;&lt;p align=justify&gt;К счастью, bulkloader умеет экспортировать данные и в других форматах, например, CSV или XML. Про экспорт в XML есть &lt;a href="http://habrahabr.ru/blogs/gae/112001/" rel="nofollow" target=_blank&gt;хорошая статья на Хабре&lt;/a&gt;, где по полочкам и разложено, как настроить bulkloader.yaml для корректного преобразования данных в XML.&lt;/p&gt;&lt;p align=justify&gt;Так как сайты на платформе GAE может хостить только Google, платформа оказалась тупиковой ветвью в развитии фреймворков на Python, использовать ее стало бесполезно и даже опасно. Уж лучше писать на Django, чем бездарно тратить время на GAE.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-2391029308895584308?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/vipNELV3iD4" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-14T12:42:50.193+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2011/07/google-app-engine.html</feedburner:origLink></item><item><title>Как свалить с платформы Google App Engine</title><link>http://feedproxy.google.com/~r/funnyproger/~3/w9RK2iEBUN0/google-app-engine.html</link><category>Интересное</category><category>Linux</category><category>Хостинг</category><author>noreply@blogger.com (Ed)</author><pubDate>Tue, 17 May 2011 02:37:40 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-5189627408966279581</guid><description>&lt;p align=center&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/google-app-engine-753609.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 250px; height: 250px;" src="http://www.bloged.org/uploaded_images/google-app-engine-753607.png" border="0" alt="Логотип Google App Engine" title="Logo Google App Engine" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;&lt;p align=justify&gt;Примерно с 17 февраля 2011 года гугл без предупреждения &lt;a href="http://www.bloged.org/2011/02/google-app-engine.html"&gt;стал блокировать доступ к сайтам&lt;/a&gt; на платформе GAE. Причем блокировались IP адреса из Германии, Канады, США и многих других "правильных" стран. Прошло 3 месяца, а воз и ныне там, что-либо менять они не собираются.&lt;/p&gt;&lt;p align=justify&gt;При таком раскладе можно только распрощаться с этой говноплатформой, но сделать это не так-то просто. Очень жаль потраченного времени на написание CMS под GAE, разработку шаблонов, да и времени на миграцию остается не так много. Но тем не менее, если вам дороги постоянные клиенты, Google не оставляет другого выбора.&lt;/p&gt;&lt;p align=justify&gt;К счастью, для работы с приложениями на платформе GAE предусмотрен так называемый &lt;b&gt;remote api&lt;/b&gt;. Он то и позволяет забрать или залить данные без использования веб интерфейса. В моем приложении этот интерфейс был реализован, и забрать данные для меня не составило особого труда.&lt;/p&gt;&lt;p align=justify&gt;Забрать дамп базы можно так:&lt;/p&gt;&lt;b&gt;./bulkloader.py --dump --app_id=your-app-id --url=http://your-app-id .appspot.com/remote_api --filename=dump.sql3&lt;/b&gt;&lt;br /&gt;
&lt;p align=justify&gt;Дальше надо бы перенести данные на новую CMS, или на худой конец, согнать данные в статику.&lt;/p&gt;&lt;p align=justify&gt;Понятно, что статика не позволит интерактивно взаимодействовать с клиентами, и эту часть придется реализовать самостоятельно; однако страницы с описанием товаров/услуг можно оставить в виде статических файлов HTML.&lt;/p&gt;&lt;p align=justify&gt;Получить статику можно, натравив на сайт обычный wget с рекурсией; но при невысокой скорости &lt;a href="http://www.bloged.org/2010/09/opensuse-112.html"&gt;интернета&lt;/a&gt; этот процесс может затянуться. Поэтому будет рационально развернуть скачанный дамп на локальной машине, и натравить wget на localhost. &lt;/p&gt;Сначала стартуем свое приложение:&lt;br /&gt;
&lt;b&gt;./dev_appserver.py your-app-id&lt;/b&gt;&lt;br /&gt;
В другой консоли разворачиваем скачанный дамп, используя remote api:&lt;br /&gt;
&lt;b&gt;./bulkloader.py --restore --app_id=your-app-id --url=http://127.0.0.1:8080/remote_api --filename=dump.sql3&lt;/b&gt;&lt;br /&gt;
Используем wget для получения статических файлов HTML:&lt;br /&gt;
&lt;b&gt;wget -r http://localhost:8080&lt;/b&gt;&lt;br /&gt;
&lt;p align=justify&gt;Все, теперь у нас есть куча статики, которую можно использовать. &lt;/p&gt;&lt;p align=justify&gt;Не исключено, что гугл все-таки одумается, и снимет блокировки айпи адресов на своей стороне. Поэтому окончательно отказываться от GAE я бы не стал, пока что есть возможность поддерживать CMS на локальной машине. &lt;/p&gt;&lt;p align=justify&gt;Однако  неожиданно выяснилось, что так же просто забрать данные с локальной машины и залить их в гугловский GAE не получится. При попытке скачать dump с локальной машины в один файл, bulk_uploader ругается примерно так:&lt;/p&gt;&lt;b&gt;[ERROR   ] Unable to download kind stats for all-kinds download.&lt;br /&gt;
[ERROR   ] Kind stats are generated periodically by the appserver&lt;br /&gt;
[ERROR   ] Kind stats are not available on dev_appserver.&lt;/b&gt;&lt;br /&gt;
&lt;p align=justify&gt;Девелоперская среда не умеет сливать все данные локального хранилища в один файл, поэтому данные с локалхоста можно забрать в несколько приемов, по числу сохраненных моделей в локальном хранилище. Примерно так:&lt;/p&gt;&lt;b&gt;./bulkloader.py --dump --app_id=your-app-id --kind=table1 --url=http://127.0.0.1:8080/remote_api --filename=table1.sql3&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;./bulkloader.py --dump --app_id= your-app-id --kind=table2 --url=http://127.0.0.1:8080/remote_api --filename=table2.sql3&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;p align=justify&gt;Сохраненные таким образом дампы таблиц без проблем заливаются по очереди на Google App Engine.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-5189627408966279581?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/w9RK2iEBUN0" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-17T13:37:40.023+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2011/05/google-app-engine.html</feedburner:origLink></item><item><title>Обновление Mplayer и файлы WMV</title><link>http://feedproxy.google.com/~r/funnyproger/~3/Os0bs9puXIE/mplayer-wmv.html</link><category>Интересное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Mon, 02 May 2011 00:02:06 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-3974301954401584071</guid><description>&lt;p align=justify&gt;Очередное обновление Mplayer оказалось неудачным, при попытке проиграть любой файл WMV программа сваливается с вот таким текстом ошибки:&lt;/p&gt;&lt;br /&gt;
&lt;pre&gt;MPlayer interrupted by signal 11 in module: init_video_codec

- MPlayer crashed by bad usage of CPU/FPU/RAM.              

  Recompile MPlayer with --enable-debug and make a 'gdb' backtrace and

  disassembly. Details in DOCS/HTML/en/bugreports_what.html#bugreports_crash.

- MPlayer crashed. This shouldn't happen.                                    

  It can be a bug in the MPlayer code _or_ in your drivers _or_ in your      

  gcc version. If you think it's MPlayer's fault, please read                

  DOCS/HTML/en/bugreports.html and follow the instructions there. We can't and

  won't help unless you provide this information when reporting a possible bug.
&lt;/pre&gt;&lt;br /&gt;
&lt;p align=justify&gt;Чтобы все заработало снова, надо всего лишь &lt;b&gt;удалить пакет w32codec-all&lt;/b&gt; из системы, и все заработает. &lt;/p&gt;&lt;p align=justify&gt;Решение весьма странное, поскольку видеокодеки всегда помогали Mplayer'у в обработке различных &lt;a href='http://www.bloged.org/2009/04/3gp-avi.html'&gt;видеофайлов&lt;/a&gt;. Похоже, что последние версии Mplayer'а больше не нуждаются в этом пакете и более того, конфликтуют с кодеками из w32codec-all.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-3974301954401584071?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/Os0bs9puXIE" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-02T11:02:06.293+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2011/05/mplayer-wmv.html</feedburner:origLink></item><item><title>Как скачать видео с сайта: продолжение.</title><link>http://feedproxy.google.com/~r/funnyproger/~3/DwlSMtSTKVQ/blog-post_06.html</link><category>Музыкальный offtopic</category><category>Интересное</category><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Wed, 06 Apr 2011 05:03:19 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-9171815330349673637</guid><description>&lt;p align=justify&gt;В своей предыдущей статье &lt;a href='http://www.bloged.org/2009/11/blog-post.html'&gt;Как скачать видео с сайта&lt;/a&gt; я рассказал о 4-х способах сохранения видеофайлов с сайтов, и самый популярный из них - достать файл из кэша браузера. Однако сейчас ситуация изменилась, после обновления Flash Player стал себя вести по-другому. Он по-прежнему кэширует видеофайлы на диске в директории /tmp, однако невооруженным взглядом такие файлы не видны; команда ls ничего не покажет.&lt;/p&gt;&lt;br /&gt;
Однако, если начать загрузку интересующего нас видео ролика:&lt;br /&gt;
&lt;br /&gt;
&lt;object width="640" height="390"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5pidokakU4I?fs=1&amp;amp;hl=en_US&amp;amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/5pidokakU4I?fs=1&amp;amp;hl=en_US&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="390"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
и в командной строке запустить:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ lsof | grep Flash
plugin-co 12081         ed   16u      REG        8,4 32839768     473170 /tmp/FlashXXqNVerC (deleted)
&lt;/pre&gt;&lt;br /&gt;
Интересное кино получается. Файл открыт, используется, и при этом удален! Ну и хрен с ним, все равно его можно будет &amp;laquo;оживить&amp;raquo; простой командой копирования из поддиректории /proc/&lt;br /&gt;
&lt;br /&gt;
Не буду томить, вот оживляющий скрипт:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;#!/bin/bash
pid=`pgrep -f flashplayer | tail -1`
file=`lsof -p $pid | grep '/tmp/Flash' | awk 'END{print "/proc/" $2 "/fd/" $4}' | sed 's/[rwu]$//'`
/bin/cp $file "/tmp/movie.flv"
&lt;/pre&gt;&lt;br /&gt;
после запуска скрипта интересующее нас видео будет лежать в /tmp/movie.flv&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-9171815330349673637?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/DwlSMtSTKVQ" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-06T16:03:19.477+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">21</thr:total><feedburner:origLink>http://www.bloged.org/2011/04/blog-post_06.html</feedburner:origLink></item><item><title>Просмотр первого канала онлайн</title><link>http://feedproxy.google.com/~r/funnyproger/~3/rNWvAyZUi4o/blog-post.html</link><category>Интересное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Tue, 05 Apr 2011 03:39:05 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-1126865202511605405</guid><description>&lt;p align=justify&gt;Дело было вечером, отходить от компа было лень. И тут начинается какая-то передача, которую не хотел пропустить. Думаю, а не посмотреть ли мне ее онлайн? Зашел на сайт первого канала, кликнул &lt;a href="http://itv.1tv.ru/index.html" rel="nofollow"&gt;ссылку&lt;/a&gt; - и вроде бы заработало все под моей &lt;a href="http://www.bloged.org/2010/02/ati-radeon-x1650-opensuse-112.html"&gt;OpenSuSe 11.2&lt;/a&gt;. Да только спустя 15 минут просмотра в полноэкранном режиме изображение свернулось в маленький квадрат, оставив остальную часть экрана в черном цвете. &lt;/p&gt;&lt;p align=justify&gt;&amp;laquo;Интересно девки пляшут&amp;raquo;, подумал я, поперхнувшись пивом. А не обновить ли мне mplayer и браузерный плагин к нему? Нарушил я &lt;a href="http://www.bloged.org/2008/09/blog-post_18.html"&gt;золотое правило админа&lt;/a&gt; и таки обновил его до последней версии. И получил не совсем то, что хотел, ибо онлайн трансляции первого канала перестали показываться.&lt;/p&gt;&lt;p align=justify&gt;Стал я разбираться в чем дело, и нашел вот что. Если взять URL online трансляции и скормить его обновленному mplayer'у, то видим примерно вот такие сообщения об ошибках:&lt;/p&gt;&lt;p align=justify&gt;&lt;pre&gt;$ mplayer "http://live3.1internet.tv/1tv-efir?key=+qs2TPeN6JUcMK7AQRfDiBKE&amp;wmbitrate=350000"

....
Ahhhh, stream_chunck size is too small: 0                                  
Error while parsing chunk header                                           
Ahhhh, stream_chunck size is too small: 4                                  
Error while parsing chunk header                                           
Ahhhh, stream_chunck size is too small: 0                                  
Error while parsing chunk header                                           
Ahhhh, stream_chunck size is too small: 4                                  
Error while parsing chunk header                                           
Ahhhh, stream_chunck size is too small: 0                                  
Error while parsing chunk header                                           
Ahhhh, stream_chunck size is too small: 4                                  
Error while parsing chunk header
...
&lt;/pre&gt;&lt;/p&gt;Ну все, думаю, приплыли... Сломался mplayer.&lt;br /&gt;
&lt;p align=justify&gt;Весь мозг себе сломал, пока пытался починить. К слову, mplayer так его и не стал показывать,  зато нашлось совсем другое решение. Первый канал еще транслирует версию для &lt;a href="http://itv.1tv.ru/silverlight.html" rel="nofollow"&gt;Silverlight&lt;/a&gt;, которую стоило попробовать.&lt;/p&gt;&lt;p align=justify&gt;Silverlight - это поделка Microsoft, который с линуксом не шибко дружит. Однако добрые люди написали порт под Linux c открытым кодом, и назвали его &lt;a href="http://www.go-mono.com/moonlight/download.aspx" rel="nofollow"&gt;Moonlight&lt;/a&gt;. И даже сделали плагин для Firefox, и что самое интересное, плагин работает!  Только ставить надо не последнюю версию плагина, а последнюю стабильную (2.4). &lt;/p&gt;&lt;p align=justify&gt;После установи плагина можно зайти на страницу онлайн трансляции первого канала, и плагин предложит скачать майкрософтовские кодеки для просмотра трансляции. Скачав их и согласившись с лицензионным соглашением Microsoft, онлайн трансляции первого канала будут доступны для просмотра.&lt;/p&gt;&lt;p align=justify&gt;Но опять же, первый канал не позволяет смотреть свои трансляции кому попало, и может отсекать зарубежных посетителей. Тогда для просмотра первого канала вам потребуется российский IP адрес, который легко можно получить, заказав &lt;a href="http://www.bloged.org/2008/05/vds.html"&gt;лучший хостинг в своем классе&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-1126865202511605405?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/rNWvAyZUi4o" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-05T14:39:05.858+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2011/04/blog-post.html</feedburner:origLink></item><item><title>JQuery, ColorBox и передача значений из iframe в родительское окно</title><link>http://feedproxy.google.com/~r/funnyproger/~3/YfUV3zCY3IU/jquery-colorbox-iframe.html</link><category>Полезное</category><category>Программирование</category><author>noreply@blogger.com (Ed)</author><pubDate>Tue, 29 Mar 2011 08:29:39 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-3765879452440029773</guid><description>&lt;p align=justify&gt;Однажды мне понадобилась не совсем обычная форма поиска. Она должна была выглядеть симпатично, находиться в модальном окне и возвращать несколько значений в окно ее вызвавшее.&lt;/p&gt;&lt;p align=justify&gt;Длительное гугление готовое решение не подсказало, поэтому пришлось все писать самому. В качестве движка я выбрал плагин ColorBox для JQuery, и &lt;a href='http://local.bloged.org/demo_colorbox/'&gt;вот что у меня получилось&lt;/a&gt;.&lt;/p&gt;&lt;p align=justify&gt;За основу был взят пример &lt;a href="http://colorpowered.com/colorbox/core/example1/index.html" rel="nofollow"&gt;Outside Webpage (Iframe)&lt;/a&gt;, и совсем немного допилен до подходящего состояния.&lt;/p&gt;&lt;p align=justify&gt;Интересный момент, изначально открытие iframe происходило по нажатию на ссылку с заданным классом; движок читал свойство href у ссылки и открывал iframe с URLом из атрибута href. Мне же надо было открывать модальное окно по нажатию на кнопку (&amp;lt;input type="button" /&amp;gt;), а атрибута href у нее стандартами не предусмотрено. Пришлось изобрести свой атрибут, и вроде бы оно работает&lt;/p&gt;&lt;p align=justify&gt;&lt;a href='http://local.bloged.org/demo_colorbox/demo.zip'&gt;Исходный код примера&lt;/a&gt; вместе со всеми библиотеками также доступен для скачивания, может кому-то и пригодится.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-3765879452440029773?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/YfUV3zCY3IU" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-29T19:29:39.481+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.bloged.org/2011/03/jquery-colorbox-iframe.html</feedburner:origLink></item><item><title>Первое разочарование от Google App Engine</title><link>http://feedproxy.google.com/~r/funnyproger/~3/2D5HxQmv5Ew/google-app-engine.html</link><category>Интересное</category><category>Хостинг</category><author>noreply@blogger.com (Ed)</author><pubDate>Sun, 27 Feb 2011 05:17:41 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-8599362500088743292</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/google-app-engine-753609.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 250px; height: 250px;" src="http://www.bloged.org/uploaded_images/google-app-engine-753607.png" border="0" alt="Логотип Google App Engine" title="Logo Google App Engine" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p align=justify&gt;Как я уже писал, &lt;a href="http://www.bloged.org/2009/06/google-app-engine.html"&gt;Google App Engine&lt;/a&gt; представляет собой очень интересную платформу для разработки веб-приложений на Python или Java. Однако совсем недавно Google в одностороннем порядке и без каких-либо уведомлений стал блокировать доступ к платформе googleappengine из некоторых стран. Причем, часть IP адресов были взяты просто от балды, и вместе с Ираном и Северной Кореей в список запрещенных стран попали и многие IP адреса из Германии. Просьба ко всем, кто хостит свои приложения на Google App Engine, отписаться &lt;a href="http://code.google.com/p/googleappengine/issues/detail?id=4560" rel="nofollow"&gt;здесь&lt;/a&gt; в случае обнаружения блокирования доступа к приложению из "правильной" страны, из которой у вас есть свои посетители.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-8599362500088743292?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/2D5HxQmv5Ew" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-27T16:17:41.462+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2011/02/google-app-engine.html</feedburner:origLink></item><item><title>Голосовые звонки с сайта</title><link>http://feedproxy.google.com/~r/funnyproger/~3/J9NAf2s0n00/blog-post.html</link><category>IP Телефония</category><category>Интересное</category><category>Полезное</category><author>noreply@blogger.com (Ed)</author><pubDate>Thu, 24 Feb 2011 04:49:38 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-5037504567898489687</guid><description>&lt;p align=justify&gt;Для многих компаний очень важную роль играет обратная связь с клиентами. Компании даже готовы сами оплачивать звонки от клиентов, арендуя номера бесплатного дозвона 8-800-.... Но подобные звонки оплачиваются за счет компании, что делает затраты на связь непредсказуемыми.&lt;/p&gt;&lt;p align=justify&gt;Недавно мы разработали одну очень интересную фишку, которая позволит подобным компаниям существенно сократить затраты на связь. Вот небольшая демонстрация того, как это работает:&lt;/p&gt;&lt;p align=justify&gt;1. &lt;a href="http://www.zebra.ru/private_clients/services/international_intercity_communication/" rel="nofollow"&gt;Зебра телеком&lt;/a&gt;, кнопка справа с изображением зебры и телефона. Если на нее нажать и разрешить Flash-приложению доступ к микрофону, звонок пойдет в службу техподдержки Зебры.&lt;/p&gt;&lt;p align=justify&gt;2. &lt;a href="http://www.rt.ru" rel="nofollow"&gt;Ростелеком&lt;/a&gt;, кнопка справа (Позвоните в справочную службу Ростелеком прямо сейчас). Здесь добавлена возможность посылать сигналы DTMF во время разговора, т.е. можно набрать добавочный номер сотрудника и позвонить ему.&lt;/p&gt;&lt;p align=justify&gt;3. Ну и совсем уж маленькая демка для тех, кто хочет &lt;a href="http://local.bloged.org/callme/"&gt;оставить голосовое сообщение мне&lt;/a&gt;. Если там нажать на кнопку Call, вы дозвонитесь до &lt;a href="http://www.bloged.org/2011/02/asterisk.html"&gt;нашей АТС&lt;/a&gt;, где автоответчик предложит вам оставить мне сообщение. Специально оставил все на английском, чтобы вы смогли представить себе возможности нашей кнопки - все можно перерисовать, перевести на любой язык и настроить конкретно под пожелания клиента.&lt;/p&gt;&lt;p align=justify&gt;Как это работает. На вашем сайте размещается наше Flash-приложение, которое инициирует звонок и отвечает за передачу голоса. Звонок отправляется на нашу ATC, с которой он может быть направлен куда угодно - на городской номер, на SIP номер, на голосовую почту или на вашу АТС. Система очень гибкая и легко настраивается, от вас лишь требуется указать, куда отправить звонок с сайта.&lt;/p&gt;&lt;p align=justify&gt;Звонки на SIP номера, зарегистрированные у нас, будут для вас бесплатными (мы будем брать только фиксированную ежемесячную абонентскую плату за сервис, а сами звонки оплачиваться не будут). Приземление же звонка на городской или мобильный номер будет стоить дополнительных денег, и это обсуждается отдельно.&lt;/p&gt;&lt;p align=justify&gt;Если у вас возникнет желание проверить качество передачи голоса, оставьте мне голосовое сообщение и сообщите, куда переслать записанный файл - все сделаем в лучше виде. Если у Вас возникли вопросы, &lt;a href="http://travel.bloged.org/contacts.php"&gt;пишите мне&lt;/a&gt; или оставьте комментарий к этому сообщению.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-5037504567898489687?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/J9NAf2s0n00" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-24T15:49:38.803+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2011/02/blog-post.html</feedburner:origLink></item><item><title>Как защитить Asterisk от подбора паролей.</title><link>http://feedproxy.google.com/~r/funnyproger/~3/6GUjwjw3yAU/asterisk.html</link><category>FreeBSD</category><category>Полезное</category><category>Хостинг</category><author>noreply@blogger.com (Ed)</author><pubDate>Wed, 16 Feb 2011 14:29:16 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-5322348567862570859</guid><description>&lt;p align=justify&gt;Решил я как-то раз поднять SIP-сервер для своих нужд. Выход во внешние сети был не нужен, поднял я этот сервис &lt;a href="http://www.bloged.org/2008/04/blog-post.html"&gt;только для своих&lt;/a&gt;. Не успел его поднять, как доблестные тайваньские хакеры дружно начали брутфорсить логины и пароли на мой астериск.  Причем делали это внаглую в многопоточном режиме, цифры подставляли методом научного перебора:&lt;/p&gt;&lt;br /&gt;
&lt;pre&gt;[Jan 13 09:45:12] NOTICE[15489] chan_sip.c: Registration from '"0"&amp;lt;sip:0@здесь_был_мой_IP&amp;gt;' failed for '210.240.176.51' - No matching peer found 
[Jan 13 09:45:12] NOTICE[15489] chan_sip.c: Registration from '"1"&amp;lt;sip:1@здесь_был_мой_IP&amp;gt;' failed for '210.240.176.51' - No matching peer found 
[Jan 13 09:45:12] NOTICE[15489] chan_sip.c: Registration from '"test"&amp;lt;sip:test@здесь_был_мой_IP&amp;gt;' failed for '210.240.176.51' - No matching peer found 
[Jan 13 09:45:12] NOTICE[15489] chan_sip.c: Registration from '"2"&amp;lt;sip:2@здесь_был_мой_IP&amp;gt;' failed for '210.240.176.51' - No matching peer found 
[Jan 13 09:45:12] NOTICE[15489] chan_sip.c: Registration from '"3"&amp;lt;sip:3@здесь_был_мой_IP&amp;gt;' failed for '210.240.176.51' - No matching peer found 
[Jan 13 09:45:12] NOTICE[15489] chan_sip.c: Registration from '"4"&amp;lt;sip:4@здесь_был_мой_IP&amp;gt;' failed for '210.240.176.51' - No matching peer found 
[Jan 13 09:45:12] NOTICE[15489] chan_sip.c: Registration from '"5"&amp;lt;sip:5@здесь_был_мой_IP&amp;gt;' failed for '210.240.176.51' - No matching peer found 
[Jan 13 09:45:12] NOTICE[15489] chan_sip.c: Registration from '"6"&amp;lt;sip:6@здесь_был_мой_IP&amp;gt;' failed for '210.240.176.51' - No matching peer found 
[Jan 13 09:45:12] NOTICE[15489] chan_sip.c: Registration from '"7"&amp;lt;sip:7@здесь_был_мой_IP&amp;gt;' failed for '210.240.176.51' - No matching peer found
....&lt;/pre&gt;&lt;br /&gt;
&lt;p align=justify&gt;С такими темпами они могут вычислить реально существующие внутренние номера телефонов и перейти ко второму этапу - подбору паролей. Чтобы не выдавать проклятым буржуином &lt;strike&gt;государственных секретов&lt;/strike&gt; информацию о существующих номерах, надо в sip.conf в секцию [general] добавить всего одну строчку:&lt;/p&gt;&lt;br /&gt;
&lt;b&gt;alwaysauthreject = yes&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p align=justify&gt;Тогда астериск при неуспешной авторизации будет давать им отбивку 401 Unauthorized, и они не будут знать, верный ли логин был введен. Такая настройка осложнит им жизнь, но полностью от них не избавит.&lt;/p&gt;&lt;br /&gt;
&lt;p align=justify&gt;Вторая вещь, которую следует сделать, это анализировать логи астериска на предмет наличия неверной аутентификации. И в случае обнаружения попыток подбора пароля отправлять подозрительные айпишника в бан.&lt;/p&gt;&lt;p align=justify&gt;Для &lt;a href="http://www.bloged.org/search/label/Linux"&gt;Linux&lt;/a&gt;  есть &lt;a href="http://www.voip-info.org/wiki/view/Fail2Ban+%28with+iptables%29+And+Asterisk" rel=nofollow&gt;подходящее решение&lt;/a&gt;, связанное с установкой и настройкой fail2ban, которое построено на iptables. Мне же это решение не подошло, потому что мой Астериск крутится на &lt;a href="http://www.bloged.org/2008/05/vds.html"&gt;хостинге с FreeBSD&lt;/a&gt;, а там используется ipfw вместо до боли знакомого iptables. Путем долгих экспериментов пришел к тому, что не стоит добавлять все вражеские айпишники в общую очередь в баню. Список правил на пару сотен айпи прилично нагружает VDS, что не есть гуд.&lt;/p&gt;&lt;br /&gt;
&lt;p align=justify&gt;Но ipfw оказался намного лучше, чем казалось на первый взгляд. У него предусмотрен механизм обработки тысяч правил обработки IP адресов, если их загнать в так называемые таблицы ipfw:&lt;/p&gt;&lt;p align=justify&gt;Если в firewall.conf добавить одну единственную строчку:&lt;/p&gt;&lt;b&gt;add reject ip from table(15) to me&lt;/b&gt;&lt;br /&gt;
&lt;p align=justify&gt;то все айпишники, оказавшиеся в таблице 15 будут забанены. Причем уже не так уж и важно, сколько их там будет сотня или тысяча, скорость обработки таких списков остается очень высокой, и это намного лучше, чем их обрабатывать обычными правилами вроде таких:&lt;/p&gt;&lt;b&gt;add reject ip from 1.2.3.0/24 to me&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;add reject ip from 175.12.135.0/24 to me&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;...&lt;/b&gt;&lt;br /&gt;
&lt;p align=justify&gt;Правила добавляются в таблицу в любой момент времени, и моментально начинают свою работу. Погуглив немного, я нашел готовый скрипт для FreeBSD, который всех неудачно авторизовавшихся &lt;a href="http://subnets.ru/files/protect_aster.txt"&gt;загоняет в бан на сутки&lt;/a&gt;. Его можно аккуратно допилить, немного ужесточить правила и все будет работать на отлично.&lt;/p&gt;&lt;p align=justify&gt;У таблиц ipfw есть один недостаток, они работают только с IPv4. А так как переход на IPv6 не за горами, то работоспособность чудо-скрипта в ближайшем будущем останется под вопросом.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-5322348567862570859?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/6GUjwjw3yAU" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-17T01:29:16.471+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2011/02/asterisk.html</feedburner:origLink></item><item><title>Как правильно удалять временные файлы</title><link>http://feedproxy.google.com/~r/funnyproger/~3/F3h8tBrQH8A/blog-post.html</link><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Tue, 18 Jan 2011 11:48:09 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-3335533227739849934</guid><description>&lt;p align=justify&gt;У меня &lt;a href="http://www.bloged.org/2010/02/ati-radeon-x1650-opensuse-112.html"&gt;OpenSuSe 11.2&lt;/a&gt; живет уже довольно долго, и пока что ее менять ни на что не собираюсь. Однако в директории /tmp скапливается очень много временных файлов, которые система по умолчанию чистить не хочет. Я уж подумывал над написанием скрипта, который бы при перезагрузке очищал бы содержимое /tmp, но как оказалось, это был бы неправильный подход к решению проблемы.&lt;/p&gt;&lt;p align=justify&gt;В системе для этого предусмотрен совсем другой механизм. В Yast имеется редактор /etc/sysconfig, в котором можно настроить периодичность очистки временных файлов, а так же список директорий с временными файлами. Если компьютер с &lt;a href="http://www.bloged.org/2010/11/opensuse-113-d-link-dwa-525.html"&gt;OpenSuSe&lt;/a&gt; используется как десктоп, то очистки /tmp при перезагрузке вполне достаточно. Если же он месяцами не перезагружается, то настройка должна быть более тонкой.&lt;/p&gt;&lt;p align=justify&gt;В редакторе /etc/sysconfig внутри ветки System =&gt; Cron есть специальные переменные, которые все это регулируют. Мои настройки выглядят так:&lt;/p&gt;&lt;p align=justify&gt;&lt;b&gt;MAX_DAYS_IN_TMP = 100&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;MAX_DAYS_IN_LONG_TMP = 100&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;TMP_DIRS_TO_CLEAR = /tmp&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;LONG_TMP_DIRS_TO_CLEAR = /var/tmp&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;OWNER_TO_KEEP_IN_TMP = root&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;CLEAR_TMP_DIRS_AT_BOOTUP = yes&lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;Пишу в основном для себя, чтобы не забыть. Но если кому-то пригодится, буду рад.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-3335533227739849934?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/F3h8tBrQH8A" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-18T22:48:09.715+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://www.bloged.org/2011/01/blog-post.html</feedburner:origLink></item><item><title>Как докачивать файлы по протоколу SFTP</title><link>http://feedproxy.google.com/~r/funnyproger/~3/SEe6kPLPzkI/sftp.html</link><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Fri, 24 Dec 2010 06:03:57 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-3100875262202770687</guid><description>&lt;p align=justify&gt;Однажды мне потребовалось забрать бэкап с одного &lt;a href="http://www.bloged.org/2008/05/vds.html"&gt;правильного хостинга&lt;/a&gt;. Архив получился большой, примерно в 4 Гб. Скачал где-то 92%, и тут бац - &lt;a href="http://www.bloged.org/2009/08/opensuse.html"&gt;интернет-провайдер&lt;/a&gt; подвел, соединение померло. &lt;/p&gt;&lt;p align=justify&gt;Я качал файл с помощью утилиты sftp, и она стала показывать &lt;b&gt;stalled&lt;/b&gt; вместо прогресса скачивания. Жалко файл было до безумия, заново качать 4 Гб очень не хотелось. Ну должен же быть способ докачивать файлы по протоколу SFTP, сам протокол докачку поддерживает&lt;/p&gt;&lt;p align=justify&gt;Стал курить мануалы, и выяснил - надо было качать с помощью scp, а не sftp - эта утилита 100% поддерживает докачку, в отличие от sftp. Ну как говориться, поздно пить боржоми, файл-то уже на 92% скачан. Оказалось, что докачать его все-таки можно, только вместо sftp надо использовать lftp. Выглядело это примерно так:&lt;p&gt;&lt;b&gt;lftp sftp://mylogin@host.tld&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;cd /path/to/backup&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;get -c backup.tgz&lt;/b&gt;&lt;br /&gt;
&lt;p align=justify&gt;lftp смотрит текущую директорию на наличие недокачанного файла, смотрит, сколько байт скачалось и забирает только то, что не удалось скачать в первый раз&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-3100875262202770687?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/SEe6kPLPzkI" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-24T17:03:57.201+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2010/12/sftp.html</feedburner:origLink></item><item><title>Как обойти защиту от хотлинкинга</title><link>http://feedproxy.google.com/~r/funnyproger/~3/FU2DMGxPo4g/blog-post.html</link><category>Интересное</category><category>Программирование</category><category>Linux</category><category>proxy</category><author>noreply@blogger.com (Ed)</author><pubDate>Sun, 05 Dec 2010 15:49:42 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-8087007671726713162</guid><description>&lt;p align=justify&gt;Давненько я не писал чего-нибудь общественно-&lt;strike&gt;бес&lt;/strike&gt;полезного. На одном из популярных форумов люди постят картинки с сайтов, которые не хотят, чтобы их смотрели где-то еще. А вбивать чужой урл и идти на страницу с картинкой иногда бывает лень. Поэтому, чтобы такой посмотреть, надо либо подделать реферер (с помощью какого-либо плагина к браузеру), либо воспользоваться моим новым &lt;a href="http://scripts.bloged.org/ref/" target=_blank&gt;сервисом просмотра картинок с защитой от хотлинкинга&lt;/a&gt;.&lt;/p&gt;&lt;p align=justify&gt;Работает это как &lt;a href="http://www.bloged.org/labels/proxy.html"&gt;прокси-сервер&lt;/a&gt;, скрипт забирает картинку и отдает ее тому, кто ввел капчу. Вроде несложно и кому-то может пригодиться. Кстати, вручную реферер вбивать не обязательно, скрипт попытается его вычислить. Но надежности ради я предусмотрел возможность добавления реферера вручную. Проверить можно хотя бы на &lt;a href="http://scripts.bloged.org/ref/?url=http://demotivators.ru/media/posters/300522_govori-gramotno.jpg"&gt;этом примере&lt;/a&gt;.&lt;/p&gt;&lt;p align=justify&gt;Если найдете багу, просьба писать в камменты здесь или напрямую &lt;a href="http://travel.bloged.org/contacts.php"&gt;написать мне&lt;/a&gt;&lt;/p&gt;&lt;p align=justify&gt;З.Ы. Сервис абсолютно бесплатный&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-8087007671726713162?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/FU2DMGxPo4g" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-06T02:49:42.911+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2010/12/blog-post.html</feedburner:origLink></item><item><title>Кириллические домены и iDNS</title><link>http://feedproxy.google.com/~r/funnyproger/~3/WBnQw3usXds/idns.html</link><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Wed, 01 Dec 2010 07:01:44 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-4773236337914299898</guid><description>&lt;p align=justify&gt;Некоторые регистраторы с недавних пор предлагают зарегистрировать домены в зонах .рф, .ру, .ком, .нет, .орг и т.п. И есть же люди, которые таки хотят их использовать, несмотря на то, что корневые DNS-сервера вообще ничего не знают о этих доменных зонах.&lt;/p&gt;&lt;p align=justify&gt;Даже самый известный кириллический домен президент.рф и тот толком не распознается некоторыми серверами. &lt;a href="http://www.bloged.org/2010/09/opensuse-112.html"&gt;Публичные DNS сервера&lt;/a&gt; Google о нем что-то знают:&lt;/p&gt;&lt;pre&gt;dig xn--d1abbgf6aiiy.xn--p1ai @8.8.8.8

; &lt;&lt;&gt;&gt; DiG 9.6.1-P3 &lt;&lt;&gt;&gt; xn--d1abbgf6aiiy.xn--p1ai @8.8.8.8
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 61712
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;xn--d1abbgf6aiiy.xn--p1ai.     IN      A

;; ANSWER SECTION:
xn--d1abbgf6aiiy.xn--p1ai. 564  IN      A       195.208.24.91

;; Query time: 75 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Dec  1 17:29:40 2010
;; MSG SIZE  rcvd: 59
&lt;/pre&gt;
А вот один из корневых серверов DNS не знает ничего:
&lt;pre&gt;dig xn--d1abbgf6aiiy.xn--p1ai @4.2.2.2

; &lt;&lt;&gt;&gt; DiG 9.6.1-P3 &lt;&lt;&gt;&gt; xn--d1abbgf6aiiy.xn--p1ai @4.2.2.2
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: SERVFAIL, id: 20017
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;xn--d1abbgf6aiiy.xn--p1ai.     IN      A

;; Query time: 78 msec
;; SERVER: 4.2.2.2#53(4.2.2.2)
;; WHEN: Wed Dec  1 17:29:49 2010
;; MSG SIZE  rcvd: 43
&lt;/pre&gt;&lt;p align=justify&gt;Что касается зон iDNS (.ком, .нет, .орг), так они вообще мало кому доступны. Регистраторы (Webnames.ru) например предлагают воспользоваться какой-то говнософтиной вроде iChat, чтобы ваш компьютер смог нормально работать с такими доменами. Вот кому надо чего-то скачивать и ставить себе? Мало кто будет это делать. &lt;/p&gt;&lt;p align=justify&gt;На самом деле этот говнософт никому не нужен. Все, что надо, чтобы ресолвились доменные зоны .ком, .нет и .орг, это всего лишь прописать у себя правильный iDNS сервер, вместо DNS провайдера. На &lt;a href="http://www.i-dns.net/support_download/downloads/downloads.html
" rel=nofollow&gt;idns.net&lt;/a&gt; есть файл (db.cache) с корневыми серверами iDNS, можно один из них использовать вместо DNS провайдера:&lt;/p&gt;&lt;pre&gt;&gt; cat /etc/resolv.conf
nameserver 64.62.142.131 # iDNS
nameserver 195.161.113.189 #iDNS
nameserver 120.50.44.141 #iDNS
&lt;/pre&gt;&lt;p align=justify&gt;Но на самый правильный способ я натолкнулся на блоге ihtiandr.info, надо интернет провайдерам настроить свои DNS-сервера &lt;a href="http://www.ihtiandr.info/web/47-punicode-domains-setup.html" rel=nofollow&gt;примерно вот так&lt;/a&gt;, и тогда ни у кого не будет геморроя с кириллическими доменами.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-4773236337914299898?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/WBnQw3usXds" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-01T18:01:44.227+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.bloged.org/2010/12/idns.html</feedburner:origLink></item><item><title>OpenSuSe 11.3, D-Link DWA 525 и танцы с бубном</title><link>http://feedproxy.google.com/~r/funnyproger/~3/g3bSQVYeCnU/opensuse-113-d-link-dwa-525.html</link><category>Wifi</category><category>Linux</category><category>Железо</category><author>noreply@blogger.com (Ed)</author><pubDate>Thu, 25 Nov 2010 09:49:23 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-346825439469664928</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://local.bloged.org/uploaded_images/DWA525.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 374px; height: 400px;" src="http://local.bloged.org/uploaded_images/DWA525.jpg" border="0" alt="D-Link DWA 525, сетевая карта с WiFi" title="D-Link DWA 525"/&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p align=justify&gt;Моя &lt;a href="http://www.bloged.org/2008/04/blog-post.html"&gt;домашняя сеть&lt;/a&gt; продолжает расти, и мне потребовалось подключить еще один компьютер к моей точке доступа &lt;a href="http://www.bloged.org/2007/12/blog-post_24.html"&gt;D-Link DWL 2100 AP&lt;/a&gt;. Посмотрев на прайс-листы ближайшего приличного магазина, присмотрелся я к сетевой карте с антенной - а именно к  D-Link DWA 525. Традиционно погуглил эту карту на предмет наличия проблем с установкой под линуксом - вроде все чисто, решил купить. И тут началось....&lt;/p&gt;&lt;p align=justify&gt;Под Windows XP она встала и работает неплохо, но с картой совершенно не было драйверов под линукс. Свежепоставленная OpenSuSe 11.3 так же карточку не опознала как сетевую, пришлось качать драйвер с сайта dlink.ru и собирать его.&lt;/p&gt;&lt;p align=justify&gt;Дальше было еще интереснее, драйвер от dlink собрался, но карта работала только с открытыми сетями, без WEP или WPA шифрования. Разумеется, меня такой вариант не устроил, стал искать другое решение проблемы. Оказалось, что драйвера от d-link - это совсем не то, что нужно. Для карты  D-Link DWA 525 прекрасно подошел последний драйвер от карты на том же чипсете (Ralink 3060, последнюю версию драйвера можно скачать с официального сайта: &lt;a href="http://www.ralinktech.com/support.php?s=2" rel="external nofollow"&gt;http://www.ralinktech.com/support.php?s=2&lt;/a&gt;). &lt;/p&gt;&lt;p align=justify&gt;Однако и тут обошлось не без танцев с бубном. Перед компиляцией драйвера надо залезть в файл os/linux/config.mk и поправить 2 строчки:&lt;/p&gt;&lt;b&gt;HAS_WPA_SUPPLICANT=y&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y&lt;/b&gt;&lt;br /&gt;
(эти фичи выключены по умолчанию).&lt;br /&gt;
&lt;p align=justify&gt;После сборки драйвера (make и make install) все замечательно заработало бы, если бы не ошибка в скрипте &lt;b&gt;/etc/sysconfig/network/scripts/ifup-wireless&lt;/b&gt; Вместо этого глючного скрипта следует скачать &lt;a href="https://bugzilla.novell.com/attachment.cgi?id=383070" rel="external nofollow"&gt;исправленный скрипт&lt;/a&gt;, и только тогда все заработает, как надо.&lt;/p&gt;&lt;p align=justify&gt;Все вышесказанное относится к OpenSuSe 11.3 без обновлений (из коробки). Возможно, что после обновления этот скрипт уже будет пропатчен&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-346825439469664928?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/g3bSQVYeCnU" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-25T20:49:23.530+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://www.bloged.org/2010/11/opensuse-113-d-link-dwa-525.html</feedburner:origLink></item><item><title>Data::Dumper и текст в UTF-8</title><link>http://feedproxy.google.com/~r/funnyproger/~3/hOrjS-bqel8/datadumper-utf-8.html</link><category>Программирование</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Mon, 15 Nov 2010 00:48:06 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-8431815466309041343</guid><description>&lt;p align=justify&gt;Если вы работаете со сложными структурами данных (массивы хешей, хеши массивов и т.п.), наверняка вы используете для отладки модуль Data::Dumper. Все бы хорошо, но этот модуль категорически не хочет работать с символами в кодировке UTF-8, его вывод выглядит примерно так:&lt;/p&gt;&lt;pre&gt;'country' =&gt; "\x{420}\x{43e}\x{441}\x{441}\x{438}\x{44f}",
'city' =&gt; "\x{41c}\x{43e}\x{441}\x{43a}\x{432}\x{430}",
'airport' =&gt; "\x{414}\x{43e}\x{43c}\x{43e}\x{434}\x{435}\x{434}\x{43e}\x{432}\x{43e}",
'code' =&gt; 'DME'&lt;/pre&gt;&lt;br /&gt;
&lt;p align=justify&gt;Чтобы сделать вывод функции Dumper читаемым, надо просто добавить в программу вот такой кусочек кода:&lt;/p&gt;&lt;pre&gt;$Data::Dumper::Useqq = 1;

{ no warnings 'redefine';
    sub Data::Dumper::qquote {
        my $s = shift;
        return "'$s'";
    }
}
&lt;/pre&gt;Тогда вывод будет выглядеть совсем по другому:&lt;br /&gt;
&lt;pre&gt;'country' =&gt; 'Россия',          
'city' =&gt; 'Москва',             
'terminal' =&gt; '',               
'airport' =&gt; 'Домодедово',      
'code' =&gt; 'DME'&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-8431815466309041343?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/hOrjS-bqel8" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T11:48:06.202+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://www.bloged.org/2010/11/datadumper-utf-8.html</feedburner:origLink></item><media:rating>nonadult</media:rating></channel></rss>

