<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-17750808</id><updated>2011-12-21T21:04:07.169-08:00</updated><title type='text'>Saari Development</title><subtitle type='html'>This blog is intended to be a log of my (Ali Rizvi's) professional ramblings as a software development engineer.

I intend to add logs of my experience with different technologies, software, tech books/articles and related stuff from time to time. My intention is to have an archive for my personal use and public benefit.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17750808.post-5189049906844759401</id><published>2008-01-04T12:11:00.000-08:00</published><updated>2008-01-04T12:15:16.730-08:00</updated><title type='text'>Ruby: Oblongular Number Spirals Solution</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  1 &lt;/span&gt;&lt;span class="Comment"&gt;# Oblongular Number Spirals&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  2 &lt;/span&gt;&lt;span class="Comment"&gt;# &lt;a href="http://codegolf.com/oblongular-number-spirals"&gt;http://codegolf.com/oblongular-number-spirals&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  3 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  4 &lt;/span&gt;&lt;span class="PreProc"&gt;class &lt;/span&gt;&lt;span class="Type"&gt;Spiral&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  5 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="Statement"&gt;attr_accessor&lt;/span&gt;&lt;span class="rubyBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;:row_num&lt;/span&gt;&lt;span class="rubyBlock"&gt;, &lt;/span&gt;&lt;span class="Identifier"&gt;:col_num&lt;/span&gt;&lt;span class="rubyBlock"&gt;, &lt;/span&gt;&lt;span class="Identifier"&gt;:direction&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  6 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  7 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;def &lt;/span&gt;&lt;span class="Identifier"&gt;initialize&lt;/span&gt;&lt;span class="rubyBlock"&gt;(m, n)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  8 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Identifier"&gt;@spiral&lt;/span&gt;&lt;span class="rubyBlock"&gt; = []&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  9 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Identifier"&gt;@value&lt;/span&gt;&lt;span class="rubyBlock"&gt; = &lt;/span&gt;&lt;span class="Constant"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 10 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Identifier"&gt;@row_num&lt;/span&gt;&lt;span class="rubyBlock"&gt; = m&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 11 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Identifier"&gt;@col_num&lt;/span&gt;&lt;span class="rubyBlock"&gt; = n&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 12 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Identifier"&gt;@direction&lt;/span&gt;&lt;span class="rubyBlock"&gt; = &lt;/span&gt;&lt;span class="Identifier"&gt;:right&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 13 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 14 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 15 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;def &lt;/span&gt;&lt;span class="Identifier"&gt;get&lt;/span&gt;&lt;span class="rubyBlock"&gt;(row, col)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 16 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;if&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; (row &amp;lt; &lt;/span&gt;&lt;span class="Constant"&gt;0&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; || row &amp;gt;= row_num || col &amp;lt; &lt;/span&gt;&lt;span class="Constant"&gt;0&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; || col &amp;gt;= col_num)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 17 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;        &lt;/span&gt;&lt;span class="Statement"&gt;raise&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;RangeError&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;.new(&lt;/span&gt;&lt;span class="Special"&gt;&amp;quot;&lt;/span&gt;&lt;span class="Constant"&gt;Out of Bound : row = &lt;/span&gt;&lt;span class="Special"&gt;#{row}&lt;/span&gt;&lt;span class="Constant"&gt; col = &lt;/span&gt;&lt;span class="Special"&gt;#{col}&lt;/span&gt;&lt;span class="Special"&gt;&amp;quot;&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 18 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 19 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Identifier"&gt;@spiral&lt;/span&gt;&lt;span class="rubyBlock"&gt;[row] ||= &lt;/span&gt;&lt;span class="Identifier"&gt;Array&lt;/span&gt;&lt;span class="rubyBlock"&gt;.new&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 20 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Identifier"&gt;@spiral&lt;/span&gt;&lt;span class="rubyBlock"&gt;[row][col] ||= &lt;/span&gt;&lt;span class="Constant"&gt;nil&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 21 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Identifier"&gt;@spiral&lt;/span&gt;&lt;span class="rubyBlock"&gt;[row][col]&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 22 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 23 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 24 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;def &lt;/span&gt;&lt;span class="Identifier"&gt;increment_fill&lt;/span&gt;&lt;span class="rubyBlock"&gt;(row, col)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 25 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Identifier"&gt;@value&lt;/span&gt;&lt;span class="rubyBlock"&gt; += &lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 26 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    fill(row, col, &lt;/span&gt;&lt;span class="Identifier"&gt;@value&lt;/span&gt;&lt;span class="rubyBlock"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 27 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 28 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 29 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;def &lt;/span&gt;&lt;span class="Identifier"&gt;fill&lt;/span&gt;&lt;span class="rubyBlock"&gt;(row, col, value)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 30 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;if&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; (row &amp;lt; &lt;/span&gt;&lt;span class="Constant"&gt;0&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; || row &amp;gt;= row_num || col &amp;lt; &lt;/span&gt;&lt;span class="Constant"&gt;0&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; || col &amp;gt;= col_num)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 31 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      &lt;/span&gt;&lt;span class="Statement"&gt;raise&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;RangeError&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;.new(&lt;/span&gt;&lt;span class="Special"&gt;&amp;quot;&lt;/span&gt;&lt;span class="Constant"&gt;Out of Bound : row = &lt;/span&gt;&lt;span class="Special"&gt;#{row}&lt;/span&gt;&lt;span class="Constant"&gt; col = &lt;/span&gt;&lt;span class="Special"&gt;#{col}&lt;/span&gt;&lt;span class="Special"&gt;&amp;quot;&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 32 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 33 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Identifier"&gt;@spiral&lt;/span&gt;&lt;span class="rubyBlock"&gt;[row] ||= &lt;/span&gt;&lt;span class="Identifier"&gt;Array&lt;/span&gt;&lt;span class="rubyBlock"&gt;.new&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 34 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Identifier"&gt;@spiral&lt;/span&gt;&lt;span class="rubyBlock"&gt;[row][col] = value&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 35 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 36 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 37 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;def &lt;/span&gt;&lt;span class="Identifier"&gt;populate&lt;/span&gt;&lt;span class="rubyBlock"&gt;(x = &lt;/span&gt;&lt;span class="Constant"&gt;0&lt;/span&gt;&lt;span class="rubyBlock"&gt;, y = &lt;/span&gt;&lt;span class="Constant"&gt;0&lt;/span&gt;&lt;span class="rubyBlock"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 38 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    count = &lt;/span&gt;&lt;span class="Constant"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 39 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;while&lt;/span&gt;&lt;span class="rubyOptDoLine"&gt; (&lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;&lt;span class="rubyOptDoLine"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 40 &lt;/span&gt;&lt;span class="rubyOptDoBlock"&gt;      increment_fill(x, y)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 41 &lt;/span&gt;&lt;span class="rubyOptDoBlock"&gt;      count += &lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 42 &lt;/span&gt;&lt;span class="rubyOptDoBlock"&gt;      &lt;/span&gt;&lt;span class="Comment"&gt;# exit the loop once iteration == total_cells&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 43 &lt;/span&gt;&lt;span class="rubyOptDoBlock"&gt;      &lt;/span&gt;&lt;span class="Statement"&gt;break&lt;/span&gt;&lt;span class="rubyOptDoBlock"&gt; &lt;/span&gt;&lt;span class="Statement"&gt;if&lt;/span&gt;&lt;span class="rubyOptDoBlock"&gt; count == row_num * col_num&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 44 &lt;/span&gt;&lt;span class="rubyOptDoBlock"&gt;      x, y = next_cell(x, y) &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 45 &lt;/span&gt;&lt;span class="rubyOptDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 46 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="Identifier"&gt;@spiral&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 47 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 48 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 49 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;def &lt;/span&gt;&lt;span class="Identifier"&gt;next_cell&lt;/span&gt;&lt;span class="rubyBlock"&gt;(row, col)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 50 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    new_row = row&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 51 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    new_col = col&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 52 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 53 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;case&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;@direction&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 54 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;when&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;:right&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 55 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      new_col = col + &lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 56 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;when&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;:left&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 57 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      new_col = col - &lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 58 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;when&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;:down&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 59 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      new_row = row + &lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 60 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;when&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;:up&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 61 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      new_row = row - &lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 62 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 63 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 64 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;if&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; ((new_col &amp;gt;= col_num || new_col &amp;lt; &lt;/span&gt;&lt;span class="Constant"&gt;0&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 65 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      change_direction&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 66 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      next_cell(row, col)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 67 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;elsif&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; ((new_row &amp;gt;= row_num || new_row &amp;lt; &lt;/span&gt;&lt;span class="Constant"&gt;0&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 68 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      change_direction&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 69 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      next_cell(row, col)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 70 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;elsif&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; (get(new_row, new_col) != &lt;/span&gt;&lt;span class="Constant"&gt;nil&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 71 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      change_direction&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 72 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      next_cell(row, col)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 73 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 74 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      &lt;/span&gt;&lt;span class="Statement"&gt;return&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; [new_row, new_col]&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 75 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 76 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 77 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 78 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;def &lt;/span&gt;&lt;span class="Identifier"&gt;change_direction&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 79 &lt;/span&gt;&lt;span class="rubyBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;case&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;@direction&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 80 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;when&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;:right&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 81 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      &lt;/span&gt;&lt;span class="Identifier"&gt;@direction&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; = &lt;/span&gt;&lt;span class="Identifier"&gt;:down&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 82 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;when&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;:down&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 83 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      &lt;/span&gt;&lt;span class="Identifier"&gt;@direction&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; = &lt;/span&gt;&lt;span class="Identifier"&gt;:left&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 84 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;when&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;:left&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 85 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      &lt;/span&gt;&lt;span class="Identifier"&gt;@direction&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; = &lt;/span&gt;&lt;span class="Identifier"&gt;:up&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 86 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;when&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;:up&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 87 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      &lt;/span&gt;&lt;span class="Identifier"&gt;@direction&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; = &lt;/span&gt;&lt;span class="Identifier"&gt;:right&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 88 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 89 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;      &lt;/span&gt;&lt;span class="Statement"&gt;raise&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;ArgumentError&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;.new(&lt;/span&gt;&lt;span class="Special"&gt;&amp;quot;&lt;/span&gt;&lt;span class="Constant"&gt;Illegal value  for current_direction &lt;/span&gt;&lt;span class="Special"&gt;#{@direction}&lt;/span&gt;&lt;span class="Special"&gt;&amp;quot;&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 90 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;    &lt;/span&gt;&lt;span class="Statement"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 91 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 92 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 93 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;def &lt;/span&gt;&lt;span class="Identifier"&gt;dump&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 94 &lt;/span&gt;&lt;span class="rubyBlock"&gt;   display = &lt;/span&gt;&lt;span class="Special"&gt;''&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 95 &lt;/span&gt;&lt;span class="rubyBlock"&gt;   &lt;/span&gt;&lt;span class="Identifier"&gt;@spiral&lt;/span&gt;&lt;span class="rubyBlock"&gt;.each &lt;/span&gt;&lt;span class="Statement"&gt;do&lt;/span&gt;&lt;span class="rubyDoBlock"&gt; |&lt;/span&gt;&lt;span class="Identifier"&gt;row&lt;/span&gt;&lt;span class="rubyDoBlock"&gt;|&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 96 &lt;/span&gt;&lt;span class="rubyDoBlock"&gt;     row.each &lt;/span&gt;&lt;span class="Statement"&gt;do&lt;/span&gt;&lt;span class="rubyDoBlock"&gt; |&lt;/span&gt;&lt;span class="Identifier"&gt;col&lt;/span&gt;&lt;span class="rubyDoBlock"&gt;|&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 97 &lt;/span&gt;&lt;span class="rubyDoBlock"&gt;       display &amp;lt;&amp;lt; sprintf(&lt;/span&gt;&lt;span class="Special"&gt;&amp;quot;&lt;/span&gt;&lt;span class="Constant"&gt;%3d &lt;/span&gt;&lt;span class="Special"&gt;&amp;quot;&lt;/span&gt;&lt;span class="rubyDoBlock"&gt;, col)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 98 &lt;/span&gt;&lt;span class="rubyDoBlock"&gt;     &lt;/span&gt;&lt;span class="Statement"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 99 &lt;/span&gt;&lt;span class="rubyDoBlock"&gt;     display &amp;lt;&amp;lt; &lt;/span&gt;&lt;span class="Special"&gt;&amp;quot;&lt;/span&gt;&lt;span class="Special"&gt;\n&lt;/span&gt;&lt;span class="Special"&gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;100 &lt;/span&gt;&lt;span class="rubyDoBlock"&gt;   &lt;/span&gt;&lt;span class="Statement"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;101 &lt;/span&gt;&lt;span class="rubyBlock"&gt;   puts display&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;102 &lt;/span&gt;&lt;span class="rubyBlock"&gt;  &lt;/span&gt;&lt;span class="PreProc"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;103 &lt;/span&gt;&lt;span class="PreProc"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;104 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;105 &lt;/span&gt;&lt;span class="Statement"&gt;if&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; &lt;/span&gt;&lt;span class="Identifier"&gt;$0&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt; == &lt;/span&gt;&lt;span class="Constant"&gt;__FILE__&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;106 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;  s = &lt;/span&gt;&lt;span class="Identifier"&gt;Spiral&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;.new(&lt;/span&gt;&lt;span class="Identifier"&gt;ARGV&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;[&lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;].to_i, &lt;/span&gt;&lt;span class="Identifier"&gt;ARGV&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;[&lt;/span&gt;&lt;span class="Constant"&gt;0&lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;].to_i)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;107 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;  s.populate&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;108 &lt;/span&gt;&lt;span class="rubyNoDoBlock"&gt;  s.dump&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;109 &lt;/span&gt;&lt;span class="Statement"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;110 &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  1 &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;$:&lt;/span&gt;.unshift &lt;span style="color:#008b8b;"&gt;File&lt;/span&gt;.join(&lt;span style="color:#008b8b;"&gt;File&lt;/span&gt;.dirname(&lt;span style="color:#00cd00;"&gt;__FILE__&lt;/span&gt;),&lt;span style="color:#ff1493;"&gt;'&lt;/span&gt;&lt;span style="color:#00cd00;"&gt;..&lt;/span&gt;&lt;span style="color:#ff1493;"&gt;'&lt;/span&gt;,&lt;span style="color:#ff1493;"&gt;'&lt;/span&gt;&lt;span style="color:#00cd00;"&gt;lib&lt;/span&gt;&lt;span style="color:#ff1493;"&gt;'&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt;  2 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  3 &lt;/span&gt;&lt;span style="color:#cd00cd;"&gt;require&lt;/span&gt; &lt;span style="color:#ff1493;"&gt;'&lt;/span&gt;&lt;span style="color:#00cd00;"&gt;test/unit&lt;/span&gt;&lt;span style="color:#ff1493;"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  4 &lt;/span&gt;&lt;span style="color:#cd00cd;"&gt;require&lt;/span&gt; &lt;span style="color:#ff1493;"&gt;'&lt;/span&gt;&lt;span style="color:#00cd00;"&gt;spiral&lt;/span&gt;&lt;span style="color:#ff1493;"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  5 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  6 &lt;/span&gt;&lt;span style="color:#cd00cd;"&gt;class &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;TestSpiral&lt;/b&gt;&lt;/span&gt; &amp;lt; &lt;span style="color:#008b8b;"&gt;Test&lt;/span&gt;::&lt;span style="color:#008b8b;"&gt;Unit&lt;/span&gt;::&lt;span style="color:#008b8b;"&gt;TestCase&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  7 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;setup&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;  8 &lt;/span&gt;    &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt; = &lt;span style="color:#008b8b;"&gt;Spiral&lt;/span&gt;.new(&lt;span style="color:#00cd00;"&gt;4&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;5&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt;  9 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 10 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 11 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_increment_fill_0_0_first&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 12 &lt;/span&gt;    &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.increment_fill(&lt;span style="color:#00cd00;"&gt;0&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;0&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 13 &lt;/span&gt;    assert_equal(&lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;, &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.get(&lt;span style="color:#00cd00;"&gt;0&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;0&lt;/span&gt;))&lt;br /&gt;&lt;span style="color:#804040;"&gt; 14 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 15 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 16 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_increment_fill_1_1_first&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 17 &lt;/span&gt;    &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.increment_fill(&lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 18 &lt;/span&gt;    assert_equal(&lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;, &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.get(&lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;))&lt;br /&gt;&lt;span style="color:#804040;"&gt; 19 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 20 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 21 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_increment_fill_successive&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 22 &lt;/span&gt;    &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.increment_fill(&lt;span style="color:#00cd00;"&gt;0&lt;/span&gt;,&lt;span style="color:#00cd00;"&gt;0&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 23 &lt;/span&gt;    &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.increment_fill(&lt;span style="color:#00cd00;"&gt;0&lt;/span&gt;,&lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 24 &lt;/span&gt;    &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.increment_fill(&lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;,&lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 25 &lt;/span&gt;    assert_equal(&lt;span style="color:#00cd00;"&gt;3&lt;/span&gt;, &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.get(&lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;))&lt;br /&gt;&lt;span style="color:#804040;"&gt; 26 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 27 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 28 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_get_beyond_limit_raises_exception&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 29 &lt;/span&gt;    assert_raise(&lt;span style="color:#008b8b;"&gt;RangeError&lt;/span&gt;) {&lt;br /&gt;&lt;span style="color:#804040;"&gt; 30 &lt;/span&gt;      &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.get(&lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.row_num + &lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;, &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.col_num + &lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 31 &lt;/span&gt;    }&lt;br /&gt;&lt;span style="color:#804040;"&gt; 32 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 33 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 34 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_get_below_zero_raises_exception&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 35 &lt;/span&gt;    assert_raise(&lt;span style="color:#008b8b;"&gt;RangeError&lt;/span&gt;) {&lt;br /&gt;&lt;span style="color:#804040;"&gt; 36 &lt;/span&gt;      &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.get(-&lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;0&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 37 &lt;/span&gt;    }&lt;br /&gt;&lt;span style="color:#804040;"&gt; 38 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 39 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 40 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_get_at_limit_raises_exception&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 41 &lt;/span&gt;    assert_raise(&lt;span style="color:#008b8b;"&gt;RangeError&lt;/span&gt;) {&lt;br /&gt;&lt;span style="color:#804040;"&gt; 42 &lt;/span&gt;      &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.get(&lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.row_num, &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.col_num)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 43 &lt;/span&gt;    }&lt;br /&gt;&lt;span style="color:#804040;"&gt; 44 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 45 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 46 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 47 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_unfill_get_with_in_range_does_not_raise_exception&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 48 &lt;/span&gt;    assert_nothing_raised() {&lt;br /&gt;&lt;span style="color:#804040;"&gt; 49 &lt;/span&gt;      &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.get(&lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.row_num - &lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;, &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.col_num - &lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 50 &lt;/span&gt;    }&lt;br /&gt;&lt;span style="color:#804040;"&gt; 51 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 52 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 53 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_unfill_get_with_in_range_returns_nil&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 54 &lt;/span&gt;    assert_equal(&lt;span style="color:#00cd00;"&gt;nil&lt;/span&gt;, &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.get(&lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.row_num - &lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;, &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.col_num - &lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;))&lt;br /&gt;&lt;span style="color:#804040;"&gt; 55 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 56 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 57 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_fill_beyond_range_raises_exception&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 58 &lt;/span&gt;    assert_raise(&lt;span style="color:#008b8b;"&gt;RangeError&lt;/span&gt;) {&lt;br /&gt;&lt;span style="color:#804040;"&gt; 59 &lt;/span&gt;      &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.increment_fill(&lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.row_num + &lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;, &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.col_num + &lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 60 &lt;/span&gt;    }&lt;br /&gt;&lt;span style="color:#804040;"&gt; 61 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 62 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 63 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_fill_beyond_range_raises_exception&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 64 &lt;/span&gt;    assert_raise(&lt;span style="color:#008b8b;"&gt;RangeError&lt;/span&gt;) {&lt;br /&gt;&lt;span style="color:#804040;"&gt; 65 &lt;/span&gt;      &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.increment_fill(&lt;span style="color:#00cd00;"&gt;0&lt;/span&gt;, -&lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 66 &lt;/span&gt;    }&lt;br /&gt;&lt;span style="color:#804040;"&gt; 67 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 68 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 69 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_fill_at_range_raises_exception&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 70 &lt;/span&gt;    assert_raise(&lt;span style="color:#008b8b;"&gt;RangeError&lt;/span&gt;) {&lt;br /&gt;&lt;span style="color:#804040;"&gt; 71 &lt;/span&gt;      &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.increment_fill(&lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.row_num, &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.col_num)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 72 &lt;/span&gt;    }&lt;br /&gt;&lt;span style="color:#804040;"&gt; 73 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 74 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 75 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_populate&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 76 &lt;/span&gt;    spiral = [&lt;br /&gt;&lt;span style="color:#804040;"&gt; 77 &lt;/span&gt;          [&lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;2&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;3&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;4&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;5&lt;/span&gt;],&lt;br /&gt;&lt;span style="color:#804040;"&gt; 78 &lt;/span&gt;          [&lt;span style="color:#00cd00;"&gt;14&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;15&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;16&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;17&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;6&lt;/span&gt;],&lt;br /&gt;&lt;span style="color:#804040;"&gt; 79 &lt;/span&gt;          [&lt;span style="color:#00cd00;"&gt;13&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;20&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;19&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;18&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;7&lt;/span&gt;],&lt;br /&gt;&lt;span style="color:#804040;"&gt; 80 &lt;/span&gt;          [&lt;span style="color:#00cd00;"&gt;12&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;11&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;10&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;9&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;8&lt;/span&gt;]&lt;br /&gt;&lt;span style="color:#804040;"&gt; 81 &lt;/span&gt;         ]&lt;br /&gt;&lt;span style="color:#804040;"&gt; 82 &lt;/span&gt;    s = &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.populate&lt;br /&gt;&lt;span style="color:#804040;"&gt; 83 &lt;/span&gt;    assert_equal(spiral, s)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 84 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 85 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 86 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_change_directon_right&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 87 &lt;/span&gt;    &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.direction = &lt;span style="color:#008b8b;"&gt;:right&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 88 &lt;/span&gt;    &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.change_direction&lt;br /&gt;&lt;span style="color:#804040;"&gt; 89 &lt;/span&gt;    assert_equal(&lt;span style="color:#008b8b;"&gt;:down&lt;/span&gt;, &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.direction)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 90 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 91 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 92 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_change_directon_up&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 93 &lt;/span&gt;    &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.direction = &lt;span style="color:#008b8b;"&gt;:up&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 94 &lt;/span&gt;    &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.change_direction&lt;br /&gt;&lt;span style="color:#804040;"&gt; 95 &lt;/span&gt;    assert_equal(&lt;span style="color:#008b8b;"&gt;:right&lt;/span&gt;, &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.direction)&lt;br /&gt;&lt;span style="color:#804040;"&gt; 96 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 97 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 98 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_next_cell_0_0&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt; 99 &lt;/span&gt;    x, y = &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.next_cell(&lt;span style="color:#00cd00;"&gt;0&lt;/span&gt;,&lt;span style="color:#00cd00;"&gt;0&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt;100 &lt;/span&gt;    assert_equal(&lt;span style="color:#00cd00;"&gt;0&lt;/span&gt;, x)&lt;br /&gt;&lt;span style="color:#804040;"&gt;101 &lt;/span&gt;    assert_equal(&lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;, y)&lt;br /&gt;&lt;span style="color:#804040;"&gt;102 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;103 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;104 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;def &lt;/span&gt;&lt;span style="color:#008b8b;"&gt;test_next_cell_0_4&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;105 &lt;/span&gt;    x, y = &lt;span style="color:#008b8b;"&gt;@spiral&lt;/span&gt;.next_cell(&lt;span style="color:#00cd00;"&gt;0&lt;/span&gt;,&lt;span style="color:#00cd00;"&gt;4&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:#804040;"&gt;106 &lt;/span&gt;    assert_equal(&lt;span style="color:#00cd00;"&gt;1&lt;/span&gt;, x)&lt;br /&gt;&lt;span style="color:#804040;"&gt;107 &lt;/span&gt;    assert_equal(&lt;span style="color:#00cd00;"&gt;4&lt;/span&gt;, y)&lt;br /&gt;&lt;span style="color:#804040;"&gt;108 &lt;/span&gt;  &lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;109 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;110 &lt;/span&gt;&lt;span style="color:#cd00cd;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;111 &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-5189049906844759401?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/5189049906844759401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=5189049906844759401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/5189049906844759401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/5189049906844759401'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2008/01/ruby-oblongular-number-spirals-solution.html' title='Ruby: Oblongular Number Spirals Solution'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-3357616630908518609</id><published>2008-01-02T01:33:00.000-08:00</published><updated>2008-01-02T02:01:26.299-08:00</updated><title type='text'>Ruby : Time Math Interview Problem With Bug Fixed (still writing test first)</title><content type='html'>&lt;pre&gt;While discussing my friend Arsalan's C# (seemlessly compiled on my linux machine using mcs)&lt;br /&gt;solution and testing it out I found a bug in my own code that. The problem was when adding&lt;br /&gt;more than 12 hours (&gt; 720 minutes) it was not doing the right thing. The code can still be&lt;br /&gt;refactored for cleaner solution but it is too late at night to do that now. Also, my wife&lt;br /&gt;gave me another idea to convert the time to minutes before adding which I will try out later.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;  1 &lt;/span&gt; &lt;span style="color: rgb(238, 0, 0);"&gt;# Without using any built in date or time functions, write a function or method&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;  2 &lt;/span&gt; &lt;span style="color: rgb(238, 0, 0);"&gt;# that accepts two mandatory arguments. The first argument is a string of the&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;  3 &lt;/span&gt; &lt;span style="color: rgb(238, 0, 0);"&gt;# format "[H]H:MM {AM|PM}" and the second argument is an integer. Assume the&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;  4 &lt;/span&gt; &lt;span style="color: rgb(238, 0, 0);"&gt;# integer is the number of minutes to add to the string. The return value of&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;  5 &lt;/span&gt; &lt;span style="color: rgb(238, 0, 0);"&gt;# the function should be a string of the same format as the first argument.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;  6 &lt;/span&gt; &lt;span style="color: rgb(238, 0, 0);"&gt;# For example AddMinutes("9:13 AM", 10) would return "9:23 AM". The exercise&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;  7 &lt;/span&gt; &lt;span style="color: rgb(238, 0, 0);"&gt;# isn't meant to be too hard. I just want to see how you code. Feel free to&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;  8 &lt;/span&gt; &lt;span style="color: rgb(238, 0, 0);"&gt;# do it procedurally or in an object oriented way, whichever you prefer. Use&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;  9 &lt;/span&gt; &lt;span style="color: rgb(238, 0, 0);"&gt;# any language you want. Write production quality code. &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 10 &lt;/span&gt; &lt;span style="color: rgb(238, 0, 0);"&gt;# Question Source: &lt;a href="http://blist.com/blog/"&gt;http://blist.com/blog/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 11 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 12 &lt;/span&gt; &lt;span style="color: rgb(238, 0, 0);"&gt;# the following solution was developed using TDD&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 13 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 14 &lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;require&lt;/span&gt; &lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;test/unit&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 15 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 16 &lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;class&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TestTimeCalc&lt;/b&gt;&lt;/span&gt; &amp;lt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;Test&lt;/b&gt;&lt;/span&gt;::&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;Unit&lt;/b&gt;&lt;/span&gt;::&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TestCase&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 17 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 18 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;setup&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 19 &lt;/span&gt;         &lt;span style="color: rgb(0, 139, 139);"&gt;@time&lt;/span&gt; = &lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;9:13 AM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 20 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 21 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 22 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_new_time_cal&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 23 &lt;/span&gt;         assert_not_nil(&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.new)&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 24 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 25 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 26 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_add_minute_zero&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 27 &lt;/span&gt;         assert_equal(&lt;span style="color: rgb(0, 139, 139);"&gt;@time&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(0, 139, 139);"&gt;@time&lt;/span&gt;, &lt;span style="color: rgb(0, 205, 0);"&gt;0&lt;/span&gt;))&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 28 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 29 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 30 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_add_minute_ten&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 31 &lt;/span&gt;         assert_equal(&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;9:23 AM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(0, 139, 139);"&gt;@time&lt;/span&gt;, &lt;span style="color: rgb(0, 205, 0);"&gt;10&lt;/span&gt;))&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 32 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 33 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 34 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_add_minute_thirteen&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 35 &lt;/span&gt;         assert_equal(&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;9:26 AM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(0, 139, 139);"&gt;@time&lt;/span&gt;, &lt;span style="color: rgb(0, 205, 0);"&gt;13&lt;/span&gt;))&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 36 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 37 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 38 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_add_hour&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 39 &lt;/span&gt;         assert_equal(&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;10:13 AM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(0, 139, 139);"&gt;@time&lt;/span&gt;, &lt;span style="color: rgb(0, 205, 0);"&gt;60&lt;/span&gt;))&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 40 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 41 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 42 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_add_two_hours_fifteen_minutes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 43 &lt;/span&gt;         assert_equal(&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;11:28 AM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(0, 139, 139);"&gt;@time&lt;/span&gt;, &lt;span style="color: rgb(0, 205, 0);"&gt;135&lt;/span&gt;))&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 44 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 45 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 46 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_add_past_meridiem&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 47 &lt;/span&gt;         &lt;span style="color: rgb(238, 0, 0);"&gt;# 785 minutes = 13 hours and 5 minutes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 48 &lt;/span&gt;         assert_equal(&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;10:18 PM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(0, 139, 139);"&gt;@time&lt;/span&gt;, &lt;span style="color: rgb(0, 205, 0);"&gt;785&lt;/span&gt;))&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 49 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 50 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 51 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_alpha_hour_min_format_throws_exception&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 52 &lt;/span&gt;         assert_raise(&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;ArgumentError&lt;/b&gt;&lt;/span&gt;) { &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;AB:CD AM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 205, 0);"&gt;10&lt;/span&gt;) }&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 53 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 54 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 55 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_bad_meridiem_throws_exception&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 56 &lt;/span&gt;         assert_raise(&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;ArgumentError&lt;/b&gt;&lt;/span&gt;) { &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;AB:CD TM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 205, 0);"&gt;10&lt;/span&gt;) }&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 57 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 58 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 59 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_hr_greater_than_twelve&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 60 &lt;/span&gt;         assert_raise(&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;ArgumentError&lt;/b&gt;&lt;/span&gt;) { &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;13:00 PM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 205, 0);"&gt;10&lt;/span&gt;) }&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 61 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 62 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 63 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_min_greater_than_fifty_nine&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 64 &lt;/span&gt;         assert_raise(&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;ArgumentError&lt;/b&gt;&lt;/span&gt;) { &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;12:60 PM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 205, 0);"&gt;10&lt;/span&gt;) }&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 65 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 66 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 67 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_add_lot_of_minutes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 68 &lt;/span&gt;       &lt;span style="color: rgb(238, 0, 0);"&gt;# 1000 minutes = 16 hours and 40 minutes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 69 &lt;/span&gt;       assert_equal(&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;1:53 AM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(0, 139, 139);"&gt;@time&lt;/span&gt;, &lt;span style="color: rgb(0, 205, 0);"&gt;1000&lt;/span&gt;))&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 70 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 71 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 72 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_add_up_to_noon&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 73 &lt;/span&gt;       &lt;span style="color: rgb(238, 0, 0);"&gt;# 9:13 AM plus 2 hr 47 min (107)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 74 &lt;/span&gt;       assert_equal(&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;12:00 PM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(0, 139, 139);"&gt;@time&lt;/span&gt;, &lt;span style="color: rgb(0, 205, 0);"&gt;167&lt;/span&gt;))&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 75 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 76 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 77 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 139, 139);"&gt;test_add_whole_lot_of_minutes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 78 &lt;/span&gt;       &lt;span style="color: rgb(238, 0, 0);"&gt;# 9999 minutes = 166 hours and 39 minutes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 79 &lt;/span&gt;       assert_equal(&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;7:52 AM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;, &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(0, 139, 139);"&gt;@time&lt;/span&gt;, &lt;span style="color: rgb(0, 205, 0);"&gt;9999&lt;/span&gt;))&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 80 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 81 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 82 &lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt; &lt;span style="color: rgb(238, 0, 0);"&gt;# end class TestTimeCalc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 83 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 84 &lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;class&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 85 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 86 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 205, 0);"&gt;self&lt;/span&gt;.&lt;span style="color: rgb(0, 139, 139);"&gt;add_minutes&lt;/span&gt;(time, minutes)&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 87 &lt;/span&gt;       (hour, min, meridiem) = parse_time_string(time)&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 88 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 89 &lt;/span&gt;       hour_increment = (min + minutes)/&lt;span style="color: rgb(0, 205, 0);"&gt;60&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 90 &lt;/span&gt;       min_increment = (min + minutes)%&lt;span style="color: rgb(0, 205, 0);"&gt;60&lt;/span&gt; - min&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 91 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 92 &lt;/span&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/span&gt; (hour + hour_increment &amp;gt; &lt;span style="color: rgb(0, 205, 0);"&gt;12&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 93 &lt;/span&gt;         meridiem = (meridiem == &lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;AM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt; ? &lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;PM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt; : &lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;AM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 94 &lt;/span&gt;         hour_increment -= &lt;span style="color: rgb(0, 205, 0);"&gt;12&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 95 &lt;/span&gt;       &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 96 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 97 &lt;/span&gt;       hour += hour_increment&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 98 &lt;/span&gt;       &lt;span style="color: rgb(238, 0, 0);"&gt;# special case for 12th hour&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt; 99 &lt;/span&gt;       meridiem = (meridiem == &lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;AM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt; ? &lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;PM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt; : &lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;AM&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt;) &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; hour == &lt;span style="color: rgb(0, 205, 0);"&gt;12&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;100 &lt;/span&gt;       min += min_increment&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;101 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;102 &lt;/span&gt;       hour.to_s + &lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt; + sprintf(&lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;%02d&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;'&lt;/span&gt;, min) + &lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;"&lt;/span&gt; + meridiem&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;103 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;104 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;105 &lt;/span&gt;     &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;106 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;107 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;def&lt;/span&gt; &lt;span style="color: rgb(0, 205, 0);"&gt;self&lt;/span&gt;.&lt;span style="color: rgb(0, 139, 139);"&gt;parse_time_string&lt;/span&gt;(time)&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;108 &lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;raise&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;ArgumentError&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/span&gt; (matches = time.match(&lt;span style="color: rgb(255, 20, 147);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;(\d{1,2}):(\d{1,2})&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;\s&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;+(\w{2})&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;/&lt;/span&gt;))&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;109 &lt;/span&gt;         matches = time.match(&lt;span style="color: rgb(255, 20, 147);"&gt;/&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;^(\d{1,2}):(\d{1,2})&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;\s&lt;/span&gt;&lt;span style="color: rgb(0, 205, 0);"&gt;+([A|P]M)$&lt;/span&gt;&lt;span style="color: rgb(255, 20, 147);"&gt;/&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;110 &lt;/span&gt;         hour = matches[&lt;span style="color: rgb(0, 205, 0);"&gt;1&lt;/span&gt;].to_i&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;111 &lt;/span&gt;         min = matches[&lt;span style="color: rgb(0, 205, 0);"&gt;2&lt;/span&gt;].to_i&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;112 &lt;/span&gt;         meridiem = matches[&lt;span style="color: rgb(0, 205, 0);"&gt;3&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;113 &lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;raise&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;ArgumentError&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/span&gt; (hour &amp;lt;= &lt;span style="color: rgb(0, 205, 0);"&gt;12&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;114 &lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;raise&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;ArgumentError&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/span&gt; (min &amp;lt; &lt;span style="color: rgb(0, 205, 0);"&gt;60&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;115 &lt;/span&gt;         &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt; [hour, min, meridiem]&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;116 &lt;/span&gt;     &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;117 &lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;end&lt;/span&gt; &lt;span style="color: rgb(238, 0, 0);"&gt;# end class TimeCalc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;118 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;119 &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 205, 0);"&gt;__FILE__&lt;/span&gt; == &lt;span style="color: rgb(0, 139, 139);"&gt;$0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;120 &lt;/span&gt;  puts &lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/span&gt;.add_minutes(&lt;span style="color: rgb(0, 139, 139);"&gt;ARGV&lt;/span&gt;[&lt;span style="color: rgb(0, 205, 0);"&gt;0&lt;/span&gt;], &lt;span style="color: rgb(0, 139, 139);"&gt;ARGV&lt;/span&gt;[&lt;span style="color: rgb(0, 205, 0);"&gt;1&lt;/span&gt;].to_i)&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;121 &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;122 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;# vim colorscheme = delek&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-3357616630908518609?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/3357616630908518609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=3357616630908518609' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/3357616630908518609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/3357616630908518609'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2008/01/timecalc-with-bug-fixed.html' title='Ruby : Time Math Interview Problem With Bug Fixed (still writing test first)'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-2696420639290656562</id><published>2007-12-30T20:02:00.000-08:00</published><updated>2007-12-30T23:12:14.470-08:00</updated><title type='text'>Ruby: One liner to strip the line number from code posted</title><content type='html'>In response to my previous post my friend &lt;a href="http://saaraydost.blogspot.com/2007_12_01_archive.html#6793218425828079947"&gt;Arsalan posted his C# solution on my shared friend blog SaarayDost&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Both my solution and his had line numbers with the code which makes it easy to reference a line number in a discussion but if you want to run and test code it can be painful to strip them out one by one.&lt;br /&gt;&lt;br /&gt;I wrote the following quick ruby one liner that can be run on a file after copy-pasting the code and saving it. &lt;br /&gt;&lt;pre&gt;&lt;br /&gt; ruby -lne 'puts $_.gsub(/^\s?\d+:?/, "")' ali.rb &gt; ali.rb&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I am sure there good be a better more clever way to do this after all TIMTOWDI but here I use the l to remove newline at the end of each line, n to iterate over the given file one line at a time and e to execute the following code string (in quotes, on each line). $_ is the magic variable (a perl legacy in ruby) that magically populated, in this case with the current line of file being processed. gsub simply removed the pattern match in the first argument by the string in the second argument.&lt;br /&gt;&lt;br /&gt;While searching for a good description of $_ I also found &lt;a href="http://fepus.net/ruby1line.txt"&gt;this interesting link with other useful ruby one-liners.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Update:&lt;/span&gt; found another way to achieve the above result. -p option prints the $_ at the end of each iteration.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ruby -lpe '$_.gsub!(/^\s?\d+:?/, "")' ali.rb &gt; ali.rb&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-2696420639290656562?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/2696420639290656562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=2696420639290656562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/2696420639290656562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/2696420639290656562'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/12/ruby-one-liner-to-strip-line-number.html' title='Ruby: One liner to strip the line number from code posted'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-8867261925925865974</id><published>2007-12-28T15:18:00.000-08:00</published><updated>2007-12-28T15:25:08.862-08:00</updated><title type='text'>Ruby : Time Math Interview Problem Done Test First</title><content type='html'>Question from : &lt;a href="http://www.blist.com/careers.html"&gt;Blist.com Career Page&lt;/a&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#804040"&gt;  1 &lt;/font&gt;&lt;font color="#0000ff"&gt;# Without using any built in date or time functions, write a function or method&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;  2 &lt;/font&gt;&lt;font color="#0000ff"&gt;# that accepts two mandatory arguments. The first argument is a string of the&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;  3 &lt;/font&gt;&lt;font color="#0000ff"&gt;# format &amp;quot;[H]H:MM {AM|PM}&amp;quot; and the second argument is an integer. Assume the&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;  4 &lt;/font&gt;&lt;font color="#0000ff"&gt;# integer is the number of minutes to add to the string. The return value of&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;  5 &lt;/font&gt;&lt;font color="#0000ff"&gt;# the function should be a string of the same format as the first argument.&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;  6 &lt;/font&gt;&lt;font color="#0000ff"&gt;# For example AddMinutes(&amp;quot;9:13 AM&amp;quot;, 10) would return &amp;quot;9:23 AM&amp;quot;. The exercise&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;  7 &lt;/font&gt;&lt;font color="#0000ff"&gt;# isn't meant to be too hard. I just want to see how you code. Feel free to&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;  8 &lt;/font&gt;&lt;font color="#0000ff"&gt;# do it procedurally or in an object oriented way, whichever you prefer. Use&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;  9 &lt;/font&gt;&lt;font color="#0000ff"&gt;# any language you want. Write production quality code. &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 10 &lt;/font&gt;&lt;font color="#0000ff"&gt;# Question Source: &lt;a href="http://blist.com/blog/"&gt;http://blist.com/blog/&lt;/a&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 11 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 12 &lt;/font&gt;&lt;font color="#0000ff"&gt;# the following solution was developed using TDD&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 13 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 14 &lt;/font&gt;&lt;font color="#a020f0"&gt;require&lt;/font&gt; &lt;font color="#6a5acd"&gt;'&lt;/font&gt;&lt;font color="#ff00ff"&gt;test/unit&lt;/font&gt;&lt;font color="#6a5acd"&gt;'&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 15 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 16 &lt;/font&gt;&lt;font color="#a020f0"&gt;class &lt;/font&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;TestTimeCalc&lt;/b&gt;&lt;/font&gt; &amp;lt; &lt;font color="#008080"&gt;Test&lt;/font&gt;::&lt;font color="#008080"&gt;Unit&lt;/font&gt;::&lt;font color="#008080"&gt;TestCase&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 17 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 18 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;setup&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 19 &lt;/font&gt;        &lt;font color="#008080"&gt;@time&lt;/font&gt; = &lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff00ff"&gt;9:13 AM&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 20 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 21 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 22 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;test_new_time_cal&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 23 &lt;/font&gt;        assert_not_nil(&lt;font color="#008080"&gt;TimeCalc&lt;/font&gt;.new)&lt;br /&gt;&lt;font color="#804040"&gt; 24 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 25 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 26 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;test_add_minute_zero&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 27 &lt;/font&gt;        assert_equal(&lt;font color="#008080"&gt;@time&lt;/font&gt;, &lt;font color="#008080"&gt;TimeCalc&lt;/font&gt;.add_minutes(&lt;font color="#008080"&gt;@time&lt;/font&gt;, &lt;font color="#ff00ff"&gt;0&lt;/font&gt;))&lt;br /&gt;&lt;font color="#804040"&gt; 28 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 29 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 30 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;test_add_minute_ten&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 31 &lt;/font&gt;        assert_equal(&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff00ff"&gt;9:23 AM&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#008080"&gt;TimeCalc&lt;/font&gt;.add_minutes(&lt;font color="#008080"&gt;@time&lt;/font&gt;, &lt;font color="#ff00ff"&gt;10&lt;/font&gt;))&lt;br /&gt;&lt;font color="#804040"&gt; 32 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 33 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 34 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;test_add_minute_thirteen&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 35 &lt;/font&gt;        assert_equal(&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff00ff"&gt;9:26 AM&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#008080"&gt;TimeCalc&lt;/font&gt;.add_minutes(&lt;font color="#008080"&gt;@time&lt;/font&gt;, &lt;font color="#ff00ff"&gt;13&lt;/font&gt;))&lt;br /&gt;&lt;font color="#804040"&gt; 36 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 37 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 38 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;test_add_hour&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 39 &lt;/font&gt;        assert_equal(&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff00ff"&gt;10:13 AM&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#008080"&gt;TimeCalc&lt;/font&gt;.add_minutes(&lt;font color="#008080"&gt;@time&lt;/font&gt;, &lt;font color="#ff00ff"&gt;60&lt;/font&gt;))&lt;br /&gt;&lt;font color="#804040"&gt; 40 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 41 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 42 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;test_add_two_hours_fifteen_minutes&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 43 &lt;/font&gt;        assert_equal(&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff00ff"&gt;11:28 AM&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#008080"&gt;TimeCalc&lt;/font&gt;.add_minutes(&lt;font color="#008080"&gt;@time&lt;/font&gt;, &lt;font color="#ff00ff"&gt;135&lt;/font&gt;))&lt;br /&gt;&lt;font color="#804040"&gt; 44 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 45 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 46 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;test_add_past_meridiem&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 47 &lt;/font&gt;        &lt;font color="#0000ff"&gt;# 785 minutes = 13 hours and 5 minutes&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 48 &lt;/font&gt;        assert_equal(&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff00ff"&gt;10:18 PM&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#008080"&gt;TimeCalc&lt;/font&gt;.add_minutes(&lt;font color="#008080"&gt;@time&lt;/font&gt;, &lt;font color="#ff00ff"&gt;785&lt;/font&gt;))&lt;br /&gt;&lt;font color="#804040"&gt; 49 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 50 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 51 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;test_alpha_hour_min_format_throws_exception&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 52 &lt;/font&gt;        assert_raise(&lt;font color="#008080"&gt;ArgumentError&lt;/font&gt;) { &lt;font color="#008080"&gt;TimeCalc&lt;/font&gt;.add_minutes(&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff00ff"&gt;AB:CD AM&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#ff00ff"&gt;10&lt;/font&gt;) }&lt;br /&gt;&lt;font color="#804040"&gt; 53 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 54 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 55 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;test_bad_meridiem_throws_exception&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 56 &lt;/font&gt;        assert_raise(&lt;font color="#008080"&gt;ArgumentError&lt;/font&gt;) { &lt;font color="#008080"&gt;TimeCalc&lt;/font&gt;.add_minutes(&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff00ff"&gt;AB:CD TM&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#ff00ff"&gt;10&lt;/font&gt;) }&lt;br /&gt;&lt;font color="#804040"&gt; 57 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 58 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 59 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;test_hr_greater_than_twelve&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 60 &lt;/font&gt;        assert_raise(&lt;font color="#008080"&gt;ArgumentError&lt;/font&gt;) { &lt;font color="#008080"&gt;TimeCalc&lt;/font&gt;.add_minutes(&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff00ff"&gt;13:00 PM&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#ff00ff"&gt;10&lt;/font&gt;) }&lt;br /&gt;&lt;font color="#804040"&gt; 61 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 62 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 63 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;test_min_greater_than_fifty_nine&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 64 &lt;/font&gt;        assert_raise(&lt;font color="#008080"&gt;ArgumentError&lt;/font&gt;) { &lt;font color="#008080"&gt;TimeCalc&lt;/font&gt;.add_minutes(&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff00ff"&gt;12:60 PM&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;, &lt;font color="#ff00ff"&gt;10&lt;/font&gt;) }&lt;br /&gt;&lt;font color="#804040"&gt; 65 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 66 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 67 &lt;/font&gt;&lt;font color="#a020f0"&gt;end&lt;/font&gt; &lt;font color="#0000ff"&gt;# end class TestTimeCalc&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 68 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 69 &lt;/font&gt;&lt;font color="#a020f0"&gt;class &lt;/font&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;TimeCalc&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 70 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 71 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;self.add_minutes&lt;/font&gt;(time, minutes)&lt;br /&gt;&lt;font color="#804040"&gt; 72 &lt;/font&gt;      (hour, min, meridiem) = parse_time_string(time)&lt;br /&gt;&lt;font color="#804040"&gt; 73 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 74 &lt;/font&gt;      hour_increment = (min + minutes)/&lt;font color="#ff00ff"&gt;60&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 75 &lt;/font&gt;      min_increment = (min + minutes)%&lt;font color="#ff00ff"&gt;60&lt;/font&gt; - min&lt;br /&gt;&lt;font color="#804040"&gt; 76 &lt;/font&gt;      &lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; (hour_increment &amp;gt;= &lt;font color="#ff00ff"&gt;12&lt;/font&gt;)&lt;br /&gt;&lt;font color="#804040"&gt; 77 &lt;/font&gt;        meridiem = (meridiem == &lt;font color="#6a5acd"&gt;'&lt;/font&gt;&lt;font color="#ff00ff"&gt;AM&lt;/font&gt;&lt;font color="#6a5acd"&gt;'&lt;/font&gt; ? &lt;font color="#6a5acd"&gt;'&lt;/font&gt;&lt;font color="#ff00ff"&gt;PM&lt;/font&gt;&lt;font color="#6a5acd"&gt;'&lt;/font&gt; : &lt;font color="#6a5acd"&gt;'&lt;/font&gt;&lt;font color="#ff00ff"&gt;AM&lt;/font&gt;&lt;font color="#6a5acd"&gt;'&lt;/font&gt;)&lt;br /&gt;&lt;font color="#804040"&gt; 78 &lt;/font&gt;        hour_increment -= &lt;font color="#ff00ff"&gt;12&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 79 &lt;/font&gt;      &lt;font color="#804040"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 80 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 81 &lt;/font&gt;      hour += hour_increment&lt;br /&gt;&lt;font color="#804040"&gt; 82 &lt;/font&gt;      min += min_increment&lt;br /&gt;&lt;font color="#804040"&gt; 83 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 84 &lt;/font&gt;      hour.to_s + &lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff00ff"&gt;:&lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt; + min.to_s + &lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff00ff"&gt; &lt;/font&gt;&lt;font color="#6a5acd"&gt;&amp;quot;&lt;/font&gt; + meridiem&lt;br /&gt;&lt;font color="#804040"&gt; 85 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 86 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 87 &lt;/font&gt;    &lt;font color="#804040"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 88 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 89 &lt;/font&gt;    &lt;font color="#a020f0"&gt;def &lt;/font&gt;&lt;font color="#008080"&gt;self.parse_time_string&lt;/font&gt;(time)&lt;br /&gt;&lt;font color="#804040"&gt; 90 &lt;/font&gt;        &lt;font color="#804040"&gt;&lt;b&gt;raise&lt;/b&gt;&lt;/font&gt; &lt;font color="#008080"&gt;ArgumentError&lt;/font&gt; &lt;font color="#804040"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; (matches = time.match(&lt;font color="#6a5acd"&gt;/&lt;/font&gt;&lt;font color="#ff00ff"&gt;(\d{1,2}):(\d{1,2})&lt;/font&gt;&lt;font color="#6a5acd"&gt;\s&lt;/font&gt;&lt;font color="#ff00ff"&gt;+(\w{2})&lt;/font&gt;&lt;font color="#6a5acd"&gt;/&lt;/font&gt;))&lt;br /&gt;&lt;font color="#804040"&gt; 91 &lt;/font&gt;        matches = time.match(&lt;font color="#6a5acd"&gt;/&lt;/font&gt;&lt;font color="#ff00ff"&gt;^(\d{1,2}):(\d{1,2})&lt;/font&gt;&lt;font color="#6a5acd"&gt;\s&lt;/font&gt;&lt;font color="#ff00ff"&gt;+([A|P]M)$&lt;/font&gt;&lt;font color="#6a5acd"&gt;/&lt;/font&gt;)&lt;br /&gt;&lt;font color="#804040"&gt; 92 &lt;/font&gt;        hour = matches[&lt;font color="#ff00ff"&gt;1&lt;/font&gt;].to_i&lt;br /&gt;&lt;font color="#804040"&gt; 93 &lt;/font&gt;        min = matches[&lt;font color="#ff00ff"&gt;2&lt;/font&gt;].to_i&lt;br /&gt;&lt;font color="#804040"&gt; 94 &lt;/font&gt;        meridiem = matches[&lt;font color="#ff00ff"&gt;3&lt;/font&gt;]&lt;br /&gt;&lt;font color="#804040"&gt; 95 &lt;/font&gt;        &lt;font color="#804040"&gt;&lt;b&gt;raise&lt;/b&gt;&lt;/font&gt; &lt;font color="#008080"&gt;ArgumentError&lt;/font&gt; &lt;font color="#804040"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; (hour &amp;lt;= &lt;font color="#ff00ff"&gt;12&lt;/font&gt;)&lt;br /&gt;&lt;font color="#804040"&gt; 96 &lt;/font&gt;        &lt;font color="#804040"&gt;&lt;b&gt;raise&lt;/b&gt;&lt;/font&gt; &lt;font color="#008080"&gt;ArgumentError&lt;/font&gt; &lt;font color="#804040"&gt;&lt;b&gt;unless&lt;/b&gt;&lt;/font&gt; (min &amp;lt; &lt;font color="#ff00ff"&gt;60&lt;/font&gt;)&lt;br /&gt;&lt;font color="#804040"&gt; 97 &lt;/font&gt;        &lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt; [hour, min, meridiem]&lt;br /&gt;&lt;font color="#804040"&gt; 98 &lt;/font&gt;    &lt;font color="#a020f0"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 99 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;100 &lt;/font&gt;&lt;font color="#a020f0"&gt;end&lt;/font&gt; &lt;font color="#0000ff"&gt;# end class TimeCalc&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-8867261925925865974?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/8867261925925865974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=8867261925925865974' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/8867261925925865974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/8867261925925865974'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/12/ruby-date-math-interview-problem-done.html' title='Ruby : Time Math Interview Problem Done Test First'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-6351237675770179087</id><published>2007-12-23T16:48:00.000-08:00</published><updated>2007-12-23T16:54:36.639-08:00</updated><title type='text'>Vim: Inserting output of unix/linux command</title><content type='html'>I had seen other vim experts do this but couldn't remember how they did. Today I finally search and found how to insert the output of a unix/linux command directly in a vim buffer(without copy-pasting).&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  :r!ls /home/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;or in the visual mode (by pressing V) simply !ls /home/&lt;br /&gt;&lt;br /&gt;Simple isn't it and quite useful at times.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-6351237675770179087?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/6351237675770179087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=6351237675770179087' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/6351237675770179087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/6351237675770179087'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/12/vim-inserting-output-of-unixlinux.html' title='Vim: Inserting output of unix/linux command'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-932936566085868373</id><published>2007-10-02T17:15:00.000-07:00</published><updated>2007-10-02T17:19:48.877-07:00</updated><title type='text'>Ruby: net/smtp weirdness - to address can't contain dash/hyphen (-)</title><content type='html'>This caused me a lot of grief and debugging time.&lt;br /&gt;&lt;br /&gt;I am using code like this to send emails from a CGI script:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    Net::SMTP.start('smtp.example.com', 25) do |smtp|&lt;br /&gt;      smtp.open_message_stream('from@example.com', ['dest-address@example.com']) do |f|&lt;br /&gt;        f.puts 'From: from@example.com'&lt;br /&gt;        f.puts 'To: dest-address@example.com'&lt;br /&gt;        f.puts 'Cc: cc-address@example.com'&lt;br /&gt;        f.puts 'Subject: test message'&lt;br /&gt;        f.puts&lt;br /&gt;        f.puts 'This is a test message.'&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and this is failing silent in my case.&lt;br /&gt;&lt;br /&gt;I have discovered through trial and error that if I remove the -(dash) from the to address it works. Dashes in from or CC addresses does not matter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-932936566085868373?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/932936566085868373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=932936566085868373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/932936566085868373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/932936566085868373'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/10/ruby-netsmtp-weirdness-to-address-cant.html' title='Ruby: net/smtp weirdness - to address can&apos;t contain dash/hyphen (-)'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-8953237055530743190</id><published>2007-09-25T08:52:00.000-07:00</published><updated>2007-09-25T08:58:26.220-07:00</updated><title type='text'>Vim: Delete every line in the file that does not match a pattern</title><content type='html'>I realized the power of :g much later than many other commands in vim and I think this one has been there even in vi for a long time.&lt;br /&gt;&lt;br /&gt;Here is a great tip that covers the virtues of :g in vim:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.vim.org/tips/tip.php?tip_id=227"&gt;Tip #227: Power of :g&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The reason I ended up with this tip was that I needed to find a simple command that would delete all lines matching a pattern.&lt;br /&gt;&lt;br /&gt;I knew how to delete all lines that matched a pattern.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;:g/pattern/d&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;but I was looking for the inverse and I found it :g's cousin :v in the above tip as a user comment.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;:v/patter/d&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;did the job very well. Once again vim saved the day. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-8953237055530743190?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/8953237055530743190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=8953237055530743190' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/8953237055530743190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/8953237055530743190'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/09/vim-delete-every-line-in-file-that-does.html' title='Vim: Delete every line in the file that does not match a pattern'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-560758157961759703</id><published>2007-09-12T17:27:00.000-07:00</published><updated>2007-09-12T17:29:27.404-07:00</updated><title type='text'>*nix: nslookup to resolve an IP to host name</title><content type='html'>nslookup is useful to resolve an ip address to a host name in the linux/unix environment.&lt;br /&gt;&lt;br /&gt;nslookup - query Internet name servers interactively&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-560758157961759703?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/560758157961759703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=560758157961759703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/560758157961759703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/560758157961759703'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/09/nix-nslookup-to-resolve-ip-to-host-name.html' title='*nix: nslookup to resolve an IP to host name'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-2803686411370766962</id><published>2007-08-08T07:15:00.001-07:00</published><updated>2007-08-08T07:21:05.062-07:00</updated><title type='text'>Ruby : Where are the gems on ubuntu 7.04</title><content type='html'>It took me some time to figure it out where the gems are installed on my ubuntu 7.04 linux machine so I thought I would save it here as a reminder. The ruby gems are stored here:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/var/lib/gems/1.8/gems&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;What I did to find this is to run gem install without sudo to see the error message:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;me@desktop:/usr/lib/ruby/1.8$ gem install rails&lt;br /&gt;Bulk updating Gem source index for: http://gems.rubyforge.org&lt;br /&gt;ERROR:  While executing gem ... (Errno::EACCES)&lt;br /&gt;    Permission denied - /var/lib/gems/1.8/cache/rails-1.2.3.gem&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The permission denied message gave me my answer. Who said error messages are not educational?&lt;br /&gt;&lt;br /&gt;Hurray!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-2803686411370766962?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/2803686411370766962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=2803686411370766962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/2803686411370766962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/2803686411370766962'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/08/ruby-where-are-gems-on-ubuntu-704.html' title='Ruby : Where are the gems on ubuntu 7.04'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-8391540449599114786</id><published>2007-08-05T23:37:00.000-07:00</published><updated>2007-08-07T21:31:31.765-07:00</updated><title type='text'>MySQL and Rails: mysql.sock not found</title><content type='html'>I started doing my webapp on my brand new server (ubuntu linux 7.04) and when trying to run my first migration I got the following error message:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;rake db:migrate&lt;br /&gt;(in /home/rizvi/projects/somewebapp)&lt;br /&gt;rake aborted!&lt;br /&gt;No such file or directory - /tmp/mysql.sock&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here is a useful mysql command to find out mysql defaults:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysqladmin --print-defaults&lt;br /&gt;mysqladmin would have been started with the following arguments:&lt;br /&gt;--port=3306 --socket=/var/run/mysqld/mysqld.sock&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here is what solved the problem:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get install libmysql-ruby&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note: The above is an alternative to : &lt;pre&gt;sudo gem install mysql&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;Now I get:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;rake db:migrate&lt;br /&gt;(in /home/rizvi/projects/somewebapp)&lt;br /&gt;rake aborted!&lt;br /&gt;Unknown database 'somewebapp_development'&lt;br /&gt;(See full trace by running task with --trace)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So I need to do the following:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysqladmin -u root create somewebapp_development -p&lt;br /&gt;mysqladmin -u root create somewebapp_test -p&lt;br /&gt;mysqladmin -u root create somewebapp_production -p&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Reference: &lt;a href="http://wiki.rubyonrails.org/rails/pages/RailsOnUbuntu"&gt;RailsOnUbuntu&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-8391540449599114786?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/8391540449599114786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=8391540449599114786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/8391540449599114786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/8391540449599114786'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/08/mysql-and-rails-mysqlsock-not-found.html' title='MySQL and Rails: mysql.sock not found'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-5283519341908046049</id><published>2007-07-02T09:33:00.000-07:00</published><updated>2007-07-02T09:37:30.624-07:00</updated><title type='text'>Vim: Turn off gVim toolbar</title><content type='html'>I don't know about you but I don't like my gVim real estate to be polluted by toolbar under the menus so in my early days of using gVim I researched and discovered a way to turn them off.&lt;br /&gt;&lt;br /&gt;Here is what you need to put in your .gvimrc (or _gvimrc on windows):&lt;br /&gt;&lt;pre&gt;" To set the toolbars off (icons on top of the screen)&lt;br /&gt;set guioptions-=T&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-5283519341908046049?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/5283519341908046049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=5283519341908046049' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/5283519341908046049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/5283519341908046049'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/07/vim-turn-off-gvim-toolbar.html' title='Vim: Turn off gVim toolbar'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-1421271450285274746</id><published>2007-07-02T09:23:00.000-07:00</published><updated>2007-07-02T09:28:14.285-07:00</updated><title type='text'>Vim: Setting height and width of gVim window</title><content type='html'>I always struggled with this on my windows Vim and today I saw the fix on a vim users mailing list addressing this exact question.&lt;br /&gt;&lt;br /&gt;Here is the way to set height (lines) of gVim (graphical Vim) window:&lt;br /&gt;&lt;pre&gt;:set lines=40&lt;/pre&gt;&lt;br /&gt;and here is how to set width (columns) of gVim windows:&lt;br /&gt;&lt;pre&gt;:set columns=80&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-1421271450285274746?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/1421271450285274746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=1421271450285274746' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/1421271450285274746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/1421271450285274746'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/07/vim-setting-height-and-width-of-gvim.html' title='Vim: Setting height and width of gVim window'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-5673202711588974283</id><published>2007-06-25T05:48:00.001-07:00</published><updated>2007-06-25T06:03:04.648-07:00</updated><title type='text'>Ruby: Rotating Image Files Description</title><content type='html'>I was looking for a tool that would do the same thing that flick does on upload, that is rotate the files appropriately based on information embedded in the image files.&lt;br /&gt;&lt;br /&gt;Finally I decided to just do it!&lt;br /&gt;&lt;br /&gt;Since all my photos are on my windows machine that was my platform of choice.&lt;br /&gt;&lt;br /&gt;Thankfully RMagick package for windows comes with ImageMagick installer. The only thing tricky was to install the gem file from the locally downloaded gem file.&lt;br /&gt;&lt;br /&gt;While searching for EXIF library for Ruby I found quite a few on RubyForge but finally exifr seemed most functional/friendly.&lt;br /&gt;&lt;br /&gt;Entry below shows the code I ended up with. &lt;br /&gt;&lt;br /&gt;Instructions for outputting the html for the code in gVim on windows:&lt;br /&gt;&lt;br /&gt;* :colorscheme delek&lt;br /&gt;* Syntax -&gt; Convert to HTML&lt;br /&gt;* remove html, head and body tags&lt;br /&gt;* paste to blogspot&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-5673202711588974283?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/5673202711588974283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=5673202711588974283' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/5673202711588974283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/5673202711588974283'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/06/ruby-rotating-image-files-description.html' title='Ruby: Rotating Image Files Description'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-948952256287968383</id><published>2007-06-25T05:43:00.000-07:00</published><updated>2007-06-25T06:04:29.720-07:00</updated><title type='text'>Ruby: Rotating Image Files Code</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;require&lt;/font&gt; &lt;font color="#ff1493"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;rmagick&lt;/font&gt;&lt;font color="#ff1493"&gt;'&lt;/font&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;require&lt;/font&gt; &lt;font color="#ff1493"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;exifr&lt;/font&gt;&lt;font color="#ff1493"&gt;'&lt;/font&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;require&lt;/font&gt; &lt;font color="#ff1493"&gt;'&lt;/font&gt;&lt;font color="#00cd00"&gt;pp&lt;/font&gt;&lt;font color="#ff1493"&gt;'&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#008b8b"&gt;ROTATE_CLOCKWISE&lt;/font&gt; = &lt;font color="#00cd00"&gt;90&lt;/font&gt;&lt;br /&gt;&lt;font color="#008b8b"&gt;ROTATE_ANTICLOCKWISE&lt;/font&gt; = -&lt;font color="#00cd00"&gt;90&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#cd00cd"&gt;def &lt;/font&gt;&lt;font color="#008b8b"&gt;rotate&lt;/font&gt;(file)&lt;br /&gt;  image_exif = &lt;font color="#008b8b"&gt;EXIFR&lt;/font&gt;::&lt;font color="#008b8b"&gt;JPEG&lt;/font&gt;.new(file).exif&lt;br /&gt;&lt;br /&gt;  puts &lt;font color="#ff1493"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff1493"&gt;#{file}&lt;/font&gt;&lt;font color="#00cd00"&gt; : &lt;/font&gt;&lt;font color="#ff1493"&gt;#{image_exif[:orientation]}&lt;/font&gt;&lt;font color="#ff1493"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000ff"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; (image_exif[&lt;font color="#008b8b"&gt;:orientation&lt;/font&gt;] == &lt;font color="#008b8b"&gt;EXIFR&lt;/font&gt;::&lt;font color="#008b8b"&gt;TIFF&lt;/font&gt;::&lt;font color="#008b8b"&gt;RightTopOrientation&lt;/font&gt;)&lt;br /&gt;    degrees = &lt;font color="#008b8b"&gt;ROTATE_CLOCKWISE&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000ff"&gt;&lt;b&gt;elsif&lt;/b&gt;&lt;/font&gt; (image_exif[&lt;font color="#008b8b"&gt;:orientation&lt;/font&gt;] == &lt;font color="#008b8b"&gt;EXIFR&lt;/font&gt;::&lt;font color="#008b8b"&gt;TIFF&lt;/font&gt;::&lt;font color="#008b8b"&gt;LeftBottomOrientation&lt;/font&gt;)&lt;br /&gt;    degrees = &lt;font color="#008b8b"&gt;ROTATE_ANTICLOCKWISE&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000ff"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    puts &lt;font color="#ff1493"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#00cd00"&gt;Not rotating &lt;/font&gt;&lt;font color="#ff1493"&gt;#{file}&lt;/font&gt;&lt;font color="#ff1493"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  image = (&lt;font color="#008b8b"&gt;Magick&lt;/font&gt;::&lt;font color="#008b8b"&gt;Image&lt;/font&gt;.read(file)).first&lt;br /&gt;  &lt;font color="#ee0000"&gt;#image.rotate(degrees).write(&amp;quot;#{file.split('.').first}_rotated.jpg&amp;quot;)&lt;/font&gt;&lt;br /&gt;  image.rotate(degrees).write(&lt;font color="#ff1493"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#ff1493"&gt;#{file}&lt;/font&gt;&lt;font color="#ff1493"&gt;&amp;quot;&lt;/font&gt;)&lt;br /&gt;&lt;font color="#cd00cd"&gt;end&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;dir = &lt;font color="#008b8b"&gt;ARGV&lt;/font&gt;[&lt;font color="#00cd00"&gt;0&lt;/font&gt;]&lt;br /&gt;&lt;br /&gt;&lt;font color="#008b8b"&gt;Dir&lt;/font&gt;.entries(dir).each &lt;font color="#0000ff"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/font&gt; |&lt;font color="#008b8b"&gt;file&lt;/font&gt;|&lt;br /&gt;  &lt;font color="#0000ff"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; (file =~ &lt;font color="#ff1493"&gt;/&lt;/font&gt;&lt;font color="#00cd00"&gt;jpg&lt;/font&gt;&lt;font color="#ff1493"&gt;/i&lt;/font&gt;)&lt;br /&gt;    rotate(&lt;font color="#008b8b"&gt;File&lt;/font&gt;.join(dir, file))&lt;br /&gt;  &lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-948952256287968383?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/948952256287968383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=948952256287968383' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/948952256287968383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/948952256287968383'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/06/ruby-rotating-image-files.html' title='Ruby: Rotating Image Files Code'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-5095607127794934153</id><published>2007-05-21T23:33:00.001-07:00</published><updated>2007-05-21T23:33:47.636-07:00</updated><title type='text'>Vim: .gvimrc on Mac</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; Copied from $VIMRUNTIME/gvimrc_example.vim&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; An example for a gvimrc file.&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; The commands in this are executed when the GUI is started.&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#cd00cd"&gt;Maintainer:&lt;/font&gt;&lt;font color="#ee0000"&gt; Bram Moolenaar &amp;lt;Bram@vim.org&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; Last change:  2001 Sep 02&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; To use it, copy it to&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;     for Unix and OS/2:  ~/.gvimrc&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;       for Amiga:  s:.gvimrc&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;  for MS-DOS and Win32:  $VIM\_gvimrc&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;     for OpenVMS:  sys$login:.gvimrc&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; Make external commands work through a pipe instead of a pseudo-tty&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;set noguipty&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; set the X11 font to use&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; set guifont=-misc-fixed-medium-r-normal--14-130-75-75-c-70-iso8859-1&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;ch&lt;/font&gt;=2    &lt;font color="#ee0000"&gt;&amp;quot; Make command line two lines high&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;mousehide&lt;/font&gt;   &lt;font color="#ee0000"&gt;&amp;quot; Hide the mouse when typing text&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;antialias&lt;/font&gt;   &lt;font color="#ee0000"&gt;&amp;quot; setting antialiasing for guifont&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; Make shift-insert work like in Xterm&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff1493"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ff1493"&gt;S-Insert&lt;/font&gt;&lt;font color="#ff1493"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#ff1493"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ff1493"&gt;MiddleMouse&lt;/font&gt;&lt;font color="#ff1493"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;map!&lt;/b&gt;&lt;/font&gt; &lt;font color="#ff1493"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ff1493"&gt;S-Insert&lt;/font&gt;&lt;font color="#ff1493"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#ff1493"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ff1493"&gt;MiddleMouse&lt;/font&gt;&lt;font color="#ff1493"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; Only do this for Vim version 5.0 and later.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;version&lt;/b&gt;&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;&amp;gt;=&lt;/b&gt;&lt;/font&gt; &lt;font color="#00cd00"&gt;500&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; I like highlighting strings inside C comments&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/font&gt; c_comment_strings&lt;font color="#0000d4"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/font&gt;&lt;font color="#00cd00"&gt;1&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; Switch on syntax highlighting if it wasn't on yet.&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; !&lt;font color="#008b8b"&gt;exists&lt;/font&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;syntax_on&amp;quot;&lt;/font&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000d4"&gt;&lt;b&gt;syntax&lt;/b&gt;&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;on&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; Switch on search pattern highlighting.&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;hlsearch&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; For Win32 version, have &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;K&amp;quot;&lt;/font&gt;&lt;font color="#ee0000"&gt; lookup the keyword in a help file&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot;if has(&amp;quot;win32&amp;quot;)&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot;  let winhelpfile='windows.hlp'&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot;  map K :execute &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;!start winhlp32 -k &amp;lt;cword&amp;gt; &amp;quot;&lt;/font&gt;&lt;font color="#ee0000"&gt; . winhelpfile &amp;lt;CR&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot;endif&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; Set nice colors&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; background for normal text is light grey&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; Text below the last line is darker grey&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; Cursor is green, Cyan when &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;:lmap&amp;quot;&lt;/font&gt;&lt;font color="#ee0000"&gt; mappings are active&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; Constants are not underlined but have a slightly lighter background&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;highlight&lt;/b&gt;&lt;/font&gt; Normal &lt;font color="#0000d4"&gt;&lt;b&gt;guibg&lt;/b&gt;&lt;/font&gt;=grey90&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;highlight&lt;/b&gt;&lt;/font&gt; Cursor &lt;font color="#0000d4"&gt;&lt;b&gt;guibg&lt;/b&gt;&lt;/font&gt;=Green &lt;font color="#0000d4"&gt;&lt;b&gt;guifg&lt;/b&gt;&lt;/font&gt;=&lt;font color="#cd00cd"&gt;NONE&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;highlight&lt;/b&gt;&lt;/font&gt; lCursor &lt;font color="#0000d4"&gt;&lt;b&gt;guibg&lt;/b&gt;&lt;/font&gt;=Cyan &lt;font color="#0000d4"&gt;&lt;b&gt;guifg&lt;/b&gt;&lt;/font&gt;=&lt;font color="#cd00cd"&gt;NONE&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;highlight&lt;/b&gt;&lt;/font&gt; NonText &lt;font color="#0000d4"&gt;&lt;b&gt;guibg&lt;/b&gt;&lt;/font&gt;=grey80&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;highlight&lt;/b&gt;&lt;/font&gt; Constant &lt;font color="#0000d4"&gt;&lt;b&gt;gui&lt;/b&gt;&lt;/font&gt;=&lt;font color="#cd00cd"&gt;NONE&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;guibg&lt;/b&gt;&lt;/font&gt;=grey95&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;highlight&lt;/b&gt;&lt;/font&gt; Special &lt;font color="#0000d4"&gt;&lt;b&gt;gui&lt;/b&gt;&lt;/font&gt;=&lt;font color="#cd00cd"&gt;NONE&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;guibg&lt;/b&gt;&lt;/font&gt;=grey95&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; over riding the above settings with my preferred settings&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;colorscheme&lt;/b&gt;&lt;/font&gt; torte&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;background&lt;/font&gt;=dark&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-5095607127794934153?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/5095607127794934153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=5095607127794934153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/5095607127794934153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/5095607127794934153'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/05/vim-gvimrc-on-mac.html' title='Vim: .gvimrc on Mac'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-1679837208852105012</id><published>2007-05-21T23:20:00.001-07:00</published><updated>2007-05-21T23:27:19.682-07:00</updated><title type='text'>Vim: .vimrc on Mac</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; Copied from $VIMRUNTIME/vimrc_example.vim&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; An example for a vimrc file.&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#cd00cd"&gt;Maintainer:&lt;/font&gt;&lt;font color="#ee0000"&gt; Bram Moolenaar &amp;lt;Bram@vim.org&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; Last change:  2002 Sep 19&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; To use it, copy it to&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;     for Unix and OS/2:  ~/.vimrc&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;       for Amiga:  s:.vimrc&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;  for MS-DOS and Win32:  $VIM\_vimrc&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;     for OpenVMS:  sys$login:.vimrc&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; When started as &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;evim&amp;quot;&lt;/font&gt;&lt;font color="#ee0000"&gt;, evim.vim will already have done these settings.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; v:progname &lt;font color="#0000d4"&gt;&lt;b&gt;=~?&lt;/b&gt;&lt;/font&gt; &lt;font color="#00cd00"&gt;&amp;quot;evim&amp;quot;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;finish&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; Use Vim settings, rather then Vi settings (much better!).&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; This must be first, because it changes other options as a side effect.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;nocompatible&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; allow backspacing over everything in insert mode&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;backspace&lt;/font&gt;=indent&lt;font color="#0000d4"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;eol&lt;font color="#0000d4"&gt;&lt;b&gt;,&lt;/b&gt;&lt;/font&gt;start&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#008b8b"&gt;has&lt;/font&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;vms&amp;quot;&lt;/font&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;nobackup&lt;/font&gt;    &lt;font color="#ee0000"&gt;&amp;quot; do not keep a backup file, use versions instead&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;backup&lt;/font&gt;    &lt;font color="#ee0000"&gt;&amp;quot; keep a backup file&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;history&lt;/font&gt;=50    &lt;font color="#ee0000"&gt;&amp;quot; keep 50 lines of command line history&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;ruler&lt;/font&gt;   &lt;font color="#ee0000"&gt;&amp;quot; show the cursor position all the time&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;showcmd&lt;/font&gt;   &lt;font color="#ee0000"&gt;&amp;quot; display incomplete commands&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;incsearch&lt;/font&gt;   &lt;font color="#ee0000"&gt;&amp;quot; do incremental searching&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;number&lt;/font&gt;    &lt;font color="#ee0000"&gt;&amp;quot; show line number&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;tabstop&lt;/font&gt;=2&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;shiftwidth&lt;/font&gt;=2&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;expandtab&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;textwidth&lt;/font&gt;=80&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;background&lt;/font&gt;=dark&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;gfn&lt;/font&gt;=Monaco&lt;font color="#0000d4"&gt;&lt;b&gt;:&lt;/b&gt;&lt;/font&gt;h14  &lt;font color="#ee0000"&gt;&amp;quot; setting to a good Mac OS X font&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;&lt;/font&gt; &lt;font color="#cd00cd"&gt;For Win32 GUI:&lt;/font&gt;&lt;font color="#ee0000"&gt; remove 't' flag from 'guioptions': no tearoff menu entries&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; let &amp;amp;guioptions = substitute(&amp;amp;guioptions, &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;t&amp;quot;&lt;/font&gt;&lt;font color="#ee0000"&gt;, &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;font color="#ee0000"&gt;, &lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;g&amp;quot;&lt;/font&gt;&lt;font color="#ee0000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; Don't use Ex mode, use Q for formatting&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;map&lt;/b&gt;&lt;/font&gt; Q gq&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; This is an alternative that also works in block mode, but the deleted&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; text is lost and it only works for putting the current register.&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot;vnoremap p &amp;quot;_dp&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; Switch syntax highlighting on, when the terminal has colors&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; Also switch on highlighting the last used search pattern.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &amp;amp;t_Co &lt;font color="#0000d4"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; &lt;font color="#00cd00"&gt;2&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;||&lt;/b&gt;&lt;/font&gt; &lt;font color="#008b8b"&gt;has&lt;/font&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;gui_running&amp;quot;&lt;/font&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;syntax&lt;/b&gt;&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;on&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;hlsearch&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;&amp;quot; Only do this part when compiled with support for autocommands.&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#008b8b"&gt;has&lt;/font&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/font&gt;&lt;font color="#00cd00"&gt;&amp;quot;autocmd&amp;quot;&lt;/font&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; Enable file type detection.&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; Use the default filetype settings, so that mail gets 'tw' set to 72,&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; 'cindent' is on in C files, etc.&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; Also load indent files, to automatically do language-dependent indenting.&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;filetype&lt;/b&gt;&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;plugin&lt;/b&gt;&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;indent&lt;/b&gt;&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;on&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; Put these in an autocmd group, so that we can delete them easily.&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;augroup&lt;/b&gt;&lt;/font&gt; vimrcEx&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;au&lt;/b&gt;&lt;/font&gt;!&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; For all text files set 'textwidth' to 78 characters.&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;autocmd&lt;/b&gt;&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;FileType&lt;/b&gt;&lt;/font&gt; text &lt;font color="#0000d4"&gt;&lt;b&gt;setlocal&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;textwidth&lt;/font&gt;=78&lt;br /&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; When editing a file, always jump to the last known cursor position.&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; Don't do it when the position is invalid or when inside an event handler&lt;/font&gt;&lt;br /&gt;&lt;font color="#ee0000"&gt;  &amp;quot; (happens when dropping a file on gvim).&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;autocmd&lt;/b&gt;&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;BufReadPost&lt;/b&gt;&lt;/font&gt; *&lt;br /&gt;&lt;font color="#ff1493"&gt;    \&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; line(&lt;font color="#00cd00"&gt;&amp;quot;'\&amp;quot;&amp;quot;&lt;/font&gt;) &lt;font color="#0000d4"&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;/font&gt; &lt;font color="#00cd00"&gt;0&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;&amp;amp;&amp;amp;&lt;/b&gt;&lt;/font&gt; line(&lt;font color="#00cd00"&gt;&amp;quot;'\&amp;quot;&amp;quot;&lt;/font&gt;) &lt;font color="#0000d4"&gt;&lt;b&gt;&amp;lt;=&lt;/b&gt;&lt;/font&gt; line(&lt;font color="#00cd00"&gt;&amp;quot;$&amp;quot;&lt;/font&gt;) |&lt;br /&gt;&lt;font color="#ff1493"&gt;    \&lt;/font&gt;   exe &lt;font color="#00cd00"&gt;&amp;quot;normal g`\&amp;quot;&amp;quot;&lt;/font&gt; |&lt;br /&gt;&lt;font color="#ff1493"&gt;    \&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;autocmd&lt;/b&gt;&lt;/font&gt; &lt;font color="#0000d4"&gt;&lt;b&gt;BufRead&lt;/b&gt;&lt;/font&gt; *.rhtml &lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;filetype&lt;/font&gt;=eruby&lt;br /&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;augroup&lt;/b&gt;&lt;/font&gt; END&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#0000d4"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/font&gt; &lt;font color="#cd00cd"&gt;autoindent&lt;/font&gt;    &lt;font color="#ee0000"&gt;&amp;quot; always set autoindenting on&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000d4"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/font&gt;&lt;font color="#ee0000"&gt; &amp;quot; has(&amp;quot;autocmd&amp;quot;)&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-1679837208852105012?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/1679837208852105012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=1679837208852105012' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/1679837208852105012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/1679837208852105012'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/05/vim-vimrc-on-mac.html' title='Vim: .vimrc on Mac'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-1127640068806103876</id><published>2007-05-21T23:08:00.000-07:00</published><updated>2007-05-21T23:10:22.455-07:00</updated><title type='text'>Vim: _vimrc on windows</title><content type='html'>&lt;pre&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#cd00cd;"&gt;nocompatible&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;source&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#cd00cd;"&gt;$VIMRUNTIME&lt;/span&gt;/vimrc_example&lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;vim&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;source&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#cd00cd;"&gt;$VIMRUNTIME&lt;/span&gt;/mswin&lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;vim&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;behave&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;mswin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#cd00cd;"&gt;diffexpr&lt;/span&gt;=MyDiff()&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/span&gt; MyDiff&lt;span style="color:#0000ff;"&gt;&lt;b&gt;()&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; opt &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'-a --binary '&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; &amp;amp;diffopt &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=~&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'icase'&lt;/span&gt; | &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; opt &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;opt&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'-i '&lt;/span&gt; | &lt;span style="color:#0000ff;"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; &amp;amp;diffopt &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=~&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'iwhite'&lt;/span&gt; | &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; opt &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;opt&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'-b '&lt;/span&gt; | &lt;span style="color:#0000ff;"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; arg1 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; v:fname_in&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; arg1 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=~&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;' '&lt;/span&gt; | &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; arg1 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'&amp;quot;'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; arg1 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'&amp;quot;'&lt;/span&gt; | &lt;span style="color:#0000ff;"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; arg2 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; v:fname_new&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; arg2 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=~&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;' '&lt;/span&gt; | &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; arg2 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'&amp;quot;'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; arg2 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'&amp;quot;'&lt;/span&gt; | &lt;span style="color:#0000ff;"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; arg3 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; v:fname_out&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; arg3 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=~&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;' '&lt;/span&gt; | &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; arg3 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'&amp;quot;'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; arg3 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'&amp;quot;'&lt;/span&gt; | &lt;span style="color:#0000ff;"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; eq &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;''&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#cd00cd;"&gt;$VIMRUNTIME&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=~&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;' '&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt; &amp;amp;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;sh&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=~&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'\&amp;lt;cmd'&lt;/span&gt;&lt;br /&gt;      &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; cmd &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'&amp;quot;&amp;quot;'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#cd00cd;"&gt;$VIMRUNTIME&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'\diff&amp;quot;'&lt;/span&gt;&lt;br /&gt;      &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; eq &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'&amp;quot;'&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; cmd &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#008b8b;"&gt;substitute&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;$VIMRUNTIME, &lt;span style="color:#00cd00;"&gt;' '&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;'&amp;quot; '&lt;/span&gt;, &lt;span style="color:#00cd00;"&gt;''&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'\diff&amp;quot;'&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;&lt;b&gt;let&lt;/b&gt;&lt;/span&gt; cmd &lt;span style="color:#0000ff;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#cd00cd;"&gt;$VIMRUNTIME&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'\diff'&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;endif&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;&lt;b&gt;silent&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;execute&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;'!'&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; cmd &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;' '&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; opt &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; arg1 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;' '&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; arg2 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#00cd00;"&gt;' &amp;gt; '&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; arg3 &lt;span style="color:#0000ff;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; eq&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;endfunction&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#cd00cd;"&gt;guifont&lt;/span&gt;=Lucida_Console&lt;span style="color:#0000ff;"&gt;&lt;b&gt;:&lt;/b&gt;&lt;/span&gt;h10&lt;span style="color:#0000ff;"&gt;&lt;b&gt;:&lt;/b&gt;&lt;/span&gt;cANSI&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&lt;b&gt;colorscheme&lt;/b&gt;&lt;/span&gt; torte&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-1127640068806103876?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/1127640068806103876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=1127640068806103876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/1127640068806103876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/1127640068806103876'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/05/vim-vimrc-on-windows.html' title='Vim: _vimrc on windows'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-4994627239526865075</id><published>2007-03-20T12:28:00.000-07:00</published><updated>2007-03-20T12:55:08.286-07:00</updated><title type='text'>Find all writeable files in a directory tree</title><content type='html'>I needed to find if I forgot to p4 edit (or add) any of the files I was working with and needed to find all writeable files in my current directory structure (recursively). I did a quick search and found a newsgroup entry that helped (referenced below) but here is what you need to do :&lt;br /&gt;&lt;pre&gt;find . -type f -perm +200&lt;br /&gt;&lt;/pre&gt;4 is for readable(r)&lt;br /&gt;2 is for writeable (w)&lt;br /&gt;1 is for executable (x)&lt;br /&gt;&lt;br /&gt;Do &lt;pre&gt;man find&lt;/pre&gt; and search for perm to find more of what more you can do.&lt;br /&gt;&lt;br /&gt;Ref: http://www.cygwin.com/ml/cygwin/2003-05/msg00502.html&lt;br /&gt;Here is a better reference: &lt;a name="uh-9" href="http://www.grymoire.com/Unix/Find.html#toc-uh-9"&gt;&lt;/a&gt;&lt;a href="http://www.grymoire.com/Unix/Find.html#uh-9"&gt;&lt;span style="font-weight: bold;"&gt;Searching for files by permission&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-4994627239526865075?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/4994627239526865075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=4994627239526865075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/4994627239526865075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/4994627239526865075'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2007/03/find-all-writeable-files-in-directory.html' title='Find all writeable files in a directory tree'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-116476545159570116</id><published>2006-11-28T17:41:00.000-08:00</published><updated>2006-11-28T18:31:41.676-08:00</updated><title type='text'>Windows: Making my laptop *nix friendly</title><content type='html'>I usually do most of my development on my Linux machine and only use my Windows XP laptop for using Outlook (mail and calendaring) and browsing (Firefox, of course).&lt;br /&gt;&lt;br /&gt;I decided to work from home due to weather conditions and had to use my laptop more and finally took the steps to make my laptop more unix friendly.&lt;br /&gt;&lt;br /&gt;I already had my favorite editor &lt;a href="http://www.vim.org"&gt;Vim&lt;/a&gt; installed on the machine and &lt;a href="http://rubyinstaller.rubyforge.org/wiki/wiki.pl"&gt;ruby one click install&lt;/a&gt; (which did not required the forbidden admin priviliges thank God) made quick experimenting easy while I was commuting to work. Also rubygems installation work pretty smoothly (similar to on a linux/mac osx system) on windows also.&lt;br /&gt;&lt;br /&gt;I already had configured my laptop to use have &lt;a href="http://support.microsoft.com/kb/310530"&gt;tab completion for windows lesser shell (cmd or Command Prompt)&lt;/a&gt; so cd into directories was a breeze.&lt;br /&gt;&lt;br /&gt;Two things that I missed the most still were ls (which I often typed and got error on windows shell) and typing vi filename and opening file and I was fed up with using edit to open files all the time which is far from a decent text editor at least by my standards.&lt;br /&gt;&lt;br /&gt;Finally I was motivated enough to do something about these. Here is what I did:&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Added the path to the directory where vim was installed to my environment variable:&lt;/h3&gt;&lt;br /&gt;1. Right Click on 'My Computer' and click 'Properties'&lt;br /&gt;2. Click on 'Advanced' tab and click 'Environment Variables' button, click 'PATH' if already exists or create new if it is not already there.&lt;br /&gt;3. Add the absolute path of directory where vim.exe exists at the end (semi-colo {;} separated list).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Create shortcuts for vi and ls&lt;/h3&gt; &lt;br /&gt;1. Now open command prompt (Start -&gt; Run -&gt; cmd -&gt; OK)&lt;br /&gt;2. cd into the directory where vim is installed (e.g. C:\&gt;cd "Program Files\Vim\vim70")&lt;br /&gt;3. edit vi.bat&lt;br /&gt;4. type "C:\Progra~1\Vim\vim70\vim.exe %1 %2 %3" save and exit (Alt - F - X) the file&lt;br /&gt;4a. %1, %2 ... are the arguments passed to the bat (shell) script&lt;br /&gt;Since I am lazy I will create the ls bat also here but you can create it in any directory in your path&lt;br /&gt;5. vi ls.bat (now you can use your new shortcut)&lt;br /&gt;6. type "dir %1" save and exit (:wq) the file&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-116476545159570116?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/116476545159570116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=116476545159570116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/116476545159570116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/116476545159570116'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2006/11/windows-making-my-laptop-nix-friendly.html' title='Windows: Making my laptop *nix friendly'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-116287545920758361</id><published>2006-11-06T20:56:00.000-08:00</published><updated>2006-11-28T17:41:14.420-08:00</updated><title type='text'>Ruby: Finding the absolute path of running script</title><content type='html'>I needed to use the full/absolute path of the script/program to a library for access control. I had not done something like this before so here is my trail of discovery:&lt;br /&gt;&lt;pre&gt;$0&lt;/pre&gt;&lt;br /&gt;I started with $0, which in ruby is one of those magic variables that contain the name of the program that was executed from the command line.&lt;br /&gt;&lt;br /&gt;The problem with $0 is that it does not necessary have the absolute path, it has whatever the user used which could be relative or absolute.&lt;br /&gt;&lt;pre&gt;__FILE__&lt;/pre&gt;&lt;br /&gt;Then I found __FILE__ which was not exactly what I was looking for as it would give you the file name of the current file so when executing library routine it would be the name of the library file not the original executable file that the user ran.&lt;br /&gt;&lt;pre&gt;File.expand_path&lt;/pre&gt; &lt;br /&gt;After some research I found File.expand_path which essentially did the trick if you use it with $0. So File.expand_path $0 would give you the absolute path of the calling program.&lt;br /&gt;&lt;pre&gt;Pathname.new.realpath.to_s&lt;/pre&gt;&lt;br /&gt;On a parallel note I found Pathname.new.realpath.to_s also but that require you to require 'pathname' and also it resolved a symbolic link to real path which was not desired in my case.&lt;br /&gt;&lt;pre&gt;Dir.chdir&lt;/pre&gt;&lt;br /&gt;One caveat with File.expand_path which an experienced rubyist pointed out that if a script does a Dir.chdir then File.expand_path would not work as it essentially prepends the cwd (current working directory) to $0 but even the fellow rubyist couldn't think of a better way to do this so File.expand_path was my eventual solution and it works!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-116287545920758361?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/116287545920758361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=116287545920758361' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/116287545920758361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/116287545920758361'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2006/11/ruby-finding-absolute-path-of-running.html' title='Ruby: Finding the absolute path of running script'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-116042514419540658</id><published>2006-10-09T13:12:00.000-07:00</published><updated>2006-10-09T13:21:23.163-07:00</updated><title type='text'>*nix shell: stty for terminal line settings</title><content type='html'>I don't think this is a new discovery but just a reminder for myself when I encounter this problem again.&lt;br /&gt;&lt;br /&gt;I encountered this problem when I was using irb (interactive ruby shell) and for some odd reason when I typed backspace it was printing ^H and worse when I hit enter irb crashes. When I returned to my shell backspace seems to be working fine.&lt;br /&gt;&lt;br /&gt;This is not exclusive problem with irb although the crashing part is but the solution I think would work in cases where shell is demonstrating this wierd behavior.&lt;br /&gt;&lt;br /&gt;I did a quick *nix command:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;stty&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and displayed that I have&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;erase ^?&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In order to fix this problem here is what I did:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;stty erase ^H&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt;^H are not the two characters but typed Ctrl-V Ctrl-H&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-116042514419540658?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/116042514419540658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=116042514419540658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/116042514419540658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/116042514419540658'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2006/10/nix-shell-stty-for-terminal-line.html' title='*nix shell: stty for terminal line settings'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-115948043452037746</id><published>2006-09-28T14:44:00.000-07:00</published><updated>2006-10-09T12:40:48.003-07:00</updated><title type='text'>Ruby: ri Command Line Help</title><content type='html'>Looking up help on ruby methods and classes from the command line sounds simple but can be very useful if you don't know or don't remember.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ri&lt;/b&gt; is the equivalent of 'man' command in unix (I always confuse this with rdoc which is for generating html documentation, I think perldoc has something to do with this confusion).&lt;br /&gt;&lt;br /&gt;Some example commands are&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;prompt&gt; ri Class&lt;br /&gt;prompt&gt; ri alias_method&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In case multiple classes have the same method and you are searching for a method&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;prompt&gt; ri method_missing&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ri will show a message like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;More than one method matched your request. You can refine&lt;br /&gt;your search by asking for information on one of:&lt;br /&gt;&lt;br /&gt;   Delegator#method_missing, Kernel#method_missing&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You can then look for the specific method using:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;prompt&gt; ri Kernel#method_missing&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;: I just discovered that Class#method is for instance methods, if you want to look help class methods then it is done using Class::method.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ri Hash::new        # shows details of the Hash class's new method&lt;br /&gt;ri Hash#delete      # shows details of the hash instance's delete method&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Also found this interesting reference: &lt;br /&gt;&lt;a href="http://ruby.about.com/od/gettingstarted/qt/ruby_ri.htm"&gt;Ruby RI - Using Ruby's RI Documentation Reader&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-115948043452037746?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/115948043452037746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=115948043452037746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/115948043452037746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/115948043452037746'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2006/09/ruby-ri-command-line-help.html' title='Ruby: ri Command Line Help'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-115258457579894669</id><published>2006-07-10T19:09:00.000-07:00</published><updated>2006-07-10T19:26:19.120-07:00</updated><title type='text'>Tools: Saving Putty Configuration</title><content type='html'>Putty is a decent terminal emulation program for MS Windows operatings system:&lt;br /&gt;&lt;br /&gt;It can be downloaded from:&lt;br /&gt;http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html&lt;br /&gt;&lt;br /&gt;At the time of this writing the latest release version was 0.58.&lt;br /&gt;&lt;br /&gt;Putty does not need to be installed and does not create seperate directory to store its configuration, all its configuration is stored in the windows registry.&lt;br /&gt;&lt;br /&gt;Start -&gt; Run -&gt; regedit (OK/Enter)&lt;br /&gt;&lt;br /&gt;HKEY_CURRENT_USER -&gt; Software -&gt; SimonTatham -&gt; Putty&lt;br /&gt;&lt;br /&gt;You can save the configuration by right clicking on SimonTatham and selecting Export from the context menu. &lt;br /&gt;&lt;br /&gt;To restore setting, transport the file to the new machine and double click on it after downloading Putty.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-115258457579894669?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/115258457579894669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=115258457579894669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/115258457579894669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/115258457579894669'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2006/07/tools-saving-putty-configuration.html' title='Tools: Saving Putty Configuration'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-114627583886210941</id><published>2006-04-28T18:52:00.000-07:00</published><updated>2006-04-28T19:05:03.396-07:00</updated><title type='text'>Ruby: Searching for a variable string using grep</title><content type='html'>I was looking for a way to search for a variable string inside a ruby method and I think I have found _a_ solution.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def print_line_containing(file, str)&lt;br /&gt;  File.open(file).grep(/#{str}/).each do |line| puts "#{line}" end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;def print_line_containing(file, str1, str2)&lt;br /&gt;  File.open(file).grep(/#{str1}\s+#{str2}/).each do |line| puts "#{line}" end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-114627583886210941?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/114627583886210941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=114627583886210941' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/114627583886210941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/114627583886210941'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2006/04/ruby-searching-for-variable-string.html' title='Ruby: Searching for a variable string using grep'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-114107902675008376</id><published>2006-02-27T14:18:00.000-08:00</published><updated>2006-02-27T14:25:26.630-08:00</updated><title type='text'>Vim: Indentation (tab) Settings</title><content type='html'>In the same discussion that I discovered the settings for ruby specific settings I found some tips on best setting of tab and shift related settings&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sts=2 sw=2 ts=8 et&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here is my understanding of the settings:&lt;br /&gt;&lt;br /&gt;sts = smart tab stops - these are useful when you hit tab for indenting, when you hit backspace you will go back a sts lenth rather than one space at a time because of et is enabled&lt;br /&gt;&lt;br /&gt;sw = shift width          - this is useful when you do &lt;&lt; or &gt;&gt; for indenting&lt;br /&gt;&lt;br /&gt;ts   = tab stop               - would render the real tab (tab character) properly if found in your code&lt;br /&gt;&lt;br /&gt;et   = expand tabs        - replaces/exapnds tab to spaces&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-114107902675008376?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/114107902675008376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=114107902675008376' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/114107902675008376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/114107902675008376'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2006/02/vim-indentation-tab-settings.html' title='Vim: Indentation (tab) Settings'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-114107402034956749</id><published>2006-02-27T12:58:00.000-08:00</published><updated>2006-02-27T13:00:51.443-08:00</updated><title type='text'>Vim: Setting different indentation for Ruby files</title><content type='html'>Adding this to .vimrc file should result in shift-width set to two when editing ruby files:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;autocmd FileType ruby setlocal  sw=2&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-114107402034956749?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/114107402034956749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=114107402034956749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/114107402034956749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/114107402034956749'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2006/02/vim-setting-different-indentation-for.html' title='Vim: Setting different indentation for Ruby files'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-114086697317682509</id><published>2006-02-25T03:24:00.000-08:00</published><updated>2006-02-25T03:29:33.203-08:00</updated><title type='text'>*nix: Text Files Commands</title><content type='html'>This post saved the day for some work related stuff:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.osxfaq.com/tips/unix-tricks/week101/wednesday.ws"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Week 101 - Unix Commands Reference (7 March 2005)&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It talks about:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;split ... split a file into many files&lt;/b&gt;&lt;br /&gt;&lt;b&gt;sort ... sort the lines of a file into alphabetic order&lt;br /&gt;&lt;/b&gt;&lt;b&gt;uniq ... filter out repeated lines of a file&lt;/b&gt;&lt;br /&gt;&lt;b&gt;join ... perform a database join on files&lt;/b&gt;&lt;br /&gt;&lt;b&gt;paste ... merge corresponding lines of two file&lt;br /&gt;&lt;/b&gt;&lt;b&gt;comm ... display lines common to two files&lt;/b&gt;&lt;br /&gt;&lt;b&gt;diff ... compare two files&lt;/b&gt;&lt;br /&gt;&lt;b&gt;diff3 ... compares three files&lt;/b&gt;&lt;br /&gt;&lt;b&gt;sdiff ... compare and merge two files&lt;/b&gt;&lt;br /&gt;&lt;b&gt;zdiff, bzdiff ... diff zipped, bzipped files&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-114086697317682509?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/114086697317682509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=114086697317682509' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/114086697317682509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/114086697317682509'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2006/02/nix-text-files-commands.html' title='*nix: Text Files Commands'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-114064901272216039</id><published>2006-02-22T14:48:00.000-08:00</published><updated>2006-02-23T12:17:49.160-08:00</updated><title type='text'>Ruby: using irb and ri as a exploratory learning device</title><content type='html'>&lt;code&gt;&lt;br /&gt;irb&gt; Kernel.methods.each do |method| puts method; system "/usr/local/bin/ri --no-pager Kernel##{method}"; ch = STDIN.getc; break if (ch.chr == 'q') end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Once you enter this just keep hit enter until you want to quit, at that point hit 'q' and enter.&lt;br /&gt;&lt;br /&gt;Still some kinks to be worked out but it is a start&lt;br /&gt;&lt;br /&gt;Update:&lt;br /&gt;Found this interesting link: http://www.rubygarden.org/ruby?Irb/TipsAndTricks on http://www.rubyweeklynews.org/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-114064901272216039?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/114064901272216039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=114064901272216039' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/114064901272216039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/114064901272216039'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2006/02/ruby-using-irb-and-ri-as-exploratory.html' title='Ruby: using irb and ri as a exploratory learning device'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-114037833516091085</id><published>2006-02-19T11:26:00.000-08:00</published><updated>2006-02-19T11:53:43.433-08:00</updated><title type='text'>vim extracting first column (space delimited)</title><content type='html'>Just figured out how to extract a single (first) column from a file containing text&lt;br /&gt;&lt;br /&gt;:%s/^\(\w\+\)\.\*/\1/g&lt;br /&gt;&lt;br /&gt;I am sure there is a better way to do this but this is best I can get for now. I don't like the excessive escaping vim requires in regex.&lt;br /&gt;&lt;br /&gt;PS: Just figured out that you have to have:&lt;br /&gt;&lt;br /&gt;:set nomagic&lt;br /&gt;&lt;br /&gt;for the above subsitution to work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-114037833516091085?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/114037833516091085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=114037833516091085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/114037833516091085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/114037833516091085'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2006/02/vim-extracting-first-column-space.html' title='vim extracting first column (space delimited)'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-113959978812871901</id><published>2006-02-10T11:28:00.000-08:00</published><updated>2006-02-10T11:30:07.926-08:00</updated><title type='text'>vimrc update - showmatch</title><content type='html'>" rediscovered showmatch&lt;br /&gt;set showmatch&lt;br /&gt;" this would show you the matching paren or brace&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-113959978812871901?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/113959978812871901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=113959978812871901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113959978812871901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113959978812871901'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2006/02/vimrc-update-showmatch.html' title='vimrc update - showmatch'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-113435846960067742</id><published>2005-12-11T19:08:00.000-08:00</published><updated>2005-12-11T19:36:41.646-08:00</updated><title type='text'>Rails: Working around Tiger (OS X 10.4) ruby mysql problem</title><content type='html'>I was not happy when I found myself stuck try to run scaffolding for the first time, discovering that my previous attempt to fix preinstalled Tiger ruby and that after installing Xcode 2.2 I don't have ruby.h where fixrubyconfig expects (as per the most famous fix &lt;a href="http://tech.rufy.com/entry/46"&gt;Complete Fix for Ruby on Mac OS X 10.4 Tiger&lt;/a&gt; which is also mentioned in &lt;a href="http://www.amazon.com/gp/product/097669400X"&gt;Agile Web Development with Rails&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was partly heart broken and partly frustrated and hoped that some mac and ruby 'guru' at the upcoming &lt;a href="http://seattle.rubyholic.com/groups/show/1"&gt;Seattle.rb Hack Night&lt;/a&gt; can help.&lt;br /&gt;&lt;br /&gt;But then I had a thought and it worked.&lt;br /&gt;&lt;br /&gt;I installed the latest stable version of ruby (1.8.3):&lt;br /&gt;Download from: ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.3.tar.gz&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;shell&gt; tar -zxvf ruby-1.8.3.tar.gz&lt;br /&gt;shell&gt; cd ruby-1.8.3&lt;br /&gt;shell&gt; ./configure&lt;br /&gt;shell&gt; make -j5&lt;br /&gt;shell&gt; sudo make install&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This installs the new version of ruby in the /usr/local/bin directory on your powerbook&lt;br /&gt;&lt;br /&gt;Now I added the new ruby path to my $PATH using&lt;br /&gt;export PATH=/usr/local/bin:$PATH&lt;br /&gt;this would mean that any time a issue a command it would look in /usr/local/bin before /usr/bin where the old (tiger default version is installed). I have also modified my .profile to have a similar PATH in future.&lt;br /&gt;&lt;br /&gt;then I downloaded and installed rubygem again:&lt;br /&gt;Download from: http://rubyforge.org/frs/download.php/5207/rubygems-0.8.11.tgz&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;shell&gt; tar -zxvf rubygems-0.8.11.tgz&lt;br /&gt;shell&gt; cd rubygems-0.8.11&lt;br /&gt;shell&gt; sudo ruby setup.rb&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Next I installed rails gem&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;shell&gt; sudo gem install rails --include-dependencies &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Next I installed mysql gem&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;shell&gt; sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;it worked for the first time now giving me a successfully installed message.&lt;br /&gt;&lt;br /&gt;Finally I was able to do my scaffolding task as suggested by the book:&lt;br /&gt;from your rails app directory do the following for the existing product table&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;shell&gt; ruby script/generate scaffold Product Admin&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It seems that the on Mac OS X you require a username in your database.yml file (you can't leave it blank otherwise it would default to root) so I had to modify my configuration on last time before seeing the magical command work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-113435846960067742?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/113435846960067742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=113435846960067742' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113435846960067742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113435846960067742'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/12/rails-working-around-tiger-os-x-104.html' title='Rails: Working around Tiger (OS X 10.4) ruby mysql problem'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-113432432925675454</id><published>2005-12-11T10:02:00.000-08:00</published><updated>2005-12-11T10:05:29.270-08:00</updated><title type='text'>Ruby: I am stuck with OS X Tiger (10.4) Ruby problem and can't install mysql gem</title><content type='html'>I have followed the step from http://tech.rufy.com/entry/46 but I get the following error:&lt;br /&gt;&lt;br /&gt;mv /usr/local/lib/libreadline.a /usr/local/lib/libreadline.old/usr/bin/install -c -m 644 libreadline.a /usr/local/lib/libreadline.atest -n "ranlib" &amp;&amp; ranlib /usr/local/lib/libreadline.amv /usr/local/lib/libhistory.a /usr/local/lib/libhistory.old/usr/bin/install -c -m 644 libhistory.a /usr/local/lib/libhistory.atest -n "ranlib" &amp;&amp; ranlib /usr/local/lib/libhistory.atest -d shlib || mkdir shlib( cd shlib ; make  all )make[1]: Nothing to be done for `all'.( cd shlib ; make  DESTDIR= install )/bin/sh ../support/mkdirs /usr/local/lib/bin/sh ../support/shlib-install -O darwin8.3.0 -d /usr/local/lib -i "/usr/bin/install -c -m 644" libhistory.5.0.dylib/bin/sh ../support/shlib-install -O darwin8.3.0 -d /usr/local/lib -i "/usr/bin/install -c -m 644" libreadline.5.0.dylibinstall: you may need to run ldconfig  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                 Dload  Upload   Total   Spent    Left  Speed100 3542k  100 3542k    0     0   193k      0  0:00:18  0:00:18 --:--:--  233kcan't find header files for ruby.make: *** No targets specified and no makefile found.  Stop.&lt;br /&gt;&lt;br /&gt;I don't know what do to make MySQL working with Rails&lt;br /&gt;&lt;br /&gt;Somebody help me. May be I will take this problem to hack night&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-113432432925675454?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/113432432925675454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=113432432925675454' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113432432925675454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113432432925675454'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/12/ruby-i-am-stuck-with-os-x-tiger-104.html' title='Ruby: I am stuck with OS X Tiger (10.4) Ruby problem and can&apos;t install mysql gem'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-113425776064620356</id><published>2005-12-10T15:35:00.000-08:00</published><updated>2005-12-10T15:37:31.003-08:00</updated><title type='text'>MySQL: Display permissions on different databases</title><content type='html'>mysql&gt; select Host, DB, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Alter_priv from db;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;+-----------+-------------------+-------+-------------+-------------+-------------+-------------+-------------+-----------+------------+&lt;br /&gt;| Host      | DB                | User  | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Alter_priv |&lt;br /&gt;+-----------+-------------------+-------+-------------+-------------+-------------+-------------+-------------+-----------+------------+&lt;br /&gt;| %         | test              |       | Y           | Y           | Y           | Y           | Y           | Y         | Y          |&lt;br /&gt;| %         | test\_%           |       | Y           | Y           | Y           | Y           | Y           | Y         | Y          |&lt;br /&gt;| localhost | depot_development | rizvi | Y           | Y           | Y           | Y           | Y           | Y         | Y          |&lt;br /&gt;| localhost | depot_production  | rizvi | Y           | Y           | Y           | Y           | Y           | Y         | Y          |&lt;br /&gt;| localhost | depot_test        | rizvi | Y           | Y           | Y           | Y           | Y           | Y         | Y          |&lt;br /&gt;| localhost | depot_production  | prod  | Y           | Y           | Y           | Y           | Y           | Y         | Y          |&lt;br /&gt;+-----------+-------------------+-------+-------------+-------------+-------------+-------------+-------------+-----------+------------+&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-113425776064620356?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/113425776064620356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=113425776064620356' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113425776064620356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113425776064620356'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/12/mysql-display-permissions-on-different.html' title='MySQL: Display permissions on different databases'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-113386002965349436</id><published>2005-12-06T01:00:00.000-08:00</published><updated>2005-12-06T01:07:09.663-08:00</updated><title type='text'>Vim: ERb syntax file for rails view development</title><content type='html'>Yesterday I made rhtml (embedded ruby) files kind of working by using the html filetype and I was digging the xml/html tag completion plugin. Today after only one search I ended up on the following useful page:&lt;br /&gt;&lt;br /&gt;http://wiki.rubyonrails.com/rails/pages/HowtoUseVimWithRails&lt;br /&gt;&lt;br /&gt;Apart from other seemingly useful tips I found the link to the eruby syntax script:&lt;br /&gt;http://www.vim.org/scripts/script.php?script_id=403&lt;br /&gt;&lt;br /&gt;I followed the directions and placed the eruby.vim file in my ~/.vim/syntax/ directory and modified the autocmd line from yesterday in my ~/.vimrc to this:&lt;br /&gt;&lt;br /&gt;autocmd BufRead *.rhtml set filetype=eruby&lt;br /&gt;&lt;br /&gt;Some how the xml/html plugin to complete tags as you type them still work.&lt;br /&gt;I don't see the &lt;% %&gt; tags breaking the html syntax highlighting and they eruby tags are now highlighted (not necessary a preference of mine but I can live with it).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-113386002965349436?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/113386002965349436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=113386002965349436' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113386002965349436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113386002965349436'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/12/vim-erb-syntax-file-for-rails-view.html' title='Vim: ERb syntax file for rails view development'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-113375623361334954</id><published>2005-12-04T20:12:00.000-08:00</published><updated>2005-12-04T20:17:20.736-08:00</updated><title type='text'>Vim: xml and html auto tag completion</title><content type='html'>Downloaded the ftplugin from here:&lt;br /&gt;&lt;br /&gt;http://tritarget.com/cgi-bin/viewcvs.cgi/xmledit/ftplugin/xml.vim (pointed to by here: http://www.vim.org/scripts/script.php?script_id=301)&lt;br /&gt;&lt;br /&gt;copied the file to ~/.vim/ftplugin/xml.vim&lt;br /&gt;&lt;br /&gt;at this point XML completion works (.xml files) but html does not.&lt;br /&gt;&lt;br /&gt;once the plugin was triggered and installed witha deleteme.xml file, I followed the instruction at did this:&lt;br /&gt;:help xml-plugin-html&lt;br /&gt;&lt;br /&gt;I copy pasted the html.vim file in the help to a new file:&lt;br /&gt;~/.vim/ftplugin/html.vim&lt;br /&gt;&lt;br /&gt;and then loaded my rhtml (or any html file that autocmds to filetype html) and the plugin started working&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-113375623361334954?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/113375623361334954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=113375623361334954' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113375623361334954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113375623361334954'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/12/vim-xml-and-html-auto-tag-completion.html' title='Vim: xml and html auto tag completion'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-113375517796835207</id><published>2005-12-04T19:56:00.000-08:00</published><updated>2005-12-04T19:59:37.980-08:00</updated><title type='text'>Vim: Adding file extension to a filetype of syntax highlighting</title><content type='html'>"Add this line to syntax highlight any rhtml (rails view, ERb) to be displayed with HTML syntax highlighting&lt;br /&gt;autocmd BufRead *.rhtml set filetype=html&lt;br /&gt;&lt;br /&gt;Now I have to figure out how to load the matchit plugin that enables auto-complete for HTML tags&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-113375517796835207?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/113375517796835207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=113375517796835207' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113375517796835207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113375517796835207'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/12/vim-adding-file-extension-to-filetype.html' title='Vim: Adding file extension to a filetype of syntax highlighting'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-113247689749846013</id><published>2005-11-20T00:37:00.000-08:00</published><updated>2005-11-20T00:54:57.610-08:00</updated><title type='text'>MySQL: Creating InnoDB tables, converting tables and verifying</title><content type='html'>InnoDB tables support transactions and foriegn keys and are widely used in large MySQL enviroments like &lt;a href="www.slashdot.org"&gt;slashdot&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I wanted to be able to create innodb tables so I read the &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/innodb.html"&gt;relevant section of the manual on innodb&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My /etc/my.cnf file (that I copied from $MYSQLDIR/support-files/my-medium.cnf) already had the innodb configuration commented I just uncommented the following lines:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    119 # Uncomment the following if you are using InnoDB tables&lt;br /&gt;    120 # rizvi - uncommented 2005-11-19&lt;br /&gt;    121 innodb_data_home_dir = /usr/local/mysql/data/&lt;br /&gt;    122 innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;    123 innodb_log_group_home_dir = /usr/local/mysql/data/&lt;br /&gt;    124 innodb_log_arch_dir = /usr/local/mysql/data/&lt;br /&gt;    125 # You can set .._buffer_pool_size up to 50 - 80 %&lt;br /&gt;    126 # of RAM but beware of setting memory usage too high&lt;br /&gt;    127 innodb_buffer_pool_size = 16M&lt;br /&gt;    128 innodb_additional_mem_pool_size = 2M&lt;br /&gt;    129 # Set .._log_file_size to 25 % of buffer pool size&lt;br /&gt;    130 innodb_log_file_size = 5M&lt;br /&gt;    131 innodb_log_buffer_size = 8M&lt;br /&gt;    132 innodb_flush_log_at_trx_commit = 1&lt;br /&gt;    133 innodb_lock_wait_timeout = 50&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I created one table to test it out using the example given in the manual:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;CREATE TABLE customers (a INT, b CHAR (20), INDEX (a)) ENGINE=InnoDB;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It seems using TYPE instead of ENGINE is allowed but is effectively deprecated and not the recommended way.&lt;br /&gt;&lt;br /&gt;It seems it is fairly easy to convert an existing table to innodb (or any other supported engines) here is the example from the manual:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ALTER TABLE t ENGINE = INNODB;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now that I had created a table I wanted to verify that it was created properly as a INNODB tables instead of the default MyISAM. I tried this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql&gt; show full tables;&lt;br /&gt;+----------------+------------+&lt;br /&gt;| Tables_in_test | Table_type |&lt;br /&gt;+----------------+------------+&lt;br /&gt;| customers      | BASE TABLE |&lt;br /&gt;| ino_test       | BASE TABLE |&lt;br /&gt;| testaa         | BASE TABLE |&lt;br /&gt;| testad         | BASE TABLE |&lt;br /&gt;+----------------+------------+&lt;br /&gt;4 rows in set (0.00 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It was strange and misleading as the two pre-existing tables starting with test (MyISAM) were shown as the same type as the new customer INNODB tables. I thought may be I missed a config thing and I made sure I had restared mysqld after the config change.&lt;br /&gt;&lt;br /&gt;Finally I figured out the right command to see detailed table information:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql&gt; show table status;&lt;br /&gt;+-----------+--------+---------+------------+------+----------------+-------------+-------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+----------------------+&lt;br /&gt;| Name      | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length   | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation         | Checksum | Create_options | Comment              |&lt;br /&gt;+-----------+--------+---------+------------+------+----------------+-------------+-------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+----------------------+&lt;br /&gt;| customers | InnoDB |      10 | Compact    |    1 |          16384 |       16384 |                 0 |        16384 |         0 |           NULL | 2005-11-19 23:15:51 | NULL                | NULL       | latin1_swedish_ci |     NULL |                | InnoDB free: 4096 kB |&lt;br /&gt;| ino_test  | InnoDB |      10 | Compact    |    0 |              0 |       16384 |                 0 |            0 |         0 |           NULL | 2005-11-20 00:34:18 | NULL                | NULL       | latin1_swedish_ci |     NULL |                | InnoDB free: 4096 kB |&lt;br /&gt;| testaa    | MyISAM |      10 | Fixed      |    7 |             69 |         483 | 19421773393035263 |         1024 |         0 |           NULL | 2005-11-19 01:01:54 | 2005-11-19 01:01:54 | NULL       | latin1_swedish_ci |     NULL |                |                      |&lt;br /&gt;| testad    | MyISAM |      10 | Dynamic    |    1 |             20 |          20 |   281474976710655 |         1024 |         0 |           NULL | 2005-11-19 01:02:02 | 2005-11-19 01:02:06 | NULL       | latin1_swedish_ci |     NULL |                |                      |&lt;br /&gt;+-----------+--------+---------+------------+------+----------------+-------------+-------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+----------------------+&lt;br /&gt;4 rows in set (0.11 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That was gratifying to see the two tables I created were showing up rightly as INNODB tables.&lt;br /&gt;&lt;br /&gt;Next up is experimenting with the transactions with INNODB tables.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-113247689749846013?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/113247689749846013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=113247689749846013' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113247689749846013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113247689749846013'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/11/mysql-creating-innodb-tables.html' title='MySQL: Creating InnoDB tables, converting tables and verifying'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-113244525452381902</id><published>2005-11-19T15:51:00.000-08:00</published><updated>2005-11-19T16:43:58.986-08:00</updated><title type='text'>MySQL: Changing password and finding user permissions</title><content type='html'>Changing password can be done through the mysql command:&lt;br /&gt;&lt;br /&gt;If you have no root password (which is how MySQL comes out of the box) then type the following:&lt;br /&gt;&lt;br /&gt;shell&gt; $MYSQLDIR/mysqladmin -u root password &lt;i&gt;newpassword&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;now if you have a password and want to change it:&lt;br /&gt;&lt;br /&gt;shell&gt; $MYSQLDIR/mysqladmin -u root -p password &lt;i&gt;newpassword&lt;/i&gt;&lt;br /&gt;Enter password: &lt;i&gt;oldpassword&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;There drawback to this technique is that your new password is saved in the shell history buffer in clear text which is undesirable but I have not found a better way yet.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Once you have changed the password and you want to see what users exists with what password you can see that by logging into the special "mysql" database as root:&lt;br /&gt;&lt;br /&gt;shell&gt; $MYSQLDIR/mysql -u root -p mysql&lt;br /&gt;Enter Password:&lt;br /&gt;&lt;br /&gt;Now when you can see all the tables in the special "mysql" database:&lt;br /&gt;&lt;br /&gt;mysql&gt; show tables;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql&gt; show tables;&lt;br /&gt;+---------------------------+&lt;br /&gt;| Tables_in_mysql           |&lt;br /&gt;+---------------------------+&lt;br /&gt;| columns_priv              |&lt;br /&gt;| db                        |&lt;br /&gt;| func                      |&lt;br /&gt;| help_category             |&lt;br /&gt;| help_keyword              |&lt;br /&gt;| help_relation             |&lt;br /&gt;| help_topic                |&lt;br /&gt;| host                      |&lt;br /&gt;| proc                      |&lt;br /&gt;| procs_priv                |&lt;br /&gt;| tables_priv               |&lt;br /&gt;| time_zone                 |&lt;br /&gt;| time_zone_leap_second     |&lt;br /&gt;| time_zone_name            |&lt;br /&gt;| time_zone_transition      |&lt;br /&gt;| time_zone_transition_type |&lt;br /&gt;| user                      |&lt;br /&gt;+---------------------------+&lt;br /&gt;17 rows in set (0.00 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Look into the user table to see the list of interesting fields as there are a lot of them:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql&gt;  describe user;&lt;br /&gt;mysql&gt; describe user;&lt;br /&gt;+-----------------------+-----------------------------------+------+-----+---------+-------+&lt;br /&gt;| Field                 | Type                              | Null | Key | Default | Extra |&lt;br /&gt;+-----------------------+-----------------------------------+------+-----+---------+-------+&lt;br /&gt;| Host                  | char(60)                          | NO   | PRI |         |       |&lt;br /&gt;| User                  | char(16)                          | NO   | PRI |         |       |&lt;br /&gt;| Password              | char(41)                          | NO   |     |         |       |&lt;br /&gt;| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| File_priv             | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| References_priv       | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |&lt;br /&gt;| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |&lt;br /&gt;| ssl_cipher            | blob                              | NO   |     |         |       |&lt;br /&gt;| x509_issuer           | blob                              | NO   |     |         |       |&lt;br /&gt;| x509_subject          | blob                              | NO   |     |         |       |&lt;br /&gt;| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |&lt;br /&gt;| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |&lt;br /&gt;| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |&lt;br /&gt;| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |&lt;br /&gt;+----------------------+-----------------------------------+------+-----+---------+-------+&lt;br /&gt;37 rows in set (0.05 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here is a query that would tell you user have permissions to certain operations on your database from different host:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql&gt; select host, user, select_priv, insert_priv, delete_priv, create_priv, drop_priv, alter_priv from user;&lt;br /&gt;+----------------+------+-------------+-------------+-------------+-------------+-----------+------------+&lt;br /&gt;| host           | user | select_priv | insert_priv | delete_priv | create_priv | drop_priv | alter_priv |&lt;br /&gt;+----------------+------+-------------+-------------+-------------+-------------+-----------+------------+&lt;br /&gt;| localhost      | root | Y           | Y           | Y           | Y           | Y         | Y          |&lt;br /&gt;| AliPower.local | root | Y           | Y           | Y           | Y           | Y         | Y          |&lt;br /&gt;| AliPower.local |      | N           | N           | N           | N           | N         | N          |&lt;br /&gt;| localhost      |      | N           | N           | N           | N           | N         | N          |&lt;br /&gt;+----------------+------+-------------+-------------+-------------+-------------+-----------+------------+&lt;br /&gt;4 rows in set (0.00 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It seems the blank user name is there to allow to run mysql shell without a user.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-113244525452381902?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/113244525452381902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=113244525452381902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113244525452381902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113244525452381902'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/11/mysql-changing-password-and-finding.html' title='MySQL: Changing password and finding user permissions'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-113244221787810321</id><published>2005-11-19T15:16:00.000-08:00</published><updated>2005-11-19T15:16:58.163-08:00</updated><title type='text'>Results of MySQL sql-bench run-all-tests</title><content type='html'>AliPower:/usr/local/mysql/sql-bench rizvi$ sudo perl run-all-tests &lt;br /&gt;Benchmark DBD suite: 2.15&lt;br /&gt;Date of test:        2005-11-19  1:04:10&lt;br /&gt;Running tests on:    Darwin 8.2.0 Power Macintosh&lt;br /&gt;Arguments:           &lt;br /&gt;Comments:            &lt;br /&gt;Limits from:         &lt;br /&gt;Server version:      MySQL 5.0.15 standard log&lt;br /&gt;Optimization:        None&lt;br /&gt;Hardware:            &lt;br /&gt;&lt;br /&gt;alter-table: Total time: 49 wallclock secs ( 0.14 usr  0.05 sys +  0.00 cusr  0.00 csys =  0.19 CPU)&lt;br /&gt;ATIS: Total time: 99 wallclock secs (22.24 usr  1.19 sys +  0.00 cusr  0.00 csys = 23.43 CPU)&lt;br /&gt;big-tables: Total time: 112 wallclock secs (13.17 usr  2.98 sys +  0.00 cusr  0.00 csys = 16.15 CPU)&lt;br /&gt;connect: Total time: 511 wallclock secs (93.54 usr 40.86 sys +  0.00 cusr  0.00 csys = 134.40 CPU)&lt;br /&gt;create: Total time: 302 wallclock secs (12.95 usr  3.32 sys +  0.00 cusr  0.00 csys = 16.27 CPU)&lt;br /&gt;insert: ^A^A^H^HTotal time: 2860 wallclock secs (706.16 usr 90.47 sys +  0.00 cusr  0.00 csys = 796.63 CPU)&lt;br /&gt;select: Total time: 1554 wallclock secs (94.04 usr  8.91 sys +  0.00 cusr  0.00 csys = 102.95 CPU)&lt;br /&gt;transactions: Test skipped because the database doesn't support transactions&lt;br /&gt;wisconsin: Total time: 20 wallclock secs ( 4.09 usr  0.96 sys +  0.00 cusr  0.00 csys =  5.05 CPU)&lt;br /&gt;&lt;br /&gt;All 9 test executed successfully&lt;br /&gt;&lt;br /&gt;Totals per operation:&lt;br /&gt;Operation             seconds     usr     sys     cpu   tests&lt;br /&gt;alter_table_add                       21.00    0.03    0.01    0.04     100 &lt;br /&gt;alter_table_drop                      20.00    0.03    0.01    0.04      91 &lt;br /&gt;connect                               52.00   13.47    3.87   17.34   10000 &lt;br /&gt;connect+select_1_row                  72.00   15.01    4.48   19.49   10000 &lt;br /&gt;connect+select_simple                 57.00   14.28    4.31   18.59   10000 &lt;br /&gt;count                                 42.00    0.07    0.00    0.07     100 &lt;br /&gt;count_distinct                        35.00    0.69    0.10    0.79    1000 &lt;br /&gt;count_distinct_2                      37.00    0.71    0.10    0.81    1000 &lt;br /&gt;count_distinct_big                    56.00   10.01    0.23   10.24     120 &lt;br /&gt;count_distinct_group                  37.00    2.63    0.13    2.76    1000 &lt;br /&gt;count_distinct_group_on_key           45.00    0.78    0.09    0.87    1000 &lt;br /&gt;count_distinct_group_on_key_parts     38.00    2.63    0.12    2.75    1000 &lt;br /&gt;count_distinct_key_prefix             29.00    0.62    0.08    0.70    1000 &lt;br /&gt;count_group_on_key_parts              27.00    1.42    0.08    1.50    1000 &lt;br /&gt;count_on_key                         437.00   23.66    3.19   26.85   50100 &lt;br /&gt;create+drop                           57.00    3.73    0.89    4.62   10000 &lt;br /&gt;create_MANY_tables                    80.00    2.73    0.61    3.34   10000 &lt;br /&gt;create_index                           4.00    0.00    0.00    0.00       8 &lt;br /&gt;create_key+drop                       73.00    3.92    0.95    4.87   10000 &lt;br /&gt;create_table                           0.00    0.01    0.01    0.02      31 &lt;br /&gt;delete_all_many_keys                  77.00    0.02    0.00    0.02       1 &lt;br /&gt;delete_big                             0.00    0.00    0.00    0.00       1 &lt;br /&gt;delete_big_many_keys                  77.00    0.01    0.00    0.01     128 &lt;br /&gt;delete_key                             4.00    0.56    0.27    0.83   10000 &lt;br /&gt;delete_range                          17.00    0.00    0.00    0.00      12 &lt;br /&gt;drop_index                             4.00    0.01    0.00    0.01       8 &lt;br /&gt;drop_table                             0.00    0.00    0.00    0.00      28 &lt;br /&gt;drop_table_when_MANY_tables           34.00    1.17    0.39    1.56   10000 &lt;br /&gt;insert                               139.00   16.62    7.40   24.02  350768 &lt;br /&gt;insert_duplicates                     30.00    4.33    1.86    6.19  100000 &lt;br /&gt;insert_key                           150.00   14.83    4.42   19.25  100000 &lt;br /&gt;insert_many_fields                    41.00    0.76    0.18    0.94    2000 &lt;br /&gt;insert_select_1_key                    7.00    0.00    0.00    0.00       1 &lt;br /&gt;insert_select_2_keys                  10.00    0.00    0.00    0.00       1 &lt;br /&gt;min_max                               26.00    0.04    0.01    0.05      60 &lt;br /&gt;min_max_on_key                        47.00   21.64    2.93   24.57   85000 &lt;br /&gt;multiple_value_insert                  7.00    0.63    0.02    0.65  100000 &lt;br /&gt;once_prepared_select                  54.00   12.57    2.67   15.24  100000 &lt;br /&gt;order_by_big                          52.00   29.66    0.76   30.42      10 &lt;br /&gt;order_by_big_key                      54.00   29.68    0.89   30.57      10 &lt;br /&gt;order_by_big_key2                     49.00   29.25    0.75   30.00      10 &lt;br /&gt;order_by_big_key_desc                 56.00   29.65    0.92   30.57      10 &lt;br /&gt;order_by_big_key_diff                 56.00   29.61    0.77   30.38      10 &lt;br /&gt;order_by_big_key_prefix               47.00   28.92    0.68   29.60      10 &lt;br /&gt;order_by_key2_diff                     7.00    2.69    0.08    2.77     500 &lt;br /&gt;order_by_key_prefix                    4.00    1.46    0.06    1.52     500 &lt;br /&gt;order_by_range                         5.00    1.47    0.06    1.53     500 &lt;br /&gt;outer_join                            91.00    0.01    0.00    0.01      10 &lt;br /&gt;outer_join_found                      86.00    0.00    0.00    0.00      10 &lt;br /&gt;outer_join_not_found                  85.00    0.01    0.00    0.01     500 &lt;br /&gt;outer_join_on_key                     68.00    0.01    0.00    0.01      10 &lt;br /&gt;prepared_select                       89.00   28.69    4.03   32.72  100000 &lt;br /&gt;select_1_row                          52.00    8.10    3.33   11.43  100000 &lt;br /&gt;select_1_row_cache                    54.00    7.51    3.19   10.70  100000 &lt;br /&gt;select_2_rows                         92.00    9.87    3.82   13.69  100000 &lt;br /&gt;select_big                            46.00   29.48    0.69   30.17      80 &lt;br /&gt;select_big_str                        36.00    8.18   10.00   18.18   10000 &lt;br /&gt;select_cache                         296.00    6.03    0.78    6.81   10000 &lt;br /&gt;select_cache2                        297.00    6.13    0.78    6.91   10000 &lt;br /&gt;select_column+column                  30.00    5.07    2.16    7.23  100000 &lt;br /&gt;select_diff_key                        1.00    0.20    0.03    0.23     500 &lt;br /&gt;select_distinct                       25.00    4.26    0.17    4.43     800 &lt;br /&gt;select_group                          99.00    3.19    0.25    3.44    2911 &lt;br /&gt;select_group_when_MANY_tables         58.00    1.39    0.48    1.87   10000 &lt;br /&gt;select_join                            4.00    1.25    0.06    1.31     100 &lt;br /&gt;select_key                           161.00   60.41    8.83   69.24  200000 &lt;br /&gt;select_key2                          160.00   60.61    8.63   69.24  200000 &lt;br /&gt;select_key2_return_key               141.00   56.93    8.14   65.07  200000 &lt;br /&gt;select_key2_return_prim              151.00   59.07    8.41   67.48  200000 &lt;br /&gt;select_key_prefix                    182.00   62.99    9.28   72.27  200000 &lt;br /&gt;select_key_prefix_join                25.00   11.19    0.28   11.47     100 &lt;br /&gt;select_key_return_key                146.00   56.97    8.30   65.27  200000 &lt;br /&gt;select_many_fields                    71.00   12.41    2.79   15.20    2000 &lt;br /&gt;select_range                         264.00   20.34    0.64   20.98     410 &lt;br /&gt;select_range_key2                     26.00    6.93    0.74    7.67   25010 &lt;br /&gt;select_range_prefix                   28.00    7.25    0.78    8.03   25010 &lt;br /&gt;select_simple                         32.00    6.16    2.86    9.02  100000 &lt;br /&gt;select_simple_cache                   34.00    5.89    2.83    8.72  100000 &lt;br /&gt;select_simple_join                     5.00    1.50    0.07    1.57     500 &lt;br /&gt;update_big                            23.00    0.00    0.00    0.00      10 &lt;br /&gt;update_of_key                         38.00    3.58    1.53    5.11   50000 &lt;br /&gt;update_of_key_big                     36.00    0.07    0.03    0.10     501 &lt;br /&gt;update_of_primary_key_many_keys       38.00    0.04    0.02    0.06     256 &lt;br /&gt;update_with_key                      100.00   13.41    6.40   19.81  300000 &lt;br /&gt;update_with_key_prefix                41.00    8.91    3.00   11.91  100000 &lt;br /&gt;wisc_benchmark                         5.00    2.44    0.22    2.66     114 &lt;br /&gt;TOTALS                              5489.00  928.49  147.93 1076.42 3425950 &lt;br /&gt;AliPower:/usr/local/mysql/sql-bench rizvi$&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-113244221787810321?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/113244221787810321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=113244221787810321' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113244221787810321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113244221787810321'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/11/results-of-mysql-sql-bench-run-all.html' title='Results of MySQL sql-bench run-all-tests'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-113239173531369671</id><published>2005-11-19T01:06:00.000-08:00</published><updated>2005-11-19T01:15:35.753-08:00</updated><title type='text'>MySQL Post Installation</title><content type='html'>Here is the command again for running mysql server:&lt;br /&gt;sudo /usr/local/mysql/bin/mysqld_safe --user=mysql &amp;&lt;br /&gt;&lt;br /&gt;The documentation would tell you to change the root password immediately but wait until you are through the section about installing Perl support (DBI and DBD::mysql) and run the MYSQLDIR /sql-bench  perl run-all-tests.&lt;br /&gt;&lt;br /&gt;Both the CPAN installation and run-all-tests expect a blank password for root user.&lt;br /&gt;&lt;br /&gt;If you have already changed your password you have two options:&lt;br /&gt;1. force install DBD::mysql (on perl -MCPAN -e shell) OR&lt;br /&gt;2. change your root password back to blank using :-&gt; mysqladmin -u root -p password ''&lt;br /&gt;&lt;br /&gt;The test under sql-bench are very processor intensive and take some time so be patient with them. (you might need to do sudo perl run-all-tests).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-113239173531369671?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/113239173531369671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=113239173531369671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113239173531369671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113239173531369671'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/11/mysql-post-installation.html' title='MySQL Post Installation'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-113238779265387525</id><published>2005-11-19T00:09:00.000-08:00</published><updated>2005-11-19T00:28:05.096-08:00</updated><title type='text'>Setting up MySQL</title><content type='html'>It seems like a trivial thing but I had never installed or administered my own database so MySQL was definitely a first for me.&lt;br /&gt;&lt;br /&gt;The motivation was to start developing my first Rails app on my powerbook.&lt;br /&gt;&lt;br /&gt;I will add some random notes here and clean them up later:&lt;br /&gt;&lt;br /&gt;I installed MySQL 5.0 from binary installation for Mac OS X. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/index.html"&gt;MySQL 5.0 HTML Documentation&lt;/a&gt; was helpful. I also downloaded the &lt;a href="http://downloads.mysql.com/docs/refman-5.0-en.pdf"&gt;pdf version&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Installed directory: /user/local/mysql called MYSQLDIR hereon&lt;br /&gt;&lt;br /&gt;Copied MYSQLDIR/support-files/my-medium.cnf to /etc/my.cnf&lt;br /&gt;&lt;br /&gt;added these two lines in my ~/.profile&lt;br /&gt;&lt;br /&gt;alias mysql=/usr/local/mysql/bin/mysql&lt;br /&gt;alias mysqladmin=/usr/local/mysql/bin/mysqladmin&lt;br /&gt;&lt;br /&gt;AliPower:/usr/local/mysql rizvi$ sudo scripts/mysql_install_db --user=mysql&lt;br /&gt;Password:&lt;br /&gt;Installing all prepared tables&lt;br /&gt;051119  0:25:47 [Warning] Setting lower_case_table_names=2 because file system for /usr/local/mysql-standard-5.0.15-osx10.4-powerpc/data/ is case insensitive&lt;br /&gt;Fill help tables&lt;br /&gt;051119  0:25:47 [Warning] Setting lower_case_table_names=2 because file system for /usr/local/mysql-standard-5.0.15-osx10.4-powerpc/data/ is case insensitive&lt;br /&gt;&lt;br /&gt;To start mysqld at boot time you have to copy support-files/mysql.server&lt;br /&gt;to the right place for your system&lt;br /&gt;&lt;br /&gt;PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !&lt;br /&gt;To do so, start the server, then issue the following commands:&lt;br /&gt;./bin/mysqladmin -u root password 'new-password'&lt;br /&gt;./bin/mysqladmin -u root -h AliPower.local password 'new-password'&lt;br /&gt;See the manual for more instructions.&lt;br /&gt;&lt;br /&gt;NOTE:  If you are upgrading from a MySQL &lt;= 3.22.10 you should run&lt;br /&gt;the ./bin/mysql_fix_privilege_tables. Otherwise you will not be&lt;br /&gt;able to use the new GRANT command!&lt;br /&gt;&lt;br /&gt;You can start the MySQL daemon with:&lt;br /&gt;cd . ; ./bin/mysqld_safe &amp;&lt;br /&gt;&lt;br /&gt;You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:&lt;br /&gt;cd sql-bench ; perl run-all-tests&lt;br /&gt;&lt;br /&gt;Please report any problems with the ./bin/mysqlbug script!&lt;br /&gt;&lt;br /&gt;The latest information about MySQL is available on the web at&lt;br /&gt;http://www.mysql.com&lt;br /&gt;Support MySQL by buying support/licenses at https://order.mysql.com&lt;br /&gt;AliPower:/usr/local/mysql rizvi$&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-113238779265387525?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/113238779265387525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=113238779265387525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113238779265387525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/113238779265387525'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/11/setting-up-mysql.html' title='Setting up MySQL'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-112917491831145064</id><published>2005-10-12T20:41:00.000-07:00</published><updated>2006-02-10T11:32:58.676-08:00</updated><title type='text'>My .vimrc (updated 2006-02-10)</title><content type='html'>&lt;div bg="" text="#000000" style="color: rgb(255, 218, 185);"&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;" Ali Rizvi's Vim Settings&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;number&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;shiftwidth=4&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;ruler&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;incsearch&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;hlsearch&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;textwidth=80&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;" from lindes:&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;syntax&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;on&lt;/b&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;hi&lt;/b&gt;&lt;/span&gt; Comment &lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;term&lt;/b&gt;=&lt;span style="color: rgb(205, 0, 205);"&gt;bold &lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;ctermfg&lt;/b&gt;&lt;/span&gt;=Cyan &lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;guifg&lt;/b&gt;=Cyan&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;listchars=tab&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;:&lt;/b&gt;»·&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;,&lt;/b&gt;trail&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;:&lt;/b&gt;·&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;,&lt;/b&gt;eol&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;:&lt;/b&gt;¬&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;autoindent&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;" from benji fisher to turn on the matchit plugin automatically and more&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;filetype&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;plugin&lt;/b&gt; &lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;on&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;" explicity map file extension .t to perl syntax instead of tads&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;" which is autodetected by filetype plugin on&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;" This line should always be after filetype plugin&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;autocmd&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;BufNewFile&lt;/b&gt;,&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;BufRead&lt;/b&gt; *.t &lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;syntax=perl&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;" to show real tabs and spaces in file&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;list&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;listchars=tab&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;:&lt;/b&gt;»·&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;,&lt;/b&gt;trail&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;:&lt;/b&gt;^&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;,&lt;/b&gt;eol&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;:&lt;/b&gt;¬&lt;br /&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;"set listchars=tab:&amp;gt;-,trail:-&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;"to add spaces instead of tabs&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;expandtab&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;" evil, bad! -- hard tabs should be 8 chars... --lindes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;" set tabstop=4&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;" _but_ we can use this:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;smarttab&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;" show matching opening brace/paren when typing close&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;set&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(205, 0, 205);"&gt;showmatch&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;br /&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;"use arrow keys to move to previous and next buffers&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(106, 90, 205);"&gt;&amp;lt;&lt;span style="color: rgb(106, 90, 205);"&gt;C-R&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&amp;gt; :&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;bn&lt;/b&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&amp;lt;&lt;span style="color: rgb(106, 90, 205);"&gt;CR&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&amp;gt;&lt;br /&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;nmap&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(106, 90, 205);"&gt;&amp;lt;&lt;span style="color: rgb(106, 90, 205);"&gt;C-L&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&amp;gt; :&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;b&gt;bp&lt;/b&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&amp;lt;&lt;span style="color: rgb(106, 90, 205);"&gt;CR&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(64, 96, 144);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(205, 0, 205);"&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&lt;span style="color: rgb(128, 64, 64);"&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-112917491831145064?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/112917491831145064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=112917491831145064' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/112917491831145064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/112917491831145064'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/10/my-vimrc-updated-2006-02-10.html' title='My .vimrc (updated 2006-02-10)'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-112917436276494834</id><published>2005-10-12T20:29:00.000-07:00</published><updated>2005-10-12T20:56:50.933-07:00</updated><title type='text'>My gvimrc</title><content type='html'>&lt;div bg="" text="#c0c0c0" style="color: rgb(0, 0, 64);"&gt; &lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(51, 51, 255);"&gt; " Ali Rizvi's Graphical ViMproved configuration file&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(144, 240, 32);"&gt; &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;Revision:&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt; 1.0 - 09/15/2003&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt; " Always have syntax highlighting in with the gui:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 102, 51);"&gt; syntax&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;on&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 160, 255);"&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;" To set the toolbars off (icons on top of the screen)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 102, 51);"&gt; &lt;/span&gt;&lt;span style="color: rgb(153, 102, 51);"&gt;set&lt;/span&gt; &lt;span style="color: rgb(204, 0, 0);"&gt;guioptions&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;-=T&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-112917436276494834?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/112917436276494834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=112917436276494834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/112917436276494834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/112917436276494834'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/10/my-gvimrc.html' title='My gvimrc'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17750808.post-112909100568902718</id><published>2005-10-11T21:16:00.000-07:00</published><updated>2005-10-11T21:31:56.346-07:00</updated><title type='text'>New blog dedicated to my software development adventures</title><content type='html'>I was feeling the need of something like this for a long time but officially I thought of this new blog today on the bus commuting back home.&lt;br /&gt;&lt;br /&gt;I started with looking for a better blogging website then livejournal or blogger both of whom I have used and am using for my various blogs. Two of the blogs that I frequently update are&lt;a href="http://www.livejournal.com/users/saaridunya"&gt; my personal blog &lt;/a&gt; and &lt;a href="http://saarifoto.blogspot.com"&gt;Maryam's (my daughter) photoblog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I discoverd today how hard it could be to find a good name that is available for your new blog on popular sites like blogger. My main problem with livejournal is that it only gives you one blog per user/login. &lt;a href="http://www.blogger.com/"&gt;Blogger &lt;/a&gt;gives you as many as you want but livejournal has some nice native clients that you can install and enjoy using for your blog posting. My favorite &lt;a href="http://www.livejournal.com/download/?platform=Windows"&gt;livejournal client&lt;/a&gt; for Windows is &lt;a href="http://www.livejournal.com/community/ljwin32_sema/"&gt;Semagic&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The result of searching for the ideal blogging website did not give me many options and I finally decided to give with the tried and tested blogger. Now I need to find a nice client for blogger/blogspot to make it easy on myself to blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17750808-112909100568902718?l=saaridev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saaridev.blogspot.com/feeds/112909100568902718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17750808&amp;postID=112909100568902718' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/112909100568902718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17750808/posts/default/112909100568902718'/><link rel='alternate' type='text/html' href='http://saaridev.blogspot.com/2005/10/new-blog-dedicated-to-my-software.html' title='New blog dedicated to my software development adventures'/><author><name>Ali</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://static.flickr.com/27/51769774_2fb0c1c1a0_o.jpg'/></author><thr:total>1</thr:total></entry></feed>
