<?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>Thu, 22 Jul 2010 10:37:22 PDT</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">155</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>Апгрейд MySQL и переписывание запросов</title><link>http://feedproxy.google.com/~r/funnyproger/~3/_opwx-xS264/mysql.html</link><category>MySQL</category><category>Полезное</category><category>Программирование</category><author>noreply@blogger.com (Ed)</author><pubDate>Wed, 21 Jul 2010 12:39:34 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-7119119047248418109</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/mysql_logo-799060.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 232px;" src="http://www.bloged.org/uploaded_images/mysql_logo-799058.jpg" border="0" alt="Официальный логотип Mysql" title="Mysql Logo" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p align=justify&gt;Технически апгрейд базы &lt;a href="http://www.bloged.org/2010/03/centos-mysql.html"&gt;MySQL&lt;/a&gt; несложен, но могут возникнуть не очевидные подводные камни. Например, если &lt;a href="http://www.bloged.org/2010/02/mysql.html"&gt;MySQL&lt;/a&gt; был 4-й версии, а после upgrade версия стала выше 5.0.11, то могут возникнуть проблемы с работой запросов, использующих LEFT JOIN.&lt;/p&gt;&lt;p align=justify&gt;Начиная с версии  MySQL 5.0.12 запросы с JOIN обрабатываются по стандарту SQL:2003, поэтому такие запросы к базе придется переписать. Вот пример:&lt;/p&gt;&lt;br /&gt;
&lt;pre&gt;CREATE TABLE IF NOT EXISTS `t1` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `type` enum('a','b') default NULL,
  PRIMARY KEY  (`id`),
  KEY `type` (`type`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `t1` VALUES (1, 'a'), (2, 'a'), (3, 'b'), (4, 'a'), (5, 'b');

CREATE TABLE IF NOT EXISTS `t2` (
  `t1_id` int(10) unsigned default NULL,
  KEY `t1_id` (`t1_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `t2` VALUES (1), (1), (1), (2), (2);

CREATE TABLE IF NOT EXISTS `t3` (
  `t1_id` int(10) unsigned default NULL,
  KEY `t1_id` (`t1_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `t3` VALUES (1), (1), (2), (2), (3);

#Test 1
select t1.id
from t1, t2
left join t3 on t1.id = t3.t1_id and t1.type = 'a'
where t1.id = t2.t1_id
group by t1.id
&lt;b&gt;#1054 - Unknown column 't1.id' in 'on clause'&lt;/b&gt;

#Test 2, swap the order of the conditions in "on"
select t1.id
from t1, t2
left join t3 on t1.type = 'a' and t1.id = t3.t1_id
where t1.id = t2.t1_id
group by t1.id
&lt;b&gt;#1054 - Unknown column 't1.type' in 'on clause'&lt;/b&gt;
&lt;/pre&gt;&lt;p align=justify&gt;В MySQL 4.x запрос работает без ошибок, начиная с версии 5.0.12 запрос ругается на синтаксис. Если в эти запросы добавить скобок, все заработает:&lt;/p&gt;&lt;pre&gt;select t1.id
from (t1, t2)
left join (t3) on (t1.id = t3.t1_id and t1.type = 'a')
where t1.id = t2.t1_id
group by t1.id

select t1.id
from (t1, t2)
left join (t3) on (t1.type = 'a' and t1.id = t3.t1_id)
where t1.id = t2.t1_id
group by t1.id
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-7119119047248418109?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/_opwx-xS264" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-21T23:39:34.282+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2010/07/mysql.html</feedburner:origLink></item><item><title>Выбираем видеокарту</title><link>http://feedproxy.google.com/~r/funnyproger/~3/SmWqTp2MHvY/blog-post.html</link><category>Linux</category><category>Железо</category><author>noreply@blogger.com (Ed)</author><pubDate>Sun, 20 Jun 2010 07:51:21 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-8136262576718806626</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://local.bloged.org/uploaded_images/ATI-Radeon-HD-5570.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/ATI-Radeon-HD-5570.jpg" border="0" alt="ATI Radeon HD 5570, отличная видеокарты" title="Моя новая видеокарта"/&gt;&lt;/a&gt;&lt;br/&gt;&lt;p align=justify&gt;Так получилось, что моя видеокарта &lt;a href='http://www.bloged.org/2009/06/ati-radeon-x1650-series-ati-overdrive.html'&gt;ATI Radeon X1650&lt;/a&gt; сдохла, проработав почти 3 года. К ней особых претензий не было, и я таки решил выбрать себе видюху того же производителя на замену убитой. Одним из основных требований к карте у меня была возможность просмотра HDTV в формате h.264, ну и невысокая цена. Мой выбор пал на карточку ATI Radeon HD 5570, стоит она примерно $85 и втыкается в тот же слот PCI Express, что использовался &lt;a href='http://www.bloged.org/2009/12/opensuse-112-ati-radeon-x1650-series.html'&gt;ныне покойной видюхой&lt;/a&gt;.&lt;/p&gt;&lt;p align=justify&gt;Карта тупо втыкается в маму, ставятся драйвера от производителя ATI — и вуаля, все работает. Xorg 7.4 достаточно умный, чтобы определить новое железо и нормально его использовать без изменения каких-либо конфигурационных файлов. &lt;/p&gt;&lt;p align=justify&gt;Решил я &lt;strike&gt;погонять игрушки&lt;/strike&gt; протестировать производительность новой видеокарты в условиях максимальных нагрузок. Перепробовал много 3D вещей, доступных под линуксом - Quake3, TileRacer, Supertuxcart, Etracer и т.п. - все работает без нареканий.&lt;/p&gt;&lt;p align=justify&gt;Эти карты очень свежие, на рынке появились в феврале 2010 года. Убежден, что &lt;a href='http://www.bloged.org/2010/02/ati-radeon-x1650-opensuse-112.html'&gt;подлянки с прекращением выпуска драйверов для новых версий Xorg&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-8136262576718806626?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/SmWqTp2MHvY" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-20T18:51:21.060+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2010/06/blog-post.html</feedburner:origLink></item><item><title>gedit: необходимый инструмент разработки</title><link>http://feedproxy.google.com/~r/funnyproger/~3/D0edbREcDCU/gedit.html</link><category>Полезное</category><category>Программирование</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Sat, 15 May 2010 08:25:13 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-4955429262796237060</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://local.bloged.org/uploaded_images/gedit-logo.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 232px;" src="http://local.bloged.org/uploaded_images/gedit-logo.png" border="0" alt="gedit logo" title="Логотип gedit" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p align=justify&gt;Любому программисту нужен удобный текстовый редактор, желательно настраиваемый под себя и с кучей функций. Раньше я пользовался в основном Kate, когда сидел под KDE; но сейчас времена изменились, и я открыл для себя gedit в GNOME.&lt;/p&gt;&lt;p align=justify&gt;Этот бесплатный редактор мне пришелся по вкусу. Выглядит он очень просто, но стоит подключить к нему пару-тройку плагинов, и удобство работы в нем многократно возрастает.  Плагины к нему написаны практически на все случаи жизни, скачать их можно &lt;a href="http://live.gnome.org/Gedit/Plugins" rel="nofollow" target=_blank&gt;здесь&lt;/a&gt;.&lt;/p&gt;&lt;p align=justify&gt;Однако, я привык к другим горячим клавишам в других редакторах. В gedit отсутствует возможность их переназначить, но как оказалось, их можно поменять средствами GNOME. Например, плагин Отступ строк (Text Ident) по умолчанию работает на комбинациях клавиш Ctrl+T и Ctrl+Shift+T; но если для смены раскладки клавиатуры используется Ctrl+Shift, то вторая комбинация клавиш просто не будет работать. Поменять их можно, если залезть в настройки гнома (Центр управления -&gt; Внешний вид, закладка Интерфейс, поставить галку Редактируемые ускорители меню или "Interface" -&gt; "Editable menu shortcut keys" для англоязычной версии).&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://local.bloged.org/uploaded_images/appearance.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 232px;" src="http://local.bloged.org/uploaded_images/appearance.png" border="0" alt="Включение режима редактирования горячих клавиш в gnome" title="Включение режима редактирования горячих клавиш в gnome" /&gt;&lt;/a&gt;&lt;p align=justify&gt;После включения этой опции можно навести курсор мыши на интересующий пункт меню и нажать желаемые комбинации клавиш - все поменяется.&lt;/p&gt;&lt;p align=justify&gt;Еще одна неочевидная вещь, некоторые параметры gedit можно поменять только редактированием параметров gnome. Например, по умолчанию gedit в меню Файл будет показывать последние 4 открытых файла, что маловато. Если же запустить gconf-editor и отредактировать параметр gedit2-&gt;ui-&gt;recents, то можно задать их столько, сколько надо:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://local.bloged.org/uploaded_images/gconf-editor.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 400px;" src="http://local.bloged.org/uploaded_images/gconf-editor.png" border="0" alt="Включение режима редактирования горячих клавиш в gnome" title="Включение режима редактирования горячих клавиш в gnome" /&gt;&lt;/a&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-4955429262796237060?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/D0edbREcDCU" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-15T19:25:13.801+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2010/05/gedit.html</feedburner:origLink></item><item><title>Переезд серверов в другой датацентр</title><link>http://feedproxy.google.com/~r/funnyproger/~3/zITy4Ac5XrE/blog-post.html</link><category>Linux</category><category>Железо</category><author>noreply@blogger.com (Ed)</author><pubDate>Tue, 20 Apr 2010 12:12:07 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-5866552209122015879</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://local.bloged.org/uploaded_images/Dell_Power_Edge_6850.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 232px;" src="http://local.bloged.org/uploaded_images/Dell_Power_Edge_6850.jpg" border="0" alt="Dell Power Edge 6850" title="Dell Power Edge 6850" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p align=justify&gt;Так получилось, что наши сервера должны были переехать в другой датацентр в течение суток. Занятие получилось очень геморройное, поскольку меняется вся конфигурация сети — IP-адреса, шлюзы по умолчанию, даже маска сети. Так вот появилась задача, настроить сеть так, чтобы в старом ДЦ могли выключить сервера, привезти в новый ДЦ, там тупо включить - «и чтоб все заработало». У всех серверов статические айпишники, так что вариант с получением адресов с сервера DHCP здесь не пройдет.&lt;/p&gt;&lt;p align=justify&gt;Задача решается, если известна новая конфигурация сети. Есть старый добрый способ &lt;a href='http://www.bloged.org/2008/02/linux-ip.html' target=_blank&gt;сделать несколько IP адресов на сетевой карте&lt;/a&gt;, с помощью алиасов. В CentOS можно прописать свой default gateway для каждого алиаса. &lt;/p&gt;&lt;br /&gt;
Пример старой конфигурации:&lt;br /&gt;
&lt;pre&gt;$ cat /etc/sysconfig/networking/devices/ifcfg-eth0

# Intel Corporation 82541GI Gigabit Ethernet Controller
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
HWADDR=00:11:22:22:44:55
NETMASK=255.255.255.0
IPADDR=1.2.3.4
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=yes
GATEWAY=1.2.3.254
DNS1=4.2.2.2
DNS2=8.8.8.8
&lt;/pre&gt;Создаем новый алиас для этой же сетевой карты с параметрами сети нового ДЦ:&lt;br /&gt;
&lt;pre&gt;$ cat /etc/sysconfig/networking/devices/ifcfg-eth0:1

# Intel Corporation 82541GI Gigabit Ethernet Controller
DEVICE=eth0:1
BOOTPROTO=none
BROADCAST=5.6.7.255
IPADDR=5.6.7.8
NETMASK=255.255.255.0
NETWORK=5.6.7.0
TYPE=Ethernet
PEERDNS=yes
GATEWAY=5.6.7.254
DNS1=4.2.2.2
DNS2=8.8.8.8
&lt;/pre&gt;Вуаля. Сервер можно выключать и перевозить.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-5866552209122015879?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/zITy4Ac5XrE" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-20T23:12:07.139+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2010/04/blog-post.html</feedburner:origLink></item><item><title>CentOS и свежий MySQL</title><link>http://feedproxy.google.com/~r/funnyproger/~3/GBHDYfYhzqo/centos-mysql.html</link><category>MySQL</category><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Tue, 09 Mar 2010 07:42:28 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-6159180545917592237</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/mysql_logo-799060.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 232px;" src="http://www.bloged.org/uploaded_images/mysql_logo-799058.jpg" border="0" alt="Официальный логотип Mysql" title="Mysql Logo" /&gt;&lt;/a&gt;&lt;p align=justify&gt;Начиная с версии 5.1 в MySQL поддерживается партиционирование таблиц, а это как раз то, что мне надо. Решил я проапгрейдить свой сервер, но оказалось, что в стандартных репозиториях CentOS &lt;a href="http://www.bloged.org/2010/02/mysql.html"&gt;mysql&lt;/a&gt; довольно старый.&lt;/p&gt;&lt;br /&gt;Проблема решается подключением репозитория remi.&lt;br /&gt;&lt;br /&gt;Для 32-битной версии:&lt;br /&gt;&lt;b&gt;wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm&lt;br /&gt;wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm&lt;br /&gt;rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Для 64-битной версии:&lt;br /&gt;&lt;b&gt;wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm&lt;br /&gt;wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm&lt;br /&gt;rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Далее следует отредактировать /etc/yum.repos.d/remi.repo, установить enabled = 1, и запустить:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;yum upgrade mysql-server&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-6159180545917592237?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/GBHDYfYhzqo" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-09T18:42:28.125+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/03/centos-mysql.html</feedburner:origLink></item><item><title>ATI Radeon X1650 и OpenSuSe 11.2 - засада</title><link>http://feedproxy.google.com/~r/funnyproger/~3/POTWxvdK-fY/ati-radeon-x1650-opensuse-112.html</link><category>Linux</category><category>Железо</category><author>noreply@blogger.com (Ed)</author><pubDate>Wed, 10 Feb 2010 12:32:08 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-7899187203273988308</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/Radeon-x1650-778753.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 374px; height: 400px;" src="http://www.bloged.org/uploaded_images/Radeon-x1650-778748.jpg" border="0" alt="ATI Radeon x1650 series" title="Так себе видюха. Можно найти и получше"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;p align=justify&gt;&lt;strike&gt;Смеркалось&lt;/strike&gt;. Наступили черные времена для владельцев старых карт ATI. Собственно, не такая уж и &lt;a href="http://wiki.cchtml.com/index.php/Catalyst_9.4" rel=nofollow&gt;новость&lt;/a&gt;, однако, компания ATI &lt;b&gt;прекращает выпуск новых драйверов для следующих видеокарт начиная с Catalyst 9.4 &lt;/b&gt;:&lt;/p&gt;&lt;br /&gt;&lt;b&gt;&lt;li&gt;ATI Radeon 9500 Series&lt;/li&gt;&lt;li&gt;ATI Radeon 9550 Series&lt;/li&gt;&lt;li&gt;ATI Radeon 9600 Series&lt;/li&gt;&lt;li&gt;ATI Radeon 9700Series&lt;/li&gt;&lt;li&gt;ATI Radeon 9800 Series&lt;/li&gt;&lt;li&gt;ATI Radeon X300 Series&lt;/li&gt;&lt;li&gt;ATI Radeon X550 Series&lt;/li&gt;&lt;li&gt;ATI Radeon X600 Series&lt;/li&gt;&lt;li&gt;ATI Radeon X700 Series&lt;/li&gt;&lt;li&gt;ATI Radeon X800 Series&lt;/li&gt;&lt;li&gt;ATIRadeon X850 Series&lt;/li&gt;&lt;li&gt;ATI Radeon X1050 Series&lt;/li&gt;&lt;li&gt;ATI Radeon X1200 Series&lt;/li&gt;&lt;li&gt;ATIRadeon X1250 Series&lt;/li&gt;&lt;li&gt;ATI Radeon X1300 Series&lt;/li&gt;&lt;li&gt;ATI Radeon X1400 Series&lt;/li&gt;&lt;li&gt;ATIRadeon X1550 Series&lt;/li&gt;&lt;li&gt;ATI Radeon X1600 Series&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bloged.org/2009/06/ati-radeon-x1650-series-ati-overdrive.html"&gt;ATI Radeon X1650 Series&lt;/a&gt;&lt;/li&gt;&lt;li&gt;ATIRadeon X1800 Series&lt;/li&gt;&lt;li&gt;ATI Radeon X1900 Series&lt;/li&gt;&lt;li&gt;ATI Radeon Xpress Series&lt;/li&gt;&lt;li&gt;ATI Radeon X2100 Series&lt;/li&gt;&lt;/b&gt;&lt;br /&gt;&lt;p align=justify&gt;Для тех, кто пользуется OpenSuSe, это означает, что последняя версия операционки, которая будет &lt;b&gt;корректно&lt;/b&gt; работать с этими устройствами - это OpenSuSe 11.1 Начиная с OpenSuSe 11.2 даже и не пытайтесь ставить ATI-шные драйвера, т.к. с версией 11.2 идет  XOrg 7.4, несовместимый с родными драйверами. Если хотите жить дальше с этими видюхами, пользуйтесь старой операционкой со всеми вытекающими последствиями (старый софт, невозможность совершать &lt;a href="http://www.bloged.org/2009/11/jabber.html"&gt;видеозвонки в Pidgin&lt;/a&gt; и т.п.); хотите OpenSuSe 11.2 - тогда &lt;a href="http://www.bloged.org/2009/12/opensuse-112-ati-radeon-x1650-series.html"&gt;придется использовать неродной драйвер Radeonhd&lt;/a&gt;, который пока довольно криво поддерживает 3D во многих из этих карт, в том числе и в моей. Новость неприятная, но такова жизнь, на официальном форуме OpenSuSe народ тоже &lt;a href="http://forums.opensuse.org/hardware/425551-about-ati-radeon-not-working-opensuse-11-2-compiz.html" rel=nofollow target=_blank&gt;возмущается&lt;/a&gt;&lt;/p&gt;&lt;p align=justify&gt;Что-то после всего этого мне жутко разонравились видеокарты ATI, может пора переходить на NVida?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-7899187203273988308?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/POTWxvdK-fY" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-10T23:32:08.900+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/02/ati-radeon-x1650-opensuse-112.html</feedburner:origLink></item><item><title>Интересный баг mysql</title><link>http://feedproxy.google.com/~r/funnyproger/~3/8ry1JGqpJgY/mysql.html</link><category>MySQL</category><category>Интересное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Fri, 05 Feb 2010 15:35:44 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-3973497049475676627</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/mysql_logo-799060.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 232px;" src="http://www.bloged.org/uploaded_images/mysql_logo-799058.jpg" border="0" alt="Официальный логотип Mysql" title="Mysql Logo" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p align=justify&gt;По долгу службы пришлось мне отправиться в длительную поездку. Компьютер с собой не возьмешь, и поэтому приспичило меня залить дамп базы Mysql на ноутбук с &lt;a href="http://www.bloged.org/2008/07/11-opensuse.html" target=_blank&gt;OpenSuSe 11.0&lt;/a&gt;. Dump отказался заливаться, ругнулся вот так:&lt;br/&gt;&lt;br /&gt;&lt;b&gt;ERROR 1221 (HY000) at line 3: Incorrect usage of UNION and INTO&lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;Код хранимой функции был чистый, давным-давно вылизанный и ошибок в нем не было. Выяснилось, что на старых версиях mysql может не работать вот такая конструкция: &lt;br/&gt;&lt;br/&gt;&lt;b&gt;select 1 into @`avar` from (select 1 union select 1) `a`;&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;хотя сам запрос: &lt;br/&gt;&lt;br/&gt;&lt;b&gt;select 1 from (select 1 union select 1) `a`;&lt;/b&gt;&lt;br/&gt;&lt;br/&gt; синтаксически правильный и имеет право на жизнь. Баг в конце концов поправили (подробности &lt;a href="http://bugs.mysql.com/bug.php?id=32858" rel="nofollow"&gt;здесь&lt;/a&gt;), но в стандартных репозиториях OpenSuSe 11.0 (OSS, Non-OSS, Debug и Updates) версия mysql осталась старая, с багом.&lt;/p&gt;&lt;p align=justify&gt;Проблема лечится подключением &lt;a href="http://download.opensuse.org/repositories/server:/database/openSUSE_11.0/" rel="nofollow"&gt;репозитория MySQL&lt;/a&gt; и обновлением до последней версии сервера mysql.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-3973497049475676627?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/8ry1JGqpJgY" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-06T02:35:44.817+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/02/mysql.html</feedburner:origLink></item><item><title>Что делать, если стащили пароли</title><link>http://feedproxy.google.com/~r/funnyproger/~3/HXoGeGdVCBo/blog-post.html</link><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Sat, 09 Jan 2010 05:04:35 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-1147813793708303762</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/server-security-755008.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 308px;" src="http://www.bloged.org/uploaded_images/server-security-754967.jpg" border="0" alt="Компьютерная безопасность" title="Про несанкционированный доступ к серверу" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p align=justify&gt;Недавно с моим другом произошла неприятная история. Он где-то подцепил трояна, который спер пароли FTP доступа к одному из его сайтов, и в результате злоумышленник смог залить вредоносный код в html и js файлы на его &lt;a href="http://www.bloged.org/2008/05/vds.html"&gt;VDS&lt;/a&gt;. Мы проблему определили довольно оперативно, и также быстро ее устранили. &lt;/p&gt;&lt;p align=justify&gt;Чтобы эта неприятная ситуация не повторялась, я написал маленький скриптик:&lt;/p&gt;&lt;br /&gt;&lt;b&gt;/usr/bin/find /home -mtime -1  -print | mail -s "Modified Files" root@localhost &gt;/dev/null 2&gt;&amp;1&lt;/b&gt;&lt;br /&gt;&lt;p align=justify&gt;Он работает какое-то время, и пересылает на заданную почту список файлов, которые были изменены за последние сутки. В этом случае команда find просматривает все файлы рекурсивно, начиная с директории /home. Это выглдит примерно так:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/home/user1/data&lt;br /&gt;/home/user1/data/logs&lt;br /&gt;/home/user1/data/logs/site1.tld.access.log&lt;br /&gt;/home/user1/data/logs/site2.tld.access.log&lt;br /&gt;/home/user1/data/logs/site2.tld.error.log&lt;br /&gt;/home/user1/data/logs/site2.tld.access.log.0.gz&lt;br /&gt;/home/user1/data/logs/site3.tld.access.log.0.gz&lt;br /&gt;/home/user1/data/logs/site3.tld.error.log&lt;br /&gt;/home/user1/data/logs/site3.tld.access.log&lt;br /&gt;/home/user1/data/logs/site1.tld.access.log.0.gz&lt;br /&gt;/home/user1/data/logs/site3.tld.error.log.0.gz&lt;br /&gt;/home/user1/data/etc&lt;br /&gt;/home/user1/data/etc/site1.tld.webalizer.current&lt;br /&gt;/home/user1/data/etc/site1.tld.webalizer.hist&lt;br /&gt;/home/user1/data/etc/site3.tld.webalizer.current&lt;br /&gt;/home/user1/data/etc/site3.tld.webalizer.hist&lt;br /&gt;/home/user1/data/etc/site2.tld.webalizer.current&lt;br /&gt;/home/user1/data/etc/site2.tld.webalizer.hist&lt;br /&gt;/home/user1/data/www/site3.tld/webstat/usage.png&lt;br /&gt;/home/user1/data/www/site3.tld/webstat/index.html&lt;br /&gt;/home/user1/data/www/site3.tld/webstat/daily_usage_201001.png&lt;br /&gt;/home/user1/data/www/site3.tld/webstat/hourly_usage_201001.png&lt;br /&gt;/home/user1/data/www/site3.tld/webstat/usage_201001.html&lt;br /&gt;/home/user1/data/www/site3.tld/webstat/ctry_usage_201001.png&lt;br /&gt;/home/user2/data&lt;br /&gt;/home/user2/data/logs&lt;br /&gt;/home/user2/data/logs/user2.tld.error.log&lt;br /&gt;/home/user2/data/logs/user2.tld.access.log&lt;br /&gt;/home/user2/data/logs/user2.tld.error.log.0.gz&lt;br /&gt;/home/user2/data/logs/user2.tld.access.log.0.gz&lt;br /&gt;/home/user2/data/etc&lt;br /&gt;/home/user2/data/etc/user2.tld.webalizer.current&lt;br /&gt;/home/user2/data/etc/user2.tld.webalizer.hist&lt;br /&gt;/home/user2/data/www/user2.tld/webstat/index.html&lt;br /&gt;/home/user2/data/www/user2.tld/webstat/usage.png&lt;br /&gt;/home/user2/data/www/user2.tld/webstat/daily_usage_201001.png&lt;br /&gt;/home/user2/data/www/user2.tld/webstat/hourly_usage_201001.png&lt;br /&gt;/home/user2/data/www/user2.tld/webstat/usage_201001.html&lt;br /&gt;/home/user2/data/www/user2.tld/webstat/ctry_usage_201001.png&lt;br /&gt;/home/user4/data/logs&lt;br /&gt;/home/user4/data/logs/site3.tld.access.log&lt;br /&gt;/home/user4/data/logs/site3.tld.access.log.0.gz&lt;br /&gt;/home/user4/data/logs/site3.tld.error.log&lt;br /&gt;/home/user4/data/etc&lt;br /&gt;/home/user4/data/etc/site3.tld.webalizer.current&lt;br /&gt;/home/user4/data/etc/site3.tld.webalizer.hist&lt;br /&gt;/home/user4/data/www/site3.tld/webstat/index.html&lt;br /&gt;/home/user4/data/www/site3.tld/webstat/usage.png&lt;br /&gt;/home/user4/data/www/site3.tld/webstat/daily_usage_201001.png&lt;br /&gt;/home/user4/data/www/site3.tld/webstat/hourly_usage_201001.png&lt;br /&gt;/home/user4/data/www/site3.tld/webstat/usage_201001.html&lt;br /&gt;/home/user4/data/www/site3.tld/webstat/ctry_usage_201001.png&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Как видим, сейчас никакого криминала не наблюдается. Изменились только логи и статистика, что и должно происходить раз в сутки. Если же файлы поменялись без моего ведома, я это увижу. Скрипт можно запихнуть в cron, и запускать раз в сутки.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-1147813793708303762?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/HXoGeGdVCBo" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-09T16:04:35.475+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/01/blog-post.html</feedburner:origLink></item><item><title>OpenSUSE 11.2 и видеокарта ATI Radeon x1650 Series</title><link>http://feedproxy.google.com/~r/funnyproger/~3/8Sfy4y7hQ1k/opensuse-112-ati-radeon-x1650-series.html</link><category>Полезное</category><category>Linux</category><category>Железо</category><author>noreply@blogger.com (Ed)</author><pubDate>Thu, 03 Dec 2009 01:20:27 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-6061203910533000936</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://en.opensuse.org/skins/opensuse/images/common/geeko.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 129px; height: 85px;" src="http://en.opensuse.org/skins/opensuse/images/common/geeko.jpg" border="0" alt="OpenSuSe logo" title="OpenSuSe logo" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p align=justify&gt;Я фигею, дорогая редакция! Со времен OpenSUSE 11.1 не так много воды утекло, однако изменения произошли кардинальные.&lt;/p&gt;&lt;p align=justify&gt;Во-первых, компания ATI выкинула поддержку карточки ATI Radeon x1650 Series из новейших родных дров. &lt;a href='http://support.amd.com/us/gpudownload/linux/Legacy/Pages/radeon_linux.aspx?type=2.4.1&amp;product=2.4.1.3.9&amp;lang=English' rel=nofollow target=_blank&gt;Последняя версия драйвера на Radeon x1650&lt;/a&gt; на сегодняшний день датируется 26 марта 2009 года, и она не совместима с новейшим XOrg 7.4, используемым в OpenSuSe 11.2. Если пойти на хитрость, и скачать &lt;a href='https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/ati-driver-installer-9-11-x86.x86_64.run' target=_blank rel=nofollow&gt;действительно последнюю версию драйвера (9.11)&lt;/a&gt; по прямой ссылке, то выяснится, что драйвер может заработать под новым XOrg, но не с этой карточкой (смотрим &lt;a href='https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/catalyst_911_linux.pdf' target=_blank rel=nofollow&gt;Release Notes&lt;/a&gt;). Когда будет сделана поддержка родных дров этой карты для OpenSuSe 11.2 - неизвестно.&lt;/p&gt;&lt;p align=justify&gt;Во-вторых, к счастью появился драйвер c открытым кодом под эту карточку, и он таки вошел в дистрибутив OpenSuSe 11.2. В нем даже реализована экспериментальная поддержка 3D ускорения, которая периодически работает, но пока что слишком глючно.  Проверял на фильмах и играх - фильмы работают на ура в полноэкранном режиме; игры могут рушиться, если текстур в движке очень много. К примеру, Quake3 пошел без проблем (после обновления драйвера), TileRacer периодически сыпется с ошибкой Segmentation fault.&lt;/p&gt;&lt;p align=justify&gt;В-третьих, более-менее прямо сделана поддержка &lt;a href='http://www.bloged.org/2009/07/genius-e-messenger-112-opensuse.html' target=_blank&gt;моей веб камеры&lt;/a&gt;, качество изображения в ней под линуксом значительно хуже чем под виндой, но все же она работает без ошибок и со Skype, и с Pidgin, и с Cheese.&lt;/p&gt;&lt;p align=justify&gt;Поддержка моей DVB карты Prof Revolution DVB-S2 7301 PCI не реализована родными драйверами, но они легко находятся &lt;a href='http://mercurial.intuxication.org/hg/s2-liplianin/' target=_blank&gt;здесь&lt;/a&gt;, огромное спасибо автору за качественные драйвера и патчи к ядру. Качаем исходники, собираем и ставим - все как обычно.&lt;/p&gt;&lt;p align=justify&gt;KDE4 мне показался сырым в этом дистрибутиве, и я перешел на Gnome, о чем пока ни разу не пожалел.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-6061203910533000936?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/8Sfy4y7hQ1k" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-03T12:20:27.863+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2009/12/opensuse-112-ati-radeon-x1650-series.html</feedburner:origLink></item><item><title>Аудио и видео звонки в Jabber</title><link>http://feedproxy.google.com/~r/funnyproger/~3/upj73Ksq9Xc/jabber.html</link><category>Интересное</category><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Thu, 19 Nov 2009 04:58:36 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-2416406828293483719</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://developer.pidgin.im/static/images/pidgin_logo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 133px; height: 58px;" src="http://developer.pidgin.im/static/images/pidgin_logo.jpg" border="0" alt="Pidgin Logo" title="Логотип Pidgin" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p align=justify&gt;Собственно, предыстория &lt;a href="http://www.bloged.org/2009/01/icq-jabber-skype.html"&gt;здесь&lt;/a&gt;. Очень долгое время я искал джаббер-клиента под Linux, который бы позволял совершать голосовые и видеозвонки другим людям. Кроме древнего и уже почти мертвого проекта Jabbin, альтернатив не было. Потом появлялись полухакерские сборки Kopete с поддержкой jingle, которые были очень капризными. Но все это было не то.&lt;/p&gt;&lt;p align=justify&gt;Теперь же есть минимум 2 Open Source jabber клиента, которые могут совершать аудио и видеозвонки - это Empathy и Pidgin (начиная с версии 2.6.1)&lt;/p&gt;&lt;p align=justify&gt;Смутило вот что, когда ставишь эти клиенты через Yast, не все зависимости соблюдаются. Т.е. после установки работает только текстовый чат, но не голосовой и не видео.&lt;/p&gt;&lt;p align=justify&gt;Чтобы все заработало, надо установить следующие пакеты: gst-plugins-good, gst-plugins-bad, gst-ffmpeg (в OpenSuSe 11.2 они называются gstreamer-0_10-plugins-good, gstreamer-0_10-plugins-bad, gstreamer-0_10-ffmpeg). После установки перезапускаем джаббер-клиенты, вклюаем в pidgin плагин для аудио и видеозвонков и вуаля - все работает. Причем работать будет как в Empathy, так и в Pidgin&lt;/p&gt;&lt;p align=justify&gt;На вкус и цвет товарищей нет, но Pidgin IMHO лучше, чем Empathy - больше возможностей, плагинов и прочих фич&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-2416406828293483719?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/upj73Ksq9Xc" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-19T15:58:36.621+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2009/11/jabber.html</feedburner:origLink></item><item><title>Как скачать видео с сайта</title><link>http://feedproxy.google.com/~r/funnyproger/~3/18AwuulhEx8/blog-post.html</link><category>Музыкальный offtopic</category><category>Отдых</category><category>Интересное</category><category>Полезное</category><author>noreply@blogger.com (Ed)</author><pubDate>Sat, 07 Nov 2009 03:50:38 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-3528625173855798505</guid><description>&lt;p align=justify&gt;Есть как минимум 4 разных способа сграбить видео с дружественных сайтов. Итак:&lt;/p&gt;&lt;p align=justify&gt;1. &lt;b&gt;Воспользоваться сторонним сервисом&lt;/b&gt;, вроде этого: &lt;a href="http://www.keepvid.com" rel=nofollow&gt;keepvid.com&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Плюсы&lt;/b&gt;: удобно; дружественный сайт не увидит ваш IP адрес. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Минусы&lt;/b&gt;: Зависимость от стороннего сервиса; не все сайты с видео поддерживаются&lt;/p&gt;&lt;p align=justify&gt;2. &lt;b&gt;Использовать плагин в браузере&lt;/b&gt;, для Firefox это могут быть Download Helper, Flash Video Resources Downloader или подобная приблуда.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Плюсы&lt;/b&gt;: легко настраивается; несложно скачивать &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Минусы&lt;/b&gt;: Firefox от плагинов жрет больше памяти; работает с небольшим числом сайтов&lt;/p&gt;&lt;p align=justify&gt;3. &lt;b&gt;Записать все, что происходит на экране, в видеофайл&lt;/b&gt;. Для линуксоидов это совсем не сложно, куча бесплатных програм позволяет это делать. Например, RecordMyDesktop.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Плюсы&lt;/b&gt;: Работает железобетонно всегда и везде; Можно отключить звук при записи, или наложить свой; Видео можно записывать не только целиком, но и частями, обрезая всяческие логотипы, бегущие строки и прочий мусор; Можно записывать не только &lt;a href="http://www.bloged.org/2009/04/3gp-avi.html" target=_blank&gt;видео&lt;/a&gt;, но и движения курсора мыши, например.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Минусы&lt;/b&gt;: Требуется &lt;a href="http://www.bloged.org/2007/09/blog-post.html" target=_blank&gt;мощный компьютер&lt;/a&gt;, чтобы одновременно проигрывать видео и записывать его, ресурсы кушаются совсем не кисло; Качество записанного изображения может быть хуже, если число кадров в секунду в записываемом видео не совпадает с тем же параметром в проигрываемом ролике (т.е. требуется дополнительная настройка).&lt;/p&gt;&lt;p align=justify&gt;И на закуску, мой любимый способ:&lt;br /&gt;4. &lt;b&gt;Вытащить видео из кэша браузера&lt;/b&gt; Работает оно примерно так. Открываем интересующее нас видео:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/IvJADPqadMg&amp;hl=en&amp;fs=1&amp;"&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/IvJADPqadMg&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Ждем, когда видео полностью загрузится, и лезем в /tmp , т.к. там Firefox хранит свой кэш. Вот что я нашел у себя:&lt;br /&gt;&lt;pre&gt;ed@notebook:/tmp&gt; ls -l Flash*&lt;br /&gt;-rw------- 1 ed users 14196852 Ноя  7 14:35 FlashZlG62O&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Копируем его куда-нибудь, и переименовываем в "The Unforgiven cover with solo - Metallica.flv" . Все, ролик можно смотреть оффлайн.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Плюсы&lt;/b&gt;: Не надо ничего дополнительно ставить, все работает и так. На всех сайтах, что я проверял, этот способ работает на ура.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Минусы&lt;/b&gt;: Надо напрягаться, копировать и переименовывать файл. Иначе рано или поздно кэш очистится и видео придется качать заново. Но этот недостаток не такой уж и страшный.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-3528625173855798505?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/18AwuulhEx8" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T14:50:38.002+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2009/11/blog-post.html</feedburner:origLink></item><item><title>Про eFax</title><link>http://feedproxy.google.com/~r/funnyproger/~3/jbNuXi4I5D8/efax.html</link><category>Интересное</category><author>noreply@blogger.com (Ed)</author><pubDate>Wed, 28 Oct 2009 06:20:08 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-7733423543774429416</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/efax_logo-732946.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 142px; height: 142px;" src="http://www.bloged.org/uploaded_images/efax_logo-732945.png" border="0" alt="Логотип eFax" title="eFax" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p align=justify&gt;Однажды мне понадобилось принять факс из далекого буржуинства. Разумеется, факса у меня &lt;strike&gt;дома&lt;/strike&gt; в офисе не оказалось. Знакомых напрягать тоже не захотел, вот и воспользовался сервисом &lt;a href='http://www.efax.com' rel=nofollow&gt;eFax&lt;/a&gt;. Они дают выделенный номер факса в городе по выбору (в US, UK и еще в куче стран), и на этот номер можно принять факс. Потом факс отправляется на указанный при регистрации email. И что самое интересное, у них есть free 30 days trial, типа если не нравится - откажитесь в любой момент, денег с вас не возьмем.&lt;/p&gt;&lt;p align=justify&gt;При регистрации они спрашивают персональные данные и номер банковской карты. Карта нужна реально существующая, поскольку они ее проверяют. У меня напрмер они заблокировали 1 рубль на карте для проверки, и только после этого разрешили воспользоваться их сервисом.&lt;/p&gt;&lt;p align=justify&gt;И вот свершилось, заветный факс пришел по почте. А вот чем читать его - хз, файл был с расширением .efx. Как выяснилось, читать такие факсы может только их софтина (efax messenger), которая работает только под виндой и под Mac OS. Так что пришлось скачивать &lt;strike&gt;этот троян&lt;/strike&gt; эту программу, иначе факс просто не прочитать и не сконвернтнуть в TIF. Кстати, на сайте можно в настройках сразу указать, что факсы должны быть в формате TIF, тогда читать их можно будет чем угодно; но я об этом узнал уже после того, как получил файл в efx.&lt;/p&gt;&lt;p align=justify&gt;Но самое интересное началось, когда я решил отказаться от услуг этого сервиса. Нигде в админке такой возможности не предусмотрено, для подачи запроса на закрытие аккаунта надо связаться напрямую с саппортом. Погуглив, нашел ссылку, где можно &lt;a href="http://www.efax.com/cancel" rel=nofollow&gt;начать процесс отказа от услуг efax&lt;/a&gt;. Дальше начался футбол, ибо американский саппорт якобы не смог посмотреть мой акк, он направил меня в саппорт в UK. А в UK саппорт общается только по телефону, да еще и с shared cost, где звонок значительно дороже звонка на обычный телефон. К примеру, 2.5 минуты общения с саппортом мне обошлись примерно в пол евро; это при том, что звонок в Лондон через &lt;a href="http://www.bloged.org/2009/01/icq-jabber-skype.html"&gt;Skype&lt;/a&gt; на обычный городской телефон обойдется в 2 евроцента за минуту со всеми налогами.&lt;/p&gt;&lt;p align=justify&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-7733423543774429416?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/jbNuXi4I5D8" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-28T16:20:08.995+03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.bloged.org/2009/10/efax.html</feedburner:origLink></item><item><title>OpenSuSe 11.0 Настрока раскладки клавиатуры</title><link>http://feedproxy.google.com/~r/funnyproger/~3/s10r1qVUPHk/opensuse-110.html</link><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Thu, 01 Oct 2009 14:23:53 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-5641992865949635740</guid><description>&lt;p align=justify&gt;Эти настройки желательно делать сразу, чтобы потом не было &lt;strike&gt;мучительно больно за бездарно потраченное время&lt;/strike&gt; проблем с общением на разных языках. А спохватился я тогда, когда в одном окошке &lt;a href="http://www.bloged.org/2009/07/opensuse-skype-sms.html"&gt;Skype&lt;/a&gt; общался с &lt;a href="http://www.bloged.org/labels/RentACoder.html"&gt;заказчиком&lt;/a&gt;, а в окошке &lt;a href='http://www.bloged.org/2009/01/icq-jabber-skype.html'&gt;Jabber'а&lt;/a&gt; с одним из субподрядчиков; заказчик шпрехает только на рiдной аглицкой мове, подрядчик же в основном по-русски говорит &lt;strike&gt;когда трезвый&lt;/strike&gt;. И так задолбало меня переключение языка клавы, что я решил разобраться, можно ли привязать язык клавиатуры к конкретному окну в KDE.&lt;/p&gt;&lt;p align=justify&gt;Теоретически все просто, идем в Настройки рабочего стола Центра управления КДЕ, где &lt;strike&gt;методом научного тыка&lt;/strike&gt; попадаем в раскладки клавиатуры:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/keyboard_settings1-711173.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://www.bloged.org/uploaded_images/keyboard_settings1-711170.jpg" border="0" alt="Настройка раскладки клавиатуры в OpenSuSe 11.0 KDE 3.5.9, часть 1" title="Настройка раскладки клавиатуры в OpenSuSe 11.0 KDE 3.5.9, часть 1" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/keyboard_settings2-712457.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://www.bloged.org/uploaded_images/keyboard_settings2-712455.jpg" border="0" alt="Настройка раскладки клавиатуры в OpenSuSe 11.0 KDE 3.5.9, часть 2" title="Настройка раскладки клавиатуры в OpenSuSe 11.0 KDE 3.5.9, часть 2" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/keyboard_settings3-789956.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 280px;" src="http://www.bloged.org/uploaded_images/keyboard_settings3-789953.jpg" border="0" alt="Настройка раскладки клавиатуры в OpenSuSe 11.0 KDE 3.5.9, часть 3" title="Настройка раскладки клавиатуры в OpenSuSe 11.0 KDE 3.5.9, часть 3" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p align=justify&gt;Картинка 1, вопрос - а &lt;strike&gt;нахрена&lt;/strike&gt; зачем я добавил вторую раскладку клавиатуры, если раскладка RU поддерживает латиницу? А оказывается, если оставить в настройках только одну раскладку клавиатуры (как у меня и было сделано), то рисунок на картинке 2 никогда бы не получился. При сохранении настроек политика переключения автоматически слетала в "Глобально", а не оставалась в состоянии "Окно". И следовательно, каждое переключение языка отражалось на всех открытых окнах. Отсюда и все проблемы с переключением клавы.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-5641992865949635740?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/s10r1qVUPHk" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-02T01:23:53.368+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.bloged.org/2009/10/opensuse-110.html</feedburner:origLink></item><item><title>Разрыв соединения ssh по таймауту</title><link>http://feedproxy.google.com/~r/funnyproger/~3/VAjy89GwPw4/ssh.html</link><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Wed, 30 Sep 2009 07:48:32 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-4675324503248488261</guid><description>&lt;p align=justify&gt;Если есть желание поддерживать в живом состоянии свою сессию SSH, надо на стороне клиента в ~/.ssh/config или в /etc/ssh/ssh_config дописать всего пару строчек:&lt;/p&gt;&lt;b&gt;ServerAliveInterval 60&lt;br /&gt;ServerAliveCountMax 10&lt;/b&gt;&lt;p align=justify&gt;Тогда клиент сам по себе будет отправлять раз в минуту запросы на сервер для поддержания активности соединения. И если в течение 10 попыток он не получит ответа, тогда сессия помрет.&lt;/p&gt;&lt;p align=justify&gt;Можно поддерживать сессию и со стороны сервера, тогда надо написать в /etc/ssh/sshd_config что-то вроде этого:&lt;/p&gt;&lt;b&gt;TCPKeepAlive yes&lt;br /&gt;ClientAliveInterval 60&lt;br /&gt;ClientAliveCountMax 10&lt;/b&gt;&lt;p align=justify&gt;Особенно полезно, если &lt;a href="http://www.bloged.org/2007/12/blog-post_12.html" target=_blank&gt;VDS используется как прокси-сервер&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-4675324503248488261?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/VAjy89GwPw4" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-30T18:48:32.841+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2009/09/ssh.html</feedburner:origLink></item><item><title>MySQL и защита от удаления записей в таблицах</title><link>http://feedproxy.google.com/~r/funnyproger/~3/3Qyc7GkBLUI/mysql.html</link><category>MySQL</category><author>noreply@blogger.com (Ed)</author><pubDate>Thu, 10 Sep 2009 11:23:06 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-3326241559810646351</guid><description>&lt;p align=justify&gt;Однажды мне понадобилась защита от удаления записей в таблице. Естественно, на триггере BEFORE DELETE, чтобы уж наверняка все работало. В привычном мне Oracle такая задача решается очень просто, с вызовом raise_application_error внутри триггера. Но как оказалось, в MySQL такая задача решается через &lt;strike&gt;жоп&lt;/strike&gt; использование несуществующего поля в какой-нибудь таблице. Вот пример:&lt;/p&gt;&lt;pre&gt;delimiter |&lt;br /&gt;&lt;br /&gt;CREATE TRIGGER my_table_bd&lt;br /&gt;BEFORE DELETE ON my_table&lt;br /&gt;FOR EACH ROW&lt;br /&gt;begin&lt;br /&gt;    declare v int;&lt;br /&gt;    if ifnull(old.status,0) &gt; 0 then&lt;br /&gt;        select antarktida&lt;br /&gt;          into v&lt;br /&gt;          from logs u&lt;br /&gt;         where africa = 'asia';&lt;br /&gt;    end if;&lt;br /&gt;end|&lt;br /&gt;&lt;br /&gt;delimiter ;&lt;/pre&gt;&lt;p align=justify&gt;Полей antarktida, africa в таблице logs нет, поэтому при срабатывании триггера происходит ошибка. Причем ошибка выскочит, если ifnull(old.status,0) &gt; 0. Такая конструкция выглядит ужасно (костыль он и есть костыль), но работает 100%. И похоже, это &lt;a href='http://sqlinfo.ru/forum/viewtopic.php?id=946' 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-3326241559810646351?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/3Qyc7GkBLUI" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-10T22:23:06.730+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2009/09/mysql.html</feedburner:origLink></item><item><title>Moneybookers подложили американцам свинью</title><link>http://feedproxy.google.com/~r/funnyproger/~3/g5NEiz-AMqw/moneybookers.html</link><author>noreply@blogger.com (Ed)</author><pubDate>Tue, 01 Sep 2009 10:59:57 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-2943966174219449412</guid><description>&lt;p align=justify&gt;История давнишняя, но я узнал только сегодня. Неизвестно зачем и почему, но манибукерс очень сильно &lt;b&gt;ущемили американцев в возможностях платить деньги&lt;/b&gt;. Официальный ответ Moneybookers такой:&lt;/p&gt;&lt;br /&gt;&lt;p align=justify&gt;&lt;b&gt;Following up your query we confirm that due to change in our policies, we will stop processing payments between US customers, and US customers and international customers using the Send Money service, with effect from November 19.11.08.&lt;br /&gt;&lt;br /&gt;We apologize for any inconvenience caused.&lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;Вот теперь у всяческих вебманей появляется возможность активно поучаствовать в освоении американского рынка. А все потому, что россиянам и украинцам Paypal не разрешает принимать платежи на свой счет (только &lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_display-approved-signup-countries-outside&amp;" rel=nofollow target=_blank&gt;Send only&lt;/a&gt; для нас), а букерсы запретили американцам отправлять деньги.&lt;/p&gt;&lt;br /&gt;&lt;p align=justify&gt;Жаль, очень жаль. &lt;a href="https://www.moneybookers.com/app/?rid=4060280" rel=nofollow target=_blank&gt;Moneybookers&lt;/a&gt; удобны для ввода денег, прекрасно работают с нашими &lt;a href="http://www.bloged.org/2008/03/visa-virtuon-vs-visa-classic.html"&gt;карточками Visa Classic&lt;/a&gt; (a для Paypal годятся далеко не все).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-2943966174219449412?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/g5NEiz-AMqw" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-01T21:59:57.901+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2009/09/moneybookers.html</feedburner:origLink></item><item><title>Настройка проводного интернета от Билайн в OpenSuSe</title><link>http://feedproxy.google.com/~r/funnyproger/~3/z377a7xTJqA/opensuse.html</link><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Sat, 29 Aug 2009 09:32:58 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-6682585158642559030</guid><description>&lt;p align=justify&gt;В моей квартире &lt;strike&gt;разгром,&lt;/strike&gt; строители начали долгожданный ремонт, в связи с чем мне пришлось на время сменить место жительства и подключиться к другому интернет-провайдеру. Особенно не заморачиваясь, решил подключиться к первому провайдеру, который проведет кабель в квартиру. Им и оказался Билайн.&lt;/p&gt;&lt;p align=justify&gt;Интернет от Билайна настраиваится легко под виндой, но вот со всяческими линуксами он дружить совершенно не хочет. На &lt;a href="http://msk.provod.beeline.ru/ab/support/config.wbp" rel=nofollow target=_blank&gt;официальном сайте&lt;/a&gt; у них есть только настройки под винду да под Mac OS, и например настроить его под SuSe оказалось непросто.&lt;/p&gt;&lt;p align=justify&gt;Всем линуксоидам, на кого свалилось несчастье в виде интернета от Билайн, советую почитать вот эти топики:&lt;/p&gt;&lt;li&gt;&lt;a href="http://homenet.corbina.net/index.php?showtopic=204977" rel=nofollow target=_blank&gt;http://homenet.corbina.net/index.php?showtopic=204977&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://homenet.corbina.net/index.php?showtopic=171860" rel=nofollow target=_blank&gt;http://homenet.corbina.net/index.php?showtopic=171860&lt;/a&gt;&lt;/li&gt; и вообще посмотреть всю ветку:&lt;br /&gt;&lt;li&gt;&lt;a href="http://homenet.corbina.net/index.php?showforum=629" rel=nofollow target=_blank&gt;http://homenet.corbina.net/index.php?showforum=629&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;p align=justify&gt;Я у себя настроил интернет без использования kvpnc. Я так и не раскопал, как в нем можно отключить буферизацию pptp. А с включенной буферизацией иногда происходили непонятные тормоза в работе. И еще, MTU пришлось выставить ниже 1500, поскольку с MTU 1500 довольно большой процент пактов пропадал и довольно много сервисов переставало работать.&lt;/p&gt;&lt;p align=justify&gt;В общем, интернет от Билайна мне не понравился. Геморрой с настройкой слишком большой, чтобы я и дальше пользовался услугами этого провайдера.&lt;/p&gt;&lt;p align=justify&gt;P.S. Я тут из Черногории недавно вернулся, начинаю потихоньку выкладывать &lt;a href="http://travel.bloged.org/herceg-novi.html" target=_blank&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-6682585158642559030?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/z377a7xTJqA" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-29T20:32:58.580+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.bloged.org/2009/08/opensuse.html</feedburner:origLink></item><item><title>Как подружить вебкамеру Genius e Messenger 112 и OpenSUSE</title><link>http://feedproxy.google.com/~r/funnyproger/~3/n3lHtGtaIkA/genius-e-messenger-112-opensuse.html</link><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Mon, 20 Jul 2009 03:38:21 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-6036447195518069569</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/e-messenger-112-750866.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 400px;" src="http://www.bloged.org/uploaded_images/e-messenger-112-750864.jpg" border="0" alt="Genius e-Messenger 112, отвратительная веб-камера" title='Genius E Messenger' /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p align=justify&gt;Вебкамера Genius e Messenger 112  одна из самых дешевых, и одна из самых хреновых. Родные драйвера есть только под винду, а под linux она &lt;strike&gt;без напильника и танцев с бубном&lt;/strike&gt; работать не желает.&lt;/p&gt;&lt;p align=justify&gt;Итак, если вы счастливый обладатель OpenSUSE версии до 11.1 (версия ядра до 2.6.27), то камеру завести относительно несложно. Надо установить пакет gspcav, наложить на него &lt;a href='http://slil.ru/25958099' rel=nofollow target=_blank&gt;патч&lt;/a&gt;, собрать и установить модуль gspca — камера заведется без проблем.&lt;/p&gt;&lt;p align=justify&gt;Но если вы несчастный обладатель &lt;a href='http://www.bloged.org/2009/02/opensuse-111.html'&gt;самого глючного дистрибутива OpenSUSE&lt;/a&gt;, ваши беды не закончились на его установке. Дело в том, что начиная с версии ядра 2.6.27 программисты &lt;strike&gt;решили вымахнуться и&lt;/strike&gt; перенесли поддержку драйверов gspca из отдельного пакета в состав ядра. И разумеется, прозевали поддержку этой злосчастной камеры. Правда, пообещали, что начиная с версии ядра 2.6.28 эта камера будет работать.&lt;/p&gt;&lt;p align=justify&gt;Но на сегодняшний день последней версией ядра для OpenSUSE 11.1 является 2.6.27, поэтому или придется драйвер собрать руками, или скачать / ждать новую версию ядра. Ждать мне было лень, поэтому я скачал исходники ядра, и поправил файл &lt;b&gt;gspca_pac207.c&lt;/b&gt;, дописав одну выделенную строчку:&lt;/p&gt;&lt;p align=justify&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;528 static const __devinitdata struct usb_device_id device_table[] = {&lt;br /&gt;529         {USB_DEVICE(0x041e, 0x4028)},&lt;br /&gt;530         {USB_DEVICE(0x093a, 0x2460)},&lt;br /&gt;531         {USB_DEVICE(0x093a, 0x2463)},&lt;br /&gt;532         {USB_DEVICE(0x093a, 0x2464)},&lt;br /&gt;533         {USB_DEVICE(0x093a, 0x2468)},&lt;br /&gt;534         {USB_DEVICE(0x093a, 0x2470)},&lt;br /&gt;535         {USB_DEVICE(0x093a, 0x2471)},&lt;br /&gt;&lt;b&gt;536         {USB_DEVICE(0x093a, 0x2476)},&lt;/b&gt;&lt;br /&gt;537         {USB_DEVICE(0x093a, 0x2472)},&lt;br /&gt;538         {USB_DEVICE(0x2001, 0xf115)},&lt;br /&gt;539         {}&lt;br /&gt;540 };&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p align=justify&gt;Модуль собрался, и заработал, но с глюками. Cheese, Skype работают нормально, а вот camorama не завелась. Яркость изображения регулируется с помощью v4lctl, а вот как регулировать контрастность или цветовой баланс — хз. В старой версии ядра таких проблем не было.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-6036447195518069569?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/n3lHtGtaIkA" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-20T14:38:21.541+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.bloged.org/2009/07/genius-e-messenger-112-opensuse.html</feedburner:origLink></item><item><title>OpenSUSE, Skype и отправка SMS</title><link>http://feedproxy.google.com/~r/funnyproger/~3/vF02KtY6V9k/opensuse-skype-sms.html</link><category>Интересное</category><category>Полезное</category><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Mon, 13 Jul 2009 13:37:12 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-1986929310692848627</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/skype-784252.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 400px;" src="http://www.bloged.org/uploaded_images/skype-784250.jpg" border="0" alt="Skype Logo" title="Логотип Скайпа" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p align=justify&gt;На сегодняшний день последней версией скайпа для OpenSUSE является версия 2.0.0.72. Возможность отправлять СМСки в скайпе появилась только с версии 2.5, но как оказалось, отправить SMS можно и из OpenSUSE, и из Ubuntu с использованием Skype API on Linux.&lt;/p&gt;&lt;p align=justify&gt;Для того, чтобы заработала отправка SMS, надо установить сам &lt;a href='http://www.skype.com/intl/ru/download/skype/linux/choose/' rel=nofollow target=_blank&gt;Skype&lt;/a&gt;, а также &lt;a href='http://sourceforge.net/projects/skype4py/files/skype4py/Skype4Py-1.0.31.0.tar.gz/download' rel=nofollow target=_blank&gt;Python wrapper Skype4Py&lt;/a&gt;, и утилиту &lt;a href='http://www.kolmann.at/philipp/linux/skysentials/' rel=nofollow target=_blank&gt;Skysentials&lt;/a&gt;.&lt;/p&gt;&lt;p align=justify&gt;После запуска видим  Skysentials видим вполне интуитивно понятную тулзу для отправки SMS:&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/Skype-SMS-OpenSUSE-729895.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 373px; height: 372px;" src="http://www.bloged.org/uploaded_images/Skype-SMS-OpenSUSE-729892.jpg" border="0" alt="Отправка СМС из скапа под линуксом" title="Отправить СМС" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p align=justify&gt;Отправка СМС не бесплатная, но сопоставима по стоимости с отправкой с мобильника. А с учетом того, что сейчас скайп активно рассылает ваучеры на пополнение баланса, можно и попробовать.&lt;/p&gt;&lt;p align=justify&gt;&lt;br /&gt;&lt;br /&gt;Я испытал это чудо буржуйской техники, и выяснил две вещи.&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Отправка СМС отлично работает под OpenSUSE, только вот Skype4Py пришлось чуть-чуть &lt;strike&gt;напильником&lt;/strike&gt; доработать (в первой строчке заменить python2.5 на python2.6)&lt;/li&gt;&lt;li&gt;СМС в &lt;a href='http://travel.bloged.org/budva.html'&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-1986929310692848627?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/vF02KtY6V9k" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-14T00:37:12.029+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.bloged.org/2009/07/opensuse-skype-sms.html</feedburner:origLink></item><item><title>Балансировка нагрузки с помощью nginx</title><link>http://feedproxy.google.com/~r/funnyproger/~3/H7MTwvlv3zs/nginx.html</link><category>Интересное</category><author>noreply@blogger.com (Ed)</author><pubDate>Sun, 12 Jul 2009 08:06:04 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-4595314859084242469</guid><description>&lt;p align=justify&gt;Наш проект давно уже перерос возможности одного сервера, и совсем недавно мы решили собрать кластер из нескольких вебсерверов и центрального сервера с базой данных. Как я уже писал, простое &lt;a href='http://www.bloged.org/2009/01/nginx.html'&gt;включение nginx&lt;/a&gt; в качестве проксирующего вебсервера уже значительно облегчает жизнь, но nginx может раскидывать запросы и по нескольким серверам. Вот пример такой конфигурации:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;upstream backend {&lt;br /&gt;    server 192.168.1.1:8080;&lt;br /&gt;    server 192.168.1.2:8080;&lt;br /&gt;    server 192.168.1.3:8080;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;server {&lt;br /&gt;    listen    80;&lt;br /&gt;    server_name  somedomain.tld;&lt;br /&gt;    location ~* \.()$ {&lt;br /&gt;    root   /home/username/data/www/somedomain.tld;  }&lt;br /&gt;    location / {&lt;br /&gt;    client_max_body_size    10m;&lt;br /&gt;    client_body_buffer_size 128k;&lt;br /&gt;    proxy_send_timeout   90;&lt;br /&gt;    proxy_read_timeout   90;&lt;br /&gt;    proxy_buffer_size    4k;&lt;br /&gt;    proxy_buffers     16 32k;&lt;br /&gt;    proxy_busy_buffers_size 64k;&lt;br /&gt;    proxy_temp_file_write_size 64k;&lt;br /&gt;    proxy_connect_timeout 30s;&lt;br /&gt;    proxy_pass   http://backend;&lt;br /&gt;    proxy_set_header   Host   $host;&lt;br /&gt;    proxy_set_header   X-Real-IP  $remote_addr;&lt;br /&gt;    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;       }&lt;br /&gt;location ~* /.(jpg|jpeg|gif|png|css|mp3|avi|mpg|txt|js|jar|rar|zip|tar|wav|wmv)$ {&lt;br /&gt;root    /home/username/data/www/somedomain.tld;}&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p align=justify&gt;В этом случае все запросы будут равномерно раскидываться между серверами с внутренними айпишниками  192.168.1.1- 192.168.1.3 &lt;/p&gt;&lt;p align=justify&gt;Проблемы начнутся, если сайт хранит сессии в файлах. Разумеется, при перенаправлении запроса на другой сервер файл сессии на нем не будет найден, и сайт будет работать некорректно, поэтому придется &lt;a href='http://blog.sjinks.org.ua/mysql/43-storing-php-sessions-in-database/'&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-4595314859084242469?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/H7MTwvlv3zs" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-12T19:06:04.777+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://www.bloged.org/2009/07/nginx.html</feedburner:origLink></item><item><title>ATI Radeon X1650 Series и ATI Overdrive</title><link>http://feedproxy.google.com/~r/funnyproger/~3/I-Nqsvrr5zs/ati-radeon-x1650-series-ati-overdrive.html</link><category>Железо</category><author>noreply@blogger.com (Ed)</author><pubDate>Wed, 10 Jun 2009 02:51:51 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-3565079308138804490</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/Radeon-x1650-778753.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 374px; height: 400px;" src="http://www.bloged.org/uploaded_images/Radeon-x1650-778748.jpg" border="0" alt="ATI Radeon x1650 series" title="Так себе видюха. Можно найти и получше"/&gt;&lt;/a&gt;&lt;p align=justify&gt;Седина в бороду, бес в ребро. Решил я &lt;strike&gt;погонять Warcraft III&lt;/strike&gt; протестировать производительность этой графической системы под виндой. И вот черт меня дернул залезть в настройки ATI Catalyst Control Center. Там я обнаружил возможность включить ATI Overdrive, который якобы увеличивает производительность карты. &lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/AtiOverdrive-732317.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 385px;" src="http://www.bloged.org/uploaded_images/AtiOverdrive-732312.jpg" border="0" alt="ATI Overdrive. Не запускайте!" title="Аццкий троян, не запускайте!" /&gt;&lt;/a&gt;&lt;p align=justify&gt;Ага, включил. Изменений визуально не замечал, пока не &lt;strike&gt;сел играть&lt;/strike&gt; начал тестирование системы. Минут через несколько раздался писк из системного блока, и компьютер выключился. Эта софтина решила подразогнать графический процессор, в результате чего он перегрелся и сработала защита от перегрева. Ага, подумал я, а не выключить ли мне этот режим? Так вот, &lt;b&gt;ATI Overdrive можно только включить, &lt;a href='http://itc.ua/forum/archive/index.php/t-12127.html' rel=nofollow target=_blank&gt;отключить этот аццкий вирус невозможно!&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;p align=justify&gt;Решение было найдено очень просто, надо всего лишь поставить новые дрова на эту железяку. Жизнь показала, что если что-то работает, то трогать не надо. Соблюдайте &lt;a href="http://www.bloged.org/2008/09/blog-post_18.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-3565079308138804490?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/I-Nqsvrr5zs" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-10T13:51:51.735+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://www.bloged.org/2009/06/ati-radeon-x1650-series-ati-overdrive.html</feedburner:origLink></item><item><title>Я в восторге от Google App Engine</title><link>http://feedproxy.google.com/~r/funnyproger/~3/WiLcQp7msPE/google-app-engine.html</link><category>Интересное</category><category>Полезное</category><author>noreply@blogger.com (Ed)</author><pubDate>Sat, 06 Jun 2009 16:41:32 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-9153097807189239537</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;p align=justify&gt;Не так давно я &lt;strike&gt;обратился в истинную веру&lt;/strike&gt; стал изучать Python, и как оказалось, не зря. Питон уже давно успешно используется Гуглом в качестве одного из официальных языков разработки веб-приложений, и на сегодняшний день это один из двух языков, на котором легко пишутся приложения для Google App Engine (второй язык - Java)&lt;/p&gt;&lt;p align=justify&gt;Гугл предлагает &lt;a href='http://techwork.ru/2008/08/06/free-webhosting-google-app-engine-style/' target=_blank&gt;хостить такие приложения совершенно бесплатно&lt;/a&gt;. Те, кто в этом шарит, может слепить весьма &lt;a href="http://appgallery.appspot.com" target=_blank&gt;достойные приложения&lt;/a&gt;. Хостинг этот весьма необычный, нет привычного доступа по FTP, SSH; все делается через консоль установленного фреймворка. Статику заливать можно, использовать БД - тоже. Но это будет не привычная всем MySQL или Oracle, это какая-то своя гугловская хитрая база данных, к которой можно строить запросы с помощью GQL, в чем-то похожий на привычных нам SQL.&lt;/p&gt;&lt;p align=justify&gt;Дело было вечером, и вместо &lt;a href="http://www.bloged.org/2008/01/linuxdcpp-d-link-dsl-500t.html"&gt;скачивания фильмов из сети&lt;/a&gt;, исключительно интереса ради я решил написать на Python &lt;a href="http://guessanumber.appspot.com"&gt;игру "Угадай число"&lt;/a&gt; и выложить ее на бесплатный гуглохостинг. На нем все работает также стабильно, как и дома.&lt;/p&gt;&lt;p align=justify&gt;Интересно то, что к бесплатному хостингу от гугла запросто можно прикрутить свой домен и хостить свои разработки, не нагружая свой &lt;a href="http://www.bloged.org/2008/05/vds.html"&gt;VDS&lt;/a&gt;. При всем уважении к хостеру, вряд ли по надежности он сравнится с бесплатным хостингом от Google.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-9153097807189239537?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/WiLcQp7msPE" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-07T03:41:32.784+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2009/06/google-app-engine.html</feedburner:origLink></item><item><title>Управление браузером и написание сетевых ботов</title><link>http://feedproxy.google.com/~r/funnyproger/~3/FB3mWfYLo0I/blog-post.html</link><category>Интересное</category><author>noreply@blogger.com (Ed)</author><pubDate>Mon, 25 May 2009 13:17:10 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-6153707792619683163</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.bloged.org/uploaded_images/selenium-rc-701867.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 390px;" src="http://www.bloged.org/uploaded_images/selenium-rc-701855.png" border="0" alt="Selenium Remote Control" title="Selenium Remote Control" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p align=justify&gt;Большинство сетевых ботов легко пишутся на Perl с использованием библиотеки WWW::Mechanize или LWP::UserAgent. Но начинаются проблемы, если целевая страница построена на AJAX, поскольку Mechanize не умеет обрабатывать Javascript.&lt;/p&gt;&lt;p align=justify&gt;Победить эту проблему можно, заставив обычный браузер делать то, что нужно программе. Для программистов под Windows есть модули Win32::IE::Mechanize, который худо-бедно, но все же управляет ослом и заставляет его лазить по интернету.  С юниксовыми ботами несколько сложнее, поскольку браузеры приходится контролировать или через плагины, или через инъекции управляющего Javascript. &lt;/p&gt;&lt;p align=justify&gt;Из бесплатных инструментов мне больше всего понравились &lt;a href='http://seleniumhq.org/projects/remote-control/' rel=nofollow&gt;Selenium Remote Control&lt;/a&gt; и &lt;a href='http://wtr.rubyforge.org/' rel=nofollow&gt;Watir&lt;/a&gt;. Первый кроссплатформенный, может стыковаться с любым языком программирования и работает практически с любым браузерами на инъекциях Javascript. Но он довольно сложен в настройке и запросто может глючить на формах, содержащих много скриптов.&lt;/p&gt;&lt;p align=justify&gt;Watir же может управлять только лисой, и только через &lt;a href='http://wtr.rubyforge.org/install.html' target=_blank&gt;плагин&lt;/a&gt;, который доступен для скачивания на официальном сайте. Watir не очень хорошо работает с фреймами, но зато не засоряет код полученной страницы дополнительными скриптами. Правда, у этой системы есть один недостаток, она работает только с Ruby (есть еще порт на Java, проект Watij).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-6153707792619683163?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/FB3mWfYLo0I" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-26T00:17:10.781+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2009/05/blog-post.html</feedburner:origLink></item><item><title>Экспорт баз MySQL</title><link>http://feedproxy.google.com/~r/funnyproger/~3/Ma_41eJ0hfI/mysql.html</link><category>MySQL</category><category>Полезное</category><author>noreply@blogger.com (Ed)</author><pubDate>Mon, 11 May 2009 12:17:41 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-1862777564172031758</guid><description>При переносе баз MySQL с одного сервера на другой я с удивлением обнаружил, что хранимые процедуры и функции не перенеслись, а остальные структуры перенеслись корректно. Оказывается, mysqldump по умолчанию не экспортирует функции и процедуры, и для того, чтобы их вынести в дамп, параметры экспорта надо указывать отдельно:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;mysqldump -u username -p db_name --routines --extended-insert &gt;dump.sql&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3156059507867495809-1862777564172031758?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/Ma_41eJ0hfI" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-11T23:17:41.984+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.bloged.org/2009/05/mysql.html</feedburner:origLink></item><item><title>Как пережать видео из 3gp в AVI</title><link>http://feedproxy.google.com/~r/funnyproger/~3/SDg0nXpaKsA/3gp-avi.html</link><category>Linux</category><author>noreply@blogger.com (Ed)</author><pubDate>Wed, 08 Apr 2009 12:44:06 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-3156059507867495809.post-8637967981099272933</guid><description>&lt;p align=justify&gt;Многие мобильные телефоны позволяют снимать видео на встроенную камеру и сохранять его в формате 3gp. Мой любимый mplayer отказывается показывать видео в формате 3gp, а посмотреть хотелось бы.&lt;/p&gt;&lt;p align=justify&gt;Для работы с видео и звуком под Linux есть как минимум 2 классных инструмента, mencoder и ffmpeg. И чтобы посмотреть видео, снятое на телефоне SonyEricsson K750i, я его преобразовал в формат avi:&lt;/p&gt;&lt;p align=justify&gt;&lt;pre&gt;&lt;b&gt;mencoder 007.3gp -ovc lavc -lavcopts vcodec=msmpeg4v2 -oac mp3lame -lameopts vbr=3 -o 007.avi&lt;/b&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p align=justify&gt;Размер файла при этом вырос в 2 раза; и видео, и звук оказались в приемлемом качестве. Но точно такой же финт не сработал с видео, отснятым на телефон Nokia 6223, там используется какой-то нестандартный битрейт&lt;/p&gt;&lt;p align=justify&gt;Можно попробовать вылечить так:&lt;/p&gt;&lt;p align=justify&gt;&lt;pre&gt;&lt;b&gt;mencoder 007.3gp -ovc lavc -lavcopts vcodec=msmpeg4v2 -oac mp3lame -srate 8000 -lameopts vbr=3 -o 007.avi&lt;/b&gt;&lt;/pre&gt;&lt;/p&gt;&lt;p align=justify&gt;Так выходной файл все-таки получился, но звук был отвратительным. Нельзя было разобрать ни слова, звук стал более быстрым и тональность голосов изменилась&lt;/p&gt;&lt;p align=justify&gt;Я попробовал последний вариант:&lt;/p&gt;&lt;p align=justify&gt;&lt;pre&gt;&lt;b&gt;ffmpeg -i 007.3gp -f avi -acodec libmp3lame 007.avi&lt;/b&gt;&lt;/pre&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-8637967981099272933?l=www.bloged.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/funnyproger/~4/SDg0nXpaKsA" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-08T23:44:06.924+04:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.bloged.org/2009/04/3gp-avi.html</feedburner:origLink></item><media:rating>nonadult</media:rating></channel></rss>
