﻿<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<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/"
	>

<channel>
	<title>Блог Быдлокодера</title>
	<link>http://sumskyi.com</link>
	<description>mine ццц kampf</description>
	<pubDate>Wed, 17 Mar 2010 21:28:43 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<item>
		<title>ActiveRecord named_scope коллизии</title>
		<link>http://sumskyi.com/2010/03/17/named_scope_aliased_and_extra_joins/</link>
		<comments>http://sumskyi.com/2010/03/17/named_scope_aliased_and_extra_joins/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 21:15:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Базы данных]]></category>

		<category><![CDATA[Программирование]]></category>

		<category><![CDATA[activerecord]]></category>

		<category><![CDATA[named_scope]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://sumskyi.com/2010/03/17/named_scope_aliased_and_extra_joins/</guid>
		<description><![CDATA[
 Что будет в цепочке,
BDSM.active_advisor.for_customer(123456)
если

named_scope :active_advisor,
  :joins =&#62; 'INNER JOIN listings l ON (l.id = favorite_listings.listing_id)
             INNER JOIN users u ON (u.id = l.user_id)',
  :conditions =&#62; ['u.status = ?', User::Status::ACTIVE]

named_scope :for_customer, lambda{&#124;customer_id&#124; {
  :joins =&#62; 'INNER JOIN listings l ON (l.id = favorite_listings.listing_id)
  [...]]]></description>
			<content:encoded><![CDATA[<link href="/wp-content/plugins/highlight/sample.css" rel="stylesheet" type="text/css" />
<link href="/wp-content/plugins/highlight/highlight.css" rel="stylesheet" type="text/css" /> Что будет в цепочке,
<pre><code class="ruby">BDSM.active_advisor.for_customer(123456)</code></pre>
<p>если</p>
<pre><code class="ruby">
named_scope :active_advisor,
  :joins =&gt; 'INNER JOIN listings l ON (l.id = favorite_listings.listing_id)
             INNER JOIN users u ON (u.id = l.user_id)',
  :conditions =&gt; ['u.status = ?', User::Status::ACTIVE]

named_scope :for_customer, lambda{|customer_id| {
  :joins =&gt; 'INNER JOIN listings l ON (l.id = favorite_listings.listing_id)
             LEFT JOIN customers c ON (c.user_id = l.user_id AND c.customer_id = favorite_listings.user_id)',
  :conditions =&gt; "l.user_id = #{customer_id}"}}
</code></pre>
<p>а получится кака с alias -ами и extra join</p>
<pre><code class="sql">Mysql::Error: Not unique table/alias: 'l':
SELECT `favorite_listings`.* FROM `favorite_listings`
INNER JOIN listings l ON (l.id = favorite_listings.listing_id)
LEFT JOIN customers c ON (c.user_id = l.user_id AND c.customer_id = favorite_listings.user_id)
INNER JOIN listings l ON (l.id = favorite_listings.listing_id)
INNER JOIN users u ON (u.id = l.user_id)
WHERE ((l.user_id = 123456) AND (u.status = 1))</code></pre>
<p>решается начиная с rails 2.2 (<a href="http://pivotallabs.com/users/stevend/blog/articles/521-pivots-patch-rails-named-scope-with-the-joins-can-cause-table-aliasing-issues">патч тут</a>)</p>
<p>:joins с 2+ джойнами заменяем на массив джойнов, и <a href="http://apidock.com/rails/ActiveRecord/Base/merge_joins/class">activerecord здесь делает uniq</a></p>
<pre><code class="ruby">
named_scope :active_advisor,
  :joins =&gt; ['INNER JOIN listings l ON (l.id = favorite_listings.listing_id)',
             'INNER JOIN users u ON (u.id = l.user_id)'],
  :conditions =&gt; ['u.status = ?', User::Status::ACTIVE]

named_scope :for_customer, lambda{|customer_id| {
  :joins =&gt; ['INNER JOIN listings l ON (l.id = favorite_listings.listing_id)',
             'LEFT JOIN customers c ON (c.user_id = l.user_id AND c.customer_id = favorite_listings.user_id)'],
  :conditions =&gt; "l.user_id = #{customer_id}"}}
</code></pre>
<p>на выходе вменяемый SQL без лишних джойнов</p>
<pre><code class="sql">SELECT `favorite_listings`.* FROM `favorite_listings`
INNER JOIN listings l ON (l.id = favorite_listings.listing_id)
LEFT JOIN customers c ON (c.user_id = l.user_id AND c.customer_id = favorite_listings.user_id)
INNER JOIN users u ON (u.id = l.user_id) WHERE ((l.user_id = 123456) AND (u.status = 1))</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://sumskyi.com/2010/03/17/named_scope_aliased_and_extra_joins/feed/</wfw:commentRss>
		</item>
		<item>
		<title>читаю Metaprogramming Ruby</title>
		<link>http://sumskyi.com/2010/02/23/metaprogramming-ruby/</link>
		<comments>http://sumskyi.com/2010/02/23/metaprogramming-ruby/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 11:20:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Программирование]]></category>

		<category><![CDATA[Читать]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[книги]]></category>

		<guid isPermaLink="false">http://sumskyi.com/2010/02/23/%d1%87%d0%b8%d1%82%d0%b0%d1%8e-metaprogramming-ruby/</guid>
		<description><![CDATA[
разжовывают как для детей. первый раз увидел такое понятие, как Scope Gates.
must read, короче
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pragprog.com/titles/ppmetr/metaprogramming-ruby"><img src="http://assets0.pragprog.com/images/covers/190x228/ppmetr.jpg?1262056877" height="228" width="190" /></a></p>
<p>разжовывают как для детей. первый раз увидел такое понятие, как Scope Gates.</p>
<p>must read, короче</p>
]]></content:encoded>
			<wfw:commentRss>http://sumskyi.com/2010/02/23/metaprogramming-ruby/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Well-Grounded Rubyist</title>
		<link>http://sumskyi.com/2009/10/26/the-well-grounded-rubyist/</link>
		<comments>http://sumskyi.com/2009/10/26/the-well-grounded-rubyist/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 07:19:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Программирование]]></category>

		<category><![CDATA[Читать]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[книги]]></category>

		<guid isPermaLink="false">http://sumskyi.com/2009/10/26/the-well-grounded-rubyist/</guid>
		<description><![CDATA[на работе купили макулатуру, вот шо я щас читаю

жаль, что мне сразу оно не попалось, хотя на mininova появилась давно.
]]></description>
			<content:encoded><![CDATA[<p>на работе купили макулатуру, вот шо я щас читаю</p>
<p><a href="http://www.manning.com/black2/"><img src="http://www.manning.com/black2/black2_cover150.jpg" height="187" width="150" /></a></p>
<p>жаль, что мне сразу оно не попалось, хотя на mininova появилась давно.</p>
]]></content:encoded>
			<wfw:commentRss>http://sumskyi.com/2009/10/26/the-well-grounded-rubyist/feed/</wfw:commentRss>
		</item>
		<item>
		<title>сайт акварелью</title>
		<link>http://sumskyi.com/2009/07/17/lodochki/</link>
		<comments>http://sumskyi.com/2009/07/17/lodochki/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 08:54:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Дизайн]]></category>

		<guid isPermaLink="false">http://sumskyi.com/2009/07/17/lodochki/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://rivera.kiev.ua/index.html" title="аква сайт"><img src="http://sumskyi.com/wp-content/uploads/2009/07/r.thumbnail.png" alt="аква сайт" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://sumskyi.com/2009/07/17/lodochki/feed/</wfw:commentRss>
		</item>
		<item>
		<title>дизайн орешков</title>
		<link>http://sumskyi.com/2009/05/27/oreshki/</link>
		<comments>http://sumskyi.com/2009/05/27/oreshki/#comments</comments>
		<pubDate>Wed, 27 May 2009 08:15:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Дизайн]]></category>

		<guid isPermaLink="false">http://sumskyi.com/2009/05/27/oreshki/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://sumskyi.com/wp-content/uploads/2009/05/preview.jpg" title="орешки"><img src="http://sumskyi.com/wp-content/uploads/2009/05/preview.thumbnail.jpg" alt="орешки" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://sumskyi.com/2009/05/27/oreshki/feed/</wfw:commentRss>
		</item>
		<item>
		<title>мэбиль</title>
		<link>http://sumskyi.com/2009/02/02/mebli/</link>
		<comments>http://sumskyi.com/2009/02/02/mebli/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 14:13:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Дизайн]]></category>

		<guid isPermaLink="false">http://sumskyi.com/2009/02/02/mebli/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://sumskyi.com/wp-content/uploads/2009/02/italica.jpg" title="italica.jpg"><img src="http://sumskyi.com/wp-content/uploads/2009/02/italica.thumbnail.jpg" alt="italica.jpg" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://sumskyi.com/2009/02/02/mebli/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Я не отвечаю ни за что!</title>
		<link>http://sumskyi.com/2008/12/15/i_am_responsible/</link>
		<comments>http://sumskyi.com/2008/12/15/i_am_responsible/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 14:28:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Работа]]></category>

		<guid isPermaLink="false">http://sumskyi.com/2008/12/15/i_am_responsible/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><img src="http://sumskyi.com/wp-content/uploads/2008/12/imresponsible.png" alt="Я не отвечаю ни за что!" /></p>
]]></content:encoded>
			<wfw:commentRss>http://sumskyi.com/2008/12/15/i_am_responsible/feed/</wfw:commentRss>
		</item>
		<item>
		<title>holidaytour</title>
		<link>http://sumskyi.com/2008/06/23/holidaytour/</link>
		<comments>http://sumskyi.com/2008/06/23/holidaytour/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 11:46:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Дизайн]]></category>

		<guid isPermaLink="false">http://sumskyi.com/2008/06/23/holidaytour/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a href="http://sumskyi.com/wp-content/uploads/2008/06/holidaytour.jpg" title="дизайн холидейтур"><img src="http://sumskyi.com/wp-content/uploads/2008/06/holidaytour.thumbnail.jpg" alt="дизайн холидейтур" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://sumskyi.com/2008/06/23/holidaytour/feed/</wfw:commentRss>
		</item>
		<item>
		<title>чары блещут</title>
		<link>http://sumskyi.com/2008/06/09/hr/</link>
		<comments>http://sumskyi.com/2008/06/09/hr/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 13:16:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Компании]]></category>

		<category><![CDATA[Работа]]></category>

		<guid isPermaLink="false">http://sumskyi.com/2008/06/09/hr/</guid>
		<description><![CDATA[пришло мыло веселое.
&#8220;Найдя ваше резюме в Интернете, я решил предложить
&#8230;
&#8230;
Ввиду того, что объемы работ на этой должности не большие, начальство достаточно либерально относиться к дополнительной занятости работников.
&#8221;
кстати, в предложении 2 ошыпке.
]]></description>
			<content:encoded><![CDATA[<p>пришло мыло веселое.</p>
<p>&#8220;Найдя ваше резюме в Интернете, я решил предложить<br />
&#8230;<br />
&#8230;<br />
<strong>Ввиду того, что объемы работ на этой должности не большие, начальство достаточно либерально относиться к дополнительной занятости работников.</strong><br />
&#8221;</p>
<p>кстати, в предложении 2 ошыпке.</p>
]]></content:encoded>
			<wfw:commentRss>http://sumskyi.com/2008/06/09/hr/feed/</wfw:commentRss>
		</item>
		<item>
		<title>sitemap</title>
		<link>http://sumskyi.com/2008/06/05/sitemap/</link>
		<comments>http://sumskyi.com/2008/06/05/sitemap/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 10:36:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Программирование]]></category>

		<category><![CDATA[activerecord]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[mysql]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ror]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[sitemap]]></category>

		<category><![CDATA[yandex]]></category>

		<guid isPermaLink="false">http://sumskyi.com/2008/06/05/sitemap/</guid>
		<description><![CDATA[Буквально пару дней, как яндекс стал поддерживать sitemap
появился раздел &#8220;Файлы Sitemap&#8221; в панели вебмастера, где можно добавить путь к этому файлу.
также путь можно указать в robots.txt



User-agent: Yandex
Sitemap: http://sumskyi.com/sitemap.xml
выкладываю маленькую штуку для генерирования этих самых сайтмапов из базы данных MySQL
required: ruby, activerecord (часть ruby on rails, ror)
Это походу и маленькое руководство по использованию activerecord без рельсов
размазано [...]]]></description>
			<content:encoded><![CDATA[<p>Буквально пару дней, как яндекс стал поддерживать <a href="http://www.sitemaps.org/ru/" title="sitemaps.org" target="_blank">sitemap</a></p>
<p>появился раздел &#8220;Файлы Sitemap&#8221; в панели вебмастера, где можно добавить путь к этому файлу.</p>
<p>также путь можно указать в robots.txt</p>
<link href="/wp-content/plugins/highlight/sample.css" rel="stylesheet" type="text/css" />
<link href="/wp-content/plugins/highlight/highlight.css" rel="stylesheet" type="text/css" />
<pre><code>
User-agent: Yandex
Sitemap: http://sumskyi.com/sitemap.xml</code></pre>
<p>выкладываю маленькую штуку для генерирования этих самых сайтмапов из базы данных MySQL<br />
required: ruby, activerecord (часть ruby on rails, ror)</p>
<p>Это походу и маленькое руководство по использованию activerecord без рельсов</p>
<p>размазано по 3м файлам<br />
- данных для коннекта<br />
- код<br />
- шаблон</p>
<p>шаблон содержит только обязательные параметры формата sitemap.</p>
<p>bin/db.yml:</p>
<pre><code>
adapter: mysql
database: sumskyi
username: root
password: ~
host: localhost
encoding: utf8
</code></pre>
<p>bin/sitemap.rb:</p>
<pre><code class="ruby">
#!/usr/bin/env ruby

require 'rubygems'
require 'activerecord'
require 'erb'

cur_dir = File.dirname(__FILE__)

template = File.read("#{cur_dir}/sitemap.erb")

dbconfig = YAML::load(File.open("#{cur_dir}/db.yml"))

ActiveRecord::Base.establish_connection(dbconfig)

class Article &lt; ActiveRecord::Base
end

@urls = Article.find(:all, :select =&gt; 'id, link, DATE_FORMAT(created_at, "%Y-%m-%d") as cr', :order =&gt; "id ASC")

sitemap = ERB.new(template).result(binding)

file =  File.new('../sitemap.xml', 'w+')
file.puts sitemap
file.close
</code></pre>
<p>bin/sitemap.erb:</p>
<pre><code>
&lt;urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"&gt;&lt;% for url in @urls %&gt;
  &lt;url&gt;
    &lt;loc&gt;http://sumskyi.com/articles/&lt;%= url.link %&gt;&lt;/loc&gt;
    &lt;lastmod&gt;&lt;%= url.cr %&gt;&lt;/lastmod&gt;
  &lt;/url&gt;&lt;% end %&gt;
&lt;/urlset&gt;
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://sumskyi.com/2008/06/05/sitemap/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
