<?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/"
	>

<channel>
	<title>Дневник борца за высшее образование</title>
	<atom:link href="http://blog.copperred.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.copperred.net</link>
	<description>стараемся &#34;по циркулю&#34; и &#34;западлицо&#34;</description>
	<lastBuildDate>Tue, 10 Dec 2024 15:02:35 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Message Reactions in Telegram</title>
		<link>http://blog.copperred.net/2024/12/message-reactions-in-telegram/</link>
					<comments>http://blog.copperred.net/2024/12/message-reactions-in-telegram/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 09 Dec 2024 11:54:24 +0000</pubDate>
				<category><![CDATA[python / django]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[webdev / software engineering]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=335</guid>

					<description><![CDATA[Ok, I was looking where to share, and recall I still pay for this blog&#8217;s hosting monthly. So I deceided to drop it here, just in case someone will ever find this via Google and say thanks. Situation: I have a Telegram bot created 5-6 years ago for testing and I&#8217;ve used it to develop &#8230; <a href="http://blog.copperred.net/2024/12/message-reactions-in-telegram/" class="more-link">Continue reading <span class="screen-reader-text">Message Reactions in Telegram</span></a>]]></description>
										<content:encoded><![CDATA[<p>Ok, I was looking where to share, and recall I still pay for this blog&#8217;s hosting monthly. So I deceided to drop it here, just in case someone will ever find this via Google and say thanks.</p>
<p>Situation: I have a Telegram bot created 5-6 years ago for testing and I&#8217;ve used it to develop some logic. It works. I register new bot for production run via BotFather, put all same settings and new bot is not getting any message reactions, despite it get all other notifications &#8211; topics created, files uploaded, etc&#8230;<br />
I am using Telegram via Python library, so I am not polling updates manually, but have a thread loop which callbacks my handlers on each message received by bot. I start reading <a href="https://core.telegram.org/bots/api#getupdates">API docs</a> and discover that </p>
<blockquote><p>Specify an empty list to receive all update types except <strong>chat_member</strong>, <strong>message_reaction</strong>, and <strong>message_reaction_count</strong> (default). If not specified, the previous setting will be used.</p></blockquote>
<p>Looks like this is default behaviour and I need find a way to pass at least message_reaction to getUpdates to start polling those. I even <a href="https://github.com/vestel/telepotpro">forked the library</a>, when another idea came to my mind: I can quickly update the last settings:</p>
<p><code><br />
$ ipython</p>
<p>import telepotpro<br />
from server.settings import BOT_TOKEN<br />
bot = telepotpro.Bot(BOT_TOKEN)<br />
needed_updates = [ "message", "edited_message", "channel_post", "message_reaction", "message_reaction_count", "chat_member", ]<br />
bot.getUpdates(allowed_updates=needed_updates)<br />
</code></p>
<p>This made my bot set to receive only specific set of updates, but more important &#8211; it started to receive <em><strong>message_reaction</strong></em> type of events, which I was interested in.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.copperred.net/2024/12/message-reactions-in-telegram/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">335</post-id>	</item>
		<item>
		<title>Blog Update</title>
		<link>http://blog.copperred.net/2017/02/blog-update/</link>
					<comments>http://blog.copperred.net/2017/02/blog-update/#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 28 Feb 2017 12:55:24 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=330</guid>

					<description><![CDATA[Мой блог указан, везде где только можно, но актуальной информации с 2012 года тут не появлялось. Это как-бы не очень хорошо, надо вернуться обратно к практике делать здесь небольшие технические заметки о ruby и не только. Интересно, заходил ли сюда кто-нибудь из старых подписчиков или все забыли и забили?]]></description>
										<content:encoded><![CDATA[<p>Мой блог указан, везде где только можно, но актуальной информации с 2012 года тут не появлялось. Это как-бы не очень хорошо, надо вернуться обратно к практике делать здесь небольшие технические заметки о ruby и не только. Интересно, заходил ли сюда кто-нибудь из старых подписчиков или все забыли и забили?</p>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.copperred.net/2017/02/blog-update/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">330</post-id>	</item>
		<item>
		<title>Листинг директорий на руби</title>
		<link>http://blog.copperred.net/2012/11/%d0%bb%d0%b8%d1%81%d1%82%d0%b8%d0%bd%d0%b3-%d0%b4%d0%b8%d1%80%d0%b5%d0%ba%d1%82%d0%be%d1%80%d0%b8%d0%b9-%d0%bd%d0%b0-%d1%80%d1%83%d0%b1%d0%b8/</link>
		
		<dc:creator><![CDATA[vestel]]></dc:creator>
		<pubDate>Thu, 15 Nov 2012 05:42:20 +0000</pubDate>
				<category><![CDATA[flow / life]]></category>
		<category><![CDATA[ruby / rails]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=206</guid>

					<description><![CDATA[Было дело, надо в одном проекте выводить список файлов лежащих в определенной директории, с возможностью их скачать, как говориться в натуральную величину. Это был мой первый кусочек кода написанный на ruby, а поскольку rails для меня тогда еще были не доступны, их фишками я не пользовался. Встречайте, чистый ERB: &#60;% vendors = Hash.new { &#124;hash, &#8230; <a href="http://blog.copperred.net/2012/11/%d0%bb%d0%b8%d1%81%d1%82%d0%b8%d0%bd%d0%b3-%d0%b4%d0%b8%d1%80%d0%b5%d0%ba%d1%82%d0%be%d1%80%d0%b8%d0%b9-%d0%bd%d0%b0-%d1%80%d1%83%d0%b1%d0%b8/" class="more-link">Continue reading <span class="screen-reader-text">Листинг директорий на руби</span></a>]]></description>
										<content:encoded><![CDATA[<p>Было дело, надо в одном проекте выводить список файлов лежащих в определенной директории, с возможностью их скачать, как говориться в натуральную величину. Это был мой первый кусочек кода написанный на ruby, а поскольку rails для меня тогда еще были не доступны, их фишками я не пользовался. Встречайте, чистый ERB:</p>
<pre><code class="ruby">
&lt;%
vendors = Hash.new { |hash, key| hash[key] = Array.new }
Dir.open('public/files').each do |file|

    # Заполняем хэш vendors файлами из директории, перебирая по очереди каждый из них
    next if file[-4..-1] != '.pdf'
    next if file =~ /^..?$/
    file.gsub!('.pdf', '')
    f = file.split(' ')

    # Разбиваем имя файла, получая необходимые логические части Прозводитель и Модель. 
    # Заполняем хэш полученными значениями.

    model = f[-1] # Пробельчик чик-чик
    vendor = f[0..-2].join(' ')
    vendors [vendor] &lt;&lt; model
end
%&gt;

&lt;% for v in vendors.keys.sort do %&gt;
<!-- Впечатываем производителя--></code></pre>
<p>&lt;h2>&lt;%= v &gt;&lt;/h2&gt;<br />
&lt;ul>&lt;% for m in vendors[v].sort do %&gt; <!-- Заполняем список названиями моделей--><br />
    &lt;li>&lt;a href=&#8221;/files/&lt;%= v + &#8216; &#8216; + m + &#8216; .jpg&#8217; %&gt;&#8221; target=&#8221;_blank&#8221;>&lt;%= m %&gt;</a></li>
<p>&lt;% end %&gt;</ul>
<pre><code class="ruby">
&lt;% end %&gt; </code></pre>
<p>2 April 2009</p>
<p>Как видите, на Ruby можно тоже писать коряво, как на PHP <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">206</post-id>	</item>
		<item>
		<title>Project Management Step 1</title>
		<link>http://blog.copperred.net/2012/11/project-management-step-1/</link>
		
		<dc:creator><![CDATA[vestel]]></dc:creator>
		<pubDate>Thu, 08 Nov 2012 16:34:30 +0000</pubDate>
				<category><![CDATA[offline / externals]]></category>
		<category><![CDATA[webdev / software engineering]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=56</guid>

					<description><![CDATA[Обнаружил в драфтах свою статью. Как-то получилось, что она не была опубликована своевременно, а сейчас я даже не знаю, что туда можно дописать. Поэтому публикую as-is, вдруг кому-то покажется интересным: Сейчас популярно стали всякие Management-ы. Прямо как грибы после дождя растут: то time management, то money management, даже офис management встречается. А что люди в &#8230; <a href="http://blog.copperred.net/2012/11/project-management-step-1/" class="more-link">Continue reading <span class="screen-reader-text">Project Management Step 1</span></a>]]></description>
										<content:encoded><![CDATA[<p>Обнаружил в драфтах свою статью. Как-то получилось, что она не была опубликована своевременно, а сейчас я даже не знаю, что туда можно дописать. Поэтому публикую as-is, вдруг кому-то покажется интересным:</p>
<p>Сейчас популярно стали всякие Management-ы. Прямо как грибы после дождя растут: то time management, то money management, даже офис management встречается. А что люди в это понятие вкладывают? Просто умение организовать что либо &#8211; процесс работы, финансы. На мой взгляд всем этим management-ам адекватнейшим переводом будет &#8220;управление&#8221;. Вот и  я столкнулся с проблеммой управления. Хоть у нас и не очень большая фирма, мы связаны с заказчиками, freelancer-ами, внешними сотрудниками, а значет без эффективного управления проектами организация данной связи может создать узкое место в построении бизнеса.<br />
Вот сегодня, я и решил слегка улучшить внутриофисную коммуникацию. Ну, вернее не сразу улучшить, а посмотреть на перспективы. Для управления большинством проектов достаточно ручки и листочка бумаги, однако если в офисе люди работают в разное время, то короткими записками не обойтись, а цеплять к почте файлы по 60Мб достаточно муторно. Обратив свой взор на рынок програмного обеспечения для управления проектами, я понял что подобные приложения сейчас непишут лишь ленивые. Рынок переполнен разнородной информацией по данному вопросу и поэтому я обратился к ручке с бумажкой, чтобы сформулировать свои требования. Итого вышло:</p>
<ul>
<li>Поддержка любого количества проектов (отличного от 1)</li>
<li>Возможность устанавливать статус проекта, раздавать задачи по конкретным пользователям</li>
<li>Возможность прицеплять файлы разного типа</li>
</ul>
<p>Посоветовавшись с коллегами-программистами, я выяснил что есть хороший пакет написанный на языке C# для MS SQL Server-a. <a href="http://www.countersoft.com">Gemini</a> отличается от многих подобных продуктов тем, что предлагает не &#8220;вомпу в мешке&#8221;, а вполне лицензионную версию с ограничением на 10 пользователей. Чего нам в принципе достаточно на первое время.<br />
Потратив кусочек своего рабочего времени на установку компонент: версия 2.1.1 потребовала .NET Framework 2.0 и MS SQL Server 2000, я принялся за борьбу с инсталлятором. Не смотря на то, что само приложение полностью локализованно, инсталлятор отличается исключительной англоязычностью, как интерфейса, так и мануала. Без бубнов конечно не обошлось, но в конце концов &#8211; все заработало очень сносно. </p>
<p>Дата написания: 27 Июня 2007 года.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">56</post-id>	</item>
		<item>
		<title>MongoDB for Developers</title>
		<link>http://blog.copperred.net/2012/11/mongodb-for-developers/</link>
					<comments>http://blog.copperred.net/2012/11/mongodb-for-developers/#respond</comments>
		
		<dc:creator><![CDATA[vestel]]></dc:creator>
		<pubDate>Wed, 07 Nov 2012 11:42:02 +0000</pubDate>
				<category><![CDATA[flow / life]]></category>
		<category><![CDATA[links / internet]]></category>
		<category><![CDATA[python / django]]></category>
		<category><![CDATA[ruby / rails]]></category>
		<category><![CDATA[webdev / software engineering]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[mongo]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=323</guid>

					<description><![CDATA[Я пишу этот пост, потому что нахожусь в некотором экстазе от онлайн курса M101: MongoDB for Developers. Если вы вообще смотрите в мир NoSQL, то думаю это самое то, что нужно для того чтобы идти в ногу со временем. Вообще, я заметил что за прошедшие пару лет с окончания вуза я отучился учиться&#8230; чтоже Coursera, &#8230; <a href="http://blog.copperred.net/2012/11/mongodb-for-developers/" class="more-link">Continue reading <span class="screen-reader-text">MongoDB for Developers</span></a>]]></description>
										<content:encoded><![CDATA[<p>Я пишу этот пост, потому что нахожусь в некотором экстазе от онлайн курса <a href="http://www.10gen.com/training">M101: MongoDB for Developers</a>. Если вы вообще смотрите в мир NoSQL, то думаю это самое то, что нужно для того чтобы идти в ногу со временем. Вообще, я заметил что за прошедшие пару лет с окончания вуза я отучился учиться&#8230; чтоже Coursera, Udacity и другие ресурсы с <a href="http://www.class-central.com/">Class Central</a> помогут мне вернуться в строй.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.copperred.net/2012/11/mongodb-for-developers/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">323</post-id>	</item>
		<item>
		<title>Железные траблы Blackmagic</title>
		<link>http://blog.copperred.net/2011/10/hardware-troubles/</link>
					<comments>http://blog.copperred.net/2011/10/hardware-troubles/#comments</comments>
		
		<dc:creator><![CDATA[vestel]]></dc:creator>
		<pubDate>Thu, 27 Oct 2011 14:22:16 +0000</pubDate>
				<category><![CDATA[linux / administration]]></category>
		<category><![CDATA[blackmagic]]></category>
		<category><![CDATA[capture]]></category>
		<category><![CDATA[device]]></category>
		<category><![CDATA[drivers]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[hdmi]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=242</guid>

					<description><![CDATA[Вот, сегодня на работе на пустом месте нарисовались проблемы с картой для HDMI Capture. Нужно мне было поднять Blackmagic Intensity Pro для работы под Ubuntu 10.10 i386. Пошел на сайт, скачал оттуда свежий пакет софта. Поставил desktopvideo-8.6.1-i386.deb и MediaExpress-3.0.3-i386.deb. sudo dpkg -i desktopvideo-8.6.1-i386.deb sudo dpkg -i MediaExpress-3.0.3-i386.deb Все встало без проблем, а дальше никуда. Любая &#8230; <a href="http://blog.copperred.net/2011/10/hardware-troubles/" class="more-link">Continue reading <span class="screen-reader-text">Железные траблы Blackmagic</span></a>]]></description>
										<content:encoded><![CDATA[<p>Вот, сегодня на работе на пустом месте нарисовались проблемы с картой для HDMI Capture. Нужно мне было поднять Blackmagic Intensity Pro для работы под Ubuntu 10.10 i386. </p>
<p>Пошел на <a href="http://blackmagic-design.com/support/">сайт</a>, скачал оттуда свежий пакет софта. Поставил desktopvideo-8.6.1-i386.deb и MediaExpress-3.0.3-i386.deb. </p>
<pre><code>sudo dpkg -i desktopvideo-8.6.1-i386.deb
sudo dpkg -i MediaExpress-3.0.3-i386.deb</code></pre>
<p>Все встало без проблем, а дальше никуда. Любая попытка запустить софт выливается в &#8220;No Blackmagic devices were found.&#8221;</p>
<p>В конце концов нашел солюшен, которым спешу поделиться с вами:</p>
<pre><code>$ sudo vim /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vmalloc=256M"
$ sudo update-grub
$ sudo reboot</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.copperred.net/2011/10/hardware-troubles/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">242</post-id>	</item>
		<item>
		<title>Хорошее место для рубиньюба</title>
		<link>http://blog.copperred.net/2011/08/nice-place-for-ruby-newbie/</link>
		
		<dc:creator><![CDATA[vestel]]></dc:creator>
		<pubDate>Mon, 29 Aug 2011 07:43:46 +0000</pubDate>
				<category><![CDATA[links / internet]]></category>
		<category><![CDATA[ruby / rails]]></category>
		<category><![CDATA[newbie]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=238</guid>

					<description><![CDATA[За окном дождь и приближается осень. Уже второй раз в этом месяце, я попадаю в такое место, где нахожу очень подробную и интересную статью посвященную Ruby и написанную простым и понятным русским языком. Это личный блог Андрея Малышко, где он публикует свои заметки о Ruby и Rails и других вещах связанных с ними. И хоть &#8230; <a href="http://blog.copperred.net/2011/08/nice-place-for-ruby-newbie/" class="more-link">Continue reading <span class="screen-reader-text">Хорошее место для рубиньюба</span></a>]]></description>
										<content:encoded><![CDATA[<p>За окном дождь и приближается осень. </p>
<p>Уже второй раз в этом месяце, я попадаю в такое место, где нахожу очень подробную и интересную статью посвященную Ruby и написанную простым и понятным русским языком. Это <a href="http://nashbridges.me">личный блог</a> Андрея Малышко, где он публикует свои заметки о <a href="http://nashbridges.me/tag/ruby">Ruby</a> и Rails и других вещах связанных с ними. И хоть на главной пока еще нет контента, я думаю вам стоит подписаться на <a href="http://nashbridges.me/feed.xml">rss фид</a>, чтобы читать о разных полезных и интересных вещах. </p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">238</post-id>	</item>
		<item>
		<title>Иногда они возвращаются</title>
		<link>http://blog.copperred.net/2011/08/sometimes-they-do-return/</link>
		
		<dc:creator><![CDATA[vestel]]></dc:creator>
		<pubDate>Thu, 25 Aug 2011 10:34:20 +0000</pubDate>
				<category><![CDATA[python / django]]></category>
		<category><![CDATA[ruby / rails]]></category>
		<category><![CDATA[webdev / software engineering]]></category>
		<category><![CDATA[acl]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[cusec]]></category>
		<category><![CDATA[keynote]]></category>
		<category><![CDATA[talk]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[zed shaw]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=233</guid>

					<description><![CDATA[Привет, народ! Я знаю, что я тут давно ничего не писал, но чувствую, что мне не хватает этого канала связи с вами. Предлагаю вашему вниманию очень интересное видео о разработке программного обеспечения, менеджменте и прочем. Если кому-то нужны слайды, они доступны по ссылке в видео. Правда для их запуска придется установить Factor и немного пошаманить &#8230; <a href="http://blog.copperred.net/2011/08/sometimes-they-do-return/" class="more-link">Continue reading <span class="screen-reader-text">Иногда они возвращаются</span></a>]]></description>
										<content:encoded><![CDATA[<p>Привет, народ!</p>
<p>Я знаю, что я тут давно ничего не писал, но чувствую, что мне не хватает этого канала связи с вами. Предлагаю вашему вниманию очень интересное видео о разработке программного обеспечения, менеджменте и прочем. </p>
<p><iframe src="http://player.vimeo.com/video/2723800?byline=0&amp;portrait=0&amp;color=ff9933" width="581" height="329" frameborder="0"></iframe></p>
<p>Если кому-то нужны слайды, они доступны по ссылке в видео. Правда для их запуска придется установить Factor и немного пошаманить с исходным скриптом. С другой стороны, мы ведь все это время развивались и прогрессировали, так что легко и непринужденно осилим эти мелкие трудности.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">233</post-id>	</item>
		<item>
		<title>Отправка писем из проектов на Sinatra</title>
		<link>http://blog.copperred.net/2009/09/sending-mail-from-sinatra/</link>
					<comments>http://blog.copperred.net/2009/09/sending-mail-from-sinatra/#comments</comments>
		
		<dc:creator><![CDATA[vestel]]></dc:creator>
		<pubDate>Mon, 21 Sep 2009 14:26:14 +0000</pubDate>
				<category><![CDATA[ruby / rails]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[rubygems]]></category>
		<category><![CDATA[sinatra]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=230</guid>

					<description><![CDATA[Отправка почты из приложения на sinatra реализуется через облегченную оболочку для TMail-a именуемую pony. Для ее установки просто сделайте $ gem install vestel-pony --source=http://gems.github.com Библиотечка сама найдет ваш sendmail, и пошлет, то что вы ей скажете. Простейший способ потестить ее: $ irb irb(main):001:0> require 'rubygems' => true irb(main):002:0> require 'pony' => true irb(main):003:0> Pony.mail(:to => &#8230; <a href="http://blog.copperred.net/2009/09/sending-mail-from-sinatra/" class="more-link">Continue reading <span class="screen-reader-text">Отправка писем из проектов на Sinatra</span></a>]]></description>
										<content:encoded><![CDATA[<p>Отправка почты из приложения на sinatra реализуется через облегченную оболочку для TMail-a именуемую pony. Для ее установки просто сделайте </p>
<pre><code style="bash">
  $ gem install vestel-pony --source=http://gems.github.com
</code></pre>
<p>Библиотечка сама найдет ваш sendmail, и пошлет, то что вы ей скажете.</p>
<p>Простейший способ потестить ее:</p>
<pre><code style="bash">
    $ irb
    irb(main):001:0> require 'rubygems'
    => true
    irb(main):002:0> require 'pony'
    => true
    irb(main):003:0> Pony.mail(:to => 'vestel@blog.copperred.net', :subject => 'Testing pony')
    => 72
</code></pre>
<p>Более подробный мануал, <a href="http://github.com/vestel/pony">на страничке</a> на github-e. Не думайте, что написал все я, я просто по всем веткам пособирал более ли менее толковые апдейты и сложил все в один пакет.</p>
<p>В sinatra pony встраивается через </p>
<pre><code style="ruby">
require 'pony'
</code></pre>
<p>и вызывается в нужном месте.</p>
<pre><code style="ruby">
post '/doemail/' do
Pony.mail :to => "info@nepg.biz",
    :from => "website@nepg.biz",
    :subject => "Contact form at nepg.biz",
    :body => erb(:contact_form)
    "Thank you! Your message been send to administator"
end
</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.copperred.net/2009/09/sending-mail-from-sinatra/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">230</post-id>	</item>
		<item>
		<title>Поздравления и подарки принимаются</title>
		<link>http://blog.copperred.net/2009/07/welcome_your_gifts/</link>
		
		<dc:creator><![CDATA[vestel]]></dc:creator>
		<pubDate>Fri, 31 Jul 2009 09:54:49 +0000</pubDate>
				<category><![CDATA[blog / blogging]]></category>
		<category><![CDATA[3 year]]></category>
		<category><![CDATA[anniversary]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=227</guid>

					<description><![CDATA[Почти не заметил, но вчера блогу ударило 3 года. Что за это время произошло одними словами не описать, только вместе с цифрами: 103 опубликованных поста 517 опубликованных комментария 48 210 пойманных спам-коммента Pagerank 3 106 читателей по feedburner-у примерно 12 370 уникальных посещений по Google Analytics В общем-то, думаю дальше будет лучше, поживем увидим. Принимаются &#8230; <a href="http://blog.copperred.net/2009/07/welcome_your_gifts/" class="more-link">Continue reading <span class="screen-reader-text">Поздравления и подарки принимаются</span></a>]]></description>
										<content:encoded><![CDATA[<p>Почти не заметил, но вчера блогу ударило 3 года.<br />
Что за это время произошло одними словами не описать, только вместе с цифрами:</p>
<ul>
<li>103 опубликованных поста</li>
<li>517 опубликованных комментария</li>
<li>48 210 пойманных спам-коммента</li>
<li>Pagerank 3</li>
<li>106 читателей по feedburner-у</li>
<li>примерно 12 370 уникальных посещений по Google Analytics</li>
</ul>
<p>В общем-то, думаю дальше будет лучше, поживем увидим.</p>
<p>Принимаются подарки, поздравления и пожертвования.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">227</post-id>	</item>
		<item>
		<title>Website за 20 минут на ruby</title>
		<link>http://blog.copperred.net/2009/07/20-minutes-ruby-website/</link>
		
		<dc:creator><![CDATA[vestel]]></dc:creator>
		<pubDate>Mon, 27 Jul 2009 18:11:38 +0000</pubDate>
				<category><![CDATA[flow / life]]></category>
		<category><![CDATA[offline / externals]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=217</guid>

					<description><![CDATA[Этот пост скорее всего не пособие, а некая компиляция-рецепт на русском языке, как сделать простое и легкое web-приложение на руби. Итак, все началось со списка: 24 из 100, который я запостил в своем ЖЖ. Я опубликовал названия 24ех книг по мнению коллектива редакции «НГ-Ex libris», потрясли литературный мир и оказали влияние на всю культуру. Список &#8230; <a href="http://blog.copperred.net/2009/07/20-minutes-ruby-website/" class="more-link">Continue reading <span class="screen-reader-text">Website за 20 минут на ruby</span></a>]]></description>
										<content:encoded><![CDATA[<p>Этот пост скорее всего не пособие, а некая компиляция-рецепт на русском языке, как сделать простое и легкое web-приложение на руби. Итак, все началось со списка: 24 из 100, который я запостил в своем ЖЖ. Я опубликовал названия 24ех книг по мнению коллектива редакции «НГ-Ex libris», потрясли литературный мир и оказали влияние на всю культуру. Список любопытный, и в комментах развернулось обсуждение, что для себя такое составить интересно, но уж копипастить из окна в блокнот совсем лениво.</p>
<p>Тогда-то я и решил сделать первый блин комом. Итак, задача &#8211; есть список, который мы парсером загрузили в базу данных (опускаю этот момент, ибо он выходит за рамки обсуждения). Сделаем из него нечто большое.</p>
<p>Для работы потребуется: ruby, gem, vim<br />
Начнем классически, в окне терминала набираем:</p>
<p><span id="more-217"></span></p>
<pre><code>
$ ruby -v
ruby 1.8.7
$ gem -v
1.3.3</code></pre>
<p>Далее все еще проще:</p>
<pre><code>$ gem install rake sinatra activerecord mongrel sqlite3-ruby</code></pre>
<p>Если нужно использовать другую базу данных &#8211; вперед, все в ваших руках. Я использовал sqlite потому как забыл root пароль к mysql, а будить админа его спрашивать решил не существенным. Пока процесс жужжит, в другом окне терминала можно начать описывать шаблон приложения.</p>
<p>$ vim empty.rb</p>
<p>Содержимое файла простое и предсказуемое:</p>
<pre><code class="ruby">
require 'rubygems'			# Наши гемы
require 'sinatra'			# Наш framework
require 'activerecord'		# Наша связь с базой данных ORM слой
require 'erb'				# Наш шаблонизатор

class Transact < ActiveRecord::Base		# Одна табличка, звать transacts
end

ActiveRecord::Base.establish_connection
	:adapter => "sqlite3", 				# Нет комментариев
	:database => "dbfile"				# имя файла - классическое
	
get "/" do
  "Hello world"
end
</code></pre>
<p>Вот и все, дальше **:wq** &#8211; для тех, кто не знает как выходить из vim-a. Отныне по комманде </p>
<pre><code>
$ ruby empty.rb</code></pre>
<p>У нас на 4567 порту запускается свой вебсервер, который запускает указанное приложение, которое при входе на главную страницу выдает пустой файл с текстом &#8220;Hello world&#8221;</p>
<p>Теперь будем читать на страничку из базы. Поскольку в базе у нас лишнего нет, то чтение пройдет элементарно. </p>
<pre><code class="ruby">
get "/" do
  @transact = Transact.find(:all)
  page = ""
  @transact.each do |one|
      page += "&lt;p&gt;"+one.id.to_s+". "+"&lt;strong&gt; #{one.name.to_s} &lt;/strong&gt;"+"&lt;/p&gt;"
  end
  page
end
</code></pre>
<p>Если все правильно, то мы должны были получить целый список книг.</p>
<p>Но нам же надо не так, нам надо с шаблонами, базой данных, <strike>блекджеком и шлю&#8230;</strike>преферансом и поэтессами.<br />
Поэтому создадим для начала наши шаблоны в папке views. Назовем их говоряще: index.erb и result.erb</p>
<p>Теперь доработаем наш основной код, чтобы он работал с шаблоном:</p>
<pre><code class="ruby">
get "/" do
  @transact = Transact.find(:all)
  erb :index
end
</code></pre>
<p>Общая идея остается та же, поэтому шаблон очень похож на вырванный кусок кода:</p>
<pre><code class="erb">
<% @transact.each do |one| %>
    &lt;li&gt;
      &lt;p&gt;&lt;%= one.id %&gt;&nbsp;&lt;input type="checkbox" name="&lt;%= one.id %&gt;" /&gt;&nbsp;&lt;strong>&lt;%= one.name %&gt;&lt;/strong&gt;&lt;/p&gt;
      &lt;p&gt;&lt;%= one.body %&gt;&lt;/p&gt;
    &lt;/li&gt;
&lt;% end %&gt;</code></pre>
<p>Украшательства добавить по вкусу, завернуть весь шаблон в &lt;form action=&#8221;/result&#8221; method=&#8221;post&#8221;&gt; и добавить снизу<br />
&lt;input type=&#8221;submit&#8221; /&gt; для удобства.</p>
<p>Принимать результаты запроса тоже просто:</p>
<pre><code class="ruby">
post "/result" do
   @params = params             # наши параметры
   @transact = Array.new        # пустой массив для результатов
   @params.each do |one|        # берем параметры по одному
     @transact << Transact.find_by_id(one) # и добавляем в массив результатов
   end
   erb :result
end
</code></pre>
<p>В обработчике результатов тот же шаблон, что и на главной:</p>
<p>Список прочитанных мною книг из сотни романов, которые,<br />
    по мнению коллектива редакции «НГ-Ex libris», потрясли<br />
    литературный мир и оказали влияние на всю культуру.</p>
<p><%= @transact.size %> из 100</p>
<p>    <%= "

<ul>" unless @transact.empty? %><br />
    <% @transact.each do |one| %></p>
<li><%= one.id %>. <%= one.name %></li>
<p>    <% end %><%= "</ul>
<p>" unless @transact.empty? %></p>
<p>Вот такая загогулина получается.</p>
<p>В следущих сериях своего ламоблогбастера, я расскажу, как запустить все это под apache2 + mod_rails, про лучи позора и ненависти в сторону платежной системы Nochex и как отсылать из sinatra письма, если опять не разхондрюсь и не забью на блог на 144 дня.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">217</post-id>	</item>
		<item>
		<title>Как считать jpg из папки на Ruby on Rails</title>
		<link>http://blog.copperred.net/2009/04/ls_jpg_with_ruby/</link>
		
		<dc:creator><![CDATA[vestel]]></dc:creator>
		<pubDate>Fri, 03 Apr 2009 13:56:34 +0000</pubDate>
				<category><![CDATA[ruby / rails]]></category>
		<category><![CDATA[webdev / software engineering]]></category>
		<category><![CDATA[ls]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=205</guid>

					<description><![CDATA[Было дело, надо в одном проекте выводить список файлов лежащих в определенной директории, с возможностью их скачать, как говориться в натуральную величину. Это был мой первый кусочек кода написанный на ruby, а поскольку rails и их идеология для меня тогда еще были не вновинку, то реализовывал я это в самой view. Надеюсь, этот код будет &#8230; <a href="http://blog.copperred.net/2009/04/ls_jpg_with_ruby/" class="more-link">Continue reading <span class="screen-reader-text">Как считать jpg из папки на Ruby on Rails</span></a>]]></description>
										<content:encoded><![CDATA[<p>Было дело, надо в одном проекте выводить список файлов лежащих в определенной директории, с возможностью их скачать, как говориться в натуральную величину. Это был мой первый кусочек кода написанный на ruby, а поскольку rails и их идеология для меня тогда еще были не вновинку, то реализовывал я это в самой view.</p>
<p>Надеюсь, этот код будет полезен тому человеку, который вот уже 3 месяца ходит на мой блог из поиска Google с запросом &#8220;ruby on rails jpg из папки считать&#8221;.</p>
<p>Кусок который исполняется, но не отображается. Все наши файлы лежат в папке public/files. Красиво было бы его вынести в соответсвующий контроллер в нужный метод.</p>
<pre><code class="ruby">
<%
vendors = Hash.new { |hash, key| hash[key] = Array.new }
Dir.open('public/files').each do |file|

    # Заполняем хэш vendors файлами из директории, 
    # перебирая по очереди каждый из них
    next if file[-4..-1] != '.pdf'
    next if file =~ /^..?$/
    file.gsub!('.pdf', '')
    f = file.split(' ')

    # Разбиваем имя файла, получая необходимые логические части  
    # Прозводитель и Модель.
    # Заполняем хэш полученными значениями.

    model = f[-1] # Пробельчик чик-чик
    vendor = f[0..-2].join(' ')
    vendors [vendor] << model
end
%>
</code></pre>
<p>Кусок, который отвечает за вывод на экран. Тут уж и форматирование можно подставить, и оформить как следует.</p>
<pre><code class="ruby">
<% for v in vendors.keys.sort do %>
&lt;!-- Впечатываем производителя--&gt;
&lt;h2&gt;&lt;%= v &gt;&lt;/h2&gt;
    &lt;ul&gt;
    &lt;% for m in vendors[v].sort do %&gt;
    &lt;!-- Заполняем список названиями моделей--&gt;
    &lt;li>
&lt;a href="/files/&lt;%= v + ' ' + m + ' .jpg' %&gt;" target="_blank"&gt;&lt;%= m %&gt;&lt;/a&gt;
&lt;/li&gt;
    &lt;% end %&gt;
    &lt;/ul&gt;
&lt;% end %&gt; </code></pre>
<p>В ходе написания этого поста, обнаружил, что отвалился плагин Markdown Extra, который у меня раньше изолировал трансляцию всего чего и почему-то в рамках &lt;code&gt; пришлось переменять всякие < на &amp;lt; вручную. Коллеги-программеры, если у кого есть удобное решение для wordpress с оформлением кусков кода, поделитесь в комментариях.
</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">205</post-id>	</item>
		<item>
		<title>Pragmatic Programmers становятся мобильными</title>
		<link>http://blog.copperred.net/2009/03/pragprog_goes_mobile/</link>
		
		<dc:creator><![CDATA[vestel]]></dc:creator>
		<pubDate>Thu, 26 Mar 2009 14:17:51 +0000</pubDate>
				<category><![CDATA[book / reading]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[j2me]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[phone]]></category>
		<category><![CDATA[pragprog]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=203</guid>

					<description><![CDATA[Если вы увлекаетесь Ruby/Rails так же как и я, а может быть и еще сильнее, то вы однозначно в курсе о таком издательстве как Pragmatic Programmers, кто издает такие полезные и нужные книжки как Кирка, AWDwRoR и многие другие. Меня, как регулярного приобретателя там, книг в электронном формате, несказанно порадовала последняя новость: теперь книги приобретенные &#8230; <a href="http://blog.copperred.net/2009/03/pragprog_goes_mobile/" class="more-link">Continue reading <span class="screen-reader-text">Pragmatic Programmers становятся мобильными</span></a>]]></description>
										<content:encoded><![CDATA[<p>Если вы увлекаетесь Ruby/Rails так же как и я, а может быть и еще сильнее, то вы однозначно в курсе о таком издательстве как Pragmatic Programmers, кто издает такие полезные и нужные книжки как Кирка, AWDwRoR и многие другие.</p>
<p>Меня, как регулярного приобретателя там, книг в электронном формате, несказанно порадовала последняя новость: теперь книги приобретенные в цифровом виде, доступны не только в виде красивых цветных PDF файлов, но и в форматах .epub (для счасливых обладателей яблотелефонов/яподов) и .mobi (для тех, кто разорился на Sony Reader). </p>
<p>Хотя, я в обе группы не попадаю, у меня есть телефон Sony Ericsson W880i, на котором j2me приложение для чтения .mobi файлов взлетело и забибикало. Кто счасливчик обладетель той же модели: милости прошу <a href="http://www.mobipocket.com/dev/beta/j2me.asp">на сайт производителя</a>. Пока что приложение в статусе альфы и оно бесплатное.</p>
<p>Многих интересных часов прочтения вам!</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">203</post-id>	</item>
		<item>
		<title>В интернете все общее!</title>
		<link>http://blog.copperred.net/2009/03/licensed_now/</link>
					<comments>http://blog.copperred.net/2009/03/licensed_now/#comments</comments>
		
		<dc:creator><![CDATA[vestel]]></dc:creator>
		<pubDate>Fri, 20 Mar 2009 10:49:20 +0000</pubDate>
				<category><![CDATA[blog / blogging]]></category>
		<category><![CDATA[copyright]]></category>
		<category><![CDATA[creative commons]]></category>
		<category><![CDATA[license]]></category>
		<category><![CDATA[интернет]]></category>
		<category><![CDATA[уроды]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=201</guid>

					<description><![CDATA[Сегодня довелось пообщаться с одним донором мозга, который мало того что стырил авторскую статью, так еще и удивил меня тем, что он лучше меня знаком с Анной Зданчук, ставит под вопрос первенство публикации, а еще и в довесок ко всему, я узнал, что &#8220;в интернете все общее. На то он и интернет&#8221;. Удивительные вещи, творяться, &#8230; <a href="http://blog.copperred.net/2009/03/licensed_now/" class="more-link">Continue reading <span class="screen-reader-text">В интернете все общее!</span></a>]]></description>
										<content:encoded><![CDATA[<p>Сегодня довелось пообщаться с одним донором мозга, который мало того что стырил авторскую статью, так еще и удивил меня тем, что он лучше меня знаком с Анной Зданчук, ставит под вопрос первенство публикации, а еще и в довесок ко всему, я узнал, что &#8220;в интернете все общее. На то он и интернет&#8221;.<br />
Удивительные вещи, творяться, что называется. В общем, решил я повесить на свой блог такой красивый лейбл (ищите в футере), который как бы говорит: &#8220;Хочешь скопировать, скажи где взял. Хочешь заработать на этом, пиши обсудим. Хочешь изувечить, сцуко нетрожь&#8221;. Вот.<br />
А с товарищем разговаривать я больше не буду. Пойду поем, и если злость не схлынет, напишу в адсенс письмо, что он хамло. Пусть они ему объяснят, что деньги заработанные в Интернете тоже стали общими. Ведь на то, он и интернет.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.copperred.net/2009/03/licensed_now/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">201</post-id>	</item>
		<item>
		<title>Обновил мессенджер</title>
		<link>http://blog.copperred.net/2009/03/messenger_update/</link>
					<comments>http://blog.copperred.net/2009/03/messenger_update/#comments</comments>
		
		<dc:creator><![CDATA[vestel]]></dc:creator>
		<pubDate>Tue, 17 Mar 2009 09:14:12 +0000</pubDate>
				<category><![CDATA[flow / life]]></category>
		<category><![CDATA[contacts]]></category>
		<category><![CDATA[jabber]]></category>
		<guid isPermaLink="false">http://blog.copperred.net/?p=199</guid>

					<description><![CDATA[В связи с параноидальной настройкой безопастности корпоративной рабочей сети поднял свой Jabber сервер на экзотическом, но доступном порту. Чуть-чуть пришлось пошаманить над запуском openfire под CentOS, однако все теперь работает. C учетом данной информации, прошу всех желающих общаться со мной и впредь добавить в свой контактный лист vestel[at]im.save.lv]]></description>
										<content:encoded><![CDATA[<p>В связи с параноидальной настройкой безопастности корпоративной рабочей сети поднял свой Jabber сервер на экзотическом, но доступном порту. Чуть-чуть пришлось пошаманить над запуском openfire под CentOS, однако все теперь работает.<br />
C учетом данной информации, прошу всех желающих общаться со мной и впредь добавить в свой контактный лист vestel<abbr title="@">[at]</abbr>im.save.lv</p>
]]></content:encoded>
					
					<wfw:commentRss>http://blog.copperred.net/2009/03/messenger_update/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">199</post-id>	</item>
	</channel>
</rss>
