<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Дневник борца за высшее образование</title>
	
	<link>http://blog.copperred.net</link>
	<description>стараемся "по циркулю" и "западлицо"</description>
	<pubDate>Tue, 21 Oct 2008 08:40:14 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<image><url>http://www.feedburner.com/fb/images/pub/fb_pwrd.gif</url></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/copperred" type="application/rss+xml" /><item>
		<title>Немного о Руби</title>
		<link>http://feeds.feedburner.com/~r/copperred/~3/427279725/</link>
		<comments>http://blog.copperred.net/2008/10/little_ruby_likbez/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 08:40:14 +0000</pubDate>
		<dc:creator>vestel</dc:creator>
		
		<category><![CDATA[ruby / rails]]></category>

		<guid isPermaLink="false">http://blog.copperred.net/?p=174</guid>
		<description><![CDATA[Как-то в последнее время, немножко задумался о качестве кода, который я пишу, и поэтому быстро конспектирую ряд фишек которые можно и нужно использовать в своем коде:

Комментарии


# Это большой и длинный комментарий
# который рассказывает ни о чем
# да и читать его вряд ли кто станет
# хотя писать его было нужно и муторно


Знакомо? А ведь можно было [...]]]></description>
			<content:encoded><![CDATA[<p>Как-то в последнее время, немножко задумался о качестве кода, который я пишу, и поэтому быстро конспектирую ряд фишек которые можно и нужно использовать в своем коде:</p>

<h2>Комментарии</h2>

<pre><code class="ruby">
# Это большой и длинный комментарий
# который рассказывает ни о чем
# да и читать его вряд ли кто станет
# хотя писать его было нужно и муторно
</code></pre>

<p>Знакомо? А ведь можно было сделать это красиво:</p>

<pre><code class="ruby">
=begin
 Элегантный комментарий, который занимает несколько строк
 и который не нужно мучаться отслеживая, где вдруг потерялся
 этот долбанный символ решетки "#"
=end
</code></pre>

<h2>Форматированный вывод</h2>

<pre><code class="ruby">
puts "INSERT INTO pairs VALUES ( " + i.to_s + ", '"+item[i]["history"].to_s+"' );"
</code></pre>

<p>Плохо, Саша. Надо делать так:</p>

<pre><code class="ruby">
puts "INSERT INTO pairs VALUES ( %i, '%s' );" % [ i, item[i]["history"] ]  
</code></pre>

<h2>Меньше строчек в присвоении</h2>

<pre><code class="ruby">
a = 1
b = 2
x = 11.2
</code></pre>

<p>Забудь и делай проще</p>

<pre><code class="ruby">
a, b, c = 1, 2, 11.2
</code></pre>

<p>кстати, отсюда менять местами элементы в массиве очень просто</p>

<pre><code class="ruby">
My = [1,2,3,4] # => [1,2,3,4]
My[1], My[3] = My[3], My[1] # => [1,4,3,2]
</code></pre>

<h2>Скажи нет return false</h2>

<p>Если в функции осуществляется логическая проверка условия и функция должна вернуть true или false, не нужно городить return и прочего:</p>

<pre><code class="ruby">
def even?(x)
  x % 2 != 1
end
</code></pre>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/copperred?a=BoACM"><img src="http://feeds.feedburner.com/~f/copperred?i=BoACM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=z9Ham"><img src="http://feeds.feedburner.com/~f/copperred?i=z9Ham" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=2nCKM"><img src="http://feeds.feedburner.com/~f/copperred?i=2nCKM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=Ah1tM"><img src="http://feeds.feedburner.com/~f/copperred?i=Ah1tM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/copperred/~4/427279725" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.copperred.net/2008/10/little_ruby_likbez/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.copperred.net/2008/10/little_ruby_likbez/</feedburner:origLink></item>
		<item>
		<title>Как считать победителей?</title>
		<link>http://feeds.feedburner.com/~r/copperred/~3/423720143/</link>
		<comments>http://blog.copperred.net/2008/10/how_to_count_who_is_a_winner/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 13:36:48 +0000</pubDate>
		<dc:creator>vestel</dc:creator>
		
		<category><![CDATA[ruby / rails]]></category>

		<category><![CDATA[event]]></category>

		<category><![CDATA[festival]]></category>

		<category><![CDATA[votes]]></category>

		<guid isPermaLink="false">http://blog.copperred.net/?p=166</guid>
		<description><![CDATA[Чтобы не возникало вопросов, о том как происходил подсчет результатов конкурса, я привожу к сведению читателей листинг программы, которая определяла победителей. Вполне возможно, когда-нибудь к данному коду будет прикручен удобный интерфейс и этим делом можно будет пользоваться "из коробки", но пока можно посмотреть итак.

Для удобства восприятия, разобью код на несколько частей, и прокомментирую каждую из [...]]]></description>
			<content:encoded><![CDATA[<p>Чтобы не возникало вопросов, о том как происходил подсчет <a href="http://blog.copperred.net/2008/10/gratz_to_the_winners/">результатов конкурса</a>, я привожу к сведению читателей листинг программы, которая определяла победителей. Вполне возможно, когда-нибудь к данному коду будет прикручен удобный интерфейс и этим делом можно будет пользоваться "из коробки", но пока можно посмотреть итак.</p>

<p>Для удобства восприятия, разобью код на несколько частей, и прокомментирую каждую из них. Если вы с ruby не на дружеской ноге, то все равно можно смотреть "под кат", поскольку думаю что пример будет понятен и без особых познаний синтаксиса.</p>

<p><span id="more-166"></span></p>

<pre><code class="ruby">
# массив голосовавших 
participants = ['pashira', 'martishka', 'life_is_mistery', 'avinamor', 'megvaer']
# начальные данные - все в равных условиях
weights = { 'pashira' => 1.0, 'martishka' => 1.0, 'life_is_mistery' =>
1.0, 'avinamor' => 1.0, 'megvaer' =>1.0}

votes = {}
votes['pashira']         = ['life_is_mistery', 'megvaer']
votes['martishka']       = ['life_is_mistery']
votes['life_is_mistery'] = ['avinamor']
votes['avinamor']        = ['megvaer']
votes['megvaer']         = ['avinamor']
</code></pre>

<p>В этом блоке задаются начальные данные, список участников и кто за кого голосовал.</p>

<pre><code class="ruby">
def fact(n)
        if n>0
                n*fact(n-1)
        else
                1
        end
end

quantity = participants.size
number = fact(quantity)
</code></pre>

<p>Небольшая функция определяющая число перестановок (number) для определенного количества участников (quantity). Число перестановок, в моем случае, факториал от количества элементов.</p>

<pre><code class="ruby">
number.times do |iterator|
# Интересный блок - перетасовка участников в списке
swap = iterator%quantity
participants[participants.size] = participants[ swap ]
participants = participants[0..swap-1].to_a + participants[swap+1..quantity].to_a
# После перетасовки в списке сохраняется новый порядок участников
</code></pre>

<p>Казалось бы, что массив нам не сильно нужен, но дело в том, что ассоциативные массивы, в которых хранится вес голоса, каждого участника не сохраняют порядок элементов, а поскольку перебор всегда ведется в одном порядке, то и логично, что победил бы тот, кто находится на последнем месте в списке участников.</p>

<pre><code class="ruby">
        participants.each do |who|
                whom = votes[who]
                weight_delta = weights[who]/(whom.size+1)
# Для каждого из участников определяется вес его голоса
                whom.each do |person|
                        weights[person] += weight_delta
# И увеличивается вес голосов тех, за кого он голосовал
                end
        end

puts weights.sort_by { |key, value| value }.reverse
# Выводится список результатов упорядоченный по весу
</code></pre>

<p>Также файлик доступен целиком в <a href="http://pastie.org/291950" rel="nofollow noindex">альтернативной расцветке</a></p>

<pre><code class="ruby">
puts "Надеюсь вам понравилось! Оставляйте свои комментарии ниже"
</code></pre>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/copperred?a=lwjhM"><img src="http://feeds.feedburner.com/~f/copperred?i=lwjhM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=ZKzbm"><img src="http://feeds.feedburner.com/~f/copperred?i=ZKzbm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=IWy4M"><img src="http://feeds.feedburner.com/~f/copperred?i=IWy4M" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=mCeDM"><img src="http://feeds.feedburner.com/~f/copperred?i=mCeDM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/copperred/~4/423720143" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.copperred.net/2008/10/how_to_count_who_is_a_winner/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.copperred.net/2008/10/how_to_count_who_is_a_winner/</feedburner:origLink></item>
		<item>
		<title>Поздравляем победителей</title>
		<link>http://feeds.feedburner.com/~r/copperred/~3/417614831/</link>
		<comments>http://blog.copperred.net/2008/10/gratz_to_the_winners/#comments</comments>
		<pubDate>Sat, 11 Oct 2008 09:00:41 +0000</pubDate>
		<dc:creator>vestel</dc:creator>
		
		<category><![CDATA[flow]]></category>

		<category><![CDATA[event]]></category>

		<category><![CDATA[festival]]></category>

		<category><![CDATA[theatre]]></category>

		<guid isPermaLink="false">http://blog.copperred.net/?p=162</guid>
		<description><![CDATA[Итак, все кто хотел уже проголосовали, а поэтому можно подвести результаты нашего замечательного конкурса. Всего участвовало 5 человек и по результатам голосования, места расположились следующим образом.

Главный приз - билет на спекталь Дикарь - получает Екатерина и ее стихотворение про IT дикаря.  На втором месте Avinamor, которому достается 25 WMZ из моих личных накоплений. Надо [...]]]></description>
			<content:encoded><![CDATA[<p>Итак, все кто хотел уже проголосовали, а поэтому можно подвести результаты нашего <a href="http://blog.copperred.net/2008/09/return_of_the_blog/">замечательного конкурса</a>. Всего участвовало 5 человек и по результатам голосования, места расположились следующим образом.</p>

<p>Главный приз - билет на спекталь <a href="http://dikarj.lv">Дикарь</a> - получает Екатерина и <a href="http://megvaer.livejournal.com/715.html">ее стихотворение</a> про IT дикаря.  На втором месте <a href="http://mega-zhazha.livejournal.com/760.html">Avinamor</a>, которому достается 25 WMZ из моих личных накоплений. Надо отметить, что это единственный мужчина принявший участие в этом мероприятии.</p>

<p>Большое спасибо остальным участницам: <a href="http://life-is-mystery.livejournal.com/23316.html">Девушка-загадка</a>, <a href="http://pashira.ru/2008/09/stixotvorenie-chtoby-vyigrat-bilet-v-teatr/">Pashira</a> и 
<a href="http://community.livejournal.com/riga/369702.html?thread=3392294#t3392294">Мартышка</a>. Рад был тому, что вы не оставили мое начинание без внимания и смогли поддержать конкурс. Огромное вам спасибо!</p>

<p>Ждите дополнительных известий, ведь думаю, что этот конкурс не будет последним. Особо любопытным сообщу, что скоро появиться специальный пост о закулисье, а именно исходный код программы, которая подсчитала кто-же победил в этом конкурсе. Следить за обновлениями блога гораздо удобнее при помощи <a href="http://feeds.feedburner.com/copperred">RSS ленты</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/copperred?a=7DiZM"><img src="http://feeds.feedburner.com/~f/copperred?i=7DiZM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=FRdLm"><img src="http://feeds.feedburner.com/~f/copperred?i=FRdLm" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=x3NRM"><img src="http://feeds.feedburner.com/~f/copperred?i=x3NRM" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=m0SQM"><img src="http://feeds.feedburner.com/~f/copperred?i=m0SQM" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/copperred/~4/417614831" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.copperred.net/2008/10/gratz_to_the_winners/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.copperred.net/2008/10/gratz_to_the_winners/</feedburner:origLink></item>
		<item>
		<title>Рельсовая заРУБа 2008</title>
		<link>http://feeds.feedburner.com/~r/copperred/~3/402912027/</link>
		<comments>http://blog.copperred.net/2008/09/rails_rumble_2008/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 15:51:18 +0000</pubDate>
		<dc:creator>vestel</dc:creator>
		
		<category><![CDATA[ruby / rails]]></category>

		<category><![CDATA[festival]]></category>

		<category><![CDATA[rails rumble]]></category>

		<guid isPermaLink="false">http://blog.copperred.net/?p=159</guid>
		<description><![CDATA[

Если вы вдруг подумали, что всякие джангисты собираются и устраивают дистанционные django sprint-ы посвященные фиксам ошибок и разработке новых фич, решил написать несколько слов о Rails Rumble или Рельсовой заРУБе :-). Смысл ее в том, что по предварительной регистрации 18 - 19 октября сойдуться 200 комманд, каждая из которых должна будет за 48 часов выкатить [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.railsrumble.com/"><img alt="" src="http://blog.railsrumble.com/assets/2008/9/24/RailsRumbleBadge_180_1.png" title="Rails Rumble Badge" class="aligncenter" width="180" height="180" /></a></p>

<p>Если вы вдруг подумали, что всякие джангисты собираются и устраивают дистанционные <a href="http://softwaremaniacs.org/blog/2008/07/13/sprint-finished/">django sprint</a>-ы посвященные фиксам ошибок и разработке новых фич, решил написать несколько слов о Rails Rumble или Рельсовой заРУБе :-). Смысл ее в том, что по предварительной регистрации 18 - 19 октября сойдуться 200 комманд, каждая из которых должна будет за 48 часов выкатить свое приложение на Ruby on Rails.</p>

<p>Правила достаточно просты: можно использовать любые открытые библиотеки/плагины и прочее, если они не делают большую часть вашей работы, можно приготовить заранее "бумажные" заготовки своего дизайна (никаких электронных версий файлов и т.д.), можно обсудить план/идею и все остальное с товарищами по комманде, которых может быть не больше 3ех человек. В общем, тут простор для всех: дизайнерам уметь быстро и просто рисовать, верстальщикам - верстать, программерам - кодить, админам - настраивать сервак под все это.</p>

<p>Судя по всему, мероприятие будет очень веселым, но я на него не попадаю по двум причинам:</p>

<ul>
    <li>Слишком слабо я знаю свой любимый фреймворк, а учитывая время на всю работу (48 часов) курить маны будет некогда. </li>
    <li>Именно, в эти дни: 18-19 октября, я собираюсь скрыть покров таинственности со своей одиозной личности и девиртуализироваться в Харькове, Украина, ибо туда меня забрасывает командировка. Кстати, если у меня есть постоянные читатели с Харькова - буду рад познакомиться вживую, контакты есть выше, пишите</li>
</ul>

<p>Но, хоть я и буду далеко от места событий, я все равно буду болеть за <a href="http://www.html-blog.ru/2008/9/14/rails-rumble-2008">Алексея Дмитриева</a> и его комманду. Удачи вам, коллеги! Фана всем остальным участникам!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/copperred?a=bWwGL"><img src="http://feeds.feedburner.com/~f/copperred?i=bWwGL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=QICQl"><img src="http://feeds.feedburner.com/~f/copperred?i=QICQl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=79DNL"><img src="http://feeds.feedburner.com/~f/copperred?i=79DNL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=PlL3L"><img src="http://feeds.feedburner.com/~f/copperred?i=PlL3L" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/copperred/~4/402912027" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.copperred.net/2008/09/rails_rumble_2008/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.copperred.net/2008/09/rails_rumble_2008/</feedburner:origLink></item>
		<item>
		<title>Ужасный баг Gem install Mongrel</title>
		<link>http://feeds.feedburner.com/~r/copperred/~3/400897726/</link>
		<comments>http://blog.copperred.net/2008/09/gem_install_mongrel/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 15:33:05 +0000</pubDate>
		<dc:creator>vestel</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<category><![CDATA[ruby / rails]]></category>

		<category><![CDATA[gem]]></category>

		<category><![CDATA[mongrel]]></category>

		<category><![CDATA[rubygems]]></category>

		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.copperred.net/?p=104</guid>
		<description><![CDATA[Когда-то я писал, как конфигурировать gems в локальную папку и обещал рассказать что грозит пользователю без прав root-a при установке mongrel. Однако пост пролежал уйму вермени в драфтах и наконец-то я созрел его опубликовать.

При попытке инсталлировать mysql (gem install mysql) или mongrel (gem install mongrel) в локальный репозитарий на "пустой" ubuntu обычно высыпает следующий пакет [...]]]></description>
			<content:encoded><![CDATA[<p>Когда-то я писал, <a href="http://blog.copperred.net/2008/02/some_rubygems_bugs/">как конфигурировать gems в локальную папку</a> и обещал рассказать что грозит пользователю без прав root-a при установке mongrel. Однако пост пролежал уйму вермени в драфтах и наконец-то я созрел его опубликовать.</p>

<p>При попытке инсталлировать mysql (gem install mysql) или mongrel (gem install mongrel) в локальный репозитарий на "пустой" ubuntu обычно высыпает следующий пакет ошибок:</p>

<pre><code class="bash">
Building native extensions. This could take a while…
extconf.rb:8:in `require’: no such file to load — mkmf (LoadError)
</code></pre>

<pre><code class="bash">
/usr/lib/ruby/1.8/i486-linux/rubysig.h:15:19: error: errno.h: 
No such file or directory
fastthread.c: In function ‘wait_condvar’:
fastthread.c:626: warning: passing argument 1 of ‘rb_ensure’ 
from incompatible pointer type
make: *** [fastthread.o] Error 1
</code></pre>

<pre><code class="bash">
/usr/bin/install: cannot stat `http11.so': No such file or directory
make: *** [/home/vestel/rubygems/gems/mongrel-1.1.3/lib/http11.so] Error 1
</code></pre>

<p>А решается все просто: часть кода web server-a написана на C/C++, а следовательно без предварительных</p>

<pre><code class="bash">
vestel$ sudo apt-get install ruby1.8-dev make gcc libc6-dev build-essential
</code></pre>

<p>будет не обойтись. Другое дело, что если вы впредь планируете собирать и другие пакеты из исходников, то эти библиотеки и программы вам все равно пригодятся.</p>

<p>Любители <abbr title="Windows">самой воруемой системы</abbr> конечно же воскликнут: "О, гемору-то!", но мы не будем с ними спорить. Ведь мы то знаем, что им понадобиться гораздо больше бубнов, если кто-то из пользователей захочет содержать свой gem репозитарий.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/copperred?a=uVaML"><img src="http://feeds.feedburner.com/~f/copperred?i=uVaML" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=3Ydgl"><img src="http://feeds.feedburner.com/~f/copperred?i=3Ydgl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=XvEAL"><img src="http://feeds.feedburner.com/~f/copperred?i=XvEAL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=kBR0L"><img src="http://feeds.feedburner.com/~f/copperred?i=kBR0L" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/copperred/~4/400897726" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.copperred.net/2008/09/gem_install_mongrel/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.copperred.net/2008/09/gem_install_mongrel/</feedburner:origLink></item>
		<item>
		<title>Дикий конкурс: 2 этап</title>
		<link>http://feeds.feedburner.com/~r/copperred/~3/399571376/</link>
		<comments>http://blog.copperred.net/2008/09/wild_festival_next_step/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 07:35:04 +0000</pubDate>
		<dc:creator>vestel</dc:creator>
		
		<category><![CDATA[blog]]></category>

		<category><![CDATA[дикарь]]></category>

		<category><![CDATA[конкурс]]></category>

		<category><![CDATA[призы]]></category>

		<category><![CDATA[event]]></category>

		<category><![CDATA[festival]]></category>

		<category><![CDATA[konkurs]]></category>

		<category><![CDATA[prizes]]></category>

		<guid isPermaLink="false">http://blog.copperred.net/?p=151</guid>
		<description><![CDATA[Итак, наступает второй этап конкурса, в котором у вас есть шанс выиграть билеты в театр на спектакль "Дикарь".

У нас наметилось 5 участников (в порядке поступления заявок):


    Pashira - любовное послание дикарям. Кстати, у нее новый дизайн - травка зенелеет, слонышко блестит, - загляните не пожалеете.
    Мартышка и стихи - [...]]]></description>
			<content:encoded><![CDATA[<p>Итак, наступает <a href="http://blog.copperred.net/2008/09/return_of_the_blog/">второй этап конкурса</a>, в котором у вас есть шанс выиграть билеты в театр на спектакль "<a href="http://dikar.lv/">Дикарь</a>".</p>

<p>У нас наметилось 5 участников (в порядке поступления заявок):</p>

<ul>
    <li><a href="http://pashira.ru/2008/09/stixotvorenie-chtoby-vyigrat-bilet-v-teatr/">Pashira</a> - любовное послание дикарям. Кстати, у нее новый дизайн - травка зенелеет, слонышко блестит, - загляните не пожалеете.</li>
    <li><a href="http://marti6ka.livejournal.com/">Мартышка</a> и <a href="http://community.livejournal.com/riga/369702.html?thread=3392294#t3392294">стихи</a> - Песня о дикарях</li>
    <li><a href="http://life-is-mystery.livejournal.com/23316.html">Life is mistery</a> - девочка- загадка и сказание об одиноком дикаре</li>
    <li><a href="http://mega-zhazha.livejournal.com/760.html">Avinamor</a> - первый пост в ЖЖ ради участия в конкурсе</li>
    <li><a href="http://megvaer.livejournal.com/715.html">Екатирина</a> - IT-Дикарь и винда: добровольный приход в ЖЖ ради участия в конкурсе</li>
</ul>

<p>Очень рад, что все смогли принять участие и заявить о себе. Теперь приступим ко второму этапу, голосованию: сделайте запись в своем блоге или ЖЖ, в которой укажите те стихотворения из присланных на конкурс, которые вам понравились. Количество голосов для каждого не ограничено, но чем их меньше, чем они весомее.</p>

<p>Те, кто не участвовал в написании стихотворений тоже могут голосовать: просто в посте на своем блоге поставьте ссылку на этот пост или укажите, что это голос на конкурс в комментарии. Если вдруг, вы хотите проголосовать анонимно: пришлите сообщение о своем посте <a href="http://blog.copperred.net/contact/">мне лично</a>, однако пост все равно должен быть публично доступен.</p>

<p>Жду отчета о голосах до 1 октября. Ну и конечно же, всем хорошего, бабьего лета.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/copperred?a=SyRwL"><img src="http://feeds.feedburner.com/~f/copperred?i=SyRwL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=WSDel"><img src="http://feeds.feedburner.com/~f/copperred?i=WSDel" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=jtB9L"><img src="http://feeds.feedburner.com/~f/copperred?i=jtB9L" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=arsWL"><img src="http://feeds.feedburner.com/~f/copperred?i=arsWL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/copperred/~4/399571376" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.copperred.net/2008/09/wild_festival_next_step/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.copperred.net/2008/09/wild_festival_next_step/</feedburner:origLink></item>
		<item>
		<title>Скажи “нет!” велосипедам</title>
		<link>http://feeds.feedburner.com/~r/copperred/~3/397029460/</link>
		<comments>http://blog.copperred.net/2008/09/say_no_to_bicycle-2/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 08:53:30 +0000</pubDate>
		<dc:creator>vestel</dc:creator>
		
		<category><![CDATA[javascript / ajax]]></category>

		<category><![CDATA[forms]]></category>

		<category><![CDATA[prototype]]></category>

		<category><![CDATA[radio]]></category>

		<category><![CDATA[scriptaculous]]></category>

		<category><![CDATA[validation]]></category>

		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.copperred.net/?p=142</guid>
		<description><![CDATA[Когда-то давно, я написал функцию, которая проверяла все ли input radio button-ы натырканы в отсылаемой форме. Эта валидация была нужна мне для использования формы в небольшом опроснике, который я делал на старой работе. Ну и понятное дело, что решение было далеко от оптимального и очень прямолинейное. Сейчас, работая проектировщиком информационной системы, я борюсь с подобными [...]]]></description>
			<content:encoded><![CDATA[<p>Когда-то давно, я написал функцию, которая проверяла все ли input radio button-ы натырканы в отсылаемой форме. Эта валидация была нужна мне для использования формы в небольшом опроснике, который я делал на старой работе. Ну и понятное дело, что решение было далеко от оптимального и очень прямолинейное. Сейчас, работая проектировщиком информационной системы, я борюсь с подобными решениями в рядах своих программистов, приучая их пользоваться готовым кодом там, где это возможно.</p>

<p>Учитывая, что тот самый, велосипедный пост, до сих пор входит в двадцатку самых посещаемых страниц моего блога, я решил исправиться и показать, как бы я решал данный вопрос теперь.</p>

<p><span id="more-142"></span></p>

<p>Во-первых, я бы сразу взял какой-нибудь из JavaScript framework. Решений много, они отличаются по скорости и нужно смотреть в зависимости от проекта - что уже используется. В текущем проекте мы используем <a href="http://www.prototypejs.org/">prototype</a> и <a href="http://script.aculo.us/">scriptaculous</a>, по той причине, что при помощи JS мы в основном организуем взаимодействие администратора и backend-a, а администратор у нас использует Firefox 3, где Prototype быстрее <a href="http://jquery.com/">jQuery</a>. К тому же, мне prototype нравиться еще и потому, что он входит в состав Ruby on Rails, а значит работать с ним в этом фреймворке легко и непринужденно.</p>

<p>Во-вторых, и jQuery и Prototype обладают возможностью легкого расширения за счет плагинов. Ну и понятно, что для обоих уже существуют многофункциональные плагины для работы с формами. То есть, окончательное решение для примера было бы следующим:</p>

<pre><code class="html">
&lt;!-- Подключаем нужные библиотеки -->
&lt;script src="scriptaculous/lib/prototype.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script src="scriptaculous/src/effects.js" type="text/javascript"&gt;
&lt;/script&gt;
&lt;script type="text/javascript" src="validation.js"&gt;
&lt;/script&gt;
...
&lt;form id="test" action="#" method="get"&gt;
&lt;!-- Cоздаем поля, которые нужно проверять --&gt;
&lt;input type="radio" name="field6" id="field6-male" value="Male" /&gt;
Male&lt;br /&gt;
&lt;input type="radio" name="field6" id="field6-female" value="Female" class="validate-one-required" /&gt;
Female&lt;br /&gt;
&lt;input type="radio" name="field7" id="field7-single" value="Single" /&gt;
Single&lt;br /&gt;
&lt;input type="radio" name="field7" id="field7-married" value="Married" class="validate-one-required" /&gt;
Married&lt;br /&gt;
&lt;input type="submit" value="Submit" /&gt;
...
&lt;!-- Активируем плагин проверки для формы 'test' --&gt;
&lt;script type="text/javascript"&gt;
function formCallback(result, form) {
    window.status = "valiation callback for form '"
                        + form.id + "': result = " + result;
}
var valid = new Validation('test', 
           {immediate : true, onFormValidate : formCallback});
&lt;/script&gt;
</code></pre>

<p>Решение привожу в сокращенном виде, чтобы не засорять страницу длинными листингами, полное решение доступно <a href="http://pastie.org/private/ywsg4ihjnnafxpfvs0iaa" rel="nofollow noindex">на pastie</a>. Сам плагинчик брать на <a href="http://tetlaw.id.au/view/javascript/really-easy-field-validation">оффициальном сайте</a>. Там же есть подробный мануал, как переопределять сообщения/действия при ошибках, какие доступны опции проверки и многое другое. Надеюсь теперь валидация множественных radio в одной форме будет простой и прозрачной и не создаст никаких проблем.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/copperred?a=420eL"><img src="http://feeds.feedburner.com/~f/copperred?i=420eL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=8pCAl"><img src="http://feeds.feedburner.com/~f/copperred?i=8pCAl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=Aj8ZL"><img src="http://feeds.feedburner.com/~f/copperred?i=Aj8ZL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=NenXL"><img src="http://feeds.feedburner.com/~f/copperred?i=NenXL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/copperred/~4/397029460" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.copperred.net/2008/09/say_no_to_bicycle-2/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.copperred.net/2008/09/say_no_to_bicycle-2/</feedburner:origLink></item>
		<item>
		<title>Верстальщикам и веб-программерам в помощь</title>
		<link>http://feeds.feedburner.com/~r/copperred/~3/395299961/</link>
		<comments>http://blog.copperred.net/2008/09/a_bit_help_to_web_programmers/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 15:45:26 +0000</pubDate>
		<dc:creator>vestel</dc:creator>
		
		<category><![CDATA[html / css]]></category>

		<category><![CDATA[webdev]]></category>

		<category><![CDATA[bookmarklets]]></category>

		<category><![CDATA[chrome]]></category>

		<category><![CDATA[html]]></category>

		<category><![CDATA[markup]]></category>

		<category><![CDATA[safari]]></category>

		<guid isPermaLink="false">http://blog.copperred.net/?p=137</guid>
		<description><![CDATA[По причине организации работы мне пришлось заняться несколько несвойственным, хоть и не противным, мне делом - версткой. А именно преобразованием дизайнов в шаблоны HTML и файлы разметки CSS. Версталось все в XHTML 1.0 Transitional, а форматировалось и оформлялось эксклюзивно CSSом как учил Иван Григорьевич. На основании определенных рабочих моментов и родился этот пост. Итак, начну [...]]]></description>
			<content:encoded><![CDATA[<p>По причине организации работы мне пришлось заняться несколько несвойственным, хоть и не противным, мне делом - версткой. А именно преобразованием дизайнов в шаблоны HTML и файлы разметки CSS. Версталось все в XHTML 1.0 Transitional, а форматировалось и оформлялось эксклюзивно CSSом <a href="http://softwaremaniacs.org/blog/2005/06/08/juice-and-flies/">как учил Иван Григорьевич</a>. На основании определенных рабочих моментов и родился этот пост. Итак, начну с выражения огромного спасибо Димычу за <a href="http://www.loleg.com/blog/2008/08/22/4071/">статью о букмарклетах</a> ибо почерпнутые из нее знания помогли свести обычную "угадайку" где в IE тупой бордер закрался (в смысле в тупом IE лишний бордер прокрался) к систематическому багодавлению. Если вдруг ваше начальство считает что пользователи IE6 это значительный сегмент посетителей сайта, то XRay ваш незаменимый помошник.</p>

<p>Второй важный факт: в Safari есть свой инструмент для отлова всевозможной фигни. Кроме того, что там можно использовать XRay, гораздо удобнее заглянуть в настройки и включить меню разработчика.</p>

<p><a href='http://blog.copperred.net/wp-content/uploads/2008/09/web_inspector_on.jpg'><img src="http://blog.copperred.net/wp-content/uploads/2008/09/web_inspector_on-300x181.jpg" alt="" title="Включить меню Develop" width="300" height="181" class="aligncenter size-medium wp-image-138" /></a></p>

<p>Тогда после этого вам становиться доступен такой удобный инструмент как Web Inspector, что не может не радовать. Кроме того, что он отслеживает валидность HTML, показывает наглядное применение стилей CSS к разным элементам страницы, он еще представляет возможности по запуску скриптов. В общем, адекватный заменитель Firebug для Safari. Это не просто JavaScript Debugger вызывающийся в Google Chrome по нажатию Alt+~, а полноценная консоль, позволяющая понять чего ждать от ваших функций под WebKit.</p>

<p>Кроме того, как и Firebug Safari Web Inspector умеет рисовать вот такие симпатичные картинки, которые позволяют определить почему страница грузиться дольше чем вы расчитывали.</p>

<p><a href='http://blog.copperred.net/wp-content/uploads/2008/09/web_inspector.jpg'><img src="http://blog.copperred.net/wp-content/uploads/2008/09/web_inspector-300x208.jpg" alt="" title="Web Inspector::Network Interface" width="300" height="208" class="aligncenter size-medium wp-image-139" /></a></p>

<p>В общем, если вдруг вам надо разбираться с версткой под Safari, пожалуйста, пользуйтесь и наслаждайтесь! Да, если вдруг вы все об этом знали, то не надо "боянов" - для меня и моих коллег этот инструмент - открытие, которое заставляет задуматься о возможности миграции с FF на Safari. За последнее голосует скорость обработки JS последним, а так же красивый рендеринг шрифтов, чем под Windows не многие программы могут похвастаться.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/copperred?a=13zfL"><img src="http://feeds.feedburner.com/~f/copperred?i=13zfL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=BVgTl"><img src="http://feeds.feedburner.com/~f/copperred?i=BVgTl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=UhSHL"><img src="http://feeds.feedburner.com/~f/copperred?i=UhSHL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=vBFqL"><img src="http://feeds.feedburner.com/~f/copperred?i=vBFqL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/copperred/~4/395299961" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.copperred.net/2008/09/a_bit_help_to_web_programmers/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.copperred.net/2008/09/a_bit_help_to_web_programmers/</feedburner:origLink></item>
		<item>
		<title>Конкурс продлевается</title>
		<link>http://feeds.feedburner.com/~r/copperred/~3/389469536/</link>
		<comments>http://blog.copperred.net/2008/09/more_time_for_poetry/#comments</comments>
		<pubDate>Thu, 11 Sep 2008 08:47:44 +0000</pubDate>
		<dc:creator>vestel</dc:creator>
		
		<category><![CDATA[flow]]></category>

		<category><![CDATA[event]]></category>

		<category><![CDATA[festival]]></category>

		<category><![CDATA[theatre]]></category>

		<guid isPermaLink="false">http://blog.copperred.net/?p=136</guid>
		<description><![CDATA[Итак, я как всегда напутал. В своем посте, объявляющем конкурс я написал, что срок сдачи своих стихотворений сегодня, 11 сентября. Но как я понял, все человечество скорбит по поводу событий сентября две-тысячи-какого-то года, и ему не до моих конкурсов, так что перенесу сроки на 10 дней вперед, поскольку верю в то, что из 80 посетителей [...]]]></description>
			<content:encoded><![CDATA[<p>Итак, я как всегда напутал. В своем посте, <a href="http://blog.copperred.net/2008/09/return_of_the_blog/">объявляющем конкурс</a> я написал, что срок сдачи своих стихотворений сегодня, 11 сентября. Но как я понял, все человечество скорбит по поводу событий сентября две-тысячи-какого-то года, и ему не до моих конкурсов, так что перенесу сроки на 10 дней вперед, поскольку верю в то, что из 80 посетителей блога в день конкурса, кто-то и решится написать стихотворение.</p>

<p>Итак, новые сроки:</p>

<ul>
    <li> <strong>21 сентября</strong> - срок сдачи стихотворений</li>
    <li> <strong>1 октября</strong> - окончание голосований за лучшие строки</li>
    <li> <strong>11 октября</strong> - награждение победителей</li>
</ul>

<p>Урвать призы очень просто, читайте об <a href="http://blog.copperred.net/2008/09/return_of_the_blog/">условиях конкурса</a> и пишите стихи. Если кто-то писал комментарий/трекбек, а его "скушал" Акисмет и поэтому я не знаю о вашем участии, воспользуйтесь <a href="http://blog.copperred.net/contact/">контактной формой</a></p>

<p>Главный приз - билеты на спектакль "<a href="http://dikarj.lv">Дикарь</a>"</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/copperred?a=GcjLL"><img src="http://feeds.feedburner.com/~f/copperred?i=GcjLL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=iC4Yl"><img src="http://feeds.feedburner.com/~f/copperred?i=iC4Yl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=U1GkL"><img src="http://feeds.feedburner.com/~f/copperred?i=U1GkL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=NzDHL"><img src="http://feeds.feedburner.com/~f/copperred?i=NzDHL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/copperred/~4/389469536" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.copperred.net/2008/09/more_time_for_poetry/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.copperred.net/2008/09/more_time_for_poetry/</feedburner:origLink></item>
		<item>
		<title>Привет, прохожим</title>
		<link>http://feeds.feedburner.com/~r/copperred/~3/384159480/</link>
		<comments>http://blog.copperred.net/2008/09/search_queries_no_2/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 12:42:22 +0000</pubDate>
		<dc:creator>vestel</dc:creator>
		
		<category><![CDATA[flow]]></category>

		<category><![CDATA[query]]></category>

		<category><![CDATA[search queries]]></category>

		<category><![CDATA[serp]]></category>

		<guid isPermaLink="false">http://blog.copperred.net/?p=135</guid>
		<description><![CDATA[В общем-то, поскольку я особо не писал, то и за статистикой за прошедший месяц особенно не следил, а стоило бы... Опять оффициальный сайт производителей бытовой техники Vestel отвоевал у меня первую строчку в результатах поиска по нику на google.lv, по имени и фамилии меня вытеснили тоже - правда мои же профили в социальных сетях и [...]]]></description>
			<content:encoded><![CDATA[<p>В общем-то, поскольку я особо не писал, то и за статистикой за прошедший месяц особенно не следил, а стоило бы... Опять оффициальный сайт производителей бытовой техники Vestel отвоевал у меня первую строчку в результатах поиска по нику на google.lv, по имени и фамилии меня вытеснили тоже - правда мои же профили в социальных сетях и комменты на других блогах. Однако, люди с поиска ко мне все-таки идут, в основном конечно с поиска по тематическим запросам: ruby, linux, ubuntu, python, apache. Но порой в <a href="http://blog.copperred.net/2008/09/search_queries_no_2search_queries_no_1/">поисковых запросах</a> появляются очень смешные моменты, о которых нельзя не сказать:</p>

<p><span id="more-135"></span></p>

<ul>
<li><strong>хабр от умпутуна</strong> - вот уж, как сказано. Кто-то кто, а <a href="http://umputun.com">Умпутун</a> одназначно должен знать, как сделать правильный Хабр :-)</li>
<li><strong>латвийская компания paypal</strong> - а американцы-то и не знали :-)</li>
<li><strong>сложно ли работать макетировщиком</strong> - Я работал макетировщиком в типографии, мне нравилось, работа нормальная, хотя очень ответственная. Мне приходилось верстать для Веба макеты, пока я работал в Core, то есть быть HTML-макетировщиком, но об этом <a href="http://loleg.com/blog">Димыч</a> расскажет лучше</li>
<li> <strong>учим джава для понятия</strong> - без понятий в мире Джава никак? На самом деле, по-моему Джава этот случай, когда "понятия" не значат ничего - решает "конфиг". В Ruby on Rails, Django и других движках зачастую Convention over Configuration (договоренность над конфигурацией), а вот в Java все наоборот - пока с бубном над конфигами не отплясал, ничего не работает, никаких устных договоренностей, только оффициальный конфиг</li>
<li><strong>в какую компанию устроиться junior java developer</strong> - точно не в мою, мы с Джавой общего не имеем. Начните с <a href="http://blog.copperred.net/2006/08/exigen-named-adventure/">Exigen</a></li>
<li><strong>стоит ли учить python</strong> - еще как стоит! Это замечательный язык, который научит вас правильно ставить отступы. Мне python нравится, я на нем писал пару-тройку Jabber-bot-ов внутреннего пользования - легко и элегантно вышло</li>
<li><strong>купить адену на ebay</strong> - вам к <a href="http://kukish.copperred.net">Кукишу</a>, он знает рыбные места :-)

<strong>Upd.: Не подумайте, он не аденобарыга, так просто, </strong><a href="http://bash.org.ru/quote/398873">парень с баша</a>
</li>
<li><strong>что пишут на ruby</strong> - ой, чего только не пишут, посмотрите на этот <a href="http://www.ruby-lang.org/en/libraries/top-projects/">список проектов</a> и подумайте, что многое осталось за кадром</li>
<li><strong>что спрашивают при приеме на работу руководителя проекта</strong> - что угодно, например, <strong>сколько в мире профессиональных настроищиков концертных роялей</strong></li>
<li><strong>кто такие гики?</strong> - эти те люди, чья любовь к компьютерам, Интернет, новым технологиям, гаджетам и прочему не сводит их с ума, а делает их особенными в рядах остальных IT-обывателей.</li>
</ul>

<p>На пока все, но приходите еще... Жалко, что нельзя вычислить кто пришел ко мне с такими здоровскими запросами, я бы наверное им сказал спасибо. Реально повеселили.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/copperred?a=V0psL"><img src="http://feeds.feedburner.com/~f/copperred?i=V0psL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=UJCGl"><img src="http://feeds.feedburner.com/~f/copperred?i=UJCGl" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=kiEsL"><img src="http://feeds.feedburner.com/~f/copperred?i=kiEsL" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/copperred?a=M7nwL"><img src="http://feeds.feedburner.com/~f/copperred?i=M7nwL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/copperred/~4/384159480" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.copperred.net/2008/09/search_queries_no_2/feed/</wfw:commentRss>
		<feedburner:origLink>http://blog.copperred.net/2008/09/search_queries_no_2/</feedburner:origLink></item>
	</channel>
</rss>
