<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Место для привлекательного названия</title>
	<atom:link href="http://startupkin.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://startupkin.wordpress.com</link>
	<description>кое что может быть интересно вам</description>
	<lastBuildDate>Tue, 10 May 2011 12:40:02 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='startupkin.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Место для привлекательного названия</title>
		<link>http://startupkin.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://startupkin.wordpress.com/osd.xml" title="Место для привлекательного названия" />
	<atom:link rel='hub' href='http://startupkin.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Статистика, уведомление и триггеры в Ruby on Rails</title>
		<link>http://startupkin.wordpress.com/2008/05/18/ror_observer/</link>
		<comments>http://startupkin.wordpress.com/2008/05/18/ror_observer/#comments</comments>
		<pubDate>Sun, 18 May 2008 05:31:45 +0000</pubDate>
		<dc:creator>wpm1</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Observer]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://startupkin.wordpress.com/?p=17</guid>
		<description><![CDATA[Передо мной стоит задача реализовать сбор статистики использования приложения на Ruby On Rails. Для этого подходит шаблон Observer, наблюдатель. В общем виде он применяется когда есть следующая задача: Один объект (&#171;Подписчик&#187;) должен знать об изменении состояний или некоторых событиях другого объекта. При этом необходимо поддерживать низкий уровень связывания с объектом &#8211; &#171;Подписчиком&#187;. Для того, чтобы [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=17&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Передо мной стоит задача реализовать сбор статистики использования приложения на <strong>Ruby On Rails</strong>. Для этого подходит шаблон <em>Observer</em>, <a href="http://citforum.ru/SE/project/pattern/p_1.shtml#3.2.4" target="_self">наблюдатель</a>. В общем виде он применяется когда есть следующая задача:</p>
<blockquote><p>Один объект (&laquo;Подписчик&raquo;) должен знать об изменении состояний или некоторых событиях другого объекта. При этом необходимо поддерживать низкий уровень связывания с объектом &#8211; &laquo;Подписчиком&raquo;.</p></blockquote>
<p>Для того, чтобы он работал, нужно, чтобы приложение давало возможность подписчику зарегистрировать себя, а подписчик должен релизовывать некоторый общий интерфейс, понятный приложению, через который он будет получать сообщения об изменении состояний.</p>
<p>Я приведу задачу из плугина <a href="http://weblog.techno-weenie.net/2006/8/1/restful-authentication-plugin" target="_blank">restful_authentication</a>, который наверное всем знаком. Он используется для реализации системы аутентитификации. Допустим, у меня есть класс <em>User</em>. Я хочу чтобы после того, как объект этого класса получил сообщение create, пользователю было отправлено сообщение на email с помощью <em>UserMailer.deliver_signup_notification(user)</em> (мы не будем разбираться с этим классом, примите как данное, что он хорошо работает и умеет отсылать письма). Так как работа с почтой и уведомлениями не является основной задачей класса <em>User</em>, то стоит создать наблюдателя, который бы справлялся с этой задачей.</p>
<p>В Rails наблюдателей можно сделать вообщем двумя способами: коротким и длинным. Сначала &#8211; длинный:</p>
<blockquote><p>class UserObserver &lt; ActiveRecord::Observer<br />
def after_create(user)<br />
UserMailer.deliver_signup_notification(user)<br />
end<br />
end</p></blockquote>
<p>Мы создаем observer для класса <em>User</em>. Поэтому обязательно имя класса будет UserObserver. Он должен наследовать от <em>Observer</em> (ссылка на <a href="http://api.rubyonrails.org/classes/ActiveRecord/Observer.html" target="_self">описание в Ror API</a>). Чтобы он обрабатывал сообщение User#create мы описываем метод <em>after_create</em>, принимающий в качестве аргумента объект, за которым наблюдатель собственно наблюдает.</p>
<p>Сохраните этот код в файл app/models/user_observer.rb.</p>
<p>Чтобы <em>Observer</em> заработал его нужно зарегистрировать. Для этого в файле <tt>config/environment.rb вашего Rails приложения добавьте такую строку (если её еще нету):</tt></p>
<blockquote>
<pre>config.active_record.observers = :user_observer</pre>
</blockquote>
<p>Это все, что касается долгого пути. А теперь короткий:</p>
<p>В консоли напишите</p>
<p><em>&gt;ruby script/generate Observer User</em></p>
<p>Это сгенерирует файл app/models/user_observer.rb, и занесет в <tt>config/environment.rb ту самую верхнюю строку. В </tt>app/models/user_observer.rb будет находиться</p>
<blockquote><p>class UserObserver &lt; ActiveRecord::Observer<br />
end</p></blockquote>
<p>А вы дополните её своим кодом. Таким вот простым образом мы можем обрабатывать любые события, происходящими с нашими моделями в Ror приложении.</p>
<p>За подробной информацией обращайтесь сюда <a href="http://api.rubyonrails.org/classes/ActiveRecord/Observer.html">api.rubyonrails.org</a>, <a href="http://citforum.ru/SE/project/pattern/p_1.shtml#3.2.4">citforum.ru</a>.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/startupkin.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/startupkin.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startupkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startupkin.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startupkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startupkin.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startupkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startupkin.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startupkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startupkin.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startupkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startupkin.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startupkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startupkin.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startupkin.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startupkin.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=17&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startupkin.wordpress.com/2008/05/18/ror_observer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2a04145c88760536546c426512d949fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wpm1</media:title>
		</media:content>
	</item>
		<item>
		<title>Ruby: containers, blocks, iterators</title>
		<link>http://startupkin.wordpress.com/2008/04/29/ruby_containers_block_iterators/</link>
		<comments>http://startupkin.wordpress.com/2008/04/29/ruby_containers_block_iterators/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 02:42:57 +0000</pubDate>
		<dc:creator>wpm1</dc:creator>
				<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://startupkin.wordpress.com/?p=16</guid>
		<description><![CDATA[Плеер с одной песней не будет популярным, поэтому нам понадобится хранить список доступных песен и список песен в плейлисте. Все это контейнеры: объекты которые содержат ссылки на один и более объект. И каталогу и плейлисту нужен одинаковый набор методов: добавить песню, удалить песню, возвратить список песен и так далее. Плейлист может выполнять дополнительные задания, такие [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=16&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img style="float:right;width:200px;height:196px;" src="http://www.ljplus.ru/img4/a/n/antonyc/programming-ruby.jpg" alt="[Image]" width="200" height="196" /><br />
Плеер с одной песней не будет популярным, поэтому нам понадобится хранить список доступных песен и список песен в плейлисте. Все это контейнеры: объекты которые содержат ссылки на один и более объект.<br />
И каталогу и плейлисту нужен одинаковый набор методов: добавить песню, удалить песню, возвратить список песен и так далее. Плейлист может выполнять дополнительные задания, такие как вставлять рекламу периодически или поддерживать общую продолжительность плейлиста, но сейчас нас эти функции не интересуют. Кажется хорошей идеей разработать класс <em>СписокПесен</em>, который мы можем использовать в каталогах и плейлистах.<br />
<span id="more-16"></span></p>
<h2>Контейнеры</h2>
<p>Прежде чем начать определять класс, нужно понять как хранить список песен внутри объекта <em>СписокПесен</em>. У нас есть три очевидных выбора. Можно использовать класс <strong>Array</strong>, класс <strong>Hash</strong> или создать свою структуру реализующую список. Мы люди ленивые, поэтому рассмотрим <em>массивы</em> (arrays) и <em>хеши</em> (hashes) и выберем один из них для нашего класса.</p>
<h3>Массивы</h3>
<p>Класс <strong>Array</strong> содержит коллекцию ссылок на объекты. Каждая такая ссылка имеет в массиве позицию, определяемую неотрицательным индексом.<br />
Вы можете создавать массивы используя <em>литералы</em> или явно создавая объект <strong>Array</strong>. Литерал массива это просто список объектов разделенный запятой и заключенный в квадратные скобки.</p>
<blockquote>
<pre><code>a = [ 3.141592, "pie", 99 ]
&gt;&gt; a.class → Array
&gt;&gt; a.length → 3
&gt;&gt; a[0] → 3.141592
&gt;&gt; a[1] → "pie"
&gt;&gt; a[2] → 99
&gt;&gt; a[3] → nil
</code></pre>
</blockquote>
<blockquote>
<pre><code>b = Array.new
&gt;&gt; b.class → Array
&gt;&gt; b.length → 0
&gt;&gt; b[0] = "second"
&gt;&gt; b[1] = "array"
&gt;&gt; b → ["second", "array"]
</code></pre>
</blockquote>
<p>Массивы индексируются с использованием оператора <strong>[ ]</strong>. Как и большинство операторов Ruby, на самом деле это метод класса (метод экземпляра класса <strong>Array</strong>) и поэтому может быть перегружен в подклассах. Как показывает пример, индексы массивов начинаются с нуля. Примените взятие неотрицательного индекса к массиву и он вернет объект на этой позиции или объект <strong>nil</strong>, если там ничего нет. Если возьмете индекс отрицательный, то он вернет индекс с конца.<br />
Но это еще не все: можно брать индекс, используя пару чисел, <em>[start, count]</em>. Это вернет новый массив состоящий из ссылок на <em>count</em> объектов начиная с позиции <em>start</em>.</p>
<blockquote>
<pre><code>a = [ 1, 3, 5, 7, 9 ]
&gt;&gt; a[1, 3] → [3, 5, 7]
&gt;&gt; a[3, 1] → [7]
&gt;&gt; a[-3, 2] → [5, 7]
</code></pre>
</blockquote>
<p>Наконец, вы можете брать идексы используя диапазоны, в которых начальная и конечная позиции разделены двумя или тремя точками. Форма с двумя точками включает последний элемент, а трехточечная — нет.</p>
<blockquote>
<pre><code> a = [ 1, 3, 5, 7, 9 ]
&gt;&gt;  a[1..3] → [3, 5, 7]
&gt;&gt;  a[1...3] → [3, 5]
&gt;&gt;  a[3..3] → [7]
&gt;&gt;  a[-3..-1] → [5, 7, 9]
</code></pre>
</blockquote>
<p>У оператора <strong>[]</strong> есть соответствующий ему оператор <strong>[]=</strong>. Он позволяет устанавливать элементы в массиве. Если он используется с одним числом, то элемент на этой позиции замещается тем, что расположено в правой части выражения присваивания. Любые промежутки, возникнувшие в результате этой операции замещаются <strong>nil</strong>.</p>
<blockquote>
<pre><code>&gt;&gt; a = [ 1, 3, 5, 7, 9 ] → [ 1, 3, 5, 7, 9 ]
&gt;&gt; a[1] = 'bat' → [ 1, "bat", 5, 7, 9 ]
&gt;&gt; a[-3] = "cat" → [ 1, "bat", "cat", 7, 9 ]
&gt;&gt; a[-3] = 'cat' → [ 1, "bat", "cat", [9, 8], 9 ]
&gt;&gt; a[6] = 99  → [ 1, "bat", "cat", [9, 8], 9, nil, 99 ]
</code></pre>
</blockquote>
<p>Если индекс <strong>[]=</strong> состоит из двух чисел (начало и конец), тогда элементы исходного массива замещаются тем, что находится справа от оператора присваивания. Если длина равна 0, правая часть вставляется в массив перед стартовой позицией, элементы не удаляются. Если правая часть сама является массивом, то его элементы используются при замене. Размер массива автоматически меняется, если количество элементов, которые выбирает индексация больше, чем количество элементов исходного массива.</p>
<blockquote>
<pre><code>&gt;&gt; a = [ 1, 3, 5, 7, 9 ] → [ 1, 3, 5, 7, 9 ]
&gt;&gt; a[2, 2] = 'cat' → [1, 3, "cat", 9]
&gt;&gt; a[2, 0] = 'dog' → [1, 3, "dog", "cat", 9]
&gt;&gt; a[1, 1] = [9, 8, 7] → [1, 9, 8, 7, "dog", "cat", 9]
&gt;&gt; a[0..3] = [] → ["dog", "cat", 9]
&gt;&gt; a[5..6] = 99, 98 → ["dog", "cat", 9, nil, nil, 99, 98]
</code></pre>
</blockquote>
<p>У массивов есть много других полезных методов. Используя их, можно обращаться с массивами как со стеками, множествами, очередями и обратными очередями.<br />
Все это &#8211; вольный перевод <em>Dave Thomas — Programming ruby 2nd edition</em> (The Pragmatic Programmers&#8217; Guide)</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/startupkin.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/startupkin.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startupkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startupkin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startupkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startupkin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startupkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startupkin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startupkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startupkin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startupkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startupkin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startupkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startupkin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startupkin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startupkin.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=16&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startupkin.wordpress.com/2008/04/29/ruby_containers_block_iterators/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2a04145c88760536546c426512d949fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wpm1</media:title>
		</media:content>

		<media:content url="http://www.ljplus.ru/img4/a/n/antonyc/programming-ruby.jpg" medium="image">
			<media:title type="html">[Image]</media:title>
		</media:content>
	</item>
		<item>
		<title>Ruby Числа</title>
		<link>http://startupkin.wordpress.com/2008/04/29/ruby_chisla/</link>
		<comments>http://startupkin.wordpress.com/2008/04/29/ruby_chisla/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 23:30:52 +0000</pubDate>
		<dc:creator>wpm1</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[programming ruby 2nd edition]]></category>

		<guid isPermaLink="false">http://startupkin.wordpress.com/?p=14</guid>
		<description><![CDATA[Ruby поддерживает целые числа и числа с плавающей запятой (float numbers). Целые числа могут быть любого порядка (на самом деле они ограничены сверху объемом памяти, выделенным вашей операционной системой). Целые числа внутри диапазона (-2^30, 2^30 &#8211; 1) или (-2^62, 2^62 -1) хранятся в двоичной форме и представляют собой экземпляры класса Fixnum. Целые вне этих диапазонов [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=14&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ruby поддерживает  целые числа и числа с плавающей запятой (float numbers). Целые числа могут быть любого порядка (на самом деле они ограничены сверху объемом памяти, выделенным вашей операционной системой). Целые числа внутри диапазона (-2^30, 2^30 &#8211; 1) или (-2^62, 2^62 -1) хранятся в двоичной форме и представляют собой экземпляры класса <strong>Fixnum</strong>. Целые вне этих диапазонов хранятся как экземпляры класса <strong>Bignum</strong> (в данный момент класс представляет собой множество переменной длины, элементы которого это экземпляры класса <strong>Fixnum</strong>). Эта разница прозрачна для пользователя и Ruby автоматически конвертирует классы в обе стороны.</p>
<p><span id="more-14"></span></p>
<blockquote><p>num = 81<br />
6.times do<br />
puts &laquo;#{num.class}: #{num}&raquo;<br />
num *= num<br />
end</p></blockquote>
<p>даст</p>
<blockquote><p>Fixnum: 81<br />
Fixnum: 6561<br />
Fixnum: 43046721<br />
Bignum: 1853020188851841<br />
Bignum: 3433683820292512484657849089281<br />
Bignum: 11790184577738583171520872861412518665678211592275841109096961</p></blockquote>
<p>Чтобы записать целочисленный литерал вы по желанию используете знак ( <em>&laquo;+&raquo;</em> или <em>&laquo;-&raquo;</em> ), необязательный индикатор обозначающий в какой форме записать число (см. пример: <em>0</em> для восьмеричной, <em>0d</em> для десятичной &#8211; применяется по умолчанию, <em>0x</em> для шестнадцатеричной или <em>0b</em> для двоичной), затем пишете строку состоящую из цифр. Знаки подчеркивания игнорируются в этой строке, и некоторые ребята используют их вместо запятой в боольших числах.</p>
<blockquote><p>123456 =&gt; 123456 # Fixnum<br />
0d123456 =&gt; 123456 # Fixnum<br />
123_456 =&gt; 123456 # Fixnum знаки подчеркивания игнорируются<br />
-543 =&gt; 543 # Fixnum отрицательное число<br />
0xaabb =&gt; 43707 # Fixnum шестнадцатеричная форма<br />
0377 =&gt; 255 # Fixnum восьмеричная форма<br />
0b10_1010 =&gt; 42 # Fixnum двоичная форма со знаком минус<br />
123_456_789_123_456_789 =&gt; 123456789123456789 # Bignum</p></blockquote>
<p>Можно генерировать контрольные символы (перевод каретки, например) используя форму <em>?\C-x</em> и <em>?\cx</em>. Метасимволы (<em>x | 0&#215;80</em>) можно генерировать используя <em>?\M-x</em>. Их комбинация генерируется используя <em>?\M-\C-x</em>. Номер обратного слеша можно получить используя запись <em>?\\</em>.</p>
<blockquote><p>?a =&gt; 97 # ASCII символ<br />
?\n =&gt; 10 # код для новой строки (0x0a)<br />
?\C-a =&gt; 1 # CTRL a = ?A &amp; 0x9f = 0&#215;01<br />
?\M-a =&gt; 225 # meta sets bit 7<br />
?\M-\C-a =&gt; 129 # meta and control a<br />
?\C-? =&gt; 127 # удалить символ</p></blockquote>
<p>Численный литерал с десятичной точкой и/или экспонентой соответствует объекту класса <strong>Float</strong>, который в свою очередь соответствует нативному типу <strong>double</strong> операционной системы. После точки обязательно должна стоять цифра, например, если вы запишите число <em>1.0e3</em> в форме <em>1.e3</em>, Ruby попытается вызвать метод <em>e3</em> класса <strong>Fixnum</strong>.<br />
Все числа &#8211; объекты и отвечают на большое количество сообщений. В этом есть отличие от, например, C++: модуль числа нужно находить способом <em>num.abs</em>, а не <em>abs(num)</em>.<br />
Целые числа поддерживают некоторые полезные итераторы. Их названия говорят сами за себя: <em>6.times</em> вызвает ассоциированный с ним блок кода 6 раз, <em>upto</em> и <em>downto</em> нужны чтобы установить верхнюю или соответственно нижнюю границу для количества вызовов блока кода. Класс <strong>Numeric</strong> предоставляет обобщенный метод <em>step</em>, более похожий на всем привычный <em>for</em>.</p>
<blockquote><p>3.times { print &laquo;X &raquo; }<br />
1.upto(5) {|i| print i, &raquo; &raquo; }<br />
99.downto(95) {|i| print i, &raquo; &raquo; }<br />
50.step(80, 5) {|i| print i, &raquo; &raquo; }</p></blockquote>
<p>даст</p>
<blockquote><p>X X X 1 2 3 4 5 99 98 97 96 95 50 55 60 65 70 75 80</p></blockquote>
<p>Наконец, нужно предупредить программистов на Perl (и некоторых других тоже &#8211; прим. перев.): строки, содержащие цифры не конвертируются автоматически в числа. Это может подвести вас, если вы читаете числа из файла. Например, мы хотим найти сумму цифр на каждой строке, из файла:</p>
<blockquote><p>3 4<br />
5 6<br />
7 8</p></blockquote>
<p>Следующий код даст неожиданный для кого-то результат:</p>
<blockquote><p>some_file.each do |line|<br />
v1, v2 = line.split #разбить строку на объекты между пробелами<br />
print v1 + v2, &raquo; &laquo;<br />
end</p></blockquote>
<p>даст нам</p>
<blockquote><p>34 56 78</p></blockquote>
<p>Проблема в том, что <em>v1</em> и <em>v2</em> содержат ссылки на строковые объекты. Для них результатом выполнения операции сложения будет конкатенация двух строк. Чтобы добиться желаемого результата, используйте метод <em>Integer</em>, чтобы привести строку к целому числу.</p>
<blockquote><p>some_file.each do |line|<br />
v1, v2 = line.split #разбить строку на объекты между пробелами<br />
print Integer(v1) + Integer(v2), &raquo; &laquo;<br />
end</p></blockquote>
<p>наконец то дает нам:</p>
<blockquote><p>7 11 15</p></blockquote>
<p>Ура!</p>
<p>Перевод книги Dave Thomas &#8211; Programming Ruby</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/startupkin.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/startupkin.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startupkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startupkin.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startupkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startupkin.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startupkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startupkin.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startupkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startupkin.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startupkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startupkin.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startupkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startupkin.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startupkin.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startupkin.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=14&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startupkin.wordpress.com/2008/04/29/ruby_chisla/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2a04145c88760536546c426512d949fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wpm1</media:title>
		</media:content>
	</item>
		<item>
		<title>Некоторые основы Ruby (об именах)</title>
		<link>http://startupkin.wordpress.com/2008/04/20/ruby_numbers_basics/</link>
		<comments>http://startupkin.wordpress.com/2008/04/20/ruby_numbers_basics/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 13:30:40 +0000</pubDate>
		<dc:creator>wpm1</dc:creator>
				<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://startupkin.wordpress.com/?p=13</guid>
		<description><![CDATA[Ruby использует соглашение, чтобы различать использование имен: первые символы имени определяют его использование. Локальные переменные, параметры методов, имена методов должны начинаться с прописной буквы или знака подчеркивания. Глобальные переменные начинаются со знака доллара $, а переменные экземпляра класса начинаются с at знака (@). Переменные класса начинаются с двух знаков at (@@). Наконец, имена классов, названия [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=13&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ruby использует соглашение, чтобы различать использование имен: первые символы имени определяют его использование. Локальные переменные, параметры методов, имена методов должны начинаться с прописной буквы или знака подчеркивания. Глобальные переменные начинаются со знака доллара $, а переменные экземпляра класса начинаются с at знака (@). Переменные класса начинаются с двух знаков at (@@). Наконец, имена классов, названия модулей и констант должны начинаться с заглавной буквы. После какого то из этих начальных символов в имени может содержаться любая комбинация из букв, цифр и знаков подчеркивания (c оговоркой: за символом @ не может следовать цифра). Однако, по соглашению в составных именах слова разделяются знаком подчеркивания, а составные имена классов используют так называемый PascalCasing (когда каждое слово начинается с заглавной буквы).<img class="alignright" src="http://www.ljplus.ru/img4/a/n/antonyc/programming-ruby.jpg" alt="programming ruby" /></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/startupkin.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/startupkin.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startupkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startupkin.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startupkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startupkin.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startupkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startupkin.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startupkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startupkin.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startupkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startupkin.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startupkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startupkin.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startupkin.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startupkin.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=13&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startupkin.wordpress.com/2008/04/20/ruby_numbers_basics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2a04145c88760536546c426512d949fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wpm1</media:title>
		</media:content>

		<media:content url="http://www.ljplus.ru/img4/a/n/antonyc/programming-ruby.jpg" medium="image">
			<media:title type="html">programming ruby</media:title>
		</media:content>
	</item>
		<item>
		<title>Блоки и итераторы</title>
		<link>http://startupkin.wordpress.com/2008/04/20/%d0%91%d0%bb%d0%be%d0%ba%d0%b8-%d0%b8-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80%d1%8b/</link>
		<comments>http://startupkin.wordpress.com/2008/04/20/%d0%91%d0%bb%d0%be%d0%ba%d0%b8-%d0%b8-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80%d1%8b/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 13:15:09 +0000</pubDate>
		<dc:creator>wpm1</dc:creator>
				<category><![CDATA[programming ruby 2nd edition]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://startupkin.wordpress.com/?p=10</guid>
		<description><![CDATA[Вы можете использовать блоки для реализации обратных вызовов, передачи кусков кода и для реализации итераторов. Дальше больше Блоки представляют собой простые куски кода заключенные в фигурные скобки или между &#60;i&#62;do &#8230; end&#60;/i&#62; &#60;pre&#62; &#60;code&#62; { puts &#171;Hello&#187;} #это блок &#60;/code&#62; &#60;/pre&#62; &#60;pre&#62; &#60;code&#62; do # club.enroll( person) # и это тоже person.socialize # end # [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=10&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Вы можете использовать блоки для реализации обратных вызовов, передачи кусков кода и для реализации итераторов.</p>
<p>Дальше больше<br />
<span id="more-10"></span><br />
Блоки представляют собой простые куски кода заключенные в фигурные скобки или между &lt;i&gt;do &#8230; end&lt;/i&gt;<br />
&lt;pre&gt;<br />
&lt;code&gt;<br />
{ puts &laquo;Hello&raquo;} #это блок<br />
&lt;/code&gt;<br />
&lt;/pre&gt;<br />
&lt;pre&gt;<br />
&lt;code&gt;<br />
do                      #<br />
club.enroll( person)  # и это тоже<br />
person.socialize      #<br />
end                     #<br />
&lt;/code&gt;<br />
&lt;/pre&gt;<br />
Когда блок создан его можно ассоциировать с вызовом метода. Это делается помещением блока кода в конец строки содержащей вызов метода. Например, в следующем коде, блок, содержащий &lt;i&gt;puts &laquo;Hi&raquo;&lt;/i&gt; ассоциирован с вызовом метода greet.<br />
&lt;pre&gt;<br />
&lt;code&gt;<br />
greet { puts &laquo;Hi&raquo; }<br />
&lt;/code&gt;<br />
&lt;/pre&gt;<br />
Если у метода есть параметры, они перечисляются перед блоком:<br />
&lt;pre&gt;<br />
&lt;code&gt;<br />
verbose_greet(&laquo;Dave&raquo;, &laquo;loyal customer&raquo;) {puts &laquo;Hi&raquo;}<br />
&lt;/code&gt;<br />
&lt;/pre&gt;<br />
Метод может вызвать ассоциированный блок один или несколько раз используя выражение &lt;i&gt;yield&lt;/i&gt;. Оно похоже на вызов метода, который вызывает блок, ассоциированный с методом, содержащим &lt;i&gt;yield&lt;/i&gt;.<br />
Следующий пример показывает это в действии. Мы определим метод который вызывает yield два раза.  Затем вызовем этот метод, поместив блок на той же линии после вызова (и после перечисления аргументов метода)<br />
&lt;pre&gt;<br />
&lt;code&gt;<br />
def call_block<br />
puts &laquo;Start of method&raquo;<br />
yield<br />
yield<br />
puts &laquo;End of method&raquo;<br />
end<br />
call_block { puts &laquo;In the block&raquo; }<br />
&lt;/code&gt;<br />
&lt;/pre&gt;<br />
результатом будет:<br />
&lt;pre&gt;<br />
&lt;code&gt;<br />
Start of method<br />
In the block<br />
In the block<br />
End of method<br />
&lt;/code&gt;<br />
&lt;/pre&gt;<br />
Каждый вызов &lt;i&gt;yield&lt;/i&gt; выводит на печать &laquo;In the block&raquo;.<br />
Блок кода можно вызывать с параметрами, передавая их через &lt;i&gt;yield&lt;/i&gt;. Внутри блока просто перечислите аргументы, заключив их между вертикальными чертами (|).<br />
&lt;pre&gt;<br />
&lt;code&gt;<br />
def call_block<br />
yield(&laquo;hello&raquo;, 99)<br />
end<br />
call_block {|str, num|}<br />
&lt;/code&gt;<br />
&lt;/pre&gt;<br />
Блоки кода использеются повсюду для реализации итераторов: методы которые возвращают элементы последовательности взятые из некоторой коллекции, например, из массива.<br />
&lt;pre&gt;<br />
&lt;code&gt;<br />
animals = %w( ant bee cat dog elk )<br />
animals.each {|animal| puts animal }<br />
&lt;/code&gt;<br />
&lt;/pre&gt;<br />
даст:<br />
&lt;pre&gt;<br />
&lt;code&gt;<br />
ant<br />
bee<br />
cat<br />
dog<br />
elk<br />
&lt;/code&gt;<br />
&lt;/pre&gt;<br />
Внутри класса &lt;i&gt;Array&lt;/i&gt; мы бы воплотили итератор &lt;i&gt;each&lt;/i&gt; следующим образом, используя псевдо-код:<br />
&lt;pre&gt;<br />
&lt;code&gt;<br />
# внутри класса Array<br />
def each<br />
for each element # &lt;- псевдо код<br />
yield element<br />
end<br />
end<br />
&lt;/code&gt;<br />
&lt;/pre&gt;<br />
Большинство конструкций перебора которые встроены в C или Java в Руби являются простыми методами, вызывающими ассоциированные блоки ноль или более раз.<br />
&lt;pre&gt;<br />
&lt;code&gt;<br />
[ 'cat', 'dog', 'horse' ].each { |name| print name, &raquo; &laquo;}<br />
5.times { print &laquo;*&raquo; }<br />
3.upto(6) { |i| print i }<br />
(&#8216;a&#8217;..&#8217;e').each { |char| print char }<br />
&lt;/code&gt;<br />
&lt;/pre&gt;<br />
в результате дает нам<br />
&lt;pre&gt;<br />
&lt;code&gt;<br />
cat dog horse *****3456abcde<br />
&lt;/code&gt;<br />
&lt;/pre&gt;<br />
Мы просим объект 5 вызвать блок пять раз и затем просим объект вызвать блок, передавая последовательные значения пока они не достигнут значения 6. И в конце диапазон величин от a до e вызывает блок используя метод each.<br />
Все это &#8211; вольный перевод &lt;i&gt;Dave Thomas — Programming ruby 2nd edition&lt;/i&gt; (The Pragmatic Programmers&#8217; Guide)</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/startupkin.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/startupkin.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startupkin.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startupkin.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startupkin.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startupkin.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startupkin.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startupkin.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startupkin.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startupkin.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startupkin.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startupkin.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startupkin.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startupkin.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startupkin.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startupkin.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=10&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startupkin.wordpress.com/2008/04/20/%d0%91%d0%bb%d0%be%d0%ba%d0%b8-%d0%b8-%d0%b8%d1%82%d0%b5%d1%80%d0%b0%d1%82%d0%be%d1%80%d1%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2a04145c88760536546c426512d949fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wpm1</media:title>
		</media:content>
	</item>
		<item>
		<title>Investments</title>
		<link>http://startupkin.wordpress.com/2008/03/07/investments/</link>
		<comments>http://startupkin.wordpress.com/2008/03/07/investments/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 03:09:03 +0000</pubDate>
		<dc:creator>wpm1</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://startupkin.wordpress.com/2008/03/07/investments/</guid>
		<description><![CDATA[Invest in what you understand and what you can manage. Don&#8217;t create more then 10 tasks for a project From conversation with our client.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=7&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<ul>
<li><i>Invest in what you understand and what you can manage</i>.</li>
<li><i>Don&#8217;t create more then 10 tasks for a project</i></li>
</ul>
<p>From conversation with our client.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/startupkin.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/startupkin.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startupkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startupkin.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startupkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startupkin.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startupkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startupkin.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startupkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startupkin.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startupkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startupkin.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startupkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startupkin.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startupkin.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startupkin.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=7&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startupkin.wordpress.com/2008/03/07/investments/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2a04145c88760536546c426512d949fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wpm1</media:title>
		</media:content>
	</item>
		<item>
		<title>Creating URL&#8217;s in Mono Rail</title>
		<link>http://startupkin.wordpress.com/2008/03/06/creating-urls-in-mono-rail/</link>
		<comments>http://startupkin.wordpress.com/2008/03/06/creating-urls-in-mono-rail/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 08:18:35 +0000</pubDate>
		<dc:creator>wpm1</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[Castle project]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[Monorail]]></category>

		<guid isPermaLink="false">http://startupkin.wordpress.com/2008/03/06/creating-urls-in-mono-rail/</guid>
		<description><![CDATA[They got a very simple URLHelper for Castle Project, it is used like: $UrlHelper.For("%{action='YourAction'}") And it DOES NOT take additional parameters, like some &#171;id&#187; or sth in a form, that would not make you specify all special symbols, &#8216;=&#8217;, &#8216;?&#8217; and &#8216;&#38;&#8217; .. I should mention lack of up-to-date documentation. After googling for some time [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=6&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>They got a very simple URLHelper for Castle Project, it is used like:<br />
<code><br />
$UrlHelper.For("%{action='YourAction'}")<br />
</code><br />
And it DOES NOT take additional parameters, like some &laquo;id&raquo; or sth in a form, that would not make you specify all special symbols, &#8216;=&#8217;, &#8216;?&#8217; and &#8216;&amp;&#8217; .. I should mention lack of up-to-date documentation. After googling for some time I realized, it would be better to write my own one. (I hope, I did not reinvent the will) I called it MyUrlHelper, extending it from <i>AbstractHelper.</i> To use it with NVelocity, supply it with action (yes, it does not takes controller as a parameter now) and a dictionary as the second parameter:<br />
<code><br />
$MyUrlHelper.For("YourAction", "%{id=$item.id}")<br />
</code><br />
and it will output a correctly formed URL. Place it in &laquo;Helpers&raquo; directory under your VS project and name it MyUrlHelper (by default). Then in corresponding controller, the one that passes data to your views, write something like this:<br />
<code><br />
[Helper(typeof(YourProjectNamespace.Helpers.MyUrlHelper))]<br />
public class YourController : BaseController<br />
{<br />
}<br />
</code><br />
and it&#8217;s gonna work. Be sure, you explicilty mention MyUrlHelper in HelperAttribute attached to the controller, otherwise it won&#8217;t work!<br />
It can be used without any restrictions,<a href="http://depositfiles.com/files/2980932"> download</a> it from depositfiles.com</p>
<p><b>UPD: </b>Well, it seems, I reinvented the will ;) I had I version of MonoRail v 1 RC3, that had non-virtual methods of UrlHelper, but accordingly to this forum thread <a href="http://forum.castleproject.org/viewtopic.php?p=11283">http://forum.castleproject.org/viewtopic.php?p=11283</a>  they made them virtual on about Dec 27, 2007.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/startupkin.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/startupkin.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startupkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startupkin.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startupkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startupkin.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startupkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startupkin.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startupkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startupkin.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startupkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startupkin.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startupkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startupkin.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startupkin.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startupkin.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=6&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startupkin.wordpress.com/2008/03/06/creating-urls-in-mono-rail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2a04145c88760536546c426512d949fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wpm1</media:title>
		</media:content>
	</item>
		<item>
		<title></title>
		<link>http://startupkin.wordpress.com/2008/03/06/5/</link>
		<comments>http://startupkin.wordpress.com/2008/03/06/5/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 08:17:12 +0000</pubDate>
		<dc:creator>wpm1</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[Castle project]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[Monorail]]></category>

		<guid isPermaLink="false">http://startupkin.wordpress.com/?p=5</guid>
		<description><![CDATA[I am building a real world web app with Castle Project right now. So, the debugging is done for IE. And I encountered two different things of interest: 1. Javascript-based form validation as it&#8217;s implemented for Castle Project does not work in Opera. Even more, pressing submit button in Opera causes a big stack trace [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=5&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I am building a real world web app with Castle Project right now. So, the debugging is done for IE. And I encountered two different things of interest:<br />
<b>1. Javascript-based form validation</b> as it&#8217;s implemented for Castle Project does not work in Opera. Even more, pressing submit button in Opera causes a big stack trace of errors. Correct me, if I&#8217;m wrong, that&#8217;s because IE&#8217;s lack of standarts. I really<br />
dont know what&#8217;s the problem is, because I&#8217;m not a tough javascript programmer.<br />
<b>2. IE automagically handles OPTION tag insertions into select lists</b>. I have complex form, with a lot of selects, most of them have other selects as parents. E.g. City has District and Street as children. So I want to populate District and Street using ajax call invoked using onchange event hook of City select. I have two invocations for each one of the two. I pass District Select Id to the <i>Ajax.Request</i> object. And what I wanted to do was to simply get a lot of lines like<br />
<code><br />
...<br />
&lt; value="district_id"&gt;district_name<br />
...<br />
</code><br />
by parsing my NVelocity template. And actually the code did return right list of options. But when it tried to insert them into District Select (with javascript using innerHTML property, I think. read about <a href="http://www.prototypejs.org/api/ajax/request">Prototype js library here</a>) in IE 6 that resulted in messed tags (i use <a href="http://www.google.ru/search?hl=ru&amp;q=ie+developer+toolbar+download&amp;lr=&amp;aq=0&amp;oq=IE+Developer+Toolbar">IE Developer Toolbar</a> to see changes):<br />
<code><br />
...<br />
district_name&lt;&gt;&lt; /option&gt;&lt; /option&gt;&lt; //option&gt;<br />
...<br />
</code><br />
In Opera however, that didn&#8217;t happen and it worked just as it was expected to. So after 2 hours of trying to understand what&#8217;s going on, I found <a href="http://www.webdeveloper.com/forum/archive/index.php/t-106987.html">explanation</a> to this. The thing is, MS does not allow option tag insertions without corresponding select tags. So, be concerned about this.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/startupkin.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/startupkin.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startupkin.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startupkin.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startupkin.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startupkin.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startupkin.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startupkin.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startupkin.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startupkin.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startupkin.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startupkin.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startupkin.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startupkin.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startupkin.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startupkin.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=5&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startupkin.wordpress.com/2008/03/06/5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2a04145c88760536546c426512d949fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wpm1</media:title>
		</media:content>
	</item>
		<item>
		<title>Com port</title>
		<link>http://startupkin.wordpress.com/2008/03/06/com-port/</link>
		<comments>http://startupkin.wordpress.com/2008/03/06/com-port/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 08:09:58 +0000</pubDate>
		<dc:creator>wpm1</dc:creator>
				<category><![CDATA[devices]]></category>
		<category><![CDATA[OS]]></category>

		<guid isPermaLink="false">http://startupkin.wordpress.com/?p=4</guid>
		<description><![CDATA[The com port does not send interruptions to OS, because of its logic. So if you have a device on com port you should write program that periodically asks incoming buffer on com port, if it got anything in it. Otherwise, when you buffer is full there can be problems with periferial device. We are [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=4&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The com port does not send interruptions to OS, because of its logic. So if you have a device on com port you should write program that periodically asks incoming buffer on com port, if it got anything in it. Otherwise, when you buffer is full there can be problems with periferial device.</p>
<p>We are under some project for cash machines. So we talk to this cash machine we have via com port, sending it commands and listening to output. We had issues in validation module, that was created by third-party, so we decided to rewrite the validation driver using protocol, it uses. We sent a few command and our program showed, there was nothing recieved. If only we knew from the beginning, that we should try to read from the comport we wouldn&#8217;t losthalf of a day.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/startupkin.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/startupkin.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startupkin.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startupkin.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startupkin.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startupkin.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startupkin.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startupkin.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startupkin.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startupkin.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startupkin.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startupkin.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startupkin.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startupkin.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startupkin.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startupkin.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=4&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startupkin.wordpress.com/2008/03/06/com-port/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2a04145c88760536546c426512d949fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wpm1</media:title>
		</media:content>
	</item>
		<item>
		<title>Make Monorail return right content-type header</title>
		<link>http://startupkin.wordpress.com/2008/03/06/make-monorail-return-right-content-type-header/</link>
		<comments>http://startupkin.wordpress.com/2008/03/06/make-monorail-return-right-content-type-header/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 08:02:21 +0000</pubDate>
		<dc:creator>wpm1</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[Castle project]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Monorail]]></category>

		<guid isPermaLink="false">http://startupkin.wordpress.com/?p=3</guid>
		<description><![CDATA[Recently I had a task of adding some drag and drop abilities to a layer, representing chat window on a web page. Users can move it and resize it. I knew it to be a hard javascript task because the solution had to be crossbrowser. So I chose javascript library by walterzorn for it&#8217;s great [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=3&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently I had a task of adding some drag and drop abilities to a layer, representing chat window on a web page. Users can move it and resize it. I knew it to be a hard javascript task because the solution had to be crossbrowser. So I chose javascript library by <a href="http://www.walterzorn.com/dragdrop/dragdrop_e.htm">walterzorn</a> for it&#8217;s great customization features and fully documented process of installation. Using it is like this:</p>
<pre>  &lt;<span class="start-tag">script</span><span class="attribute-name"> type</span>=<span class="attribute-value">"text/javascript"</span>&gt;  &lt;!--

SET_DHTML('chat-window'+CURSOR_MOVE+RESIZABLE+TRANSPARENT+MINWIDTH+200+MINHEIGHT+150);  //--&gt;

&lt;/<span class="end-tag">script</span>&gt;  &lt;/<span class="end-tag">body</span>&gt;&lt;/<span class="end-tag">html</span>&gt;</pre>
<p>As you can see we are using only div layer Id to  make it dragndroppable and also we use a set of predefined global constants that allow us to use some new abilities. Isn&#8217;t it great, you guys? But the installation documentation mention the fact this awesome library work only in HTML, not in XHTML (that&#8217;s really a contra with a lot of modern websites) because it uses document.write() which is not supported by XHTML specification. That&#8217;s why I needed my website to send Content-type: text/html header so that Firefox, Opera, Safari and others could use html 4.01 specification.. One can ask himself: why not using doctype and meta tag to specify specification (sorry for that one recursion)? The point is, those browsers judge the document by Content-Type header. Using great LiveHttpHeaders plugin for firefox I found out that there is application/xhtml+xml header returned from server. It turns out that if in Web.config I have</p>
<pre>
&lt;viewEngines v iewPathRoot="Views"&gt;

&lt;add xhtml="<b>true</b>" type="Castle.MonoRail.Framework.Views.NVelocity.NVelocityViewEngine, Castle.MonoRail.Framework.Views.NVelocity" /&gt;</pre>
<p>then View layer of Monorail overrides any headers that I try to give it using Response.ContentType = &laquo;text/html&raquo;</p>
<p><i>The solution that makes monorail return &laquo;text/html&raquo; header is to set xhtml attribute</i> <i>to</i> <b>false</b>. You still may not manipulate headers in arbitrary manner, but you can customize the behaviour choosing between &laquo;application/xhtml+xml&raquo; and &laquo;text/html&raquo;.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/startupkin.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/startupkin.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startupkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startupkin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startupkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startupkin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startupkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startupkin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startupkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startupkin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startupkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startupkin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startupkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startupkin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startupkin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startupkin.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startupkin.wordpress.com&amp;blog=3077087&amp;post=3&amp;subd=startupkin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startupkin.wordpress.com/2008/03/06/make-monorail-return-right-content-type-header/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2a04145c88760536546c426512d949fa?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">wpm1</media:title>
		</media:content>
	</item>
	</channel>
</rss>
