<?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>The Rabbit Feed</title>
	<atom:link href="http://furui.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://furui.org/blog</link>
	<description>Jeff's Log</description>
	<lastBuildDate>Mon, 25 Dec 2006 22:57:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Rounded Corners in Rails (updated!)</title>
		<link>http://furui.org/blog/2006/12/25/rounded-corners-in-rails-updated/</link>
		<comments>http://furui.org/blog/2006/12/25/rounded-corners-in-rails-updated/#comments</comments>
		<pubDate>Mon, 25 Dec 2006 22:57:05 +0000</pubDate>
		<dc:creator>furui</dc:creator>
				<category><![CDATA[CAPTCHA]]></category>
		<category><![CDATA[RMagick]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Rounded Corners]]></category>
		<category><![CDATA[spinner]]></category>

		<guid isPermaLink="false">http://furui.org/blog/2006/12/25/rounded-corners-in-rails-updated/</guid>
		<description><![CDATA[Here&#8217;s a gift for everyone.
In my last entry, I posted a rounded corners implementation in Rails using the RMagick gem. I have since updated it do take advantage of fragment caching. I also added in a CAPTCHA implementation and an animated spinner generator.
Enjoy!
Download it here (hot and fresh straight out of my application): http://furui.org/tools_controller.rb
Check out [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a gift for everyone.</p>
<p>In my <a href="http://furui.org/blog/2006/12/18/rounded-corners-in-rails/">last entry</a>, I posted a rounded corners implementation in Rails using the RMagick gem. I have since updated it do take advantage of fragment caching. I also added in a CAPTCHA implementation and an animated spinner generator.</p>
<p>Enjoy!</p>
<p>Download it here (hot and fresh straight out of my application): <a href="http://furui.org/tools_controller.rb">http://furui.org/tools_controller.rb</a></p>
<p>Check out the corner generator here: <a href="http://www.furui.org/testbench/tools/roundedcorners?c=red&#038;w=25&#038;h=25">http://www.furui.org/testbench/tools/roundedcorners?c=red&#038;w=25&#038;h=25</a></p>
<p>Check out the spinner generator here: <a href="http://www.furui.org/testbench/tools/spinner">http://www.furui.org/testbench/tools/spinner</a></p>
<p>The CAPTCHA generator doesn&#8217;t work with my hosting provider.</p>
]]></content:encoded>
			<wfw:commentRss>http://furui.org/blog/2006/12/25/rounded-corners-in-rails-updated/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rounded Corners in Rails</title>
		<link>http://furui.org/blog/2006/12/18/rounded-corners-in-rails/</link>
		<comments>http://furui.org/blog/2006/12/18/rounded-corners-in-rails/#comments</comments>
		<pubDate>Mon, 18 Dec 2006 08:57:59 +0000</pubDate>
		<dc:creator>furui</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[RMagick]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Rounded Corners]]></category>

		<guid isPermaLink="false">http://furui.org/blog/2006/12/18/rounded-corners-in-rails/</guid>
		<description><![CDATA[Here is a controller I wrote that spits out rounded corners. It utilizes RMagick and operates nearly identical (width and height limited to 256) to the Google implementation as discovered by xach on LiveJournal.
You can see it below (or see it in action), or grab it from here: http://furui.org/tools_controller.rb
If you use it or see it [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a controller I wrote that spits out rounded corners. It utilizes <a href="http://rmagick.rubyforge.org/">RMagick</a> and operates nearly identical (width and height limited to 256) to the Google implementation as <a href="http://xach.livejournal.com/95656.html">discovered</a> by <a href="http://xach.livejournal.com">xach</a> on <a href="http://www.livejournal.com">LiveJournal</a>.</p>
<p>You can see it below (or <a href="http://furui.org/comparison.png">see it in action</a>), or grab it from here: <a href="http://furui.org/tools_controller.rb">http://furui.org/tools_controller.rb</a></p>
<p>If you use it or see it in the wild, post a comment here. Thanks!</p>
<p><span id="more-4"></span></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="co1"># Rails Graphics Tools</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># (c) 2006 Jeffrey Davis</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> ToolsController &lt; ApplicationController</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Require the RMagick library and include its namespace</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">require</span> <span class="st0">&#8216;RMagick&#8217;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">include</span> Magick</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">def</span> roundedcorners</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Rounded Corners similar to Google&#8217;s implementation for Groups Beta</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Don&#8217;t render a layout.</span></div>
</li>
<li class="li1">
<div class="de1">render <span class="re3">:layout</span> =&gt; <span class="kw2">false</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Retrieve the background color</span></div>
</li>
<li class="li1">
<div class="de1">bgcolor = params<span class="br0">&#91;</span><span class="re3">:bc</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># If the background color wasn&#8217;t specified, use a transparent color</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> bgcolor == <span class="kw2">nil</span></div>
</li>
<li class="li2">
<div class="de2">bgcolor = <span class="st0">&#8216;transparent&#8217;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># If this is not a CSS2 color, then it must be a hex value.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> bgcolor.<span class="me1">match</span><span class="br0">&#40;</span><span class="st0">&#8216;[g-zG-Z]&#8216;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span></div>
</li>
<li class="li2">
<div class="de2">bgcolor = <span class="st0">&quot;#&quot;</span> + bgcolor</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Retrieve the color</span></div>
</li>
<li class="li1">
<div class="de1">fgcolor = params<span class="br0">&#91;</span><span class="re3">:c</span><span class="br0">&#93;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># If this is not a CSS2 color, then it must be a hex value.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> fgcolor.<span class="me1">match</span><span class="br0">&#40;</span><span class="st0">&#8216;[g-zG-Z]&#8216;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">fgcolor = <span class="st0">&quot;#&quot;</span> + fgcolor</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Retrive the size of the image</span></div>
</li>
<li class="li1">
<div class="de1">width = params<span class="br0">&#91;</span><span class="re3">:w</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">height = params<span class="br0">&#91;</span><span class="re3">:h</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># If size wasn&#8217;t specified, set it to the default of 8</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> width == <span class="kw2">nil</span></div>
</li>
<li class="li1">
<div class="de1">width = <span class="nu0">8</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">width = width.<span class="me1">to_i</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> height == <span class="kw2">nil</span></div>
</li>
<li class="li1">
<div class="de1">height = <span class="nu0">8</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">height = height.<span class="me1">to_i</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Create a new image and set the background color</span></div>
</li>
<li class="li1">
<div class="de1">img = Image.<span class="me1">new</span><span class="br0">&#40;</span><span class="nu0">256</span>,<span class="nu0">256</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">self</span>.<span class="me1">background_color</span> = bgcolor</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Create a new drawing object</span></div>
</li>
<li class="li1">
<div class="de1">gc = Draw.<span class="me1">new</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># Draw a circle in the upper left corner</span></div>
</li>
<li class="li1">
<div class="de1">gc.<span class="me1">fill</span><span class="br0">&#40;</span>fgcolor<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">gc.<span class="me1">stroke</span><span class="br0">&#40;</span>fgcolor<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">gc.<span class="me1">circle</span><span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">255</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># Write the drawing to the image</span></div>
</li>
<li class="li1">
<div class="de1">gc.<span class="me1">draw</span><span class="br0">&#40;</span>img<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Check the orientation of the corner, and flip/flop accordingly</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">case</span> params<span class="br0">&#91;</span><span class="re3">:a</span><span class="br0">&#93;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">when</span> <span class="st0">&#8216;tl&#8217;</span></div>
</li>
<li class="li1">
<div class="de1">img.<span class="me1">flip</span>!</div>
</li>
<li class="li1">
<div class="de1">img.<span class="me1">flop</span>!</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">when</span> <span class="st0">&#8216;bl&#8217;</span></div>
</li>
<li class="li1">
<div class="de1">img.<span class="me1">flop</span>!</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">when</span> <span class="st0">&#8216;br&#8217;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">when</span> <span class="st0">&#8216;tr&#8217;</span></div>
</li>
<li class="li1">
<div class="de1">img.<span class="me1">flip</span>!</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">img.<span class="me1">flip</span>!</div>
</li>
<li class="li2">
<div class="de2">img.<span class="me1">flop</span>!</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Scale the image to the correct width and height</span></div>
</li>
<li class="li1">
<div class="de1">img.<span class="me1">scale</span>!<span class="br0">&#40;</span>width,height<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Write the image to a blob</span></div>
</li>
<li class="li1">
<div class="de1">blob = img.<span class="me1">to_blob</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">self</span>.<span class="kw3">format</span> = <span class="st0">&#8216;PNG&#8217;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">self</span>.<span class="me1">depth</span> = <span class="nu0">8</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Send the blob to the client</span></div>
</li>
<li class="li1">
<div class="de1">send_data blob, <span class="re3">:type</span> =&gt; <span class="st0">&#8216;image/png&#8217;</span>, <span class="re3">:disposition</span> =&gt; <span class="st0">&#8216;inline&#8217;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">end</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">end</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://furui.org/blog/2006/12/18/rounded-corners-in-rails/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>About</title>
		<link>http://furui.org/blog/2006/12/06/about/</link>
		<comments>http://furui.org/blog/2006/12/06/about/#comments</comments>
		<pubDate>Wed, 06 Dec 2006 22:04:51 +0000</pubDate>
		<dc:creator>furui</dc:creator>
				<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://furui.org/blog/about/</guid>
		<description><![CDATA[http://furui.org
]]></description>
			<content:encoded><![CDATA[<p><a href="http://furui.org">http://furui.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://furui.org/blog/2006/12/06/about/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.550 seconds -->
