<?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-5625478444715094438</id><updated>2012-02-16T17:14:24.104-08:00</updated><category term='Python'/><category term='Aptana'/><category term='Web Search'/><category term='Visual Studio'/><category term='Windows Vista'/><category term='Etymology'/><category term='Computers'/><category term='Internet'/><category term='Kubuntu'/><category term='Ruby'/><category term='Society'/><category term='RailsConf'/><category term='Software Development'/><category term='Rails'/><category term='WordPress'/><category term='Pylons'/><category term='jEdit'/><category term='Writing'/><category term='Movies'/><category term='Web 2.0'/><category term='Google'/><category term='DOS'/><category term='Web Hosting'/><category term='Web Frameworks'/><title type='text'>phipster</title><subtitle type='html'>Things I'd forget if I didn't post them here.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.phipster.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.phipster.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>85</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-5106501662313646978</id><published>2012-02-15T16:43:00.000-08:00</published><updated>2012-02-15T16:43:47.722-08:00</updated><title type='text'>A Fundamental Law of the Universe</title><content type='html'>&lt;b&gt;&lt;span style="background-color: white; font-family: arial, sans-serif;"&gt;...the primary rule of IT support: whoever touched it last&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: white; font-family: arial, sans-serif;" title="click me!"&gt;owns it.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;b&gt;&lt;span style="background-color: white; font-family: arial, sans-serif; font-size: 12px;" title="click me!"&gt;-&amp;nbsp;&lt;a href="http://thedailywtf.com/Articles/Ive-Got-Your-Number.aspx"&gt;Remy Porter for WTF!&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5106501662313646978?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/5106501662313646978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2012/02/fundamental-law-of-universe.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5106501662313646978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5106501662313646978'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2012/02/fundamental-law-of-universe.html' title='A Fundamental Law of the Universe'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-3934625221071697253</id><published>2012-01-11T15:01:00.000-08:00</published><updated>2012-01-18T15:20:48.870-08:00</updated><title type='text'>How to write regexs matches that span multiple lines in Visual Studio search</title><content type='html'>Visual Studio has its own weird syntax for searching with regular expressions. Here's how to make a match across multiple lines. Given the sample XSL blocks below&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xsl:apply-templates select="Alph"&lt;br /&gt;mode="frobit"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xsl:apply-templates select="Bob"&amp;nbsp;mode="zap"/&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;xsl:apply-templates select="Cam"&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;mode="frobit"/&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote class="tr_bq"&gt;&lt;/blockquote&gt;I want to match the two statements with the &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;mode="frobit"&lt;/span&gt;, even though the first one has a carriage return in the middle. In VS, you'd use this regex statement to match just the first and last lines, skipping Bob with &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;mode="zap"&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;select.*\n@.*mode="frobit"&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;The first bit,&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;select.*\n,&lt;/span&gt;&amp;nbsp; is standard Perlish for "match from the word &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;select&lt;/span&gt; to the end of line character, &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;\n&lt;/span&gt;."&lt;br /&gt;&lt;br /&gt;The at sign @ is VS's way of asking "please can you find zero or more carriage returns, but only as few as needed." The alternative is the "greedy" match, using an asterisk *, which says "find as many lines as you can ending in carriage returns before you hit &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;mode="frobit"&lt;/span&gt;, so the match in this case would make one giant match, including all of the text from &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;select="Alph"&amp;nbsp;&lt;/span&gt;all the way to the last &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;"frobit"&lt;/span&gt;&amp;nbsp;on Cam, capturing poor Bob in the middle along the way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-3934625221071697253?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/3934625221071697253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2012/01/how-to-write-regexs-matches-that-span.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3934625221071697253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3934625221071697253'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2012/01/how-to-write-regexs-matches-that-span.html' title='How to write regexs matches that span multiple lines in Visual Studio search'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-5988289292911713860</id><published>2012-01-06T19:48:00.000-08:00</published><updated>2012-01-06T19:48:53.938-08:00</updated><title type='text'>How to clean up Windows Media Player</title><content type='html'>If you've relocated or removed a media directory but its contents are still showing up in WMP's libraries list, try deleting the contents of&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;C:\Users\[username]\AppData\Local\Microsoft\Media Player.&lt;/span&gt;&lt;span style="font-family: inherit;"&gt; That&amp;nbsp;should clear out phantoms!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5988289292911713860?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/5988289292911713860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2012/01/how-to-clean-up-windows-media-player.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5988289292911713860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5988289292911713860'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2012/01/how-to-clean-up-windows-media-player.html' title='How to clean up Windows Media Player'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-9140594222778812914</id><published>2012-01-03T15:51:00.000-08:00</published><updated>2012-01-03T15:51:56.574-08:00</updated><title type='text'>How to restore TortoiseSVN icons in Windows Explorer</title><content type='html'>&lt;span style="background-color: white; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16px; text-align: left;"&gt;From the &lt;a href="http://tortoisesvn.tigris.org/faq.html"&gt;TortoiseSVN FAQ&lt;/a&gt;:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="background-color: white; font-family: 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16px; text-align: left;"&gt;With TortoiseSVN 1.3.0 and later, you can also rebuild the icon cache by calling TortoiseProc from the command line like this&amp;nbsp;&lt;/span&gt;&lt;code style="background-color: white; font-family: 'Andale Mono', Courier, monospace; font-size: small; line-height: 16px; text-align: left;"&gt;TortoiseProc.exe /command:rebuildiconcache&lt;/code&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-9140594222778812914?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/9140594222778812914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2012/01/how-to-restore-tortoisesvn-icons-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/9140594222778812914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/9140594222778812914'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2012/01/how-to-restore-tortoisesvn-icons-in.html' title='How to restore TortoiseSVN icons in Windows Explorer'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-37489927453246428</id><published>2011-12-01T12:56:00.001-08:00</published><updated>2011-12-01T13:22:07.885-08:00</updated><title type='text'>Open Windows Explorer from the command line with a Folder tree</title><content type='html'>Did you ever have one of those "GARGHH!" moments when someone shows you how to do something sorta obvious but not really? Like opening Windows Explorer from the command line the way you want it to look?&amp;nbsp;For example, I changed the default action for files of type "Folder" from "open" to "explore". That way, when I double-click a folder shortcut or "My Computer", the sidebar in the Explorer view shows the list of folders instead of the list of tasks, other places, etc.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The commands &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;C:\&amp;gt;start foo&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;or&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;C:\&amp;gt;explorer /e, foo&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;(notice the switch and comma!)&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;opens Windows Explorer view the way I like it:&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-j8cImcHyu4E/TtfrGo1DQdI/AAAAAAAAGH4/B97YC2e3oSM/s1600/windows_xp_explorer_folders.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://3.bp.blogspot.com/-j8cImcHyu4E/TtfrGo1DQdI/AAAAAAAAGH4/B97YC2e3oSM/s320/windows_xp_explorer_folders.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Typing&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;C:\&amp;gt;explorer foo&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;produces a standard or default view:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-p1cP_wTdCGk/Ttfq69hWc7I/AAAAAAAAGHw/jkK_8O-8ySE/s1600/windows_xp_explorer_default.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="http://2.bp.blogspot.com/-p1cP_wTdCGk/Ttfq69hWc7I/AAAAAAAAGHw/jkK_8O-8ySE/s320/windows_xp_explorer_default.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;This respect for the user's preferences seems to extend to things like the tool bars and status bar and type of view, e.g. tiles or details.&amp;nbsp;&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;C:\&amp;gt;explorer foo&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&amp;nbsp;seems to ignore all of your preferences.&lt;/span&gt;&lt;/div&gt;Thanks to the mighty folks at&amp;nbsp;&lt;a href="http://www.howtogeek.com/howto/windows-vista/stupid-geek-tricks-open-an-explorer-window-from-the-command-prompts-current-directory/"&gt;How-To Geek&lt;/a&gt;&amp;nbsp;for the awesome insights.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-37489927453246428?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/37489927453246428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2011/12/open-windows-explorer-from-command-line.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/37489927453246428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/37489927453246428'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2011/12/open-windows-explorer-from-command-line.html' title='Open Windows Explorer from the command line with a Folder tree'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-j8cImcHyu4E/TtfrGo1DQdI/AAAAAAAAGH4/B97YC2e3oSM/s72-c/windows_xp_explorer_folders.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-4254719833406471732</id><published>2011-11-19T20:32:00.000-08:00</published><updated>2011-11-19T20:32:23.037-08:00</updated><title type='text'>Good advice</title><content type='html'>&lt;a href="http://blog.alexobenauer.com/stop-writing-good-code-start-writing-good-sof"&gt;Focus on the product, not on your code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-4254719833406471732?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/4254719833406471732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2011/11/good-advice.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4254719833406471732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4254719833406471732'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2011/11/good-advice.html' title='Good advice'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-920163214213612412</id><published>2011-08-17T08:24:00.000-07:00</published><updated>2011-08-17T08:24:03.026-07:00</updated><title type='text'>The Anti-Car Movement</title><content type='html'>&lt;br /&gt;Erik Curren &lt;a href="http://transitionvoice.com/2011/08/the-most-dangerous-machine-ever-built/"&gt;writes&lt;/a&gt; in his review of &lt;a href="http://www.amazon.com/gp/product/1552663841/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&amp;amp;tag=transitionvoice-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1552663841"&gt;Stop Signs: Cars and Capitalism on the Road to Economic, Social and Ecological Decay&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;For my money, to get people to demand change on such a large scale, they’re going to need a pretty strong motivation. As any salesman can tell you, &lt;b&gt;fear of loss is a much stronger motivator than hope of gain&lt;/b&gt;. And considering what’s at stake at this point — the survival of human civilization — a healthy sense of fear and urgency is also a more realistic reaction than warm-fuzzies about a higher quality of life.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-920163214213612412?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/920163214213612412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2011/08/anti-car-movement.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/920163214213612412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/920163214213612412'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2011/08/anti-car-movement.html' title='The Anti-Car Movement'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-32742155650609852</id><published>2011-07-30T13:04:00.000-07:00</published><updated>2011-07-30T13:04:43.931-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Writing'/><title type='text'>Foolish things done in a moment of weakness</title><content type='html'>Signed up for &lt;a href="http://campnanowrimo.org/campers/phipster"&gt;Camp NaNoWriMo&lt;/a&gt;. Wish me luck.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-32742155650609852?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/32742155650609852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2011/07/foolish-things-are-done-in-moment-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/32742155650609852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/32742155650609852'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2011/07/foolish-things-are-done-in-moment-of.html' title='Foolish things done in a moment of weakness'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-8119064202185401679</id><published>2011-04-25T07:59:00.000-07:00</published><updated>2011-04-25T08:02:33.166-07:00</updated><title type='text'>Failure</title><content type='html'>&lt;blockquote&gt;The best way to &lt;b&gt;avoid Failure&lt;/b&gt; is to &lt;i&gt;fail constantly&lt;/i&gt;.&lt;/blockquote&gt;&lt;a href="http://www.codinghorror.com/blog/2011/04/working-with-the-chaos-monkey.html"&gt;Jeff &amp;quot;Chaos Monkey&amp;quot; Atwood&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-8119064202185401679?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/8119064202185401679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2011/04/failure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8119064202185401679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8119064202185401679'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2011/04/failure.html' title='Failure'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-5781246260940720598</id><published>2011-02-09T10:32:00.000-08:00</published><updated>2011-02-09T10:34:06.601-08:00</updated><title type='text'>Gas Station Philosophy</title><content type='html'>My office-mate's father once saw these instructions inscribed on a humble tire pressure&amp;nbsp;gauge, and I thought it just had to be shared with the world:&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Too little pressure causes poor performance, too much pressure causes blowouts.&lt;/b&gt;&lt;/blockquote&gt;Remember that as you motor on down the Highway of Life.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5781246260940720598?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/5781246260940720598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2011/02/gas-station-philosophy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5781246260940720598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5781246260940720598'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2011/02/gas-station-philosophy.html' title='Gas Station Philosophy'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-7803519085908114440</id><published>2010-12-02T17:16:00.000-08:00</published><updated>2010-12-02T17:16:31.510-08:00</updated><title type='text'>Smalltalk Lives</title><content type='html'>Somewhere in the heart of &lt;a href="http://www-01.ibm.com/software/awdtools/reqpro/"&gt;Reqpro&lt;/a&gt;, Smalltalk lives on. Got this notice when I quit:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_KF0-4vGoskY/TPhElzOST-I/AAAAAAAAF-w/_4KX0PSlpmM/s1600/smalltalk_lives.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_KF0-4vGoskY/TPhElzOST-I/AAAAAAAAF-w/_4KX0PSlpmM/s1600/smalltalk_lives.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-7803519085908114440?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/7803519085908114440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2010/12/smalltalk-lives.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7803519085908114440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7803519085908114440'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2010/12/smalltalk-lives.html' title='Smalltalk Lives'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_KF0-4vGoskY/TPhElzOST-I/AAAAAAAAF-w/_4KX0PSlpmM/s72-c/smalltalk_lives.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-4010641189358357630</id><published>2010-10-28T14:47:00.000-07:00</published><updated>2010-10-28T14:47:16.427-07:00</updated><title type='text'>Quote of the day</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;&lt;em&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;functionality is an asset, but code is a liability&lt;/span&gt;&lt;/b&gt;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'trebuchet ms';"&gt;&lt;em&gt;- Ted Dziuba on &lt;a href="http://teddziuba.com/2010/10/taco-bell-programming.html"&gt;Taco Bell Programming&lt;/a&gt;&lt;/em&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-4010641189358357630?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/4010641189358357630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2010/10/quote-of-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4010641189358357630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4010641189358357630'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2010/10/quote-of-day.html' title='Quote of the day'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-3638749078836519325</id><published>2010-09-17T11:56:00.000-07:00</published><updated>2010-09-17T11:56:35.477-07:00</updated><title type='text'>Keyboards</title><content type='html'>I don't understand why most generic PC keyboards, you know the kind that plug into a USB port on your PC, lack &lt;a href="http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=MIGR-54780"&gt;on-board USB ports&lt;/a&gt; themselves. It would be so convenient for things like &lt;a href="http://www.thinkgeek.com/computing/usb-gadgets/5a84/"&gt;keyboard lights&lt;/a&gt;. Back in the day, my &lt;a href="http://en.wikipedia.org/wiki/Macintosh_II"&gt;Mac&lt;/a&gt; keyboard had &lt;a href="http://en.wikipedia.org/wiki/Apple_Desktop_Bus"&gt;Apple Desktop Bus&lt;/a&gt; ports, so I could plug the mouse directly into the keyboard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-3638749078836519325?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/3638749078836519325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2010/09/keyboards.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3638749078836519325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3638749078836519325'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2010/09/keyboards.html' title='Keyboards'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-2109550150886019674</id><published>2010-09-13T10:22:00.000-07:00</published><updated>2010-09-13T10:22:51.665-07:00</updated><title type='text'>Compute length of a string in a batch file</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;set myvar="some string"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rem compute the length of a string&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;set #=%myvar%&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;set length=0&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;:loop&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;if defined # (&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;rem shorten string by one character&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;set #=%#:~1%&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;rem increment the string count variable %length%&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;set /A length += 1&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;rem repeat until string is null&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;goto loop&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;echo myvar is %length% characters long!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Thanks to poster&amp;nbsp;&lt;a href="http://www.computing.net/answers/dos/length-of-a-string-in-a-batch-file/13650.html"&gt;Secret_Doom&lt;/a&gt;&amp;nbsp;on computing.net&lt;/div&gt;&lt;div&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/5625478444715094438-2109550150886019674?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/2109550150886019674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2010/09/compute-length-of-string-in-batch-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2109550150886019674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2109550150886019674'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2010/09/compute-length-of-string-in-batch-file.html' title='Compute length of a string in a batch file'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-7341508184055508058</id><published>2010-09-07T13:28:00.000-07:00</published><updated>2010-09-07T13:45:00.851-07:00</updated><title type='text'>How to fix "weird" characters in XML</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I had been aggravated by an extraneous a-circumflex character (Â, Windows keymap Alt-0194, Unicode '\u, HTML character entity &amp;amp;Acirc;) preceding all the degree symbols in XML output from C++ code using MSXML. For historical reasons, the degree symbol is defined in code as a literal &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;const std::string = "°"&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;, which is later added to an XML Document tree, then output using fout() function.&lt;/span&gt;&lt;br /&gt;Here's an abridged sample:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;Data&amp;gt;&lt;br /&gt;&amp;lt;Temperature&amp;gt;Â°&amp;lt;Temperature/&amp;gt;&lt;br /&gt;&amp;lt;/Data&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;[explain ISO-8859-1]. It appears that MSXML stores the character in the XML document as a two byte encoding. UTF-8 uses &lt;a href="http://en.wikipedia.org/wiki/Variable-width_encoding"&gt;variable-width encoding&lt;/a&gt;, which means the ASCII character codes between 0 and 127 map directly to their hex values in UTF-8, e.g. the capital letter X, is 0x58 in both ASCII and UTF-8.&lt;br /&gt;&lt;br /&gt;The hex value, C2B0 (1100 0100 1011 0000), represents a "lead unit". After some Googling, I found &lt;a href="http://bytes.com/topic/php/answers/452523-latin-capital-circumflex-preceding-pound-symbol#post1730113"&gt;a very clear explanation from Andy Hassall&lt;/a&gt;&amp;nbsp;to a similar problem:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;But your PHP code may be trying to treat UTF-8 as single-byte ISO-8859-1.&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;b&gt;A British pound symbol is two bytes in UTF-8 - it's U+00A3 which is 0xC2 0xA3&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;b&gt;in UTF-8.&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;a href="http://www.fileformat.info/info/unicode/char/00A3/index.htm" rel="nofollow" style="color: #2a5db0;" target="_blank"&gt;http://www.fileformat.info/info/unic...00A3/index.htm&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;If you tried to display this as ISO-8859-1 you'd get:&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;0xC2 = Latin capital A with circumflex&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;0xA3 = British pound symbol&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family: verdana, Arial, sans-serif; font-size: 12px; line-height: 22px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/ISO_8859-1" rel="nofollow" style="color: #2a5db0;" target="_blank"&gt;http://en.wikipedia.org/wiki/ISO_8859-1&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;a href="http://www.dpawson.co.uk/xsl/sect2/N7150.html#d9562e1221"&gt;Mike Brown explains it this way&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: serif;"&gt;Take, for example, the non-breaking space character, which in HTML we often write as "&amp;amp;nbsp;", a predefined (in HTML, not XML) entity reference defined as equivalent to "&amp;amp;#160;", which in turn is interpreted as the single non-breaking-space character. Different encoding schemes will represent this character as different bit sequences.&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-family: 'Times New Roman';"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: serif;"&gt;For example, in the "iso-8859-1" encoding, the non-breaking space character maps to the bit sequence 10100000, an 8-bit byte representing a value that we can also easily express as decimal 160 or hex A0. But in "utf-8", the non-breaking space maps to the bit sequence 11000010 10100000. If we interpret this as a pair of 8-bit bytes, we could say they represent the values hex C2 followed by A0 (192 and 160).&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-family: 'Times New Roman';"&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: serif;"&gt;Now imagine you are the web browser, receiving an HTTP message containing an HTML document. All you see in the message is a stream of bits. How do you know what 11000010 10100000 means?&lt;/div&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: serif;"&gt;If you think the document is encoded using utf-8, you'll correctly interpret this sequence as one single NO-BREAK SPACE character (that's its Unicode name).&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: serif;"&gt;If you think the document is encoded using iso-8859-1, you will incorrectly interpret it as *two* characters: (0xC2) LATIN CAPITAL LETTER A WITH CIRCUMFLEX followed by (0xA0) NO-BREAK SPACE.&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;This was pretty much the same thing I was seeing.&amp;nbsp;The XML processing instruction does not specify an encoding, so it defaults to ISO-8859-1. When MSXML renders the two byte degree character to single-byte ISO-8859-1, the first byte is saved as the Unicode lead unit 0xC2, followed by the single byte for the degree symbol, 0xB0. When the XML file is opened with a text editor (jEdit), the first byte is displayed as the a-circumflex, which happens to be 0xC2 in ISO-8859-1.&lt;br /&gt;&lt;br /&gt;I fixed the problem by specifying the encoding in the XML processing instruction for MSXML:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;Data&amp;gt;&lt;br /&gt;&amp;lt;Temperature&amp;gt;°&amp;lt;Temperature/&amp;gt;&lt;br /&gt;&amp;lt;/Data&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;It works equally well if the encoding is specified as ISO-8895-1. Now the XML declaration includes an explicit processing instruction for the encoding scheme, and MSXML renders the degree character as a single byte, 0xB0.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-7341508184055508058?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/7341508184055508058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2010/09/how-to-fix-weird-characters-in-xml.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7341508184055508058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7341508184055508058'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2010/09/how-to-fix-weird-characters-in-xml.html' title='How to fix &quot;weird&quot; characters in XML'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-2685786683326339112</id><published>2010-04-07T09:46:00.000-07:00</published><updated>2010-04-07T09:51:22.866-07:00</updated><title type='text'>one-liner: mount the current directory to a temporary top-level drive letter</title><content type='html'>Suppose you're doing command line stuff in some ridiculously deep folder, e.g. &lt;code&gt;C:\some path\to some\ridiculously deep\folder\way down\below a reasonable\level&amp;gt;&lt;/code&gt;, so the default command prompt pushes way over to the right edge of the screen, and any output containing the wraps 3 times in the window, and it's just really hard to read:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_KF0-4vGoskY/S7y30lRDqkI/AAAAAAAAFA0/ZVYObCQiJE0/s1600/subst.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="507" src="http://4.bp.blogspot.com/_KF0-4vGoskY/S7y30lRDqkI/AAAAAAAAFA0/ZVYObCQiJE0/s640/subst.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The following one-liner will "substitute" a temporary drive &lt;code&gt;x:&lt;/code&gt; for the current path, effectively mounting &lt;code&gt;C:\some path\to some\ridiculously deep\folder\way down\below a reasonable\level&amp;gt;&lt;/code&gt; as &lt;code&gt;x:\&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;for /f "tokens=*" %i in ('cd') do @subst x: "%i"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Delete the temporary drive with the command &lt;code&gt;subst /d x:&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-2685786683326339112?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/2685786683326339112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2010/04/one-liner-mount-current-directory-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2685786683326339112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2685786683326339112'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2010/04/one-liner-mount-current-directory-to.html' title='one-liner: mount the current directory to a temporary top-level drive letter'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_KF0-4vGoskY/S7y30lRDqkI/AAAAAAAAFA0/ZVYObCQiJE0/s72-c/subst.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-8008584412322457072</id><published>2010-04-06T13:56:00.000-07:00</published><updated>2010-04-06T14:50:00.127-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DOS'/><title type='text'>Substituting characters inline</title><content type='html'>Use the following technique to make character substitutions on the fly from DOS command results.&lt;br /&gt;&lt;br /&gt;Given a file listing with underscores in the file names, e.g.&lt;br /&gt;&lt;pre&gt;foo_first.txt&lt;br /&gt;foo_second.txt&lt;br /&gt;foo_third.txt&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This is ugly, but it works. Start a new command shell with delayed variable expansion option &lt;code&gt;cmd /v&lt;/code&gt;, then run the following one-liner, e.g. to replace the underscores with spaces:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;C:\&amp;gt;for /f %i in ('dir /b') do @set x=%i &amp; echo !x:_= !&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The result will be:&lt;br /&gt;&lt;pre&gt;foo first.txt&lt;br /&gt;foo second.txt&lt;br /&gt;foo third.txt&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The first trick, delayed variable expansion, is enabled by starting a new command shell with the /v option. This lets you set and change a variable's value at runtime by surrounding the variable with bangs ! instead of percents %. Normally, the default no immediate variable expansion would not update the x variable each time &lt;code&gt;dir /b&lt;/code&gt; returns a line. Only the last value set to x is echoed each time:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;foo third.txt&lt;br /&gt;foo third.txt&lt;br /&gt;foo third.txt&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The second trick, character substitution, is set by &lt;code&gt;!x:_= !&lt;/code&gt;. &lt;br /&gt;&lt;br /&gt;You can substitute other characters, e.g. &lt;code&gt;!x:abc=def!&lt;/code&gt; would turn abcxyz.txt into defxyz.txt&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-8008584412322457072?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/8008584412322457072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2010/04/substituting-characters-inline.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8008584412322457072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8008584412322457072'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2010/04/substituting-characters-inline.html' title='Substituting characters inline'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-2193134509149945794</id><published>2010-03-17T16:23:00.000-07:00</published><updated>2010-04-15T15:31:53.845-07:00</updated><title type='text'>The Metric Law of 90s</title><content type='html'>&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, Arial, Helvetica; font-size: 12px;"&gt;Thanks to &lt;a href="http://www.baselinemag.com/c/a/IT-Management/Lies-Damned-Lies-and-Project-Metrics-Part-1/1/"&gt;Bruce F. Webster&lt;/a&gt;, who reminded me of this hoary old saying:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;The first 90 percent of a development project takes 90 percent of the schedule. &lt;br /&gt;&lt;br /&gt;The remaining 10 percent of the project takes the other 90 percent of the schedule.&lt;/blockquote&gt;&lt;br /&gt;Note (15 April 2010) - discovered this is also known as &lt;a href="http://en.wikipedia.org/wiki/Ninety-ninety_rule"&gt;the Ninety-ninety Rule&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-2193134509149945794?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/2193134509149945794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2010/03/metric-law-of-90s.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2193134509149945794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2193134509149945794'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2010/03/metric-law-of-90s.html' title='The Metric Law of 90s'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-5647783226367804336</id><published>2010-03-11T22:19:00.000-08:00</published><updated>2010-03-11T22:23:40.793-08:00</updated><title type='text'>Experience</title><content type='html'>This notion puzzled me for some time: &lt;b&gt;Have you got X years' experience&amp;nbsp;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;[cooking, programming computers, running a business]&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;, or one year, repeated X times?&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Simply, have you grown? Are you doing something new this year, something you couldn't have comprehended X years ago? Did you acquire a new skill, learn a new point of view, make a new friend, visit a new place?&lt;br /&gt;&lt;br /&gt;If not, you're on the hamster wheel. Time to bail out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5647783226367804336?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/5647783226367804336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2010/03/experience.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5647783226367804336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5647783226367804336'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2010/03/experience.html' title='Experience'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-6732948281158377663</id><published>2010-01-05T07:25:00.000-08:00</published><updated>2010-03-01T23:20:47.398-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>How to run SQL*Plus one liners on Windows</title><content type='html'>Suppose you have a simple one line query to run on your Oracle database. Oddly, SQL*Plus doesn't take SQL statements as a command line parameter.&lt;br/&gt;&lt;br/&gt;For a simple one liner, it's often too much work to start up sqlplus, logon, type in the SQL statement, then exit. It may also be too trivial to save the SQL statement to a file that you then call from sqlplus, e.g. &lt;code&gt;C:\&amp;gt;sqlplus user/pass @myfile.sql&lt;/code&gt;.&lt;br/&gt;&lt;br/&gt;To do it all in one line on the command prompt, &lt;strong&gt;echo&lt;/strong&gt; the statement into sqlplus:&lt;br/&gt;&lt;br/&gt;&lt;code&gt;echo select count(*) from mytable; | sqlplus user/pass&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;This technique would probably also work on a Unix box, but I don't have an Oracle db installed on a Unix box to test it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-6732948281158377663?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/6732948281158377663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2010/01/how-to-run-sqlplus-one-liners-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6732948281158377663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6732948281158377663'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2010/01/how-to-run-sqlplus-one-liners-on.html' title='How to run SQL*Plus one liners on Windows'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-1631950645421388058</id><published>2009-12-09T07:45:00.000-08:00</published><updated>2010-03-01T23:20:47.400-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>Peak Prices?</title><content type='html'>I've had &lt;a href="http://www.amazon.ca/Oil-101-Morgan-Downey/dp/0982039204/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1260402085&amp;amp;sr=1-1"&gt;Oil 101&lt;/a&gt; in my Amazon.ca cart for a few weeks. Just not ready to read it yet. When I checked my cart today, I was unpleasantly surprised to read this note:&lt;br/&gt;&lt;br/&gt;Please note that the price of Oil 101 has increased from CDN$ 23.20 to CDN$ 36.97 since you placed it in your Shopping Cart. Items in your cart will always reflect the most recent price displayed on their product detail pages. &lt;br/&gt;&lt;br/&gt;How does Amazon justify boosting the price by almost 60% in just a couple of months? Perhaps, like the book's subject, we've reached "&lt;a href="http://www.aspousa.org/"&gt;Peak Books&lt;/a&gt;"...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-1631950645421388058?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/1631950645421388058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2009/12/peak-prices.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/1631950645421388058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/1631950645421388058'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2009/12/peak-prices.html' title='Peak Prices?'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-8029983412984791557</id><published>2009-05-05T03:44:00.000-07:00</published><updated>2010-03-01T23:20:47.401-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>gnu find and grep: using path patterns to match more than one file
extension</title><content type='html'>Example using Cygwin gnu find, xargs and grep to search for a typo in XSLT and XML files. Note that &lt;code&gt;-iregex&lt;/code&gt; matches a pattern in the whole path, and the pattern is a &lt;a href="http://en.wikipedia.org/wiki/Regular_expression#POSIX_Basic_Regular_Expressions"&gt;POSIX basic regex&lt;/a&gt;:&lt;br/&gt;&lt;br/&gt;&lt;pre lang="batch"&gt;C:\&amp;gt;find ./ -iregex '.*\.\(xslt\^|xml\)' -type f -print | xargs grep -i "staus"&lt;/pre&gt;&lt;br/&gt;&lt;br/&gt;When &lt;code&gt;find&lt;/code&gt; matches a file path, the path is piped to &lt;code&gt;xargs&lt;/code&gt;, which hands it off to &lt;code&gt;grep&lt;/code&gt; to search for the string "staus" - which I want to replace with "status" (but not here :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-8029983412984791557?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/8029983412984791557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2009/05/gnu-find-and-grep-using-path-patterns.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8029983412984791557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8029983412984791557'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2009/05/gnu-find-and-grep-using-path-patterns.html' title='gnu find and grep: using path patterns to match more than one file&#xA;extension'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-9062967265034272666</id><published>2009-05-04T04:42:00.000-07:00</published><updated>2010-03-01T23:20:47.402-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Society'/><category scheme='http://www.blogger.com/atom/ns#' term='Web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='WordPress'/><title type='text'>Cygwin setup.exe fails during upgrade</title><content type='html'>Like &lt;a href="http://rubenlaguna.com/wp/2007/11/05/cygwin-setupexe-crashes-when-upgrading-packages/"&gt;Ruben&lt;/a&gt;, who provided the clues, I discovered that a corrupt/incompatible alternatives.lst.bz file in the C:\cygwin\etc\setup directory caused Cywin setup.exe to fail. &lt;br/&gt;&lt;br/&gt;A few clues pointed to this file as the culprit:&lt;br/&gt;&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;&lt;li&gt;First time through, the installer complained that some other Cygwin process had locked the readme file&lt;/li&gt;&lt;br/&gt;&lt;li&gt;the installer just looped indefinitely on extracting the README file from alternatives.lst.bz until I killed it&lt;/li&gt;&lt;br/&gt;&lt;li&gt;The only .bz file in C:\cygwin\etc\setup with today's date was alternatives.lst.bz.&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;br/&gt;Here's what the log file recorded, for several thousand lines:&lt;br/&gt;&lt;br/&gt;&lt;pre&gt;&lt;br/&gt;2009/05/04 11:01:23 io_stream_cygfile: &lt;br/&gt;fopen(/etc/alternatives/README) failed 13 Permission denied&lt;br/&gt;2009/05/04 11:01:23 Failed to open &lt;br/&gt;cygfile:///etc/alternatives/README for writing.&lt;br/&gt;&lt;/pre&gt;&lt;br/&gt;&lt;br/&gt;I renamed the file to &lt;strong&gt;alternatives.lst.bz.bak&lt;/strong&gt; , then reran setup.exe to successfully upgrade Cygwin.&lt;br/&gt;&lt;br/&gt;Now I suppose I should log a bug report...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-9062967265034272666?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/9062967265034272666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2009/05/cygwin-setupexe-fails-during-upgrade.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/9062967265034272666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/9062967265034272666'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2009/05/cygwin-setupexe-fails-during-upgrade.html' title='Cygwin setup.exe fails during upgrade'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-1989245039573430933</id><published>2009-05-04T03:09:00.000-07:00</published><updated>2010-03-01T23:20:47.408-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>How to fix apropos for Cygwin</title><content type='html'>If the &lt;strong&gt;apropos&lt;/strong&gt; command in Cygwin doesn't find anything expected, run &lt;code&gt;/usr/sbin/makewhatis&lt;/code&gt; from your Cygwin bash prompt to rebuild the &lt;a href="http://en.wikipedia.org/wiki/Whatis"&gt;whatis&lt;/a&gt; database.&lt;br/&gt;&lt;br/&gt;Thanks to &lt;a href="http://www.cygwin.com/ml/cygwin/2003-03/msg01499.html"&gt;Mike and Igor&lt;/a&gt; for their tips.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-1989245039573430933?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/1989245039573430933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2009/05/how-to-fix-apropos-for-cygwin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/1989245039573430933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/1989245039573430933'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2009/05/how-to-fix-apropos-for-cygwin.html' title='How to fix apropos for Cygwin'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-4807409960122032150</id><published>2009-05-01T05:35:00.000-07:00</published><updated>2010-03-01T23:46:41.761-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>How to make Windows %path% readable</title><content type='html'>If like me your Windows &lt;code&gt;%path%&lt;/code&gt; looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;PATH=c:rubybin;C:Perlsitebin;C:Perlbin;C:Oracle&lt;br /&gt;OraHome817bin;C:oracleproduct10.2.0gpdbin;C:Program &lt;br /&gt;FilesOraclejre1.1.7bin;C:Python26;C:Python26scripts;C:&lt;br /&gt;Python26Libidlelib;C:cygwinbin;C:Program FilesWindows &lt;br /&gt;Resource KitsTools;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWS&lt;br /&gt;Downloaded ProgramFiles;C:Program FilesIBMDirectorbin;C:&lt;br /&gt;Program FilesDiskeeper CorporationDiskeeper;c:Program &lt;br /&gt;FilesMicrosoft SQL Server90Toolsbinn;C:Program Files&lt;br /&gt;Rationalcommon;c:scripts;C:Program FilesjEdit;C:Program &lt;br /&gt;FilesQuickTimeQTSystem;C:Program FilesTortoiseSVNbin;C:&lt;br /&gt;ipdsdevaxis2axis2c-rel-1.3.0lib;C:Program FilesJava&lt;br /&gt;jdk1.5.0_16bin;C:jruby-1.2.0bin&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then save this to "road.bat" somewhere on your path:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;@echo off&lt;br /&gt;rem source: http://www.perlmonks.org/?node_id=757655&lt;br /&gt;for %%i in ("%path:;=" "%") do @echo %%i&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;When you run &lt;code&gt;C:\&amp;gt;road&lt;/code&gt; all those paths are nicely split and one-lined:&lt;br /&gt;&lt;pre&gt;C:&amp;gt;road&lt;br /&gt;"c:rubybin"&lt;br /&gt;"C:Perlsitebin"&lt;br /&gt;"C:Perlbin"&lt;br /&gt;"C:OracleOraHome817bin"&lt;br /&gt;"C:oracleproduct10.2.0gpdbin"&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and you can do cool things like &lt;code&gt;C:\&amp;gt;road | find /i "Perl"&lt;/code&gt; to find out where Perl is hiding.&lt;br /&gt;&lt;br /&gt;To paraphrase the (brilliant) author &lt;a href="http://www.perlmonks.org/?node_id=749850"&gt;VinsWorldcom&lt;/a&gt;, this one-liner &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;wraps the %PATH% ENV var in double quotes and then replaces all the semicolon separators with a double-quote, space, double quote. This effectively puts double quotes around all the paths (so spaces won't give any troubles) then use the for loop to list each newly double-quoted string.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-4807409960122032150?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/4807409960122032150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2009/05/how-to-make-windows-path-readable.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4807409960122032150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4807409960122032150'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2009/05/how-to-make-windows-path-readable.html' title='How to make Windows %path% readable'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-6212747223365017815</id><published>2009-04-29T14:25:00.000-07:00</published><updated>2010-03-01T23:20:47.418-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>Nice vim theme</title><content type='html'>Very textmate-y: &lt;a href="http://blog.infinitered.com/entries/show/8"&gt;IR_Black&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-6212747223365017815?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/6212747223365017815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2009/04/nice-vim-theme.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6212747223365017815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6212747223365017815'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2009/04/nice-vim-theme.html' title='Nice vim theme'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-9221908182857355304</id><published>2009-04-29T00:52:00.000-07:00</published><updated>2010-03-01T23:20:47.432-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Society'/><category scheme='http://www.blogger.com/atom/ns#' term='Movies'/><title type='text'>Hollywood != Real World</title><content type='html'>This is why I boycotted Slumdog Millionaire:&lt;br/&gt;&lt;br/&gt;&lt;blockquote&gt;Two months ago, the child star of the hit movie &amp;quot;Slumdog Millionaire&amp;quot; was worrying about what to wear to the Oscars. Now she has come home to a very different problem: How to get the fetid water out of her family's one-room shack.&lt;/blockquote&gt;&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.msnbc.msn.com/id/30468825/"&gt;Read the rest of the story.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-9221908182857355304?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/9221908182857355304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2009/04/hollywood-real-world.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/9221908182857355304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/9221908182857355304'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2009/04/hollywood-real-world.html' title='Hollywood != Real World'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-5554776796470790544</id><published>2009-04-28T14:38:00.000-07:00</published><updated>2010-03-01T23:20:47.437-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Hosting'/><category scheme='http://www.blogger.com/atom/ns#' term='WordPress'/><title type='text'>Moved hosting DreamHost -&gt; WebFaction</title><content type='html'>Following in &lt;a href="http://crashsystems.net/tag/wordpress/"&gt;Douglass Clem&lt;/a&gt;'s footsteps (and thanks for the tip about &lt;a href="http://en.wikipedia.org/wiki/Secure_copy"&gt;scp&lt;/a&gt;), I migrated my domain hosting and this blog from &lt;a href="http://www.dreamhost.com/"&gt;DreamHost&lt;/a&gt; to &lt;a href="http://www.webfaction.com/"&gt;WebFaction&lt;/a&gt;, for many of the same reasons. I wasn't &lt;em&gt;unhappy&lt;/em&gt; with DreamHost, I just want to try out &lt;a href="http://pylonshq.com/"&gt;Pylons&lt;/a&gt; and WebFaction seems to be the place to be for that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5554776796470790544?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/5554776796470790544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2009/04/moved-hosting-dreamhost-webfaction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5554776796470790544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5554776796470790544'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2009/04/moved-hosting-dreamhost-webfaction.html' title='Moved hosting DreamHost -&amp;gt; WebFaction'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-8428187190699431956</id><published>2009-04-22T01:38:00.000-07:00</published><updated>2010-03-01T23:20:47.458-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>my .irbrc file</title><content type='html'>&lt;pre&gt;require 'irb/completion'&lt;br/&gt;IRB.conf[:AUTO_INDENT] = true&lt;br/&gt;IRB.conf[:USE_READLINE] = true&lt;br/&gt;IRB.conf[:PROMPT_MODE] = :SIMPLE&lt;br/&gt;&lt;/pre&gt;&lt;br/&gt;&lt;pre&gt;&lt;br/&gt;\# call ri from within irb&lt;br/&gt;def ri(*names)&lt;br/&gt;  system(%{ri.bat #{names.map {|name| name.to_s}.join(" ")}})&lt;br/&gt;end&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-8428187190699431956?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/8428187190699431956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2009/04/my-irbrc-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8428187190699431956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8428187190699431956'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2009/04/my-irbrc-file.html' title='my .irbrc file'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-5717273216265147235</id><published>2009-03-05T02:53:00.000-08:00</published><updated>2010-03-01T23:20:47.460-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>How to make an empty file on Windows</title><content type='html'>To makes an "empty" file,  containing only a single newline, type this in a Windows command prompt:&lt;br/&gt;&lt;pre&gt;c:\&amp;gt;echo. &amp;gt; somefile.txt&lt;/pre&gt;&lt;br/&gt;The dot immediately after the &lt;strong&gt;echo &lt;/strong&gt;command outputs just a blank line to the file. I think this technique works for Windows NT and better.&lt;br/&gt;&lt;br/&gt;Apparently you can also use the &lt;strong&gt;fsutil &lt;/strong&gt;command to &lt;a href="http://itobserver.blogspot.com/2007/09/10-useful-windows-command-line-commands.html"&gt;make a file of any size filled with zeros&lt;/a&gt;:&lt;br/&gt;&lt;pre&gt;&lt;span style="font-family: courier new; font-size: 85%; color: #333333;"&gt;&lt;strong&gt;c:\&amp;gt;fsutil file createnew &lt;em&gt;filename&lt;/em&gt; &lt;em&gt;length&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5717273216265147235?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/5717273216265147235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2009/03/how-to-make-empty-file-on-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5717273216265147235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5717273216265147235'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2009/03/how-to-make-empty-file-on-windows.html' title='How to make an empty file on Windows'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-5089441202778623563</id><published>2009-02-02T03:42:00.000-08:00</published><updated>2010-03-01T23:20:47.461-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><category scheme='http://www.blogger.com/atom/ns#' term='jEdit'/><title type='text'>jEdit delete duplicate lines</title><content type='html'>In jEdit's Search and Replace dialog, select "Regular Expressions",  then Search for:&lt;br/&gt;&lt;pre&gt;^(.\*)$\n\1&lt;/pre&gt;&lt;br/&gt;replace with:&lt;br/&gt;&lt;pre&gt;$1&lt;/pre&gt;&lt;br/&gt;This tells jEdit to&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;start at the beginning of a line &lt;strong&gt;^&lt;/strong&gt;&lt;img src="http://localhost/TEMP/moz-screenshot.jpg" alt="" /&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;find any characters, spaces, etc &lt;strong&gt;.*&lt;/strong&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;up to the end of the line &lt;strong&gt;$&lt;/strong&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;including a carriage return&lt;strong&gt; \n&lt;/strong&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;that matches the text on the following line &lt;strong&gt;\1&lt;/strong&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;then replace it with just the first matched line &lt;strong&gt;$1&lt;/strong&gt;&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;The result is any lines that are duplicated will be replaced with just a single copy of the line.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5089441202778623563?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/5089441202778623563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2009/02/jedit-delete-duplicate-lines.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5089441202778623563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5089441202778623563'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2009/02/jedit-delete-duplicate-lines.html' title='jEdit delete duplicate lines'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-1620378379663392579</id><published>2008-12-16T04:01:00.000-08:00</published><updated>2010-03-01T23:20:47.464-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>Using caret '^' in Windows batch files</title><content type='html'>The caret '^' character serves two purposes in Windows batch files:&lt;br /&gt;&lt;br /&gt;1. line continuations:&lt;br /&gt;~~~&lt;br /&gt;    @echo off&lt;br /&gt;&lt;br /&gt;    dir ^&lt;br /&gt;    /ad ^&lt;br /&gt;    c:\temp&lt;br /&gt;~~~~&lt;br /&gt;results in &lt;code&gt;dir /ad c:\temp&lt;/code&gt;, which lists only the directories in C:\temp. (Thanks to &lt;a href="http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/MS_DOS/Q_22848528.html"&gt;SteveGTR&lt;/a&gt; for that example.)&lt;br /&gt;&lt;br /&gt;2. Escaping reserved shell characters &amp;amp; | ( &amp;lt; &amp;gt; ^. Use a preceding caret to escape and print the character:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;echo this pipe will print ^| but this one won't |&lt;br /&gt;echo and this will print one caret ^^&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-1620378379663392579?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/1620378379663392579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/12/using-caret-in-windows-batch-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/1620378379663392579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/1620378379663392579'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/12/using-caret-in-windows-batch-files.html' title='Using caret &amp;#39;^&amp;#39; in Windows batch files'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-1810063258102513401</id><published>2008-12-02T12:02:00.000-08:00</published><updated>2010-03-01T23:20:47.466-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='WordPress'/><title type='text'>Monotype font for Wordpress "Write Post" text area</title><content type='html'>I like to use a monotype font (e.g. Courier) when I edit my blog posts in HTML mode. Wordpress seems to default to a proportional font. Try as I might, I couldn't find an easy way to change this from the WP admin pages, so I resorted to hacking the responsible stylesheet, &lt;code&gt;/wp-admin/wp-admin.css&lt;/code&gt;, adding the &lt;code&gt;font-family&lt;/code&gt; declaration for the #content text area:&lt;br/&gt;&lt;br/&gt;&lt;pre&gt;&lt;br/&gt;editorcontainer #content {&lt;br/&gt;    font-family: Courier New, Courier, sans-serif;&lt;br/&gt;    padding: 0;&lt;br/&gt;    line-height: 150%;&lt;br/&gt;    border: 0 none;&lt;br/&gt;    outline: none;&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/5625478444715094438-1810063258102513401?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/1810063258102513401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/12/monotype-font-for-wordpress-post-text.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/1810063258102513401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/1810063258102513401'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/12/monotype-font-for-wordpress-post-text.html' title='Monotype font for Wordpress &amp;quot;Write Post&amp;quot; text area'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-8478730715530078746</id><published>2008-09-12T08:54:00.000-07:00</published><updated>2010-03-01T23:20:47.469-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Using an STL list with current and next iterators</title><content type='html'>General algorithm for using a "current" and a "next" iterator on an STL list, which doesn't provide a convenient next() method (random-access containers such as vector do):&lt;br/&gt;&lt;br/&gt;&lt;code&gt;&lt;br/&gt;std::list&amp;lt;Foo&amp;gt;::iterator currIter, nextIter;&lt;br/&gt;&lt;br/&gt;currIter = list.begin();&lt;br/&gt;&lt;br/&gt;while(currIter != list.end())&lt;br/&gt;{&lt;br/&gt;    currIter-&amp;gt;doStuff(); // do something with the curr item&lt;br/&gt;&lt;br/&gt;    nextIter = ++currIter; //advance the iter and set it to next&lt;br/&gt;    if(nextIter != list.end()) // still safe to use next item&lt;br/&gt;    {&lt;br/&gt;        nextIter-&amp;gt;doStuff(); // do something with the next item&lt;br/&gt;    }&lt;br/&gt;}&lt;br/&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-8478730715530078746?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/8478730715530078746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/09/using-stl-list-with-current-and-next.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8478730715530078746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8478730715530078746'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/09/using-stl-list-with-current-and-next.html' title='Using an STL list with current and next iterators'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-6019467453101765331</id><published>2008-09-04T12:48:00.000-07:00</published><updated>2010-03-01T23:20:47.478-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>TLDs for TLC</title><content type='html'>Thanks to "Jon", who &lt;a href="http://thedailywtf.com/Comments/CAN%28ACCIDENTALLY%29SPAM.aspx#205404"&gt;pointed out&lt;/a&gt; that the Top Level Domain (TLD) &lt;strong&gt;&lt;a href="http://www.example.org/" target="_blank"&gt;example.org&lt;/a&gt; &lt;/strong&gt;is reserved for those times when you need a bogus domain for testing or documentation. Go ahead, click it!&lt;br/&gt;&lt;br/&gt;Even better, under &lt;a href="http://www.rfc-editor.org/rfc/rfc2606.txt"&gt;RFC 2606&lt;/a&gt; four TLDs are reserved for your testing and documentation pleasure. To quote the RFC:&lt;br/&gt;&lt;table style="border:1px solid black;" border="1" cellspacing="0" cellpadding="3"&gt;&lt;br/&gt;&lt;tbody&gt;&lt;br/&gt;&lt;tr style="background-color:#dddddd;"&gt;&lt;br/&gt;&lt;td style="center;"&gt;&lt;strong&gt;TLD&lt;/strong&gt;&lt;/td&gt;&lt;br/&gt;&lt;td style="center;"&gt;&lt;strong&gt;Purpose&lt;/strong&gt;&lt;/td&gt;&lt;br/&gt;&lt;/tr&gt;&lt;br/&gt;&lt;tr&gt;&lt;br/&gt;&lt;td style="border:1px solid black;"&gt;.test&lt;/td&gt;&lt;br/&gt;&lt;td style="border:1px solid black;"&gt;testing of current or new DNS related code&lt;/td&gt;&lt;br/&gt;&lt;/tr&gt;&lt;br/&gt;&lt;tr&gt;&lt;br/&gt;&lt;td style="border:1px solid black;"&gt;.example&lt;/td&gt;&lt;br/&gt;&lt;td style="border:1px solid black;"&gt;documentation or examples&lt;/td&gt;&lt;br/&gt;&lt;/tr&gt;&lt;br/&gt;&lt;tr&gt;&lt;br/&gt;&lt;td style="border:1px solid black;"&gt;.invalid&lt;/td&gt;&lt;br/&gt;&lt;td style="border:1px solid black;"&gt;online construction of domain names that are sure&lt;br/&gt;to be invalid and which it is obvious at a glance are invalid&lt;/td&gt;&lt;br/&gt;&lt;/tr&gt;&lt;br/&gt;&lt;tr&gt;&lt;br/&gt;&lt;td style="border:1px solid black;"&gt;.localhost&lt;/td&gt;&lt;br/&gt;&lt;td style="border:1px solid black;"&gt;loop back&lt;/td&gt;&lt;br/&gt;&lt;/tr&gt;&lt;br/&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-6019467453101765331?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/6019467453101765331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/09/tlds-for-tlc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6019467453101765331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6019467453101765331'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/09/tlds-for-tlc.html' title='TLDs for TLC'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-4757842218698066875</id><published>2008-08-22T03:55:00.000-07:00</published><updated>2010-03-01T23:20:47.479-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RailsConf'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Railsconf '08 in 36 minutes</title><content type='html'>&lt;p&gt;Thanks to Gregg Pollack of &lt;a href="http://www.railsenvy.com/"&gt;Rails Envy&lt;/a&gt; for posting &lt;a href="http://www.railsenvy.com/2008/6/2/Railsconf-videos"&gt;Railsconf in 36 minutes&lt;/a&gt; for those of us who couldn't attend Railsconf '08 this year.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-4757842218698066875?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/4757842218698066875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/08/railsconf-in-36-minutes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4757842218698066875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4757842218698066875'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/08/railsconf-in-36-minutes.html' title='Railsconf &amp;#39;08 in 36 minutes'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-5113594258047131938</id><published>2008-08-17T14:52:00.000-07:00</published><updated>2010-03-01T23:20:47.480-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Movies'/><title type='text'>Send in the Clones, there ought to be clones...</title><content type='html'>&lt;p&gt;Sad to say, &lt;i&gt;&lt;a href="http://www.imdb.com/title/tt1185834/"&gt;Star Wars: The Clone Wars&lt;/a&gt;&lt;/i&gt; was a letdown. The Star Wars saga is a thread running through my life, spanning from my teenage enthusiasm for science fiction, galactic empires and space travel to my middle-aged enthusiasm for world history, the Roman Empire and politics, so I feel a real connection to the characters, the story of their lives and the universe they inhabit. But this latest film just doesn't generate the "gee-whiz" feeling I got when I saw the first Star Wars film (&lt;i&gt;Episode IV: A New Hope&lt;/i&gt;) in 1977, or the rich, dramatic overtones and sense of "closing the circle" projected in the last film, &lt;i&gt;Episode III: Revenge of the Sith&lt;/i&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Cinematically, the lighting, camera angles and timing of &lt;i&gt;Clone Wars &lt;/i&gt;evoked the style of the '40s cliffhangers from which a young George Lucas derived the whole Star Wars &lt;i&gt;oeuvre&lt;/i&gt;. I especially liked the artist's-brush-like textures of the surfaces, and the almost sculptural feel of the character's facial expressions. The droids, even though we've seen them depicted in lifelike CG in the preceding three episodes, came across with the airbrushed sheen of '50s sci-fi star &lt;a href="http://www.imdb.com/media/rm2088081408/tt0049223"&gt;Robbie the Robot&lt;/a&gt;, especially the dwarf spider and super battle droids.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;But the story line was thin and the plot ridiculously childish, especially after the high drama of Anikin's transformation into Darth Vader in Episode III. The story boils down to a long, drawn out sequence of battle scenes that revolve around rescuing Jabba the Hutt's grotesquely endearing child.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Where are the grand galaxy-spanning themes and character development of the previous episodes? The character of Asoka, the four-foot nothing Padawan "youngling" who tags after Anikin, is his guilty conscience annoyingly brought to life - "But remember, Sky Guy, your duty is to rescue this ugly but adorable Hutt baby..." or words to that effect. Asajj Ventress, who is perhaps Darth Maul's second cousin, reminded me of the Evil Queen in Disney's Snow White, but with a handy double-bladed light-saber.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Oh well, my 11-year old and his pal got a few giggles out of the baby Hutt's facial mugging. He'll probably turn up as a Burger King kid's meal prize. Let's hope not.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5113594258047131938?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/5113594258047131938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/08/send-in-clones-there-ought-to-be-clones.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5113594258047131938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5113594258047131938'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/08/send-in-clones-there-ought-to-be-clones.html' title='Send in the Clones, there ought to be clones...'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-2056837949099040517</id><published>2008-08-17T05:31:00.000-07:00</published><updated>2010-03-01T23:20:47.485-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Movies'/><title type='text'>Gotta Get Yer Clone On!</title><content type='html'>Going to take my 11 year-old to see &lt;a href="http://www.imdb.com/title/tt1185834/"&gt;Star Wars: The Clone Wars&lt;/a&gt; this afternoon. Not so sure I'll like it as animated movie, although the trailer looked pretty good, but I've been an off-and-on fan of the franchise since I saw the original &lt;a href="http://www.imdb.com/title/tt0076759/"&gt;Star Wars&lt;/a&gt;, long ago in a theatre not so far away - before there was digital revision, DVDs, bit torrents... ah, the Galaxy isn't what it once was, young Jedi.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-2056837949099040517?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/2056837949099040517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/08/gotta-get-yer-clone-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2056837949099040517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2056837949099040517'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/08/gotta-get-yer-clone-on.html' title='Gotta Get Yer Clone On!'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-2960648106007730443</id><published>2008-08-17T05:04:00.000-07:00</published><updated>2010-03-01T23:20:47.488-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Searching Ruby on Rails Docs just got a lot easier</title><content type='html'>&lt;p&gt;&lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt; is a big framework, with hundreds (thousands?) of methods and classes. Thanks to the clever folk at &lt;a href="http://blog.nodeta.fi/"&gt;Nodeta&lt;/a&gt;, their new documentation app &lt;a href="http://apidock.com/"&gt;APIdock&lt;/a&gt; provides an easy-to-use search/browse interface to the whole of Rails documentation. To quote the site:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;APIdock is a web app that provides a rich and usable interface for searching, perusing and improving the documentation of projects that are included in the app.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The site also provides documentation for &lt;a href="http://apidock.com/ruby"&gt;Ruby&lt;/a&gt; &lt;a target="" title="" href="http://apidock.com/rails"&gt;&lt;/a&gt;and &lt;a href="http://apidock.com/rspec"&gt;RSpec&lt;/a&gt;. Two really interesting features of the site are the &lt;b&gt;versions bar graph&lt;/b&gt; and &lt;b&gt;dynamic keyword search&lt;/b&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The versions bar graph along the top of each documentation page lets you "go back in time" to past versions of the documentation, by clicking on the version number. The green and red tabs indicate when and by how much the documentation changed for that version, which is handy when you're trying to figure out just when and in what way a particular method was changed or deprecated:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://www.phipster.com/wp-content/uploads/2008/08/apidock-version-bar-graph.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The dynamic keyword search displays a "find as you type" drop-down list from which you can select the relevant documentation page. A little pie graph icon, divided into five wedges, indicates by the number of filled-in wedges how much information is available for each item:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://www.phipster.com/wp-content/uploads/2008/08/dynamic-search.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So for example there's a lot of information about the &lt;b&gt;form_for &lt;/b&gt;helper, but very little about the &lt;b&gt;apply_form_for_options! &lt;/b&gt;helper. If you get as lost in Rails as I do, or you're just wondering what &lt;i&gt;is  &lt;/i&gt;the difference between &lt;b&gt;&lt;a href="http://apidock.com/rails/ActionView/Helpers/PrototypeHelper/form_remote_for"&gt;form_remote_for&lt;/a&gt; &lt;/b&gt;and &lt;a href="http://apidock.com/rails/ActionView/Helpers/PrototypeHelper/remote_form_for"&gt;&lt;b&gt;remote_form_for&lt;/b&gt;&lt;/a&gt; (hint: the former is an alias for the latter). &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://apidock.com/"&gt;Try it!&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-2960648106007730443?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/2960648106007730443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/08/searching-ruby-on-rails-docs-just-got.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2960648106007730443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2960648106007730443'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/08/searching-ruby-on-rails-docs-just-got.html' title='Searching Ruby on Rails Docs just got a lot easier'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-8917106841036103512</id><published>2008-08-03T03:31:00.000-07:00</published><updated>2010-03-01T23:20:47.490-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jEdit'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Search RDoc from jEdit using FastRI</title><content type='html'>&lt;p&gt;Tried out &lt;a href="http://blog.wolfman.com/files/Search_Ruby_documentation_v0.4.bsh"&gt;Search_Ruby_documentation_v0.4.bsh&lt;/a&gt;, Jim Morris' version of a macro for searching Ruby documentation from jEdit. The macro depends on &lt;a href="http://eigenclass.org/hiki/fastri"&gt;FastRI&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-8917106841036103512?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/8917106841036103512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/08/search-rdoc-from-jedit-using-fastri.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8917106841036103512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8917106841036103512'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/08/search-rdoc-from-jedit-using-fastri.html' title='Search RDoc from jEdit using FastRI'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-8809777445238189600</id><published>2008-08-02T11:39:00.000-07:00</published><updated>2010-03-01T23:20:47.491-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Ruby on Rails 2.1.x Tutorial</title><content type='html'>Found a &lt;a href="http://www.tutorialspoint.com/ruby-on-rails-2.1/"&gt;"to the point" tutorial&lt;/a&gt; over on Tutorialspoint.com that covers just enough Ruby on Rails 2.1.x to get (re)started.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-8809777445238189600?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/8809777445238189600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/08/ruby-on-rails-21x-tutorial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8809777445238189600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8809777445238189600'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/08/ruby-on-rails-21x-tutorial.html' title='Ruby on Rails 2.1.x Tutorial'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-4243937178068300843</id><published>2008-07-18T16:23:00.000-07:00</published><updated>2010-03-01T23:20:47.493-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WordPress'/><title type='text'>Secure your Wordpress Blog! Now!</title><content type='html'>Took some time last night to read through Miss 604's &lt;a href="http://www.miss604.com/2008/07/wordcamp-fraser-valley-liveblog.html"&gt;WordCamp Fraser Valley Liveblog&lt;/a&gt; to see what I'd missed. When I read Kulpreet's question&lt;a href="http://www.miss604.com/2008/07/wordcamp-fraser-valley-liveblog.html"&gt;&lt;/a&gt;, "... how many people with websites can go to www.theirwebsite.com/wp-content/plugins and actually see the list of plugins", I thought, Okay, I'll give that a try. Whoops! Lookit that! There they are! Plain as day! &lt;br /&gt;&lt;br /&gt;First I read and applied many of the tips in the &lt;a href="http://blogsecurity.net/wordpress/wordpress-security-whitepaper/"&gt;WordPress Security Whitepaper&lt;/a&gt; which Kulpreet mentioned in his talk. I also installed and ran the &lt;a href="http://blogsecurity.net/wordpress/tools/wp-scanner/"&gt;WordPress Scanner&lt;/a&gt;, a WP plugin (from &lt;a href="http://blogsecurity.net/about/"&gt;the same guys&lt;/a&gt; who wrote the whitepaper) that performs a number of security checks of the site.  &lt;br /&gt;&lt;br /&gt;I also had a read through the &lt;a href="http://www.simplehelp.net/2007/09/10/9-ways-to-secure-your-wordpress-blog/"&gt;9 easy ways to secure your Wordpress blog&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;So I am feeling a lot better now that no-one can browse my plugins directory, guess my admin user name, or any number of other nasty hacks. &lt;br /&gt;&lt;br /&gt;You should do this too. Go. Do it now.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-4243937178068300843?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/4243937178068300843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/07/secure-your-wordpress-blog-now.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4243937178068300843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4243937178068300843'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/07/secure-your-wordpress-blog-now.html' title='Secure your Wordpress Blog! Now!'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-4731777707511692366</id><published>2008-07-14T03:48:00.000-07:00</published><updated>2010-03-01T23:20:47.496-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WordPress'/><title type='text'>WordCamping in the Fraser Valley</title><content type='html'>Thanks to a tip from my co-worker Bernie, I will be attending &lt;a href="http://blog.bluefur.com/2008/06/12/wordcamp-fraser-valley/"&gt;WordCamp in Fraser Valley | BlueFur.com&lt;/a&gt; to get some tips and ideas for this ol' blog. Good &lt;a href="http://blog.bluefur.com/2008/06/19/wordcamp-fraser-valley-speaks-and-schedule/"&gt;roster of speakers&lt;/a&gt; lined up, too!&lt;br /&gt;[Edit: didn't make it to the meeting, but &lt;a href="http://www.miss604.com/"&gt;Miss 604&lt;/a&gt;'s &lt;a href="http://www.miss604.com/2008/07/wordcamp-fraser-valley-liveblog.html"&gt;liveblog of the event&lt;/a&gt; is almost as good as being there]&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-4731777707511692366?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/4731777707511692366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/07/wordcamping-in-fraser-valley.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4731777707511692366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4731777707511692366'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/07/wordcamping-in-fraser-valley.html' title='WordCamping in the Fraser Valley'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-3797912735963960889</id><published>2008-05-28T06:46:00.000-07:00</published><updated>2010-03-01T23:20:47.500-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Society'/><title type='text'>THE most rational argument for global climate change action, period</title><content type='html'>I was a bit put off by Al Gore's fear-mongering, high-rise graphs. He tried to scare us into change, while peering pensively into his MacBook, or whatever model it was (p.s. - Al was an Apple board member at the time!).&lt;br /&gt;&lt;br /&gt;Meanwhile, this anonymous guy makes the most compelling argument for action I've ever heard. No rhetoric, no fear, just listen to it &amp;amp; you'll be spreading the word, just as I am:&lt;br /&gt;&lt;br /&gt;&lt;div class="youtube-video"&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/mF_anaVcCXg&amp;amp;hl=en"&gt; &lt;/param&gt;&lt;param name="wmode" value="transparent"&gt; &lt;/param&gt;&lt;embed src="http://www.youtube.com/v/mF_anaVcCXg&amp;amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt; &lt;/embed&gt; &lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-3797912735963960889?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/3797912735963960889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/05/most-rational-argument-for-global.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3797912735963960889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3797912735963960889'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/05/most-rational-argument-for-global.html' title='THE most rational argument for global climate change action, period'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-3345052601623139438</id><published>2008-05-21T02:18:00.000-07:00</published><updated>2010-03-01T23:20:47.501-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><title type='text'>Not just Linux books</title><content type='html'>&lt;div style=''&gt;Although it's titled &lt;a href="http://www.linuxtopia.org/online_books/index.html"&gt;Free On-line Linux Technical Books and Tutorials&lt;/a&gt;, there's lots here of interest to Windows folk as well:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Bruce Eckel's &lt;a href="http://www.linuxtopia.org/online_books/programming_books/thinking_in_c++/index.html"&gt;Thinking in C++ Volume 1&lt;/a&gt; and &lt;a href="http://www.linuxtopia.org/online_books/programming_books/c++_practical_programming/index.html"&gt;Volume 2 - Practical Programming&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.techotopia.com/index.php/C_Sharp_Essentials"&gt;C# Essentials&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.techotopia.com/index.php/Visual_Basic_Essentials"&gt;Visual Basic Essentials&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-3345052601623139438?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/3345052601623139438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/05/not-just-linux-books.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3345052601623139438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3345052601623139438'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/05/not-just-linux-books.html' title='Not just Linux books'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-9084786202571101413</id><published>2008-05-19T14:19:00.000-07:00</published><updated>2010-03-01T23:20:47.503-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><title type='text'>Produce, or consume, produce, or consume...</title><content type='html'>&lt;div style=''&gt;&lt;br /&gt;&lt;a href="http://www.softwarebyrob.com/2008/05/18/the-single-most-important-career-question-you-can-ask-yourself/"&gt;The Single Most Important Career Question You Can Ask Yourself&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-9084786202571101413?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/9084786202571101413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/05/produce-or-consume-produce-or-consume.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/9084786202571101413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/9084786202571101413'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/05/produce-or-consume-produce-or-consume.html' title='Produce, or consume, produce, or consume...'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-6429576983679590438</id><published>2008-05-17T19:11:00.000-07:00</published><updated>2010-03-01T23:20:47.504-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>How to get Vista to show the "Command Prompt Here" on a Folder List</title><content type='html'>&lt;div&gt;For many years, on many PCs running various versions of Windows NT, 2000 and XP, applying the &lt;a href="http://www.google.ca/url?sa=t&amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fwww.microsoft.com%2Fwindowsxp%2Fdownloads%2Fpowertoys%2Fxppowertoys.mspx&amp;amp;ei=uTMySMPXO5OkpwTw-8mSDQ&amp;amp;usg=AFQjCNFOSaohorN10O3AOwG2sOQ2Yd_sJg&amp;amp;sig2=WRfoY_rFPjFUuAJJ3oIybw"&gt;"Command Prompt Here" Powertoy&lt;/a&gt; was one of the first things I would do to customize the vanilla Windows environment (i.e. make it usable). Right-click a folder, select "DOS Prompt Here" or "Command Prompt Here" from the context menu, and voila, a DOS box opens, set to the folder you clicked on:&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://www.phipster.com/wp-content/uploads/2008/05/dosprompt.jpg" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;I was happy to find the same feature already baked into Windows Vista: hold down the shift key, right-mouse click on any folder in the view pane, then select "Open Command Window Here" from the context menu:&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://www.phipster.com/wp-content/uploads/2008/05/opencommandwindowhere01.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;But try the same trick on a folder in the Folder Tree, sorry, the command's not there:&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://www.phipster.com/wp-content/uploads/2008/05/opencommandwindowhere02.jpg" alt="" /&gt;&lt;br /&gt;For some reason, in their wisdom the Microsoft UI engineers chose to omit the command from this particular menu.&lt;br /&gt;&lt;br /&gt;Quite by chance, I discovered that the choice is available on the File menu in Vista, but it's not invoked in the same way: instead, select a folder in folder list, hold down the shift key then left-click (i.e. normal click) the File menu:&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://www.phipster.com/wp-content/uploads/2008/05/opencommandwindowhere03.jpg" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;Vista then displays "Open Command Window Here" at the top of the menu. Okay, happy to have it back, even if it's in a place I didn't expect...&lt;br /&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/5625478444715094438-6429576983679590438?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/6429576983679590438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/05/how-to-get-vista-to-show-prompt-here-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6429576983679590438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6429576983679590438'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/05/how-to-get-vista-to-show-prompt-here-on.html' title='How to get Vista to show the &amp;quot;Command Prompt Here&amp;quot; on a Folder List'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-7550462568387639270</id><published>2008-05-11T13:12:00.000-07:00</published><updated>2010-03-01T23:20:47.508-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Deleting the .ncb file fixes Intellisense Crash in VS 2008 Express</title><content type='html'>Argh! Visual Studio 2008 Express was crashing every time I right-clicked on any code belonging to the C++ template class declaration I was writing for my C++ course assignment. Googling "2008 intellisense crash" turned up a link to an MSDN forum discussion about &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=226750&amp;amp;SiteID=1"&gt;VS crash when updating intellisense&lt;/a&gt;, wherein one of the posters suggested deleting the .ncb file. Before launching my project for the nth time, I deleted the .ncb file. Voila! Intellisense works again.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-7550462568387639270?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/7550462568387639270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/05/deleting-ncb-file-fixes-intellisense.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7550462568387639270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7550462568387639270'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/05/deleting-ncb-file-fixes-intellisense.html' title='Deleting the .ncb file fixes Intellisense Crash in VS 2008 Express'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-6071715624980637277</id><published>2008-05-02T14:33:00.000-07:00</published><updated>2010-03-01T23:20:47.510-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='WordPress'/><title type='text'>It was SOOOO easy...</title><content type='html'>Man, I saw the link to the &lt;a href="http://techie-buzz.com/wordpress-plugins/wordpress-automatic-upgrade-plugin-update.html"&gt;WordPress Automatic Upgrade Plugin&lt;/a&gt;, and I thought "Yeah, right, like &lt;em&gt;this&lt;/em&gt; is really gonna work". But WP's been bugging me to upgrade from version 2.3.something every time I log in, and it's a Friday night, and I can't be bothered fishing around on the WordPress site to read up on how to do the upgrade, and it's a pain to do the backups, so I went for it.&lt;br/&gt;&lt;br/&gt;And you know what? &lt;strong&gt;It Just Worked&lt;/strong&gt;. Migrated all my stuff, kept all my plugins  (although, it didn't reactivate them, maybe it wasn't supposed to, I don't remember). Otherwise, it was killer - good feedback, lotsa hand holding and reassurance along the way. Fetched, unpacked and installed the whole thing. Click, click click. And now I have a spiffy new WordPress 2.5.1 install.&lt;br/&gt;&lt;br/&gt;Best part? It's free. I made a donation to Keith nonetheless, because he made the upgrade so easy, and to encourage him to keep up the good work. If you've been putting off a WP, hop on over to &lt;a href="http://techie-buzz.com/wordpress-plugins/wordpress-automatic-upgrade-plugin-update.html"&gt;Keith's site&lt;/a&gt;, grab the plugin and try it. I think you'll be happy, and support him, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-6071715624980637277?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/6071715624980637277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/05/it-was-soooo-easy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6071715624980637277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6071715624980637277'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/05/it-was-soooo-easy.html' title='It was SOOOO easy...'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-7326715534314159835</id><published>2008-05-01T21:03:00.000-07:00</published><updated>2010-03-01T23:20:47.514-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pylons'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>More Pylons Stuff</title><content type='html'>As John promised, &lt;br /&gt;&lt;a href="http://www.janisb.com/blog/2008/04/zero-to-60-with-pylons-in-just-minutes-part-2/"&gt;Zero to 60 with Pylons in just minutes (Part 2)&lt;/a&gt; is online! Now if I only had the time to play with this stuff...&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-7326715534314159835?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/7326715534314159835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/05/more-pylons-stuff.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7326715534314159835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7326715534314159835'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/05/more-pylons-stuff.html' title='More Pylons Stuff'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-3778565538325675325</id><published>2008-05-01T14:18:00.000-07:00</published><updated>2010-03-01T23:20:47.516-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><title type='text'>What did I just edit?</title><content type='html'>I checked out some code files from Razor (don't ask, we use an old CM system), created a couple of new ones, now I want to quickly double-check which of the thousands of files in our source tree are the ones I checked out or created (don't ask, we use an old CM system), so I can check the changes back in and introduce the new files (if I forget, guess who gets the wooden spoon for breaking the build):&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;So fire up a DOS prompt and type in:&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;code&gt;C:\path to my code\&amp;gt;dir *.cpp *.h *.vcproj&lt;br /&gt;/b /s /a:-r &amp;amp;gt; \usafipd\updated_files.txt&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;This says "list all of the code files and Visual Studio project files from here on down that are writeable (i.e. not locked by Razor), then dump the results to a file in case there are hundreds of filenames to review.&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;This gives me a file, &lt;font face="Courier New"&gt;updated_files.txt&lt;/font&gt;&lt;font face="sans-serif"&gt;, containing a nice list of all the .cpp, .h and .vcproj (Visual Studio project) files I checked out (i.e. made writeable).&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-3778565538325675325?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/3778565538325675325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/05/what-did-i-just-edit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3778565538325675325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3778565538325675325'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/05/what-did-i-just-edit.html' title='What did I just edit?'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-7863166762293255509</id><published>2008-05-01T12:54:00.000-07:00</published><updated>2010-03-01T23:20:47.517-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Search'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Invisible, indeed!</title><content type='html'>The book &lt;b&gt;&lt;a href="http://www.amazon.ca/gp/product/091096551X?ie=UTF8&amp;amp;amp;amp;amp;tag=whiwr-20&amp;amp;amp;amp;amp;linkCode=as2&amp;amp;amp;amp;amp;camp=15121&amp;amp;amp;amp;amp;creative=330641&amp;amp;amp;amp;amp;creativeASIN=091096551X"&gt;The Invisible Web&lt;/a&gt;: Uncovering Information Sources Search Engines Can't See&lt;/b&gt;, cited in &lt;b&gt;John Battelle&lt;/b&gt;'s book &lt;b&gt;&lt;a href="http://www.amazon.ca/gp/product/1591840880?ie=UTF8&amp;amp;amp;amp;amp;tag=whiwr-20&amp;amp;amp;amp;amp;linkCode=as2&amp;amp;amp;amp;amp;camp=15121&amp;amp;amp;amp;amp;creative=330641&amp;amp;amp;amp;amp;creativeASIN=1591840880"&gt;The Search&lt;/a&gt;: How Google and Its Rivals Rewrote the Rules of Business and Transformed Our Culture&lt;/b&gt;, describes the problem posed by the unsearchable areas of the Web, such as subscription-only databases. Intrigued, I scooted over to the Invisible Web's companion website, only to find the web is actually just a little bit more invisible than I thought:&lt;br /&gt;&lt;br /&gt;&lt;img style="max-width: 800px;" src="http://www.phipster.com/wp-content/uploads/2008/05/www.invisible-web.net-small1.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-7863166762293255509?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/7863166762293255509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/05/invisible-indeed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7863166762293255509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7863166762293255509'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/05/invisible-indeed.html' title='Invisible, indeed!'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-872550281882095140</id><published>2008-04-14T14:24:00.000-07:00</published><updated>2010-03-01T23:20:47.519-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Hosting'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Vote for mod_rails!</title><content type='html'>Hey, &lt;a href="http://discussion.dreamhost.com/showflat.pl?Cat=0&amp;amp;Board=forum_programming&amp;amp;Number=104405"&gt;Dreamhost&lt;/a&gt; - when are we going to get &lt;a href="http://www.oreillynet.com/ruby/blog/2008/04/mod_rails_for_apache_is_now_a.html"&gt;mod_rails&lt;/a&gt; on our shared server accounts? Fellow Dreamhosters, if you've been waiting for an easier way to deploy and run small Rails apps, then &lt;a href="http://wiki.dreamhost.com/Suggestions"&gt;vote for the mod_rails suggestion&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-872550281882095140?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/872550281882095140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/04/vote-for-modrails.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/872550281882095140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/872550281882095140'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/04/vote-for-modrails.html' title='Vote for mod_rails!'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-7519865101934561766</id><published>2008-04-13T14:36:00.000-07:00</published><updated>2010-03-01T23:20:47.521-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Pylons'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Pylons stuff</title><content type='html'>John Brennan brings us a short Pylons intro &lt;a href="http://www.janisb.com/blog/2008/04/zero-to-60-with-pylons-in-just-minutes-part-1/"&gt;Zero to 60 with Pylons… in just minutes (Part 1)&lt;/a&gt;. Can hardly wait for Part 2!&lt;br /&gt;&lt;br /&gt;Also noticed &lt;a href="http://www.amazon.ca/gp/redirect.html?ie=UTF8&amp;amp;amp;amp;location=http%3A%2F%2Fwww.amazon.ca%2FDefinitive-Guide-Pylons-James-Gardner%2Fdp%2F1590599349%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1208150946%26sr%3D8-4&amp;amp;amp;amp;tag=whiwr-20&amp;amp;amp;amp;linkCode=ur2&amp;amp;amp;amp;camp=15121&amp;amp;amp;amp;creative=330641"&gt;The Definitive Guide to Pylons&lt;/a&gt;&lt;img src="http://www.assoc-amazon.ca/e/ir?t=whiwr-20&amp;amp;amp;amp;l=ur2&amp;amp;amp;amp;o=15" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /&gt; from &lt;a href="http://wiki.pylonshq.com/"&gt;Pylons&lt;/a&gt; lead developer James Gardner is slated to arrive in July 2008.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-7519865101934561766?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/7519865101934561766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/04/pylons-stuff.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7519865101934561766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7519865101934561766'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/04/pylons-stuff.html' title='Pylons stuff'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-5655524541415757539</id><published>2008-04-11T02:44:00.000-07:00</published><updated>2010-03-01T23:20:47.524-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Another evaluation of Google AppEngine</title><content type='html'>Todd Hoff explains how distributed web apps can leverage the much-maligned CGI interface in &lt;a href="http://highscalability.com/google-appengine-first-look"&gt;Google AppEngine - A First Look&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5655524541415757539?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/5655524541415757539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/04/another-evaluation-of-google-appengine.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5655524541415757539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5655524541415757539'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/04/another-evaluation-of-google-appengine.html' title='Another evaluation of Google AppEngine'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-8544678932663971021</id><published>2008-04-11T02:08:00.000-07:00</published><updated>2010-03-01T23:20:47.526-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Web 2.0'/><title type='text'>Web app hosting as a service?</title><content type='html'>&lt;a href="http://www.sitepoint.com/blogs/2008/04/10/the-changing-face-of-web-hosting/"&gt;Kevin Yank opins&lt;/a&gt; on the effect services like Google's &lt;a href="http://code.google.com/appengine/"&gt;App Engine&lt;/a&gt; may have on web hosting choices. By abstracting away the details of configuring and deploying web apps for a particular host system, services like App Engine and &lt;a href="http://heroku.com/"&gt;Heroku&lt;/a&gt; may give developers more time to concentrate on providing business value (creating applications instead of fighting with servers). The greatest benefit may accrue to independent developers, students and hobby developers, who haven't the time, money or server-fu to set up and administer their own dedicated server, virtual or otherwise.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-8544678932663971021?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/8544678932663971021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/04/web-app-hosting-as-service.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8544678932663971021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8544678932663971021'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/04/web-app-hosting-as-service.html' title='Web app hosting as a service?'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-3468035767167892923</id><published>2008-04-10T02:12:00.000-07:00</published><updated>2010-03-01T23:20:47.528-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>osalt.com</title><content type='html'>Came across a useful link: &lt;b&gt;&lt;a href="http://www.osalt.com/"&gt;www.osalt.com&lt;/a&gt; Open Source Alternative - Find Open Source Alternatives to commercial software&lt;/b&gt;. Thanks to &lt;a href="http://www.businesses2view.com/"&gt;Jimmy&lt;/a&gt;, who made note of osalt.com in his comment to Jeff Atwood's &lt;a href="http://www.codinghorror.com/blog/archives/001097.html"&gt; post on the value of open source vs. commercial software&lt;/a&gt; on Jeff's always thoughtful blog, &lt;a href="http://www.codinghorror.com/blog/"&gt;Coding Horror&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-3468035767167892923?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/3468035767167892923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/04/osaltcom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3468035767167892923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3468035767167892923'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/04/osaltcom.html' title='osalt.com'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-981975093385959344</id><published>2008-03-10T04:54:00.000-07:00</published><updated>2010-03-01T23:20:47.530-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><title type='text'>Your loops got game?</title><content type='html'>Koen deWitters published an &lt;a href="http://dewitters.koonsolo.com/gameloop.html"&gt;article on game loop design&lt;/a&gt; that should be of interest to anyone who designs software. He explains not only how to design a game loop, but &lt;i&gt;why&lt;/i&gt; one technique is better than another, with simple, clear examples.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-981975093385959344?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/981975093385959344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/03/your-loops-got-game.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/981975093385959344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/981975093385959344'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/03/your-loops-got-game.html' title='Your loops got game?'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-4713803181906450658</id><published>2008-02-04T14:46:00.000-08:00</published><updated>2010-03-01T23:20:47.534-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><title type='text'>Small C++ Project, huge .ncb file?</title><content type='html'>I'm taking &lt;a href="http://www.bcit.ca/study/courses/comp2617"&gt;COMP 2617&lt;/a&gt; C++ for Object Oriented Software Development at BCIT, and using &lt;a href="http://www.microsoft.com/express/vc/Default.aspx"&gt;Microsoft Visual C++ 2008 Express Edition&lt;/a&gt; to do my homework. Pretty sweet little IDE, lots of Pro VS 2005 goodness for free!&lt;br /&gt;&lt;br /&gt;But - why does the .ncb file (&lt;a href="http://msdn2.microsoft.com/en-us/library/ms364071.aspx"&gt;Intellisense parser database&lt;/a&gt;) for my dinky little C++ program, all of 160 lines in one &lt;b&gt;5Kb&lt;/b&gt; .cpp file, weigh in at over &lt;b&gt;2Mb&lt;/b&gt;?! According to Li Shao in &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=402329&amp;amp;SiteID=1"&gt;this thread on the MSDN forum&lt;/a&gt;, "&lt;span id="_ctl0_MainContent_PostFlatView"&gt;&lt;span&gt;In VS2005, &lt;/span&gt;&lt;/span&gt;&lt;span id="_ctl0_MainContent_PostFlatView"&gt;&lt;span&gt;we have made change to remove this prebuilt ncb and dynamically parsed the files including the system headers into project ncb.", in response to the original poster, who complained that "... &lt;/span&gt;&lt;/span&gt;&lt;span id="_ctl0_MainContent_PostFlatView"&gt;&lt;span&gt;an NCB file of 50KB under VS 2003 now has 500-600 KB, a 200 KB NCB under VS 2003 now has about 2 MB. And NCB files that used to have a size of 2-3MB now have 25-30 MB." Sheesh! This is progress?&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-4713803181906450658?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/4713803181906450658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/02/small-c-project-huge-ncb-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4713803181906450658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4713803181906450658'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/02/small-c-project-huge-ncb-file.html' title='Small C++ Project, huge .ncb file?'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-4892722757316073556</id><published>2008-01-23T13:17:00.000-08:00</published><updated>2010-03-01T23:20:47.536-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>Timeless career dev tips, 2008 recession or not</title><content type='html'>Robert Scoble's wise words on &lt;a href="http://scobleizer.com/2008/01/23/what-to-do-if-youre-laid-off-in-2008-recession/" rel="bookmark"&gt;what to do if you’re laid off in 2008&amp;nbsp;recession&lt;/a&gt; apply no matter what the weather...&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-4892722757316073556?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/4892722757316073556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/01/timeless-career-dev-tips-2008-recession.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4892722757316073556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4892722757316073556'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/01/timeless-career-dev-tips-2008-recession.html' title='Timeless career dev tips, 2008 recession or not'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-2460962780898223355</id><published>2008-01-15T13:45:00.000-08:00</published><updated>2010-03-01T23:20:47.541-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Society'/><title type='text'>Help me help</title><content type='html'>OK, so in an effort to "monetize" this blog, I added a Donate button yesterday (lookey over yonder -&gt;). I'd like to donate 50% of all donations to a worthwhile cause&amp;mdash;the other half just helps keep this site, and my webbish ambitions, alive&amp;mdash;assuming of course there's any whole to divide up in the first place!&lt;br/&gt;&lt;br/&gt;So come on, make a donation, then &lt;em&gt;convince me&lt;/em&gt; why I should benefact your favourite charity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-2460962780898223355?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/2460962780898223355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/01/help-me-help.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2460962780898223355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2460962780898223355'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/01/help-me-help.html' title='Help me help'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-3757047854089402157</id><published>2008-01-14T07:57:00.000-08:00</published><updated>2010-03-01T23:20:47.544-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><title type='text'>Images missing from Windows Vista Help and Support Pages</title><content type='html'>I switched back to Vista a couple of weeks ago, after giving up trying to live in Kubuntu for the second time in a year. I noticed one minor nit after I moved back in, all of the image graphics in Vista's Help and Support pages had mysteriously disappeared, leaving only little boxes with red x's behind them. Fortunately, a quick Googling brought me to &lt;a href="http://www.winhelponline.com/articles/194/1/Pages-in-Windows-Vista-Help-and-Support-are-not-displayed-correctly.html"&gt;&lt;b&gt;Ramesh Srinivasan's&lt;/b&gt;&lt;/a&gt; solution - a quick registry patch file, courtesy of Mr. Srinvasan, restored the help page graphics to their former glory.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-3757047854089402157?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/3757047854089402157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/01/images-missing-from-windows-vista-help.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3757047854089402157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3757047854089402157'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/01/images-missing-from-windows-vista-help.html' title='Images missing from Windows Vista Help and Support Pages'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-495621993543871034</id><published>2008-01-10T05:38:00.000-08:00</published><updated>2010-03-01T23:20:47.546-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><title type='text'>Diffing where I want, and diffing the same file</title><content type='html'>I use &lt;a href="http://winmerge.org/"&gt;WinMerge&lt;/a&gt; a lot for general interactive file diff/merge/munging. It's great, free, etc. But what I'd really like is a diff tool that a) lets *me* decide which bits in each buffer match up as the starting point, and b) let me compare two sections of the same file. Does this exist? Please let me know. Please.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-495621993543871034?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/495621993543871034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2008/01/diffing-where-i-want-and-diffing-same.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/495621993543871034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/495621993543871034'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2008/01/diffing-where-i-want-and-diffing-same.html' title='Diffing where I want, and diffing the same file'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-2060182372684009925</id><published>2007-12-23T11:55:00.000-08:00</published><updated>2010-03-01T23:20:47.547-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Kubuntu'/><title type='text'>Compaq Presario C500 and Kubuntu wireless networking fun</title><content type='html'>These instructions on the Ubuntu &lt;a href="https://help.ubuntu.com/community/WifiDocs/NetworkManager"&gt;KNetworkmanager&lt;/a&gt; page got my Compaq Presario C500's Broadcom BCM 94311 MCG wlan interface back up and running after I &lt;strike&gt;fu-&lt;/strike&gt;fiddled around with it this afternoon. I made the mistake of clicking the "Manual Configuration" option in KNetworkmanager, after which I lost all wireless connection, and couldn't find my way back out of the wireless woods:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Made a backup of the file &lt;code&gt;/etc/network/interfaces&lt;code&gt;&lt;/code&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Delete all configuration settings in the file except the &lt;b&gt;lo &lt;/b&gt;interface&lt;br /&gt;&lt;br /&gt;&lt;code&gt;auto lo&lt;br /&gt;iface lo inet loopback&lt;br /&gt;address 127.0.0.1&lt;br /&gt;netmask 255.0.0.0&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;saved the file then typed &lt;code&gt;/etc/init.d/networking restart&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;&lt;/code&gt;After enabling the laptop's wireless networking hard-button, the wired network reappeared in Networkmanager's Connection Status&lt;/li&gt;&lt;li&gt;Also followed the instructions to enable the connection to survive suspend or hibernate, and bypass the keyring password at every login&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;code&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-2060182372684009925?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/2060182372684009925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/12/compaq-presario-c500-and-kubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2060182372684009925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2060182372684009925'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/12/compaq-presario-c500-and-kubuntu.html' title='Compaq Presario C500 and Kubuntu wireless networking fun'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-5405314288192552511</id><published>2007-12-18T14:11:00.000-08:00</published><updated>2010-03-01T23:20:47.549-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Kubuntu'/><title type='text'>Setting up a Canon Pixma MP530 on Kubuntu 7.10 (Gutsy)</title><content type='html'>I started tinkering with Rails again on Vista. Boy, is Mongrel ever slow. That's what prompted me to test-drive Kubuntu in the first place. OK, let's try it again. Download the Gutsy image, repartition, reinstall... wow, it Just Works. After a minor bit of fiddling to get the sound card working, I'm up and running on Kubuntu again. Except the printing thing. Complicating the matter, the printer, a Canon Pixma MP530, is shared out from a whitebox PC running Windows XP Home.&lt;br/&gt;&lt;br/&gt;After a bit of googling, this is what I did:&lt;br/&gt;&lt;br/&gt;1. Following a tip on the &lt;a href="http://www.linuxprinting.org/show_printer.cgi?recnum=Canon-Pixma_MP530"&gt;OpenPrinting database MP530 page&lt;/a&gt;  pointing to &lt;a href="http://www.rosemaryroad.org/computer_log.html"&gt;Brady Hunsaker's advice&lt;/a&gt; I downloaded the .rpm MP500 driver files from Canon's FTP site. &lt;br/&gt;2. Installed &lt;a href="http://packages.ubuntu.com/cgi-bin/search_packages.pl?searchon=names&amp;subword=1&amp;version=gutsy&amp;release=all&amp;keywords=alien&amp;sourceid=mozilla-search"&gt;alien&lt;/a&gt; (what a cool name, not to be confused with &lt;a href="http://red.planetarena.org/"&gt;alien-arena&lt;/a&gt;) then I converted the .rpm's to .deb's and installed them. &lt;br/&gt;3. Brady says create symlinks to old library names... but he doesn't explicitly say _where_, for the sake of beginners like me. After a few minutes of noobiness, I realized the symlinks should be in the same directory as the library files to which they point (`/usr/lib/`, not in the printer driver directory `/usr/share/cups/model`).&lt;br/&gt;4. As a test, I plugged the printer directly into a USB port on my laptop then fired up the CUPS server on the default URL http://localhost:631/. No luck, CUPS couldn't see the printer, even after I power-cycled it. &lt;br/&gt;5. I noticed one of the device options is "Windows printer via SAMBA". Hrm... &lt;br/&gt;6. Followed the instructions on &lt;a href="http://www.faqs.org/docs/Linux-mini/Debian-and-Windows-Shared-Printing.html"&gt;Debian and Windows Shared Printing mini-HOWTO&lt;/a&gt; to verify that my lappie can connect to the Winbox via smbclient as `smbclient -I WIN.BOX.IP.ADDRESS -L WINBOXNAME -N`.&lt;br/&gt;7. Plugged the MP530 back into the Winbox, then started going through the new printer install, this time for "Windows printer via SAMBA":&lt;br/&gt;   1. Add new printer&lt;br/&gt;   2. Fill in the name, etc.&lt;br/&gt;   3. Device for printer: select Windows printer via SAMBA&lt;br/&gt;   4. URI: `smb://WINDOWS.PC.IP.ADDRESS/HOSTNAME/PRINTERNAME`&lt;br/&gt;   5. Browse to the PPD file in /usr/share/cups/model/canonmp500.ppd&lt;br/&gt;   6. When prompted, enter your Linux username and password (like sudo)&lt;br/&gt;   7. Configure and enjoy the printer!&lt;br/&gt;&lt;br/&gt;I successfully test-printed a couple of pages duplexed from a PDF, then printed a couple of images to 4x6 photo paper from the cassette tray. Looks like the MP500 driver works just great! Cool!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5405314288192552511?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/5405314288192552511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/12/setting-up-canon-pixma-mp530-on-kubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5405314288192552511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5405314288192552511'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/12/setting-up-canon-pixma-mp530-on-kubuntu.html' title='Setting up a Canon Pixma MP530 on Kubuntu 7.10 (Gutsy)'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-7294049224954555118</id><published>2007-12-17T15:27:00.000-08:00</published><updated>2010-03-01T23:20:47.551-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='jEdit'/><title type='text'>Double-clicking to select text fails in jEdit on Kubuntu Gutsy Gibbon
(7.10)</title><content type='html'>After a failed attempt to upgrade Feisty, I wiped my Kubuntu partition and reinstalled Gutsy from scratch on my Compaq Presario C506ca. All went well - I managed to get the sound working (can't recall the tweak right now), got Ruby, Rails 2.0 and jEdit installed. Then I discovered I had to double-click real fast to select words or lines of text in jEdit. A little googling around led me at last to this post &lt;a href="https://bugs.launchpad.net/ubuntu/+source/xorg/+bug/55270"&gt;Bug #55270 in xorg (Ubuntu): “Double-click timeout is not applied to X”&lt;/a&gt;, which explained the problem and best of all had a fix: add &lt;b&gt;*multiClickTime: 400&lt;/b&gt; to your .Xdefaults or .Xresources file (not sure which one applies to which environment, but .Xdefaults worked for me).&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-7294049224954555118?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/7294049224954555118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/12/double-clicking-to-select-text-fails-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7294049224954555118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7294049224954555118'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/12/double-clicking-to-select-text-fails-in.html' title='Double-clicking to select text fails in jEdit on Kubuntu Gutsy Gibbon&#xA;(7.10)'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-4544557295383170368</id><published>2007-12-12T08:05:00.000-08:00</published><updated>2010-03-01T23:20:47.552-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>stupid ruby trick #1</title><content type='html'>Here's why I like dynamic languages. I have a template (function) in an XSLT application that I invoke with the number of columns in an output table. The template then returns a list of integer values separated by carets "^".&lt;br/&gt;&lt;br/&gt;Each integer is the width of a column as a percentage of the table width. The ideal width for each column depends on the size of the column header label and text in each row, which is a bit of a subjective fiddle, so I can't really automate setting the proportion of each column, at least not without doing some advanced parsing of the table data. &lt;br/&gt;&lt;br/&gt;Of course, all the integers for a given number of columns are supposed to add  up to 100 percent, and the list should have only as many integers as there are columns in the table. For tables with 5 or 6 columns, it's pretty easy to eyeball the sum, and make sure there's the right number of values, e.g. "10^20^20^30^20". When the tables get up to 14 or 15 columns, manually adding up all those column widths to 100 for the right number of columns becomes a PITB. Time for a little scripting!&lt;br/&gt;&lt;br/&gt;So I whipped up this little one-liner in irb to do the math for me:&lt;br/&gt;&lt;br/&gt;&lt;pre lang="ruby"&gt;&lt;br/&gt;C:\USAFIPD\Tools\Reports&gt;irb&lt;br/&gt;&amp;gt;&amp;gt; n = "4^10^10^10^6^6^6^5^6^6^6^5^6^5^6^3"&lt;br/&gt;=&gt; "4^10^10^10^6^6^6^5^6^6^6^5^6^5^6^3"&lt;br/&gt;&amp;gt;&amp;gt; eval(n.gsub("^","+"))&lt;br/&gt;=&gt; 100&lt;br/&gt;&amp;gt;&amp;gt; puts "sum: " + eval(n.gsub("^","+"))  + " cols: " + n.split("^").length&lt;br/&gt;TypeError: can''t convert Fixnum into String&lt;br/&gt;    from (irb):3:in ''+''&lt;br/&gt;    from (irb):3&lt;br/&gt;&amp;gt;&amp;gt; puts "sum: " + eval(n.gsub("^","+")).to_s  + " cols: " + n.split("^").length.to_s&lt;br/&gt;sum: 100 cols: 16&lt;br/&gt;=&gt; nil&lt;br/&gt; &amp;gt;&amp;gt;&lt;br/&gt;&lt;/pre&gt;&lt;br/&gt;&lt;br/&gt;I made a couple of fumbles and educated guesses, based on my experience with Javascript and Perl, e.g. that &lt;code&gt;eval(n.gsub(...))&lt;/code&gt; would add up the digits. Still, I didn't have to refer to the Pickaxe Book at all!&lt;br/&gt;&lt;br/&gt;I'll stick that into a .rb file for future use, passing in the list of column widths as an arg (once I remember how to get it from ARGV [or is it ARGS?!]). Gee, maybe I could put the body in a loop that keeps prompting me if the sum is not 100, so I can keep fiddling the string until it's right... hm...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-4544557295383170368?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/4544557295383170368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/12/stupid-ruby-trick-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4544557295383170368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4544557295383170368'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/12/stupid-ruby-trick-1.html' title='stupid ruby trick #1'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-3165051175366438886</id><published>2007-10-01T01:31:00.000-07:00</published><updated>2010-03-01T23:20:47.554-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Aptana'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Getting the Aptana Help Server working on Windows Vista</title><content type='html'>Overcame a minor irritation - I kept getting an HTTP 500 internal server error from Aptana's built-in help documentation server after installing Aptana on my Windows Vista system. After some fiddling around with the Help Server's host name and port, I found the sweet spot by setting the host name to "localhost" and leaving the port number field blank, allowing Aptana to pick its own value.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-3165051175366438886?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/3165051175366438886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/10/getting-aptana-help-server-working-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3165051175366438886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3165051175366438886'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/10/getting-aptana-help-server-working-on.html' title='Getting the Aptana Help Server working on Windows Vista'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-6131459259208790864</id><published>2007-07-26T00:49:00.000-07:00</published><updated>2010-03-01T23:20:47.555-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>Windows Vista, Wacom and Logitech Woes</title><content type='html'>**&amp;lt;rant&amp;gt;**I bought a &lt;a href="http://www.wacom.com/graphire/4x5.cfm"&gt;Wacom Graphire4 4x5 tablet&lt;/a&gt; for my daughter this week. According to her, the driver and bundled Photoshop Elements3 and Corel Painter Essentials 2 installed with no problem on our Windows XP system. &lt;br/&gt;&lt;br/&gt;I however wasted 2 hours attempting to install the bundled apps onto Windows Vista on my laptop this evening. In the end, after &lt;a href="http://www.digitalhome.ca/forum/showthread.php?p=529748"&gt;googling around a bit&lt;/a&gt;, I made an educated guess that Vista just hates the Microsoft Installer packages wrapping the vintage 2004 Photoshop and Corel apps. Also, it appears &lt;a href="http://www.informationweek.com/news/showArticle.jhtml?articleID=198001898"&gt;Adobe has no intention of supporting Vista&lt;/a&gt;, so I won't hold my breath waiting for Wacom to upgrade the bundle...&lt;br/&gt;&lt;br/&gt;The Vista version of the tablet driver installer freshly downloaded from the Wacom site *also* seemed to hang up partway through the install process. In the end, it appears to have installed itself, however I now have *seven* annoying popup messages to dismiss when I logon to Windows, each popup informing me that it couldn't find a driver for this or that USB device - when in fact the drivers for the Wacom tablet and the Logitech wireless keyboard/mouse are installed *just fine*. &lt;br/&gt;&lt;br/&gt;Speaking of the Logitech stuff, I still haven't received a satisfactory answer from them about the annoying popup messages, four months after I first &lt;a href="http://forums.logitech.com/logitech/board/message?board.id=software&amp;thread.id=2971"&gt;complained about it&lt;/a&gt; on their support Web site. Well, at least Logitech attempts to listen to their customers - I found no such avenue for recourse on the Wacom site. Just &lt;a href="http://www.wacom.com/companyinfo/email.cfm"&gt;fire off an email to them&lt;/a&gt; and hope for the best.**&amp;lt;/rant&amp;gt;**&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-6131459259208790864?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/6131459259208790864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/07/windows-vista-wacom-and-logitech-woes.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6131459259208790864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6131459259208790864'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/07/windows-vista-wacom-and-logitech-woes.html' title='Windows Vista, Wacom and Logitech Woes'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-6134402287805265367</id><published>2007-07-23T04:48:00.000-07:00</published><updated>2010-03-01T23:20:47.556-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>Andale Mono font for Windows Command Prompt</title><content type='html'>Andale Mono is one of the nicer monospaced fonts for the command prompt (DOS box) on Windows. Unlike the default Lucida Console, Andale Mono has a dot in the middle of the zero character to distinguish it from the capital O. It also has much nicer proportions than the default Windows raster fonts.&lt;br/&gt;&lt;br/&gt;Microsoft dropped Andale Mono as a default font choice from the Windows 2000 and XP DOS prompt configuration. However, some years back, a helpful fellow named Aaron Toponce wrote up a blog page with the gory details on restoring Andale Mono to the DOS prompt font list. &lt;br/&gt;&lt;br/&gt;I had the foresight (luck) to bookmark Aaron's instruction page using Yahoo!'s My Web social bookmarking thingy. &lt;a href="http://toponcefamily.com/"&gt;Aaron's domain&lt;/a&gt; has long since reverted to a marketing link farm, but I had the foresight (luck) again to *save a copy* of Aaron's page along with the Yahoo! My Web bookmark. For this feature alone My Web is gold.&lt;br/&gt;&lt;br/&gt;As I settled into my latest PC at work, I used Aaron's instructions to restore Andale Mono to my command window. Here for your elucidation is my slightly edited version of Aaron's instructions:&lt;br/&gt;&lt;br/&gt;&gt; The Windows command prompt supports monospace TrueType and OpenType fonts.  By default, only Lucida Console and Raster Fonts are installed.  You can add more monospace fonts using a simple registry hack:&lt;br/&gt;&lt;br/&gt;&gt; 1. Navigate to HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/Current Version/Console/TrueTypeFont. As you will notice, the existing Lucida Console is named '0'.&lt;br/&gt;&gt; 2. Add a new string named '00' (I believe only '0' can be used, although I haven't tried anything else), &lt;br/&gt;&gt; 3. Modify the data to be the font name.  &lt;br/&gt;&gt; 4. Add as many TrueType and OpenType monospace fonts as you like, just keep adding zeros to the string name.&lt;br/&gt;&gt; 5. Open a DOS Prompt, right-click the title bar then select Properties from the context menu.&lt;br/&gt;&gt; 6. Select the Font tab. Andale Mono should appear in the list of fonts. Select it, then set the size (I like 14).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-6134402287805265367?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/6134402287805265367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/07/andale-mono-font-for-windows-command.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6134402287805265367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6134402287805265367'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/07/andale-mono-font-for-windows-command.html' title='Andale Mono font for Windows Command Prompt'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-830070860367639024</id><published>2007-06-26T05:09:00.000-07:00</published><updated>2010-03-01T23:20:47.558-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WordPress'/><title type='text'>Markdown and Code Highlighting</title><content type='html'>Added a couple of &lt;a href="http://wordpress.org/"&gt;WordPress&lt;/a&gt; plugins:&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;&lt;a href="http://www.michelf.com/projects/php-markdown/"&gt;PHP Markdown&lt;/a&gt;: because the default WordPress HTML editor mangled my code examples, and&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;a href="http://www.deanlee.cn/wordpress/code_highlighter_plugin_for_wordpress/"&gt;Dean's Source Code Highlighting Plugin&lt;/a&gt;: because I wanted my code snippets to look nice (obscures the lack of quality in my code examples :).&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;Hats off to Dean and Michel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-830070860367639024?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/830070860367639024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/06/markdown-and-code-highlighting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/830070860367639024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/830070860367639024'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/06/markdown-and-code-highlighting.html' title='Markdown and Code Highlighting'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-4521829401814727184</id><published>2007-06-26T03:47:00.000-07:00</published><updated>2010-03-01T23:20:47.559-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Ruby script: find duplicate files</title><content type='html'>A quick google for a script that would find duplicate files by name in a directory tree turned up two promising techniques, one a &lt;a href="http://www.oreillynet.com/onjava/blog/2006/03/recursive_directory_list_with.html"&gt;Ruby&lt;/a&gt; script posted to OnJava by Bill Siggelkow and the other a &lt;a href="http://elonen.iki.fi/code/misc-notes/remove-duplicate-files/index.html"&gt;bash&lt;/a&gt; script using common Unix tools.&lt;br/&gt;&lt;br/&gt;Here's my attempt to reproduce the bash results in Ruby:&lt;br/&gt;&lt;br/&gt;&lt;pre lang="ruby"&gt;#!/usr/bin/env ruby&lt;br/&gt;require 'find'&lt;br/&gt;&lt;br/&gt;files = {}&lt;br/&gt;found = {}&lt;br/&gt;&lt;br/&gt;# read root directory from command line    &lt;br/&gt;ARGV.each do |arg|&lt;br/&gt;  Find.find(arg) do |f|&lt;br/&gt;    if File.file?(f) &lt;br/&gt;      # accumulate the file names&lt;br/&gt;      files[f] = File.basename(f)&lt;br/&gt;    end&lt;br/&gt;  end&lt;br/&gt;end&lt;br/&gt;&lt;br/&gt;# count up the number of each file name &lt;br/&gt;files.each_value do |base|&lt;br/&gt;  # Ruby doesn't allow this Perl idiom: found[base]++&lt;br/&gt;  found[base] = 0 if !found[base]&lt;br/&gt;  found[base] += 1&lt;br/&gt;end&lt;br/&gt;&lt;br/&gt;# print the path of each file found more than once,&lt;br/&gt;# prepended with rm command commented out&lt;br/&gt;found.each do |name,count|&lt;br/&gt;  if count &gt; 1&lt;br/&gt;    files.each do |path,filename|&lt;br/&gt;      if name == filename&lt;br/&gt;        puts "# rm #{path}"&lt;br/&gt;      end&lt;br/&gt;    end&lt;br/&gt;  end&lt;br/&gt;end&lt;/pre&gt;&lt;br/&gt;&lt;br/&gt;Given a directory structure containing files with duplicate names in different directories, the output looks something like this:&lt;br/&gt;&lt;br/&gt;    # rm /market/fruits/tomato.txt&lt;br/&gt;    # rm /market/vegetables/tomato.txt&lt;br/&gt;    # rm /market/fruits/pea.txt&lt;br/&gt;    # rm /market/vegetables/pea.txt&lt;br/&gt;&lt;br/&gt;The output could be piped to a shell script, in which you'd uncomment the "rm" statements for  the files that should be deleted (if that's what you want).&lt;br/&gt;&lt;br/&gt;This is all a bit clunky, if you've found a better or more Rubyesque way to do this, let me know!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-4521829401814727184?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/4521829401814727184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/06/ruby-script-find-duplicate-files.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4521829401814727184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4521829401814727184'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/06/ruby-script-find-duplicate-files.html' title='Ruby script: find duplicate files'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-4790860123232685417</id><published>2007-06-21T06:46:00.000-07:00</published><updated>2010-03-01T23:20:47.561-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Development'/><title type='text'>Config files</title><content type='html'>On a recent project at work, developing a test automation system on top of TestComplete, we tried two ways to store machine-specific configuration data:&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;One file, shared by all installations, containing a section per machine&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;One file per machine&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;At first I had set up a single config file specific to my development PC. When my team mate Alan picked up on the idea, to put some machine-specific data on his system, he created a global config file containing a section per machine. His reasoned that one file, with some common and some machine-specific sections, was more efficient than a collection of files with high redundancy.&lt;br/&gt;&lt;br/&gt;The config files contained data specific to each developer or test instance, such as usernames and passwords on the system under test. We needed this data in first place to prevent clashes between developers as we exercised the system.&lt;br/&gt;&lt;br/&gt;What we ultimately settled on was separating the single global config file back into one-per-machine. Even though we were following good development practice by using a svn repository, so no-one's edits would get lost or forgotten, we realized that once the project ramped up to 3 or 4 development machines, plus a couple of production servers, that config file would become a &lt;a href="http://www.answers.com/topic/patch-pumpkin-computer-jargon?cat=technology"&gt;pumpkin&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-4790860123232685417?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/4790860123232685417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/06/config-files.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4790860123232685417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4790860123232685417'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/06/config-files.html' title='Config files'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-6730888201036994706</id><published>2007-06-21T05:57:00.000-07:00</published><updated>2010-03-01T23:20:47.562-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Aptana'/><title type='text'>Subverting Aptana</title><content type='html'>A persistent error in the integration of the Subclipse SVN client with &lt;a href="http://www.aptana.com/"&gt;Aptana IDE&lt;/a&gt; prevents the initial import of a project into an SVN repository. I don't think the problem lies with Subclipse, the client plugin, as much as a bug somewhere in the guts of the Eclipse IDE. I worked around the problem by using &lt;a href="http://tortoisesvn.net/"&gt;TortoiseSVN&lt;/a&gt; to perform the initial repository import, then carrying on with Subclipse in Aptana IDE.&lt;br/&gt;&lt;br/&gt;To reproduce the problem, right-click on your project folder in the Navigator panel, then select the "Share Project..." wizard from the "Team" element of the project context menu. Aptana will display an error dialog:&lt;br/&gt;&lt;br/&gt;&lt;img src="http://www.phipster.com/wp-content/uploads/2007/06/aptana_svn_error1.PNG" alt="aptana_svn_error1.PNG" /&gt;&lt;br/&gt;&lt;br/&gt;The error message reads "&lt;span class="postbody"&gt;org.eclipse.team.internal.ui.wizards.ConfigureProjectWizard cannot be cast to org.tigris.subversion.subclipse.ui.wizards.sharing.SharingWizard&lt;/span&gt;"&lt;br/&gt;&lt;br/&gt;A couple of other Aptanans &lt;a href="http://www.aptana.com/forums/viewtopic.php?t=1491&amp;amp;highlight=configure+project+internal+error"&gt;reported encountering the same error&lt;/a&gt; after I submitted it to the Aptana user forum, but the Aptana team hasn't come forth with a solution yet.&lt;br/&gt;&lt;br/&gt;Here's how I worked around the problem:&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;Download and install an SVN client, e.g. I use the &lt;a href="http://tortoisesvn.net/"&gt;TortoiseSVN&lt;/a&gt; Windows client on my Windows PC&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Create the new project in Aptana, e.g. "MyApp"&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Import the project to your SVN repository, e.g. "C:\rails\myapp" -&amp;gt; "svn://myhost.com/svn/rails/myapp/trunk"&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Now that the code is safely tucked up in your repository, &lt;strong&gt;delete &lt;/strong&gt;the contents of the project folder, either in Windows or from Aptana.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Back in Aptana, right-click in the Navigator pane then select "Import..." to open the project import dialog box. Follow the instructions to check out the contents of the trunk/ directory to a new Aptana project. &lt;span style="font-size: smaller"&gt;[Note: modified this step to use Aptana instead of TortoiseSVN]&lt;/span&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;You should now see Aptana's version of the SVN status hints overlaid on the project files and folders. As well, the project name will acquire the SVN repository path, e.g. [rails/myapp/trunk]&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;That's it, you're good to go! Now you can use Aptana's SVN client to manage the project.&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-6730888201036994706?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/6730888201036994706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/06/subverting-aptana.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6730888201036994706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/6730888201036994706'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/06/subverting-aptana.html' title='Subverting Aptana'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-4587644134652017842</id><published>2007-06-13T02:19:00.000-07:00</published><updated>2010-03-01T23:20:47.564-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Society'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Pioneering?</title><content type='html'>According to an article in yesterday's &lt;a href="http://www.vancouversun.com"&gt;Vancouver Sun&lt;/a&gt;, &lt;a href="http://www.tns-cf.com/news/news.html"&gt;TNS Canadian Facts&lt;/a&gt;' survey on social networking revealed that "ten per cent of Canadians have a blog, ranging from a high of 31 per cent among the 13 to 17-year-old age group to three per cent among the 50-plus crowd". Only eight percent of my peers, the forty-something crowd, have their own blog. I guess that makes me a pioneer, even amongst all Canadians.&lt;br/&gt;&lt;br/&gt;Why don't more middle-aged and senior Canadians have blogs? Services like Blogger.com make it as simple to write a blog as an email, so it can't be the technology. Even my 83 year-old great aunt has used email for the past 7 years!&lt;br/&gt;&lt;br/&gt;Is it the fear of loss of privacy? Lack of anything to say? Perhaps older Canadians don't feel the need to let the whole world know their every thought. Would there be far less blogging amongst teens if they really realized that the whole world, not just the friends they trust, can read everything they put on Facebook?&lt;br/&gt;&lt;br/&gt;What do you think?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-4587644134652017842?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/4587644134652017842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/06/pioneering.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4587644134652017842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/4587644134652017842'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/06/pioneering.html' title='Pioneering?'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-3166304492947239153</id><published>2007-06-12T05:00:00.000-07:00</published><updated>2010-03-01T23:20:47.567-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Etymology'/><title type='text'>What does phipster mean?</title><content type='html'>In case you hadn't gleaned it already, "Phipster" is a contraction of the first two and last letters of my first and last names: &lt;strong&gt;Ph&lt;/strong&gt;ilip &lt;strong&gt;St&lt;/strong&gt;ein&lt;strong&gt;er&lt;/strong&gt;.&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.wobblini.net/wobblini.txt"&gt;David Black&lt;/a&gt;'s explanation of his domain name, wobblini.net, prompted me to explain mine. But my favourite record as a child was Cecil the Seasick Sea Serpent. Go figure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-3166304492947239153?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/3166304492947239153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/06/what-does-phipster-mean.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3166304492947239153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3166304492947239153'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/06/what-does-phipster-mean.html' title='What does phipster mean?'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-5935212218145654278</id><published>2007-06-04T07:02:00.000-07:00</published><updated>2010-03-01T23:20:47.574-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><title type='text'>Moved from MS Windows Vista Home Premium to Ubuntu 7.04 (Fiesty Fawn)
this weekend</title><content type='html'>&lt;strong&gt;What:&lt;/strong&gt; &lt;a href="http://tinyurl.com/2tpzf9"&gt;Compaq Presario C506ca&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Why:&lt;/strong&gt; Windows Vista sucks.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;When:&lt;/strong&gt; Yesterday.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;How:&lt;/strong&gt; Ubuntu Live CD + apt-get + Ubuntu Wiki = done.&lt;br/&gt;&lt;h3&gt;Ubuntu First Impressions&lt;/h3&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;What sucks: &lt;/strong&gt;fonts, headphone jack doesn't cut out speakers, lousy Palm support&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;What rocks: &lt;/strong&gt;wireless networking, wireless keyboard/mouse, Aptana, online support/community, resource conservation, no viri (no antivirus yet, either!)&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5935212218145654278?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/5935212218145654278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/06/moved-from-ms-windows-vista-home.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5935212218145654278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/5935212218145654278'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/06/moved-from-ms-windows-vista-home.html' title='Moved from MS Windows Vista Home Premium to Ubuntu 7.04 (Fiesty Fawn)&#xA;this weekend'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-7963017664853771868</id><published>2007-06-04T04:30:00.000-07:00</published><updated>2010-03-01T23:20:47.576-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web 2.0'/><title type='text'>Web 2.0 Design, Dissected</title><content type='html'>It's all 'splained here. Once you've memorized &lt;a href="http://www.webdesignfromscratch.com/web-2.0-design-style-guide.cfm"&gt;this page&lt;/a&gt;, you can hold your own with any Mac-toting, dressed-all-in-black, goatee'd web designer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-7963017664853771868?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/7963017664853771868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/06/web-20-design-dissected.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7963017664853771868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/7963017664853771868'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/06/web-20-design-dissected.html' title='Web 2.0 Design, Dissected'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-8506062808517853517</id><published>2007-05-17T14:24:00.000-07:00</published><updated>2010-03-01T23:20:47.577-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RailsConf'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>RailsConf2007 Day 1 - Rails Guidebook Charity All-Day Tutorial</title><content type='html'>Partook of the all-day tutorial put on by Dave "that's Roootes" Thomas and Mike "it's Rowtes" Clark. It would have been a lot more enjoyable if I'd managed to sleep more than 2 hours last night, probably just keyed up from the 6.5 hour drive from Vancouver, 4 cups of coffee and jitters about how to keep my spand-branking new laptop from disappearing - it's my first one, can you tell?&lt;br/&gt;&lt;br/&gt;One key point Dave and Mike emphasized early on was that most of Rails is Ruby code, so the framework should really be called "Rails on Ruby".  In short - if you want to understand Rails, you've got to understand Ruby. This point was reiterated at the break by newly-met lunchmates as we ate the not-too-bad box lunch in the cavernous exhibit hall. They agreed that David A. Black's book "Ruby for Rails", while slightly outdated (Ruby 1.8.4, Rails 1.0), demystifies the "magic code" in Rails by explaining the key Ruby concepts and structures underlying Rails.&lt;br/&gt;&lt;br/&gt;Some observations:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Upon a show of hands, the audience was split about even between those who had written at least one Rails app, and those who were just getting their feet wet. I saw only one hand go up in response to the question as to how many participants were "super-comfortable" coding Ruby.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;After reading the &lt;a href="http://www.oreillynet.com/ruby/blog/2007/05/ruby_and_women.html"&gt;lively discussion on Ruby and Women&lt;/a&gt; following Gregory Brown's post, I was expecting a 90%+ male audience, however the gender split in the tutorial audience was more like 80/20, some improvement over the anecdotes in the discussion.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Also well applauded was the news mid-afternoon that the tutorial attendees had raised over $12,000 for the charities nominated on Pragprog's &lt;a href="http://www.justgive.org/basket?donorId=42670&amp;amp;listTypeId=1&amp;amp;acton=viewList"&gt;Justgive.org&lt;/a&gt; donation page.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;On a &lt;em&gt;dimmer &lt;/em&gt;note, I was pretty chuffed that the organizers didn't do more to provide AC power throughout the room. I managed to piggyback on the third or fourth power bar daisychained from one of the few wall outlets thanks to a generous neighbour.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;The Mike 'n Dave show was very well put presented, knitting together a few concepts that had been puzzling me, Nubie that I am, like "where does it all go?" and "how does the view get the data from the controller?". Much of this is explained in Thomas' book "Active Web Development with Rails", but somehow hearing him explain it made it clearer. Somehow.&lt;br/&gt;&lt;br/&gt;So what about the tutorial content? The first third of the day was a whirlwind introduction to and overview of Ruby, followed by a dissection of an example Rails app, with a potpourri of topics like migrations, REST and Capistrano rounding out the day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-8506062808517853517?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/8506062808517853517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/05/railsconf2007-day-1-rails-guidebook.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8506062808517853517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/8506062808517853517'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/05/railsconf2007-day-1-rails-guidebook.html' title='RailsConf2007 Day 1 - Rails Guidebook Charity All-Day Tutorial'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-591325002582817535</id><published>2007-05-14T06:04:00.000-07:00</published><updated>2010-03-01T23:20:47.580-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RailsConf'/><title type='text'>Railsconf2007 or bust</title><content type='html'>T minus 3 days and counting! If the wireless network works OK, and my batteries last, I will attempt to post notes and comments from &lt;a href="http://www.railsconf.com/"&gt;Railsconf2007&lt;/a&gt; in sunny Portland, OR.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-591325002582817535?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/591325002582817535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/05/railsconf2007-or-bust.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/591325002582817535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/591325002582817535'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/05/railsconf2007-or-bust.html' title='Railsconf2007 or bust'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-3307298465339880435</id><published>2007-02-18T04:15:00.000-08:00</published><updated>2010-03-01T23:20:47.581-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Aptana'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>AWebFactory - a helping hand for RadRails</title><content type='html'>jEdit + RubyPlugin is a great, simple Rails development tool, but I was getting annoyed today by the need to open two console windows (one to run Mongrel, another to do rails config or rake work), a Web browser and jEdit, then cd to the depot application folder and manually fire up the Mongrel server every time I wanted to do a little more work on the AWDWR depot tutorial.&lt;br/&gt;&lt;br/&gt;I thought about writing up a Windows batch file to start up all this stuff for me, then I realized that I would be cobbling together more or less the environment &lt;a href="http://www.radrails.org/"&gt;RadRails&lt;/a&gt; provides out of the box.&lt;br/&gt;&lt;br/&gt;Since I was well into the depot demo application I wanted to import it to RadRails. A quick Google search let me to Victor Kane's &lt;a href="http://wiki.awebfactory.com.ar/awebfactory/published/HomePage"&gt;AWebFactory&lt;/a&gt; - an amazing resource if you want to use RadRails while following along in AWDWR. Even more so, Victor illuminates many of the darker corners of MVC, OO and Rails that beginners might struggle with. Thanks for taking the time to write this invaluable guide, Victor!&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Update (14 May 2007): &lt;/strong&gt;&lt;a href="http://www.aptana.com/"&gt;Aptana&lt;/a&gt; has taken over development of Radrails, slowly integrating it into their Eclipse-based Web development IDE. The Aptana team and community are breathing new life into Radrails.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-3307298465339880435?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/3307298465339880435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/02/awebfactory-helping-hand-for-radrails.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3307298465339880435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3307298465339880435'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/02/awebfactory-helping-hand-for-radrails.html' title='AWebFactory - a helping hand for RadRails'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-2514684429544248422</id><published>2007-02-15T05:25:00.000-08:00</published><updated>2010-03-01T23:20:47.582-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Found a sweet spot!</title><content type='html'>&lt;a href="http://blog.wolfman.com/articles/category/jedit"&gt;Wolfman&lt;/a&gt; has posted some great stuff at the intersection of jEdit, Rails and HAML, especially the set of Superabbrev shortcuts for Rails development!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-2514684429544248422?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/2514684429544248422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/02/found-sweet-spot.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2514684429544248422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/2514684429544248422'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/02/found-sweet-spot.html' title='Found a sweet spot!'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-3499964876869676817</id><published>2007-02-11T03:32:00.000-08:00</published><updated>2010-03-01T23:20:47.583-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RailsConf'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>Ruby on Rails for enterprise gaining ground?</title><content type='html'>&lt;blockquote style="font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; font-size: 13px; font-size-adjust: none; font-stretch: normal"&gt;&lt;/blockquote&gt;&lt;br/&gt;I work for a &lt;a href="http://www.mdacorporation.com/"&gt;big systems engineering firm&lt;/a&gt; (big by Canadian standards) with over 30 years of system and software engineering success. Much of that success is attributed to the company's conservative, risk-averse engineering culture. Nonetheless, a few brave souls within the company are embracing and succeeding with &lt;a href="http://www.agilemanifesto.org/"&gt;Agile&lt;/a&gt; ways. Ruby on Rails promises to ratchet Agile productivity up a notch or two, even for conservative, risk-averse enterprise projects.&lt;br/&gt;&lt;br/&gt;In December 2005, &lt;a href="http://quotedprintable.com/articles/trackback/31"&gt;Quoted-Printable&lt;/a&gt; published a link to a thought-provoking article by &lt;a href="http://www.jroller.com/page/obie?entry=productivity_arbitrage"&gt;Obie Fernandez&lt;/a&gt; on the business value of Ruby on Rails. Fernandez predicted a big gain for RoR in 2006, thanks to the "productivity arbitrage" gains of RoR . So, did RoR gain ground in 2006? Was Fernandez on the money? Here's my totally unscientific search for the truth:&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.loudthinking.com/about.html"&gt;David Heinemeier Hansson&lt;/a&gt; first released Rails to the world in July 2004. According to a graph produced on &lt;a href="http://www.google.com/trends?q=%22Ruby+on+Rails%22&amp;amp;ctab=0&amp;amp;geo=US&amp;amp;date=all"&gt;Google Trends&lt;/a&gt;, the phrase &lt;span style="font-weight: bold; font-family: Courier New,Courier,mono"&gt;"Ruby on Rails" &lt;/span&gt;makes its first appearance in Google searches in early 2005, climbs steadily through the rest of the year, then declines in 2006. Google provides no scale for the number of hits in the vertical scale (there must be a more scientific term for this), so all of the comparisons that follow are relative.&lt;br/&gt;&lt;br/&gt;Over the same period, the terms "&lt;a href="http://www.google.com/trends?q=java&amp;amp;ctab=0&amp;amp;geo=US&amp;amp;date=all"&gt;Java&lt;/a&gt;" and "&lt;a href="http://www.google.com/trends?q=j2EE&amp;amp;ctab=0&amp;amp;geo=US&amp;amp;date=all"&gt;J2EE&lt;/a&gt;" declined slightly on Google. A search for &lt;a href="http://www.google.com/trends?q=%22spring+framework%22&amp;amp;ctab=0&amp;amp;geo=US&amp;amp;date=all"&gt;"Spring framework"&lt;/a&gt;, representing the latest trend toward lightweight Java, shows a gain through 2005 followed by a marked decline in 2006.&lt;br/&gt;&lt;br/&gt;So does this mean RoR is not gaining ground, or that web users are not searching for these terms as much as they first did, sort of a "framework fatigue" setting in?&lt;br/&gt;&lt;br/&gt;Currently in a &lt;a href="http://www.google.ca/search?hl=en&amp;amp;q=rails&amp;amp;btnG=Google+Search&amp;amp;meta="&gt;search for the term "Rails"&lt;/a&gt; on Google, eight of the first ten results are directly related to Ruby on Rails. The first five results point to Ruby on Rails-related sites, followed by &lt;a href="http://www.railssheffield.co.uk/"&gt;Rails of Sheffield&lt;/a&gt;'s "New and used model railways." The result may reveal more about Google's indexing algorithms than shifting patterns in the search term, but it provides some insight.&lt;br/&gt;&lt;br/&gt;In the mean time, &lt;a href="http://www.railsconf.com/"&gt;the first Railsconf&lt;/a&gt; in mid-June 2006, sponsored by non-profit advocacy group &lt;a href="http://www.rubycentral.org/"&gt;Ruby Central,&lt;/a&gt; sold out to an audience of 600. This year Ruby Central partnered with tech publishing behemoth O'Reilly to double the number of seats at &lt;span style="text-decoration: underline"&gt;&lt;/span&gt;&lt;a href="http://conferences.oreillynet.com/rails/"&gt;Railsconf 2007&lt;/a&gt; in Portland, Oregon.&lt;br/&gt;&lt;br/&gt;Prompted by a &lt;a href="http://weblog.rubyonrails.org/2007/2/5/railsconf-is-more-than-half-sold-out-and-the-fastest-selling-o-reilly-conference"&gt;fevered posting&lt;/a&gt; to the Rubyonrails weblog, last Monday, I succumbed to the hype and registered, even before I had the go-ahead from &lt;a href="http://www.mdacorporation.com/"&gt;my employer&lt;/a&gt;'s professional development program coordinator (yes, they have a great training and pro-D program!).&lt;br/&gt;&lt;br/&gt;As of this posting, the conference is already &lt;a href="http://weblog.rubyonrails.org/2007/2/11/railsconf-sells-more-than-2-3s-railsconf-eu-rfp-open"&gt;three-quarters sold out,&lt;/a&gt; one week after registration opened!&lt;br/&gt;&lt;br/&gt;Glad I bought my ticket early.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-3499964876869676817?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/3499964876869676817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/02/ruby-on-rails-for-enterprise-gaining.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3499964876869676817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/3499964876869676817'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/02/ruby-on-rails-for-enterprise-gaining.html' title='Ruby on Rails for enterprise gaining ground?'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-9200461506173834219</id><published>2007-02-04T03:28:00.000-08:00</published><updated>2010-03-01T23:20:47.585-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>require_gem is obsolete?</title><content type='html'>&lt;a href="http://www.ruby-forum.com/topic/94261"&gt;A discussion&lt;/a&gt; about the warning "c:0:Warning: require_gem is obsolete.  Use gem instead". I couldn't get this one to work on my home box (Rails 1.2.1, Ruby 1.8.5 on Windows XP SP2) so I'm just ignoring it for now, hoping it's not critical. I'm still so new to RoR that I don't know what's important yet. I'm hoping the Ruby and RoR maintainers will fix this one soon?&lt;br/&gt;&lt;br/&gt;Update (11 Feb 07): &lt;a href="http://weblog.rubyonrails.org/2007/2/6/rails-1-2-2-sqlite3-gems-singular-resources"&gt;Rails 1.2.2&lt;/a&gt;, released on 6 Feb, fixes the problem, along with support for SQLite3 - you'll need gems 0.9.0 or better now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-9200461506173834219?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/9200461506173834219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/02/requiregem-is-obsolete.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/9200461506173834219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/9200461506173834219'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/02/requiregem-is-obsolete.html' title='require_gem is obsolete?'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5625478444715094438.post-153091312862682876</id><published>2007-02-03T07:23:00.000-08:00</published><updated>2010-03-01T23:20:47.586-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jEdit'/><category scheme='http://www.blogger.com/atom/ns#' term='Rails'/><title type='text'>jEdit for Ruby on Rails</title><content type='html'>I received my copy of &lt;a href="http://www.amazon.ca/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.ca%2FAgile-Development-Rails-Dave-Thomas%2Fdp%2F0977616630%2Fsr%3D1-1%2Fqid%3D1170545866%3Fie%3DUTF8%26s%3Dbooks&amp;amp;tag=whiwr-20&amp;amp;linkCode=ur2&amp;amp;camp=15121&amp;amp;creative=330641"&gt;Agile Web Development with Rails&lt;/a&gt;&lt;img src="http://www.assoc-amazon.ca/e/ir?t=whiwr-20&amp;amp;l=ur2&amp;amp;o=15" style="display: none" border="0" height="1" width="1" /&gt; yesterday, and eager to get started, I fired up my long-time favourite code editor, &lt;a href="http://www.jedit.org/"&gt;jEdit&lt;/a&gt;. Over the past five or six years I've used jEdit for just about every coding task I've ever undertaken, so I decided to try it out for Rails work.&lt;br/&gt;&lt;br/&gt;After a couple of hours of downloading plugins and fiddling around with settings, I decided to save my notes here in the hopes that it would save you some time (and so I'd have it written down somewhere for the next time!). I'll assume you're starting from scratch:&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;Download and install &lt;a href="http://ctags.sourceforge.net/"&gt;Exuberant Ctags&lt;/a&gt; (supports the CTagsSidekick plugin). According to the plugin docs, you need a recent version of this program.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Check the &lt;a href="http://www.jedit.org/index.php?page=compatibility"&gt;system requirements&lt;/a&gt; for jEdit, then download and install the appropriate &lt;a href="http://java.com/en/download/"&gt;Java Runtime Environment&lt;/a&gt;.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;a href="http://www.jedit.org/index.php?page=download"&gt;Download&lt;/a&gt; and install jEdit.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;If all is good, fire up jEdit, then select the menu Plugins -&amp;gt; Plugin Manager.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Select the Install tab, then select and install the following plugins:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;CodeBrowser&lt;/strong&gt;: provides a tree view of the document structure&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;Console&lt;/strong&gt;: integrated command-line with some smarts.&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Doesn't work so well with applications that don't immediately flush their output buffer, e.g. for tailing WEBrick output.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Works well with the ErrorList plugin to highlight runtime errors in Ruby code.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;CTagsSidekick&lt;/strong&gt;: another, somewhat slicker document structure browser.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;ErrorList&lt;/strong&gt;: as the name implies, displays a list of errors generated by SideKick parsers&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;ProjectViewer&lt;/strong&gt;: Best of the half-dozen project organization plugins. Some integration with console, e.g. switching the project view as you navigate the source tree in Console, or switch buffers in the main text edit view.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;RubyPlugin&lt;/strong&gt;: the big kahuna - makes jEdit a into real Rails locomotive :) I can't say enough about the features it provides, just read up on the &lt;a href="http://rubyjedit.org/"&gt;author's site.&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;Sidekick&lt;/strong&gt;: provides the framework for CTagsSidekick to do its magic.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;XML&lt;/strong&gt;: provides an HTML parser and tag completion facility for Sidekick&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Most of these plugins should install without a hitch. You might have to restart jEdit to let it find and install all of them correctly.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Once all of the plugins are happily installed, select the "Plugin Options..." from the "Plugins" menu, then update the following plugin settings:&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;Code Browser:&lt;/strong&gt;&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;Enter the path to the Ctags executable (e.g. on my system it's C:\Ctags\ctags.exe).&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;Ctags Sidekick&lt;/strong&gt;:&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;Enter the path to the Ctags executable (e.g. on my system it's C:\Ctags\ctags.exe).&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Set "Group tags by" to "namespace (multi-level)"&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Click "Show icons" if it isn't selected.&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;SideKick:&lt;/strong&gt;&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;In the Parsers section, set "rhtml" mode to the "html" parser, and "ruby" mode to the "ruby" parser.&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;ProjectViewer:&lt;/strong&gt;&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;If you plan to use ProjectViewer to manage your Rails projects, add *.rb, *.rhtml and *.yml to the "Files to import" field of the "General Options" section.&lt;strong&gt; &lt;/strong&gt;&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Click "OK" to save the settings and close the Plugin Options window.&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Select "Global Options" from the Utilities menu, then update the following settings:&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;Editing:&lt;/strong&gt;&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;Select "html" from the list of modes.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Uncheck "Use default settings".&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Add "rhtml" to the "File name glob" field, like so: &lt;code&gt;*.{html,htm,hta,rhtml}&lt;/code&gt;&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;code&gt;&lt;/code&gt;&lt;strong&gt;Shortcuts&lt;/strong&gt;:&lt;br/&gt;&lt;ol&gt;&lt;br/&gt;	&lt;li&gt;Select "Plugin: RubyPlugin" from the "Edit Shortcuts" list, then add the shortcuts as suggested on the &lt;a href="http://rubyjedit.org/features/"&gt;jEditPlugin Features Page.&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Click "OK" to save the settings and close the "Global Options" window.&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Also see the excellent tips on &lt;a href="http://www.eadz.co.nz/blog/article/ruby-rails-jedit.html"&gt;Eadz's Ruby on Rails on jEdit&lt;/a&gt; page, and &lt;a href="http://ifakedit.com/log/2006/02/19/jedit-tutorial-a-how-to-on-abbreviations-superabbrevs-in-html-ruby-on-rails-and-more/"&gt;this howto&lt;/a&gt; on setting up RoR abbreviations.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Best to restart jEdit so the buffer mode changes take effect.&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;You can confirm the mode is HTML by opening a .rhtml file then checking that HTML mode is displayed in the status bar, e.g. "(html,indent,Cp1252)".&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Also, select the "Beautify Buffer" command from the menu Plugins -&amp;gt; Beauty. It should tidy up the HTML formatting.&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Finally, a list of HTML tags should pop up when you type an opening tag bracket "&amp;lt;".&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Sometimes jEdit "forgets" the mode it's using. Just restart it - it will remember where you were editing the file and which files you had open. Sweet.&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;&lt;/ol&gt;&lt;br/&gt;That's about it. I welcome any and all corrections or additional tips!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-153091312862682876?l=www.phipster.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.phipster.com/feeds/153091312862682876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.phipster.com/2007/02/jedit-for-ruby-on-rails.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/153091312862682876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5625478444715094438/posts/default/153091312862682876'/><link rel='alternate' type='text/html' href='http://www.phipster.com/2007/02/jedit-for-ruby-on-rails.html' title='jEdit for Ruby on Rails'/><author><name>Philip Steiner</name><uri>http://www.blogger.com/profile/13271984132120153264</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://2.bp.blogspot.com/-6K-520o5lJg/TpudIVr7qBI/AAAAAAAAGFU/DPsrMRRtyss/s220/profile2.jpg'/></author><thr:total>0</thr:total></entry></feed>
