<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-743155140933111263</id><updated>2011-05-30T22:59:00.899+04:00</updated><category term='ruby'/><category term='macos'/><category term='RUBYOPT'/><category term='wirble'/><category term='mysql'/><category term='wireless 1505'/><category term='mac os'/><category term='latitude d630'/><category term='irb'/><category term='textmate'/><category term='binmode'/><category term='rubygems'/><category term='http'/><category term='hpricot'/><category term='multipart/form-data'/><category term='dell'/><category term='tokyo-cabinet'/><category term='gem'/><category term='reading file'/><category term='wpf'/><category term='производительность'/><category term='file upload'/><category term='microsoft'/><category term='.net'/><category term='quality'/><category term='mc'/><category term='negative string size'/><category term='ubuntu'/><category term='macports'/><category term='ndiswrapper'/><title type='text'>alex.ilin blog</title><subtitle type='html'>Программирование, .net, ruby, rails</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-8746519272827216790</id><published>2011-05-30T22:52:00.003+04:00</published><updated>2011-05-30T22:59:00.909+04:00</updated><title type='text'>Feed Me Oil by HolyWaterGames</title><content type='html'>We are proud to present &lt;a href="http://HolyWaterGames.com" title="HolyWaterGames independent game development studio"&gt;HolyWaterGames&lt;/a&gt; - an independent game development studio, and our first iPhone title: &lt;a href="http://HolyWaterGames.com" title="Feed Me Oil by HolyWaterGames"&gt;Feed Me Oil&lt;/a&gt; published by Chillingo.&lt;br /&gt;&lt;br /&gt;Official launch trailer:&lt;br /&gt;&lt;br /&gt;&lt;iframe width="470" height="292" src="http://www.youtube.com/embed/X6qhbZkMA0Q" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/holywatergames" title="Follow HolyWaterGames on Twitter"&gt;Follow us on twitter&lt;/a&gt;&lt;br /&gt;&lt;a href="http://facebook.com/feedmeoil" title="An Official Feed Me Oil Facebook page"&gt;Connect via Facebook&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-8746519272827216790?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/8746519272827216790/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=8746519272827216790' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/8746519272827216790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/8746519272827216790'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2011/05/feed-me-oil-by-holywatergames.html' title='Feed Me Oil by HolyWaterGames'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/X6qhbZkMA0Q/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-847676992925650951</id><published>2009-03-09T23:50:00.001+03:00</published><updated>2009-03-09T23:52:18.454+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tokyo-cabinet'/><title type='text'>Установка TokyoCabinet/TokyoTyrant</title><content type='html'>git clone git://github.com/etrepum/tokyo-cabinet.git&lt;br /&gt;git clone git://github.com/etrepum/tokyo-tyrant.git&lt;br /&gt;&lt;br /&gt;cd tokyo-cabinet/&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;cd tokyo-tyrant/&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;sudo make install&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-847676992925650951?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/847676992925650951/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=847676992925650951' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/847676992925650951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/847676992925650951'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2009/03/tokyocabinettokyotyrant.html' title='Установка TokyoCabinet/TokyoTyrant'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-4956384298315951434</id><published>2009-03-09T13:17:00.004+03:00</published><updated>2009-03-09T14:14:41.507+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='macports'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><category scheme='http://www.blogger.com/atom/ns#' term='textmate'/><title type='text'>Textmate и MacPorts ruby</title><content type='html'>Чтобы в Textmate заработала команда Run Script с версией ruby установленной из MacPorts, надо добавить 2 environment переменные&lt;br /&gt;&lt;br /&gt;TaxtMate -&gt; Preferences -&gt; Advanced -&gt; Shell Variables&lt;br /&gt;&lt;br /&gt;TM_RUBY   /opt/local/bin/ruby&lt;br /&gt;RUBYOPT   rubygems&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Еще 1 способ это спрятать стандартную установку ruby и создать soft link на ruby из macports&lt;br /&gt;&lt;br /&gt;sudo mv /usr/bin/ruby /usr/bin/ruby.orig&lt;br /&gt;sudo mv /usr/bin/gem /usr/bin/gem.orig&lt;br /&gt;sudo mv /usr/bin/rails /usr/bin/rails.orig&lt;br /&gt;&lt;br /&gt;sudo ln -s /opt/local/bin/ruby /usr/bin/ruby&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-4956384298315951434?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/4956384298315951434/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=4956384298315951434' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/4956384298315951434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/4956384298315951434'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2009/03/textmate-macports-ruby.html' title='Textmate и MacPorts ruby'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-4512734448950184312</id><published>2009-02-28T18:41:00.001+03:00</published><updated>2009-02-28T18:41:50.835+03:00</updated><title type='text'>цвета в git console</title><content type='html'>git config --global color.branch auto&lt;br /&gt;git config --global color.diff auto&lt;br /&gt;git config --global color.status auto&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-4512734448950184312?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/4512734448950184312/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=4512734448950184312' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/4512734448950184312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/4512734448950184312'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2009/02/git-console.html' title='цвета в git console'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-7968726441377768042</id><published>2008-09-12T16:20:00.003+04:00</published><updated>2008-09-12T16:24:40.873+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac os'/><title type='text'>Создание environment variables в Mac OSX Leopard</title><content type='html'>Рабочая &lt;a href="http://mactip.blogspot.com/2004/04/setting-environment-variables.html"&gt;инструкция&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-7968726441377768042?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/7968726441377768042/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=7968726441377768042' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/7968726441377768042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/7968726441377768042'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2008/09/environment-variables-mac-osx-leopard.html' title='Создание environment variables в Mac OSX Leopard'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-32525353822439091</id><published>2008-09-12T16:17:00.003+04:00</published><updated>2009-03-04T00:43:47.362+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='gem'/><title type='text'>Установка MySQL/Ruby gem на Mac OS X Leopard</title><content type='html'>1. ставим mysql &lt;br /&gt;2. добавляем в .profile &lt;br /&gt;&lt;br /&gt;alias mysql=/usr/local/mysql/bin/mysql&lt;br /&gt;alias mysqladmin=/usr/local/mysql/bin/mysqladmin&lt;br /&gt;&lt;br /&gt;3. задаем root пароль &lt;br /&gt;mysqladmin -u root password NEWPASSWORD&lt;br /&gt;&lt;br /&gt;или меняем&lt;br /&gt;&lt;br /&gt;mysqladmin -u root -p oldpassword newpass&lt;br /&gt;&lt;br /&gt;4. ставим gem - &lt;a href="http://wonko.com/post/how-to-install-the-mysqlruby-gem-on-mac-os-x-leopard"&gt;тут&lt;/a&gt; рабочая инструкция&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-32525353822439091?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/32525353822439091/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=32525353822439091' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/32525353822439091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/32525353822439091'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2008/09/mysqlruby-gem-mac-os-x-leopard.html' title='Установка MySQL/Ruby gem на Mac OS X Leopard'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-320704926243651044</id><published>2008-07-01T14:49:00.002+04:00</published><updated>2008-07-01T15:06:08.055+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='hpricot'/><category scheme='http://www.blogger.com/atom/ns#' term='negative string size'/><title type='text'>Ruby: hpricot error</title><content type='html'>Если у вас стоит задача распарсить / изменить какой то html, и вы пишете на ruby то на мой взгляд идеальный вариант - использование небольшой и быстрой библиотеки &lt;a href="http://code.whytheluckystiff.net/hpricot/"&gt;hpricot&lt;/a&gt;. Она написана на С поэтому работает довольно быстро (&lt;a href="http://redhanded.hobix.com/inspect/okayGiveHpricot02AGo.html"&gt;быстрее чем другие парсилки&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;Hpricot позволяет анализировать и редактировать html с помощью &lt;a href="http://code.whytheluckystiff.net/hpricot/wiki/HpricotCssSearch"&gt;css селекторов&lt;/a&gt; или &lt;a href="http://code.whytheluckystiff.net/hpricot/wiki/HpricotXpathSearch"&gt;xpath селекторов&lt;/a&gt;. Вобщем очень удобно и просто.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.whytheluckystiff.net/hpricot/wiki/InstallingHpricot"&gt;Инструкция для установки&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Но у hpricot есть небольшие проблемки, например иногда при создании документа: &lt;br /&gt;&lt;pre&gt;require 'hpricot'&lt;br /&gt;doc = Hpricot "some html"&lt;/pre&gt;&lt;br /&gt;возникает ошибка &lt;pre&gt;ArgumentError. negative string size (or size too big).&lt;/pre&gt;&lt;br /&gt;Оказывается бывает такое из-за каких-то последовательностей символов в html. Эти ошбки постепенно фиксятся разработчиками, но буквально сегодня у меня она возникала, парсер падал из-за того, что в html была последовательность символов "\r\n". Так как мне эти символы совсем не нужны я их просто вырезаю.&lt;br /&gt;&lt;pre&gt;html.gsub!("\r\n", "")&lt;br /&gt;doc = Hpricot html&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-320704926243651044?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/320704926243651044/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=320704926243651044' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/320704926243651044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/320704926243651044'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2008/07/ruby-hpricot-error.html' title='Ruby: hpricot error'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-5799388808136649211</id><published>2008-06-23T17:33:00.003+04:00</published><updated>2008-06-23T17:38:03.661+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='wirble'/><category scheme='http://www.blogger.com/atom/ns#' term='irb'/><title type='text'>wirble: tab-completion and coloring for irb</title><content type='html'>Wirble - это отличная утилитка для ruby программистов. Она добавляет в irb расцветку синтаксиса и tab-completion.&lt;br /&gt;&lt;br /&gt;Установка:&lt;br /&gt;1. sudo gem install -y wirble&lt;br /&gt;2. nano ~/.irbrc&lt;br /&gt;3. Добавляем туда &lt;br /&gt;&lt;pre&gt;require 'rubygems'&lt;br /&gt;require 'wirble'&lt;br /&gt;Wirble.init&lt;br /&gt;Wirble.colorize&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-5799388808136649211?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/5799388808136649211/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=5799388808136649211' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/5799388808136649211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/5799388808136649211'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2008/06/wirble-tab-completion-and-coloring-for.html' title='wirble: tab-completion and coloring for irb'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-8497018564475842217</id><published>2008-05-26T15:14:00.002+04:00</published><updated>2008-05-26T15:18:45.252+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mc'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>installing mc in ubuntu 8.04</title><content type='html'>Чтобы установить на ubuntu 8.04 midnight commander надо сначала добавить следующие источники&lt;br /&gt;&lt;pre&gt;deb http://archive.ubuntu.com/ubuntu/ hardy main restricted universe&lt;br /&gt;deb-src http://archive.ubuntu.com/ubuntu/ hardy main restricted universe&lt;/pre&gt;&lt;br /&gt;в файл /etc/apt/sources.list&lt;br /&gt;далее как обычно sudo apt-get install mc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-8497018564475842217?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/8497018564475842217/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=8497018564475842217' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/8497018564475842217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/8497018564475842217'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2008/05/installing-mc-in-ubuntu-804.html' title='installing mc in ubuntu 8.04'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-1578598878278258124</id><published>2008-05-26T03:07:00.003+04:00</published><updated>2008-05-26T03:11:12.604+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rubygems'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='RUBYOPT'/><title type='text'>auto load rubygems</title><content type='html'>Чтобы не забыть и не искать по 100 раз.&lt;br /&gt;&lt;br /&gt;Чтобы не писать в каждом файле require 'rubygems' надо создать environment variable RUBYOPT=rubygems&lt;br /&gt;&lt;br /&gt;Для unix добавить строки в .profile файл &lt;br /&gt;&lt;pre&gt;export RUBYOPT=rubygems&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-1578598878278258124?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/1578598878278258124/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=1578598878278258124' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/1578598878278258124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/1578598878278258124'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2008/05/auto-load-rubygems.html' title='auto load rubygems'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-166597478918585666</id><published>2008-05-26T00:38:00.009+04:00</published><updated>2008-08-04T20:29:37.306+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dell'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless 1505'/><category scheme='http://www.blogger.com/atom/ns#' term='latitude d630'/><category scheme='http://www.blogger.com/atom/ns#' term='ndiswrapper'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Dell wireless 1505 in ubuntu 8.04</title><content type='html'>Пару дней назад купил ноутбук dell latitude d630 в нем стоит dell wireless 1505 draft wifi модуль (он же broadcom 4328). Под ubuntu 8.04 он автоматически не определяется, чтобы включить его необходимо иметь windows драйвер (у меня он лежал в папке c:\drivers\network\R174291) и ndiswrapper. Ndiswrapper реализует Windows kernel API и NDIS API (Network Driver Interface Specification) внутри ядра Linux, поэтому становиться возможным использовать windows драйвер. У меня все работает с версией &lt;a target="_blank" href="http://sourceforge.net/project/showfiles.php?group_id=93482&amp;package_id=99148&amp;release_id=573476"&gt;1.52&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Чтобы установить ndiswrapper выпоняем:&lt;br /&gt;&lt;pre&gt;sudo apt-get -y install build-essential   &lt;br /&gt;tar zxvf ndiswrapper-1.52.tar.gz&lt;br /&gt;cd ndis*&lt;br /&gt;sudo make uninstall&lt;br /&gt;sudo make&lt;br /&gt;sudo make install&lt;/pre&gt;&lt;br /&gt;После этого переходим в папку с драйвером и выполняем&lt;br /&gt;&lt;pre&gt;sudo ndiswrapper -i bcmwl5.inf&lt;br /&gt;sudo modprobe ndiswrapper&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Теперь wifi должен включиться, индикатор загореться.&lt;br /&gt;&lt;br /&gt;После перезагрузки компа wifi снова disabled пока не выполнена команда sudo modprobe ndiswrapper поэтому надо сделать, чтобы она выполнялась при старте системы&lt;br /&gt;&lt;br /&gt;Это можно сделать по разному например &lt;a href="http://www.howtogeek.com/howto/ubuntu/how-to-add-a-program-to-the-ubuntu-startup-list-after-login/"&gt;так&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-166597478918585666?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/166597478918585666/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=166597478918585666' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/166597478918585666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/166597478918585666'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2008/05/dell-wireless-1505-in-ubuntu-804.html' title='Dell wireless 1505 in ubuntu 8.04'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-3960165720215179810</id><published>2008-05-21T19:40:00.008+04:00</published><updated>2008-05-26T03:04:46.507+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='multipart/form-data'/><category scheme='http://www.blogger.com/atom/ns#' term='file upload'/><title type='text'>Ruby: file upload</title><content type='html'>В ruby есть библиотека для работы с http протоколом 'net/http'. Но по неизвестным причинам она не умеет аплоадить файлы на сервер. Эту функциональность приходиться реализовывать самостоятельно. Для этого необходимо сформировать правильный POST запрос, формат которого подробно описан в &lt;a href="http://www.rfc.net/rfc1867.html"&gt;rfc1867&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Для тех кому лень читать - запрос выглядит примерно так:&lt;br /&gt;&lt;pre&gt;Content-type: multipart/form-data, boundary=AaB03x&lt;br /&gt;&lt;br /&gt;--AaB03x&lt;br /&gt;content-disposition: form-data; name="parameter_name"&lt;br /&gt;&lt;br /&gt;Parameter value&lt;br /&gt;--AaB03x&lt;br /&gt;content-disposition: form-data; name="name"; filename="file_name"&lt;br /&gt;Content-Type: text/plain (зависит от типа файла)&lt;br /&gt;&lt;br /&gt;... содержание файла ...&lt;br /&gt;--AaB03x--&lt;/pre&gt;&lt;br /&gt;Запрос не сложный, реализация тоже. &lt;br /&gt;&lt;pre&gt;require 'net/http'&lt;br /&gt;&lt;br /&gt;class MultipartPostRequest&lt;br /&gt;  #&lt;br /&gt;  # url = URI.parse('http://test.com/path')    &lt;br /&gt;  # post = MultipartPostRequest.create(url, &lt;br /&gt;  #      { :file =&gt; File.open(filename), :filename =&gt; filename })&lt;br /&gt;  # res = Net::HTTP.start(url.host, url.port) do |http|&lt;br /&gt;  #   http.request(post)&lt;br /&gt;  # end&lt;br /&gt;  #&lt;br /&gt;  def self.create(uri, pars)&lt;br /&gt;    post = Net::HTTP::Post.new(uri.path)&lt;br /&gt;    boundary = (rand*1000000000).to_i.to_s&lt;br /&gt;    post.set_content_type("multipart/form-data", {:boundary =&gt; boundary})&lt;br /&gt;    &lt;br /&gt;    body = ""&lt;br /&gt;    pars.each do |key, value|&lt;br /&gt;      body &lt;&lt; "--#{boundary}\r\n"&lt;br /&gt;      append_post_parameter(body, key, value)&lt;br /&gt;    end&lt;br /&gt;    body &lt;&lt; "--#{boundary}--"&lt;br /&gt;    &lt;br /&gt;    post.content_length = body.length&lt;br /&gt;    post.body = body &lt;br /&gt;    return post&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def self.append_post_parameter(body, key, value)    &lt;br /&gt;    if value.class == File&lt;br /&gt;      body &lt;&lt; "Content-disposition: form-data; name=\"#{key}\";\ &lt;br /&gt;filename=\"#{File.basename(value.path)}\"\r\n"&lt;br /&gt;      body &lt;&lt; "Content-type: application\r\n"&lt;br /&gt;      body &lt;&lt; "Content-Transfer-Encoding: binary\r\n\r\n"&lt;br /&gt;      body &lt;&lt; value.binmode.read&lt;br /&gt;      body &lt;&lt; "\r\n"&lt;br /&gt;    else&lt;br /&gt;      body &lt;&lt; "Content-disposition: form-data; name=\"#{key}\"\r\n\r\n"&lt;br /&gt;      body &lt;&lt; "#{value}\r\n"&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;/pre&gt; &lt;br /&gt;Пример использования:&lt;pre&gt;&lt;br /&gt;uri = URI.parse('http://test.com/path')    &lt;br /&gt;post = MultipartPostRequest.create(uri, &lt;br /&gt;  { :file =&gt; File.open(filename), :another =&gt; "parameter" })&lt;br /&gt;res = Net::HTTP.start(uri.host, uri.port) do |http|&lt;br /&gt;  http.request(post)&lt;br /&gt;end&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-3960165720215179810?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/3960165720215179810/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=3960165720215179810' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/3960165720215179810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/3960165720215179810'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2008/05/ruby-file-upload.html' title='Ruby: file upload'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-5015736329058385462</id><published>2008-05-13T13:39:00.003+04:00</published><updated>2008-05-13T13:51:30.508+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='binmode'/><category scheme='http://www.blogger.com/atom/ns#' term='reading file'/><title type='text'>Ruby: reading binary files</title><content type='html'>Столкнулся с неожиданным в ruby.&lt;br /&gt;&lt;br /&gt;Обычно, чтобы прочитать файл достаточно написать:&lt;br /&gt;&lt;pre&gt;content = File.open("filename").read&lt;/pre&gt;&lt;br /&gt;но оказывется это хорошо работает только если файл текстовый. Если же файл бинарный, то он может прочитаться не полностью, видимо встречается какой-то символ который воспринимается как конец файла (какой именно еще не выяснил).&lt;br /&gt;&lt;br /&gt;Пример:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;File.size("c:\\bg.png")                        # =&gt; 15096&lt;br /&gt;File.open("c:\\bg.png").read.length            # =&gt; 4002&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Чтобы прочитать такой файл правильно надо использовать binmode&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;File.open("c:\\bg.png").binmode.read.length    # =&gt; 15096&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-5015736329058385462?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/5015736329058385462/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=5015736329058385462' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/5015736329058385462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/5015736329058385462'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2008/05/ruby-reading-binary-files.html' title='Ruby: reading binary files'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-1876003917623970723</id><published>2008-03-10T12:44:00.009+03:00</published><updated>2008-03-10T15:07:37.687+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='производительность'/><title type='text'>Ruby: str += "s" vs. str &lt;&lt; "s"</title><content type='html'>Вообще довольно тривиальная вещь, но для меня она явилась некоторой неожиданностью.&lt;br /&gt;&lt;br /&gt;Возможно из-за того, что последние 3 года я все время писал программы на .net я как-то привык к тому, что строки являются immutable. Соответственно чтобы изменить строку надо написать что то вроде этого:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;string str = "first";&lt;br /&gt;str += "second";&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Этот же подход я по привычке стал использовать в ruby (1.8), но оказалось что это очень, очень медленно и гораздо быстрее выполняется конкатенация строк так:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;str = "first"&lt;br /&gt;str &lt;&lt; "second"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Вот тест:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;require 'benchmark'&lt;br /&gt;include Benchmark&lt;br /&gt;&lt;br /&gt;str1, str2 = "", ""&lt;br /&gt;bm(6)  do |x|&lt;br /&gt;  x.report("&lt;&lt;") { 100000.times { str1 &lt;&lt; "1" } }&lt;br /&gt;  x.report("+=") { 100000.times { str2 += "1" } }&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Результаты такие:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;            user     system      total        real&lt;br /&gt;&lt;&lt;      0.094000   0.000000   0.094000 (  0.094000)&lt;br /&gt;+=      9.125000   0.000000   9.125000 (  9.125000)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;То есть "&lt;&lt;" работает примерно в 100 раз быстрее. Видимо из-за того что не создает новых объектов.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-1876003917623970723?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/1876003917623970723/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=1876003917623970723' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/1876003917623970723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/1876003917623970723'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2008/03/ruby-str-s-vs-str-s.html' title='Ruby: str += &quot;s&quot; vs. str &lt;&lt; &quot;s&quot;'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-743155140933111263.post-2724608520803118902</id><published>2008-02-07T14:22:00.000+03:00</published><updated>2008-02-08T13:53:46.158+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='quality'/><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>WPF Application Quality Guide</title><content type='html'>Пару дней назад Microsoft выпустила первую версию своих &lt;a href="http://windowsclient.net/wpf/white-papers/wpf-app-quality-guide.aspx"&gt;рекомендаций&lt;/a&gt; о том как улучшить автоматизированное тестированиеи WPF приложений&lt;br /&gt;&lt;br /&gt;Смотреть &lt;a href="http://windowsclient.net/wpf/white-papers/wpf-app-quality-guide.aspx"&gt;тут&lt;/a&gt;.&lt;br /&gt;Скачать сразу &lt;a href="http://download.microsoft.com/download/7/7/0/770a52ec-75cb-4b81-b061-ef8873728612/WPF_Application_Quality_Guide_-_CTP1.doc"&gt;doc&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/743155140933111263-2724608520803118902?l=alex-ilin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alex-ilin.blogspot.com/feeds/2724608520803118902/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=743155140933111263&amp;postID=2724608520803118902' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/2724608520803118902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/743155140933111263/posts/default/2724608520803118902'/><link rel='alternate' type='text/html' href='http://alex-ilin.blogspot.com/2008/02/wpf-application-quality-guide.html' title='WPF Application Quality Guide'/><author><name>Alex Ilin</name><uri>http://www.blogger.com/profile/06682819968485059003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
