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

<channel>
	<title>James Brooks</title>
	<atom:link href="http://jamesbrooks.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://jamesbrooks.net</link>
	<description>Now with pants included</description>
	<pubDate>Mon, 05 Jan 2009 03:38:30 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Rails Currency Conversion Plugin - Cash handler</title>
		<link>http://jamesbrooks.net/2009/01/05/rails-cash-handler-plugin/</link>
		<comments>http://jamesbrooks.net/2009/01/05/rails-cash-handler-plugin/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 03:38:30 +0000</pubDate>
		<dc:creator>James Brooks</dc:creator>
		
		<category><![CDATA[Nothing in Particular]]></category>

		<category><![CDATA[currency conversion]]></category>

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

		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://jamesbrooks.net/?p=81</guid>
		<description><![CDATA[Looking at the state and how the current currency conversion gems and plugins for Rails work, I decided to roll my own very small and niche solution to currency conversion, named Cash Handler. The core functionality it provides is to convert a value from one currency to another (there are only 23 currencies listed, values [...]]]></description>
			<content:encoded><![CDATA[<p>Looking at the state and how the current currency conversion gems and plugins for Rails work, I decided to roll my own very small and niche solution to currency conversion, named <a title="GitHub - cash_handler by JamesBrooks" href="http://github.com/JamesBrooks/cash_handler">Cash Handler</a>. The core functionality it provides is to convert a value from one currency to another (there are only 23 currencies listed, values are updated from scrapped data from <a href="http://x-rates.com">x-rates.com</a>). The  plugin also incorporates a simple time-expiry cache for exchanges rates.</p>
<p>Here&#8217;s an example of Cash Handler in operation:</p>
<pre class="textmate-source twilight"><span class="source source_ruby">c <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="support support_class support_class_ruby">CashHandler</span><span class="punctuation punctuation_separator punctuation_separator_other punctuation_separator_other_ruby">::</span><span class="support support_class support_class_ruby">Base</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span><span class="keyword keyword_other keyword_other_special-method keyword_other_special-method_ruby">new</span>

<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> Get the current exchange rate of the AUD against the USD (currency code strings are case in-sensitive, can also be symbols)
</span>c<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>get<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>AUD<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
<span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_numeric constant_numeric_ruby">0.619099</span>

<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> Get the current exchange rate of the AUD against the GBP
</span>c<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>get<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>AUD<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>against</span> <span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>GBP<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
<span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_numeric constant_numeric_ruby">0.418621272567449</span>

<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> Convert
</span>c<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>convert<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="constant constant_numeric constant_numeric_ruby">10</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>aud</span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="constant constant_other constant_other_symbol constant_other_symbol_ruby"><span class="punctuation punctuation_definition punctuation_definition_constant punctuation_definition_constant_ruby">:</span>usd</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
<span class="punctuation punctuation_separator punctuation_separator_key-value">=&gt;</span> <span class="constant constant_numeric constant_numeric_ruby">6.19099</span>

<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> Force the converstion rates cache to reload currencies
</span>c<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>cache<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>expire

<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> The CashHandler::Cache has a default cache life of one day, this can be overridden in one of two ways
</span><span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> Upon creation
</span>c <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="support support_class support_class_ruby">CashHandler</span><span class="punctuation punctuation_separator punctuation_separator_other punctuation_separator_other_ruby">::</span><span class="support support_class support_class_ruby">Base</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span><span class="keyword keyword_other keyword_other_special-method keyword_other_special-method_ruby">new</span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="constant constant_numeric constant_numeric_ruby">30</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>minutes<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>

<span class="comment comment_line comment_line_number-sign comment_line_number-sign_ruby"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_ruby">#</span> During operation
</span>c<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>cache<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>ttl <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby">=</span> <span class="constant constant_numeric constant_numeric_ruby">30</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>minutes</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://jamesbrooks.net/2009/01/05/rails-cash-handler-plugin/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Play simultaneous sounds using AVAudioPlayer</title>
		<link>http://jamesbrooks.net/2008/12/15/play-simultaneous-sounds-using-avaudioplayer/</link>
		<comments>http://jamesbrooks.net/2008/12/15/play-simultaneous-sounds-using-avaudioplayer/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 23:57:26 +0000</pubDate>
		<dc:creator>James Brooks</dc:creator>
		
		<category><![CDATA[iPhone]]></category>

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

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

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

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

		<guid isPermaLink="false">http://jamesbrooks.net/?p=77</guid>
		<description><![CDATA[I&#8217;ve recently been playing around with the new AVFoundation stuff for the iPhone, esp. AVAudioPlayer (to be fair it&#8217;s the only thing in AVFoundation at the current time :P). Using the AVAudioPlayer stuff is pretty nice (the code here shows how easy it is to get it up and running).
I ran into a problem quickly [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently been playing around with the new AVFoundation stuff for the iPhone, esp. AVAudioPlayer (to be fair it&#8217;s the only thing in AVFoundation at the current time :P). Using the AVAudioPlayer stuff is pretty nice (the code <a href="http://arstechnica.com/journals/apple.ars/2008/11/25/iphone-sdk-watch-new-avfoundation-framework">here</a> shows how easy it is to get it up and running).</p>
<p>I ran into a problem quickly playing sounds at the same time (simultaneously) using AVAudioPlayer. The idiom for doing this is to create a new AVAudioPlayer instance for each individual sounds you&#8217;ll be using, preload the sound using <em>prepareToPlay</em> and call <em>play</em> whenever you want to play the sound, it&#8217;s that easy!.. or it should be. I spend a day trying to debug why I was un-able to play simultaneous sounds (<em>prepareToPlay</em> also caused a problem too, even though I wasn&#8217;t playing anything).</p>
<p>My problem was that my sounds were MP3 formatted sounds, and after a bit of digging it appears the core audio stuff doesn&#8217;t allow simultaneous MP3 playback. The best way I found to get around this was to convert the MP3 files to the Core Audio Format (IMA4 worked good for me, and only ended up being slightly larger then the original MP3), which can be done as follows (using afconvert, built into Leopard afaik):</p>
<pre class="textmate-source twilight"><span class="source source_shell">/usr/bin/afconvert -f caff -d ima4 sound.mp3 sound.caf</span></pre>
<p>And that&#8217;s it, you should now be able to play multiple sounds at the same time.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesbrooks.net/2008/12/15/play-simultaneous-sounds-using-avaudioplayer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Countries, States and Cities for MySQL</title>
		<link>http://jamesbrooks.net/2008/09/30/countries-states-and-cities-for-mysql/</link>
		<comments>http://jamesbrooks.net/2008/09/30/countries-states-and-cities-for-mysql/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 02:33:53 +0000</pubDate>
		<dc:creator>James Brooks</dc:creator>
		
		<category><![CDATA[Databases]]></category>

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

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

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

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

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

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

		<guid isPermaLink="false">http://jamesbrooks.net/?p=74</guid>
		<description><![CDATA[Looking around the internet, I couldn&#8217;t find any good (free) database dumps for MySQL of all global cities by states by countries for MySQL. I&#8217;ve put my own together using free data from MaxMind. This database doesn&#8217;t have a lot of excess data (read: it fits the purpose that I was after, and that&#8217;s purely [...]]]></description>
			<content:encoded><![CDATA[<p>Looking around the internet, I couldn&#8217;t find any good (free) database dumps for MySQL of all global cities by states by countries for MySQL. I&#8217;ve put my own together using free data from <a href="http://www.maxmind.com/app/worldcities">MaxMind</a>. This database doesn&#8217;t have a lot of excess data (read: it fits the purpose that I was after, and that&#8217;s purely finding names by state/country).</p>
<p>The database contains three tables: countries (id, name, code), states (id, country_id, name, code) and cities (id, state_id, name, code). The database is using MaxMind&#8217;s city data of cities with a population of 15,000 of greater (they have data sets for cities of 1,000/5,000 or greater as well). I didn&#8217;t require that intense fidelity for this database.</p>
<p><a href="http://jamesbrooks.net/files/countries.sql.bz2">Download the database (188kb, sql.bz2)</a></p>
<p>If anyone spots any obvious problems, please let me know. Also, if anyone is interested in the SQL and files used to construct this database I can clean them up and make them also available (the SQL file used to build the database works directly with the raw data files from MaxMind, so updating should be easy enough).</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesbrooks.net/2008/09/30/countries-states-and-cities-for-mysql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Zebra stripe tables using jQuery</title>
		<link>http://jamesbrooks.net/2008/09/08/zebra-stripe-tables-using-jquery/</link>
		<comments>http://jamesbrooks.net/2008/09/08/zebra-stripe-tables-using-jquery/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 06:44:58 +0000</pubDate>
		<dc:creator>James Brooks</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

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

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

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

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

		<category><![CDATA[zebra stripe]]></category>

		<guid isPermaLink="false">http://jamesbrooks.net/?p=67</guid>
		<description><![CDATA[I&#8217;ve just noticed that the way I was zebra striping tables in jQuery didn&#8217;t handle multiple tables on the same page correctly (for an odd number of rows). Here&#8217;s the previous (problematic) snippet:
$(document).ready(function() {
  $('table tbody tr:odd').addClass('odd');
});
The issue was that the use of the jQuery :odd nthChild selector would carry over to multiple tables (they [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just noticed that the way I was zebra striping tables in jQuery didn&#8217;t handle multiple tables on the same page correctly (for an odd number of rows). Here&#8217;s the previous (problematic) snippet:</p>
<pre class="textmate-source twilight"><span class="source source_js"><span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="support support_class support_class_js">document</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>ready<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
  <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>table tbody tr:odd<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>addClass<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>odd<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span></span></pre>
<p>The issue was that the use of the jQuery :odd nthChild selector would carry over to multiple tables (they wouldn&#8217;t all be striped the same way). This should had been obvious but obviously not until I saw the result rendered, here&#8217;s the corrected snippet:</p>
<pre class="textmate-source twilight"><span class="source source_js"><span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="support support_class support_class_js">document</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>ready<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
  <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>table<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>each<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="variable variable_language variable_language_js">this</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span><span class="support support_function support_function_js">find</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>tbody tr:odd<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>addClass<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>odd<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span></span></pre>
<p>Update:<br />
Here&#8217;s an improved snippet (thanks to a suggestion from <a title="Learning jQuery" rel="external nofollow" href="http://www.learningjquery.com/">Karl Swedberg</a>).</p>
<pre class="textmate-source twilight"><span class="source source_js"><span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="support support_class support_class_js">document</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>ready<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
  <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>table tbody tr:nth-child(even)<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>addClass<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>odd<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span></span></pre>
]]></content:encoded>
			<wfw:commentRss>http://jamesbrooks.net/2008/09/08/zebra-stripe-tables-using-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Make DOM elements hoverable using jQuery</title>
		<link>http://jamesbrooks.net/2008/09/05/make-dom-elements-hoverable-using-jquery/</link>
		<comments>http://jamesbrooks.net/2008/09/05/make-dom-elements-hoverable-using-jquery/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 04:18:35 +0000</pubDate>
		<dc:creator>James Brooks</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

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

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

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

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

		<guid isPermaLink="false">http://jamesbrooks.net/?p=62</guid>
		<description><![CDATA[following up the post from earlier today, Make DOM elements hoverable using Prototype, here&#8217;s the equivalent javascript code using jQuery instead of Prototype (Uses the same example as in the previous post [a list]).
$(document).ready(function() {
  $('.hoverable &#62; *')
    .mouseover(function() { $(this).addClass('hover') })
    .mouseout(function() { $(this).removeClass('hover') })
});
]]></description>
			<content:encoded><![CDATA[<p>following up the post from earlier today, <a title="Make DOM elements hoverable using jQuery" href="/2008/09/05/make-dom-elements-hoverable-using-prototype/">Make DOM elements hoverable using Prototype</a>, here&#8217;s the equivalent javascript code using <a title="jQuery" href="http://jquery.com/">jQuery</a> instead of <a href="http://prototypejs.org/">Prototype</a> (Uses the same example as in the previous post [a list]).</p>
<pre class="textmate-source twilight"><span class="source source_js"><span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="support support_class support_class_js">document</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>ready<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
  <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>.hoverable &gt; *<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span>
    <span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>mouseover<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="variable variable_language variable_language_js">this</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>addClass<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>hover<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span>
    <span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>mouseout<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> <span class="keyword keyword_operator keyword_operator_js">$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="variable variable_language variable_language_js">this</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>removeClass<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>hover<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span>
<span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span></span></pre>
]]></content:encoded>
			<wfw:commentRss>http://jamesbrooks.net/2008/09/05/make-dom-elements-hoverable-using-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Make DOM elements hoverable using Prototype</title>
		<link>http://jamesbrooks.net/2008/09/05/make-dom-elements-hoverable-using-prototype/</link>
		<comments>http://jamesbrooks.net/2008/09/05/make-dom-elements-hoverable-using-prototype/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 01:12:44 +0000</pubDate>
		<dc:creator>James Brooks</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

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

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

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

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

		<guid isPermaLink="false">http://jamesbrooks.net/?p=55</guid>
		<description><![CDATA[Here&#8217;s a small snippet I use when I want to change style based off of the :hover state of the element. Usually we could just use the :hover pseudo-class (apart from the fact that IE6 will only acknowledge :hover on link tags only). The solution is to use some javascript to add/remove a .hover class on the [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a small snippet I use when I want to change style based off of the :hover state of the element. Usually we could just use the :hover pseudo-class (apart from the fact that IE6 will only acknowledge :hover on link tags only). The solution is to use some javascript to add/remove a .hover class on the elements we want to hover over (I mostly use this for lists).</p>
<pre class="textmate-source twilight"><span class="source source_js">Event<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>observe<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="support support_class support_class_js">window</span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>load<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
  <span class="keyword keyword_operator keyword_operator_js">$$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>.hoverable &gt; *<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>each<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="meta meta_function meta_function_js"><span class="storage storage_type storage_type_function storage_type_function_js">function</span> <span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_js">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_js">e</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_js">)</span></span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
    Event<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>observe<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>e<span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>mouseover<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
      Element<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>addClassName<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>e<span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>hover<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
    <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>  

    Event<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>observe<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>e<span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>mouseout<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span>
      Element<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>removeClassName<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>e<span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>hover<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
    <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
  <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>
<span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span></span></pre>
<p>To use the above script, you need to mark any parent elements as .hoverable to have any of it&#8217;s direct children gain and lose .hover on :hover, such as the follow:</p>
<pre class="textmate-source twilight"><span class="text text_html text_html_basic"><span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html">ul</span> <span class="meta meta_attribute-with-value meta_attribute-with-value_id meta_attribute-with-value_id_html"><span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_id entity_other_attribute-name_id_html">id</span><span class="punctuation punctuation_separator punctuation_separator_key-value punctuation_separator_key-value_html">=</span><span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span><span class="meta meta_toc-list meta_toc-list_id meta_toc-list_id_html">menu</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span></span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html">class</span>=<span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span>hoverable<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span></span>
  <span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">li</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">a</span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html">href</span>=<span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span>#<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span></span>First Item<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">a</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">li</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span></span>
  <span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">li</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">a</span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html">href</span>=<span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span>#<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span></span>Second Item<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">a</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">li</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span></span>
  <span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">li</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">a</span> <span class="entity entity_other entity_other_attribute-name entity_other_attribute-name_html">href</span>=<span class="string string_quoted string_quoted_double string_quoted_double_html"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_html">"</span>#<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_html">"</span></span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span></span>Last Item<span class="meta meta_tag meta_tag_inline meta_tag_inline_any meta_tag_inline_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">a</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_inline entity_name_tag_inline_any entity_name_tag_inline_any_html">li</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span></span>
<span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html">ul</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span></span></span></pre>
<p>This is also easily written using <a title="jQuery" href="http://jquery.com">jQuery</a>, though as I mostly deal with Rails applications without an explicit need to use <a title="jQuery" href="http://jquery.com">jQuery</a>, this is the <a title="Prototype JS" href="http://prototypejs.org">Prototype</a> version I use. A <a title="jQuery" href="http://jquery.com">jQuery</a> version of this snippet can be found in the post, <a title="Make DOM elements hoverable using jQuery" href="/2008/09/05/make-dom-elements-hoverable-using-jquery/">Make DOM elements hoverable using jQuery</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesbrooks.net/2008/09/05/make-dom-elements-hoverable-using-prototype/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Slug generation in rails</title>
		<link>http://jamesbrooks.net/2008/09/01/slug-generation-in-rails/</link>
		<comments>http://jamesbrooks.net/2008/09/01/slug-generation-in-rails/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 03:16:13 +0000</pubDate>
		<dc:creator>James Brooks</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[monkey patch]]></category>

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

		<category><![CDATA[slug generation]]></category>

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

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

		<guid isPermaLink="false">http://jamesbrooks.net/?p=49</guid>
		<description><![CDATA[Just recently I made a very minor update to my slugify method I use in rails (which I add to String via a monkey-patch).
It&#8217;s pretty much like your stock-standard slugification method, this one produces a URL-friendly slug containing only letters and numbers, dashes seperate elements in the string and a few other nice things (single [...]]]></description>
			<content:encoded><![CDATA[<p>Just recently I made a very minor update to my slugify method I use in rails (which I add to String via a monkey-patch).</p>
<p>It&#8217;s pretty much like your stock-standard slugification method, this one produces a URL-friendly slug containing only letters and numbers, dashes seperate elements in the string and a few other nice things (single quotation marks are just stripped and not made spaces, and &#8216;&amp;&#8217; is replaced with &#8216;and&#8217;).</p>
<pre class="textmate-source twilight"><span class="source source_ruby"><span class="meta meta_class meta_class_ruby"><span class="keyword keyword_control keyword_control_class keyword_control_class_ruby">class</span> <span class="entity entity_name entity_name_type entity_name_type_class entity_name_type_class_ruby">String</span></span>
  <span class="meta meta_function meta_function_method meta_function_method_without-arguments meta_function_method_without-arguments_ruby"><span class="keyword keyword_control keyword_control_def keyword_control_def_ruby">def</span> <span class="entity entity_name entity_name_function entity_name_function_ruby">slugify</span></span>
    <span class="variable variable_language variable_language_ruby">self</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>downcase<span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>gsub<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_regexp string_regexp_classic string_regexp_classic_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_ruby">/</span>&amp;<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_ruby">/</span></span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span> and <span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>gsub<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_regexp string_regexp_classic string_regexp_classic_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_ruby">/</span><span class="string string_regexp string_regexp_character-class string_regexp_character-class_ruby"><span class="punctuation punctuation_definition punctuation_definition_character-class punctuation_definition_character-class_ruby">[</span>^a-z0-9'<span class="punctuation punctuation_definition punctuation_definition_character-class punctuation_definition_character-class_ruby">]</span></span>+<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_ruby">/</span></span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span>-<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>gsub<span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">(</span><span class="string string_regexp string_regexp_classic string_regexp_classic_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_ruby">/</span>^-|-$|'<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_ruby">/</span></span><span class="punctuation punctuation_separator punctuation_separator_object punctuation_separator_object_ruby">,</span> <span class="string string_quoted string_quoted_single string_quoted_single_ruby"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_ruby">'</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_ruby">'</span></span><span class="punctuation punctuation_section punctuation_section_function punctuation_section_function_ruby">)</span>
  <span class="keyword keyword_control keyword_control_ruby">end</span>
<span class="keyword keyword_control keyword_control_ruby">end</span>
</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://jamesbrooks.net/2008/09/01/slug-generation-in-rails/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hush CMS</title>
		<link>http://jamesbrooks.net/2008/08/18/hush-cms/</link>
		<comments>http://jamesbrooks.net/2008/08/18/hush-cms/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 07:32:42 +0000</pubDate>
		<dc:creator>James Brooks</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

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

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

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

		<guid isPermaLink="false">http://jamesbrooks.net/?p=43</guid>
		<description><![CDATA[Today I began development on a in-house content management system (dubbed Hush CMS), a Ruby on Rails plugin to extend a rails application with CMS functionality (both static [pages] and dynamic [news, blog posts]) as unobtrusively as possible to the application.
So far I&#8217;ve got a GitHub Repository setup with some initial code in. At the [...]]]></description>
			<content:encoded><![CDATA[<p>Today I began development on a in-house content management system (dubbed <a href="http://github.com/JamesBrooks/hush_cms/tree/master">Hush CMS</a>), a Ruby on Rails plugin to extend a rails application with CMS functionality (both static [pages] and dynamic [news, blog posts]) as unobtrusively as possible to the application.</p>
<p>So far I&#8217;ve got a <a href="http://github.com/JamesBrooks/hush_cms/tree/master">GitHub Repository </a>setup with some initial code in. At the moment Hush can generate migrations for it&#8217;s required entities, and hook into ApplicationController to handle and serve out pages from the database, as well as a custom method for use in config/routes.rb to designate what routes the CMS pages should respond to.</p>
<p>I won&#8217;t bother writing up a how-to to get it going for now, bare instructions are in the README. The only thing missing in the repository to view a page is the page view itself, which by default should be a template in global/page. The content of my global/page currently looks like this (html.erb)</p>
<pre class="textmate-source twilight"><span class="text text_html text_html_ruby"><span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> hush_cms_breadcrumbs <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>hush_cms_page</span> <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span>

<span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html">h2</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span></span><span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>hush_cms_page</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>title <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span><span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html">h2</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span></span>
<span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;</span><span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html">p</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span></span><span class="source source_ruby source_ruby_rails source_ruby_rails_embedded source_ruby_rails_embedded_html"><span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">&lt;%=</span> <span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_ruby">@</span>hush_cms_page</span><span class="punctuation punctuation_separator punctuation_separator_method punctuation_separator_method_ruby">.</span>content <span class="punctuation punctuation_section punctuation_section_embedded punctuation_section_embedded_ruby">%&gt;</span></span><span class="meta meta_tag meta_tag_block meta_tag_block_any meta_tag_block_any_html"><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&lt;/</span><span class="entity entity_name entity_name_tag entity_name_tag_block entity_name_tag_block_any entity_name_tag_block_any_html">p</span><span class="punctuation punctuation_definition punctuation_definition_tag punctuation_definition_tag_html">&gt;</span></span></span></pre>
]]></content:encoded>
			<wfw:commentRss>http://jamesbrooks.net/2008/08/18/hush-cms/feed/</wfw:commentRss>
		</item>
		<item>
		<title>My git workflow</title>
		<link>http://jamesbrooks.net/2008/08/15/my-git-workflow/</link>
		<comments>http://jamesbrooks.net/2008/08/15/my-git-workflow/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 03:34:20 +0000</pubDate>
		<dc:creator>James Brooks</dc:creator>
		
		<category><![CDATA[Work]]></category>

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

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

		<guid isPermaLink="false">http://jamesbrooks.net/?p=30</guid>
		<description><![CDATA[Recently I&#8217;ve been trying to get my head around git, I think my head has been tainted by excess subversion usage. Thanks to the help of close friend Joel Stanley I&#8217;ve got to the stage where I&#8217;m fairly happy with how I can use git to accommodate my workflow with multiple developers.
The following workflow is what I use at [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I&#8217;ve been trying to get my head around <a title="Git – Fast Version Control System" href="http://git.or.cz">git</a>, I think my head has been tainted by excess subversion usage. Thanks to the help of close friend <a title="Joel Stanley's LinkedIn profile " href="http://www.linkedin.com/in/joelstanley">Joel Stanley</a> I&#8217;ve got to the stage where I&#8217;m fairly happy with how I can use git to accommodate my workflow with multiple developers.</p>
<p>The following workflow is what I use at work when working on projects with frequent pushes by multiple developers. Perform all work on local branches, and then when ready to push we push (I now tend to have a branch for random working called &#8216;working&#8217; and specific feature branches called whatever).</p>
<pre class="textmate-source twilight"><span class="source source_shell"><span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell">#</span> switch to working branch
</span>git checkout working

<span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell">#</span> hack hack hack then git add, etc
</span>git commit -m<span class="string string_quoted string_quoted_double string_quoted_double_shell"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell">"</span>awesome change<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell">"</span></span>
<span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell">#</span> hack hack hack then git add, etc
</span>git commit -m<span class="string string_quoted string_quoted_double string_quoted_double_shell"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_shell">"</span>another awesome change<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_shell">"</span></span>

<span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell">#</span> when I want to push these changes to the upstream master:
</span><span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell">#</span> first pull the latest master from upstream
</span>git checkout master
git pull

<span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell">#</span> rebase those changes into my branch (put my commits on-top of the master's commits)
</span>git checkout working
git rebase master

<span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell">#</span> after any conflicts are resolved, merge my working branch into master
</span>git checkout master
git merge working

<span class="comment comment_line comment_line_number-sign comment_line_number-sign_shell"><span class="punctuation punctuation_definition punctuation_definition_comment punctuation_definition_comment_shell">#</span> push the changes upstream
</span>git push
</span></pre>
<p>This workflow is similar for feature branches as well (working is essentually my feature branch for misc work, quick fixes, whatever). With this workflow I can easily change back to the master branch and pull the latest upstream changes in without impacting anything I&#8217;m currently working on (which is handy), as well as rebase as often as I want to (less conflcits to resolve, the better!).</p>
<p>Please let me know of any improvements or things I should watch out for, thanks!</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesbrooks.net/2008/08/15/my-git-workflow/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Getting around to it</title>
		<link>http://jamesbrooks.net/2008/08/13/getting-around-to-it/</link>
		<comments>http://jamesbrooks.net/2008/08/13/getting-around-to-it/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 13:45:18 +0000</pubDate>
		<dc:creator>James Brooks</dc:creator>
		
		<category><![CDATA[Nothing in Particular]]></category>

		<guid isPermaLink="false">http://jamesbrooks.net/?p=27</guid>
		<description><![CDATA[Writing on a blog was always going to be one of those things I was going to get around to it, but I never did because I didn&#8217;t think I found anything that warrented a decent sized post. I think I&#8217;m going to have to bite the bullet and just post the damn things without [...]]]></description>
			<content:encoded><![CDATA[<p>Writing on a blog was always going to be one of those things I was going to get around to it, but I never did because I didn&#8217;t think I found anything that warrented a decent sized post. I think I&#8217;m going to have to bite the bullet and just post the damn things without concern to post length or over-all &#8216;academic&#8217; quality.</p>
<p>So here&#8217;s the first post, to say I&#8217;m going to do just that ;).</p>
]]></content:encoded>
			<wfw:commentRss>http://jamesbrooks.net/2008/08/13/getting-around-to-it/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
