<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Блог Виталия Янчука</title>
    <description />
    <link>http://www.vitalik.com.ua/posts</link>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/vitalik" /><feedburner:info uri="vitalik" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Акса страхование</title>
      <description>Чудесным образом, в день когда я решил позвонить и поинтересоватся когда-же будет выплата по моему страховому случаю, эта выплата и должна была произойти, "сегодня позже днем будет проведена", сообщила девушка по телефону.  
Интересно совпалобы также через неделю или две.&lt;img src="http://feeds.feedburner.com/~r/vitalik/~4/8TvSBwcUdSQ" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 17 Jan 2012 12:22:43 +0200</pubDate>
      <link>http://feedproxy.google.com/~r/vitalik/~3/8TvSBwcUdSQ/50-axxa-strahovka</link>
      <guid isPermaLink="false">http://www.vitalik.com.ua/posts/50-axxa-strahovka</guid>
    <feedburner:origLink>http://www.vitalik.com.ua/posts/50-axxa-strahovka</feedburner:origLink></item>
    <item>
      <title>Новый дефолтный рингтон Нокии</title>
      <description>Я себе представляю покупателей Нокии, в основном как дяденек и тетенек за 40 для которых слово Нокия надежно укрепилось как что-то солидное и классическое, как они переживут вот это:

[http://thenextweb.com/mobile/2011/10/10/youre-going-to-love-or-hate-nokias-new-dubstep-ringtone/](http://thenextweb.com/mobile/2011/10/10/youre-going-to-love-or-hate-nokias-new-dubstep-ringtone/)&lt;img src="http://feeds.feedburner.com/~r/vitalik/~4/k1tBEu2torM" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 12 Oct 2011 11:46:20 +0300</pubDate>
      <link>http://feedproxy.google.com/~r/vitalik/~3/k1tBEu2torM/49-nokia-new-tune</link>
      <guid isPermaLink="false">http://www.vitalik.com.ua/posts/49-nokia-new-tune</guid>
    <feedburner:origLink>http://www.vitalik.com.ua/posts/49-nokia-new-tune</feedburner:origLink></item>
    <item>
      <title>Комитик</title>
      <description>Сделал комит изменений за последние две недели работы над одним хобби-проэктом, вышла кругленькая цифра, это реальный код
 213 files changed, 4155 insertions(+), 577 deletions(-)&lt;img src="http://feeds.feedburner.com/~r/vitalik/~4/99WoR1rWEYo" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 06 Sep 2011 00:37:51 +0300</pubDate>
      <link>http://feedproxy.google.com/~r/vitalik/~3/99WoR1rWEYo/48-commitus</link>
      <guid isPermaLink="false">http://www.vitalik.com.ua/posts/48-commitus</guid>
    <feedburner:origLink>http://www.vitalik.com.ua/posts/48-commitus</feedburner:origLink></item>
    <item>
      <title>Найти дубликаты через ActiveRecord</title>
      <description>Ну примерно так можно
&lt;code lang="ruby"&gt;
duplicates = User.find( :all,
  :select     =&gt; "email, COUNT(email) AS duplicate_count",
  :conditions =&gt; "email IS NOT NULL AND email != ''",
  :group      =&gt; "email HAVING duplicate_count &gt; 1"
)
&lt;/code&gt;&lt;img src="http://feeds.feedburner.com/~r/vitalik/~4/bIXLtSgxKWM" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 29 Jul 2011 15:32:47 +0300</pubDate>
      <link>http://feedproxy.google.com/~r/vitalik/~3/bIXLtSgxKWM/47-finding-duplicates</link>
      <guid isPermaLink="false">http://www.vitalik.com.ua/posts/47-finding-duplicates</guid>
    <feedburner:origLink>http://www.vitalik.com.ua/posts/47-finding-duplicates</feedburner:origLink></item>
    <item>
      <title>Дом который построил ...</title>
      <description>Бывает что семья расширяется, а дом нет, места не хватает и дом достраивается, а потом еще достраивается и еще

&lt;img src="http://www.vitalik.com.ua/files/images/4_normal.png" alt="Что бывает когда дом строит не одно поколение"/&gt;&lt;img src="http://feeds.feedburner.com/~r/vitalik/~4/711HqCeMW9w" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 25 May 2011 23:59:42 +0300</pubDate>
      <link>http://feedproxy.google.com/~r/vitalik/~3/711HqCeMW9w/46-dom-pokoleniy</link>
      <guid isPermaLink="false">http://www.vitalik.com.ua/posts/46-dom-pokoleniy</guid>
    <feedburner:origLink>http://www.vitalik.com.ua/posts/46-dom-pokoleniy</feedburner:origLink></item>
    <item>
      <title>Кеш счетчиков в Rails (counter_cache)</title>
      <description>Со временем количество записей в вашем проэкте вырастет настолько что считать счетчики, например комментариев или кол-ва тегов к записи станет чрезмерно долгим процесом и вам захочется закешировать этот показатель.

К счастью во фреймфорке уже есть такая функциональность, и она называется counter_cache

Для использования вам нужно в вашу ассоциацию добавить такое ключ/значение
&lt;code&gt;:counter_cache =&gt; true&lt;/code&gt;

Например для модели Comment, который принадлежит модели Post это будет выглядеть так:
&lt;code&gt;
class Comment &lt; ActiveRecord::Base
  belongs_to :post, :counter_cache =&gt; true
end
&lt;/code&gt;
&lt;cut&gt;&lt;/cut&gt;
Создать колонку для записи этого числа в таблицу, следуя идеи convension over configuration, стандартное значение этой колонки будет **comments_count**

Создаем колонку через миграцию:
&lt;code&gt;
class AddCommentsCountToPosts &lt; ActiveRecord::Migration
  def self.up
    add_column :posts, :comments_count, :integer
  end

  def self.down
    remove_column :posts, :comments_count
  end
end
&lt;/code&gt;
Кстати чтобы задать конкретно имя колонки, вместо дефолтного, достаточно написать её имя вместо true в ключе :counter_cache:
&lt;code&gt;
...
  :counter_cache =&gt; :comments_number
&lt;/code&gt;

Таким образом при создании коментария к посту, фреймфорк будет выполнять запрос:
&lt;code&gt;UPDATE `posts` SET `comments_count` = COALESCE(`comments_count`, 0) + 1 WHERE `posts`.`id` = 41
&lt;/code&gt;

Есть небольшой нюанс с использованием counter cache в ассоциации **has_many throught**.

Ключ **counter_cache** доступен только для ассоциации **belongs_to**, поэтому кеш нужно включать в связывающей таблице:

&lt;code&gt;
# models/post.rb
class Post &lt; ActiveRecord::Base
  has_many :tags, :through =&gt; :taggings
end

# models/tag.rb
class Tag &lt; ActiveRecord::Base
   has_many :posts, :through =&gt; :taggings
end

# models/tagging.rb
class Tagging &lt; ActiveRecord::Base
  belongs_to :post, :counter_cache =&gt; :tags_count
  belongs_to :tag
end
&lt;/code&gt;&lt;img src="http://feeds.feedburner.com/~r/vitalik/~4/KPM4sXpmAFY" height="1" width="1"/&gt;</description>
      <pubDate>Sun, 17 Apr 2011 14:58:07 +0300</pubDate>
      <link>http://feedproxy.google.com/~r/vitalik/~3/KPM4sXpmAFY/45-counter_cache</link>
      <guid isPermaLink="false">http://www.vitalik.com.ua/posts/45-counter_cache</guid>
    <feedburner:origLink>http://www.vitalik.com.ua/posts/45-counter_cache</feedburner:origLink></item>
    <item>
      <title>Быстрый поиск по проекту в TextMate</title>
      <description>Все кто пользуется текстмейтом наверняка видели стандартный поиск по файлам.

Это тормознутеший инструмент, это просто позор.
Как по мне, это самый большой недостаток не настроенного текстмейта.

Этот поиск не идет ни в какое вравнение с молниеносным открытием файла по имени, которое более известно как command+T.

Но, друзья мои есть решение, как же я раньше мимо него проходил, но поставил неделю назад и не могу нарадоватся, и вам тоже желаю.

Это конечно плагин, называется &lt;a href="https://github.com/protocool/AckMate/"&gt;AckMate&lt;/a&gt;, в его основе лежит тулзень Ack (http://betterthangrep.com/) которая к слову написана на перл и чудесно понимает регулярные выражения, это хорошо но это конечно не главное.

А главное это то что поиск становится рельно быстрым, и все окно редактора не застывает на время поиска и не нагружает процесор под 100%, и с виду поприятней, и фильтровать по папкам можно, и по типам файлов, вообщем просто нормальный поиск по проэкту.

&lt;img src="http://www.vitalik.com.ua/files/images/3_normal.png" /&gt;

Приятная особенность это поле &lt;b&gt;Options&lt;/b&gt;, там можно задавать типы файлов для поиска, либо решулярные выражения.

Пару примеров для опций:
-Gmodule — поиск только по файлам имееющим слово module в названии
ruby — поиск только по руби файлам, кстати есть автокомплишн на стандартные типы
noyaml — не искать в yml файлах

Ах да установка, она простая, как и все на маке, вам нужно скачать файл плагина и сделать даблклик. 

Больше информации по плагину в вики:  
&lt;a href="https://github.com/protocool/AckMate/wiki/Usage"&gt;https://github.com/protocool/AckMate/wiki/Usage&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/vitalik/~4/fQdgUT9APz8" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 14 Apr 2011 00:11:21 +0300</pubDate>
      <link>http://feedproxy.google.com/~r/vitalik/~3/fQdgUT9APz8/44-ackmate</link>
      <guid isPermaLink="false">http://www.vitalik.com.ua/posts/44-ackmate</guid>
    <feedburner:origLink>http://www.vitalik.com.ua/posts/44-ackmate</feedburner:origLink></item>
    <item>
      <title>Всегда подгружать нужную версию ruby при заходе в папку</title>
      <description>Небольшой трик как быть увереным что включена нужная версия руби. Актуально для тех кто работает одновременно и с Rails 2 и с Rails3 и использует для переключения RVM.

Есть в rvm особенность, если в каталоге лежит файлик .rvmrc то при первом входе в каталог система спросить, вполнить ли файл, он выполнится и потом уже не будет спрашивать, таким образом когда делаем cd в проект включается правильная версия.

Теперь во все проэкты где я использую 3 rails кладу файл такого содержания:
&lt;code&gt;
$ cat .rvmrc 
rvm use 1.9.2
&lt;/code&gt;&lt;img src="http://feeds.feedburner.com/~r/vitalik/~4/bZdZWq-kTGc" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 11 Apr 2011 21:09:08 +0300</pubDate>
      <link>http://feedproxy.google.com/~r/vitalik/~3/bZdZWq-kTGc/43-rvmrc</link>
      <guid isPermaLink="false">http://www.vitalik.com.ua/posts/43-rvmrc</guid>
    <feedburner:origLink>http://www.vitalik.com.ua/posts/43-rvmrc</feedburner:origLink></item>
    <item>
      <title>Mirohost</title>
      <description>&lt;img src="/files/images/2_normal.png" align="left" /&gt; Мирохост перешел на пост оплату. Точнее наше государство сделало невероятное и приняла полезный закон, обязующий провайдеров брать по факту оказания услуги. Хотя для меня ничего не меняется, я за лимиты не выхожу, как была оплата раз в месяц, так она и осталась.&lt;img src="http://feeds.feedburner.com/~r/vitalik/~4/MOuUTh_Udos" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 07 Apr 2011 14:25:10 +0300</pubDate>
      <link>http://feedproxy.google.com/~r/vitalik/~3/MOuUTh_Udos/42-mirohost</link>
      <guid isPermaLink="false">http://www.vitalik.com.ua/posts/42-mirohost</guid>
    <feedburner:origLink>http://www.vitalik.com.ua/posts/42-mirohost</feedburner:origLink></item>
    <item>
      <title>Печать книг на заказ в Украине</title>
      <description>Оказывается вполне удобно можно распечатать книгу из PDF-ки в недавно открывшемся сервисе &lt;a href="http://www.prostobook.com" /&gt;Prostobook.com&lt;/a&gt;.

Заказал распечатать у них книгу по гиту, а именно O`Reilly "Version control with Git".
PDF`ка у меня была официальная, я прочитал где-то треть из неё, однако с монитора читать не очень удобно (возможно если бы я читал с iPad`а, это было бы удобно, но я пока его не купил и не знаю). 

Всего за 75 грн получил очень приличного качества распечатку. (доставка еще + 24 грн, но можно забрать в офисе).

Сегодня доставили:
&lt;img src="/i/blog/prostobook/1.jpg" /&gt;
&lt;br/&gt;
&lt;img src="/i/blog/prostobook/2.jpg" /&gt;
&lt;br/&gt;
&lt;img src="/i/blog/prostobook/3.jpg" /&gt;
&lt;br/&gt;
&lt;img src="/i/blog/prostobook/4.jpg" /&gt;
&lt;br/&gt;
&lt;img src="/i/blog/prostobook/5.jpg" /&gt;

64 книги так рас печатаные = 1 iPad базовой версии, конечно плюc что купил книгу и сразу читаешь, а тут печатают дней пять где-то.

Кстати с законодательной стороны, здесь, по заявлению самого ProstoBook все чисто, если для личной распечатки то это разрешается(&lt;a href="http://prostobook.com/faq/"&gt;http://prostobook.com/faq/&lt;/a&gt;):
&lt;blockquote&gt;
&lt;i&gt;&lt;b&gt;Можно ли публиковать произведения других авторов через prostobook.com для семейной библиотеки без их разрешения?&lt;/b&gt;

    Да, можно, но только как приватные проекты - это разрешено статьей 25 Закона Украины “Об авторском праве и смежных правах”. Однако вы не сможете продавать эти книги (ни в prostobook.com, ни за его пределами), передавать их в библиотеки, использовать в качестве подарков в ходе рекламных акций и т.д. Единственное разрешенное законом применение изданий, выпущенных как приватные проекты - прочтение вами и членами вашей семьи.
&lt;/i&gt;&lt;/blockquote&gt;

Вот эта книга есть в моем профиле, но её никто кроме меня распечатать не может.

P.S.
Думаю очевидно, что чтобы книга получилась хорошая, нужна именно PDF от издательства, а не набор сканов фотографий запакованный под видом pdf. Обычно все крупные западные издательства как  O`Reilly, Packt продают также и PDF, наши же издательства, к сожалению, только в виде редкого исключения.&lt;img src="http://feeds.feedburner.com/~r/vitalik/~4/YCuJEnQH6VQ" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 28 Feb 2011 23:59:43 +0200</pubDate>
      <link>http://feedproxy.google.com/~r/vitalik/~3/YCuJEnQH6VQ/41-prostobook-prints-html</link>
      <guid isPermaLink="false">http://www.vitalik.com.ua/posts/41-prostobook-prints-html</guid>
    <feedburner:origLink>http://www.vitalik.com.ua/posts/41-prostobook-prints-html</feedburner:origLink></item>
  </channel>
</rss>

