<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='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' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-5625478444715094438</atom:id><lastBuildDate>Sun, 20 May 2012 06:00:02 +0000</lastBuildDate><category>Python</category><category>Aptana</category><category>Web Search</category><category>Visual Studio</category><category>Windows Vista</category><category>Etymology</category><category>Computers</category><category>Internet</category><category>Kubuntu</category><category>Ruby</category><category>Society</category><category>RailsConf</category><category>Rails</category><category>Software Development</category><category>WordPress</category><category>Pylons</category><category>jEdit</category><category>Writing</category><category>Movies</category><category>Web 2.0</category><category>Google</category><category>DOS</category><category>Web Hosting</category><category>Web Frameworks</category><title>Philip Steiner</title><description>Things I'd forget if I didn't post them here.</description><link>http://www.psteiner.com/</link><managingEditor>noreply@blogger.com (Philip Steiner)</managingEditor><generator>Blogger</generator><openSearch:totalResults>101</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-2813804645063356124</guid><pubDate>Fri, 18 May 2012 05:29:00 +0000</pubDate><atom:updated>2012-05-17T22:30:20.929-07:00</atom:updated><title>Wikipedia on my iPad Sucks!</title><description>&lt;br /&gt;I &lt;i&gt;love&amp;nbsp;&lt;/i&gt;&lt;a href="http://wikipedia.org/"&gt;Wikipedia&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What's not to love about the universal reference, all&amp;nbsp;3,952,630 pages&amp;nbsp;kept up-to-date by an 85,000-strong army of contributors, who do it all for love, that's available online, from anywhere, including my iPad, even offline, thanks to the &lt;a href="http://www.brilliantish.com/allofwiki/"&gt;All of Wiki&lt;/a&gt; app that lets me carry the whole 4.73 Gbytes of it around with me whereever I go, so that if I, as an ignoramus Canuck, riding to work on the bus without a handy WiFi connection, get the hankering to know just who played &lt;a href="http://en.wikipedia.org/wiki/Zaphod"&gt;Zaphod Beeblebrox&lt;/a&gt; in the original BBC radio broadcast of the &lt;a href="http://en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy"&gt;Hitchhiker's Guide to the Galaxy&lt;/a&gt;, well, heck, I can just pop open All of Wiki and discover it was the aptly-named &lt;a href="http://en.wikipedia.org/wiki/Mark_Wing-Davey"&gt;Mark Wing-Davey&lt;/a&gt;, who also played Zaphod in the TV series... in fact, with the addition of perhaps a &lt;a href="http://en.wikipedia.org/wiki/Towel_Day"&gt;towel&lt;/a&gt;, I would be perfectly equipped to face the &lt;a href="http://en.wikipedia.org/wiki/Vogon"&gt;Vogons&lt;/a&gt; with my Wikipedia-enabled iPad.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/0/00/The_Hitchhiker's_Guide_to_the_Galaxy,_english.svg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://upload.wikimedia.org/wikipedia/commons/0/00/The_Hitchhiker's_Guide_to_the_Galaxy,_english.svg" width="145" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Besides, I don't think Vogon ships are equipped with &lt;a href="http://en.wikipedia.org/wiki/802.11"&gt;802.11n WiFi&lt;/a&gt;, so that's perfect.&lt;br /&gt;&lt;br /&gt;The iPad &lt;i&gt;is&lt;/i&gt;&amp;nbsp;pretty much how I envisioned the &lt;a href="http://en.wikipedia.org/wiki/The_Hitchhiker%27s_Guide_to_the_Galaxy_(fictional)"&gt;Hitchhiker's Guide&lt;/a&gt;&amp;nbsp;when I first read Douglas Adam's opus many years ago.   So if I love Wikipedia so much, why do I say it sucks? Here's what the desktop version looks like on my iPad:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-nN5jTisfGA0/T7XY21iZ5mI/AAAAAAAAGRs/VTNcLuckz6E/s1600/wiki1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-nN5jTisfGA0/T7XY21iZ5mI/AAAAAAAAGRs/VTNcLuckz6E/s400/wiki1.PNG" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I don't know about you, but i find it hard to read 6-point type on an&amp;nbsp;iPad. Granted it's a now-ancient iPad Mark I, but i don't think the whiz-bang Retina display would make much difference, it's still tiny type.&lt;br /&gt;&lt;br /&gt;Let's try the two finger splits and zoom in:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-dUw1UmOrBj0/T7XY_BYZ0bI/AAAAAAAAGR0/zXCZJe141K0/s1600/wiki2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/-dUw1UmOrBj0/T7XY_BYZ0bI/AAAAAAAAGR0/zXCZJe141K0/s400/wiki2.png" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Terrific, the type's bigger now, but it didn't reflow to fit the screen. Okay, you say, switch to the mobile version: &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--WBIQzGDK5I/T7XZAvlR6SI/AAAAAAAAGR8/8QIUeFRmxFY/s1600/wiki3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/--WBIQzGDK5I/T7XZAvlR6SI/AAAAAAAAGR8/8QIUeFRmxFY/s400/wiki3.png" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Big improvement, now I see tiny type one block at a time, and it still doesn't reflow when I zoom in.&lt;br /&gt;&lt;br /&gt;C'mon, Wiki guys 'n gals, this is the Age of Mobile, I know you've heard about responsive web design (it's&lt;a href="http://en.wikipedia.org/wiki/Responsive_Web_Design"&gt; right here&lt;/a&gt;). &lt;b&gt;Let a thousand screens bloom!&lt;/b&gt; You've recorded all that's vital to human knowledge, surely you can make it comfortable to read on my iPad, and Nokia N8, as well as my desktop?&lt;br /&gt;&lt;br /&gt;Keep up the great work, though, we do love ya.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-2813804645063356124?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/05/wikipedia-on-my-ipad-sucks.html</link><author>noreply@blogger.com (Philip Steiner)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-nN5jTisfGA0/T7XY21iZ5mI/AAAAAAAAGRs/VTNcLuckz6E/s72-c/wiki1.PNG' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-4931637336783152647</guid><pubDate>Wed, 16 May 2012 19:11:00 +0000</pubDate><atom:updated>2012-05-16T12:11:52.082-07:00</atom:updated><title>Lather. Rant. Repent. Love it!</title><description>Eric Lloyd (where are you?) summed up the link between code cruft and developer turnover in his comment on the thread&amp;nbsp;&lt;a href="http://programmers.stackexchange.com/questions/30449/is-4-5-years-the-midlife-crisis-for-a-programming-career"&gt;Is 4-5 years the “Midlife Crisis” for a programming career? - Programmers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"Lather. Rant. Repent."&lt;br /&gt;&lt;br /&gt;How many organizations get this? How many can see past the sunk cost of ancient code and infrastructure to realize when it's time to update?&lt;br /&gt;&lt;br /&gt;&lt;a href="https://chrome.google.com/webstore/detail/pengoopmcjnbflcjbmoeodbmoflcgjlk" style="font-size: 13px;"&gt;'via Blog this'&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-4931637336783152647?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/05/lather-rant-repent-love-it.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-5038542936609855231</guid><pubDate>Mon, 14 May 2012 18:09:00 +0000</pubDate><atom:updated>2012-05-14T12:17:14.890-07:00</atom:updated><title>Windows batch: echo without new line</title><description>Two ways to use&amp;nbsp;&lt;a href="http://stackoverflow.com/a/7105690/234235"&gt;set with /p&lt;/a&gt;&amp;nbsp;to 'echo' without a new line:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: monospace;"&gt;echo|set /p=.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: monospace;"&gt;&amp;lt;nul set /p=.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Both examples rely on the set command's behaviour when given the '/p' switch. The '/p' switch turns 'set' into a prompt for input. Usually, this would be employed to solicit interactive input from the user. The value entered at the prompt can be stored in a variable, e.g. 'set /p armageddon=Push Big Red Button?', where the variable 'armageddon' is set to the user's response to the prompt question.&lt;br /&gt;&lt;br /&gt;The first example works by having 'set /p=.' output the '.', then get a response from the output of &amp;nbsp;an empty 'echo' statement piped into the command. The response from echo is discarded, because there is no variable defined for the '=' in the 'set' statement. The second example works by redirecting the 'nul' device into the 'set' statement.&lt;br /&gt;&lt;br /&gt;Each time the statement is executed, another dot is output on the same line. This technique could be&amp;nbsp;used&amp;nbsp;to make a progress bar in a batch file, e.g. each time through a 'for /f' loop.&lt;br /&gt;&lt;br class="Apple-interchange-newline" /&gt;The statement could also be wrapped in an if-else block to flag errors, e.g.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;if %foo% equ 1 (&lt;br /&gt;    &amp;lt;nul set /p=.&lt;br /&gt;) else (&lt;br /&gt;    &amp;lt;nul set /p=F&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The output is a series of dots for success, with F's marking failures:&lt;br /&gt;&lt;code&gt;....F...F.&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Big thanks to&amp;nbsp;&lt;a href="http://stackoverflow.com/users/217711/arnep"&gt;arnep&lt;/a&gt;&amp;nbsp;for this elegant solution.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://chrome.google.com/webstore/detail/pengoopmcjnbflcjbmoeodbmoflcgjlk" style="font-size: 13px;"&gt;'via Blog this'&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5038542936609855231?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/05/windows-batch-echo-without-new-line.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-6708118714303690218</guid><pubDate>Wed, 09 May 2012 16:57:00 +0000</pubDate><atom:updated>2012-05-09T10:27:11.997-07:00</atom:updated><title>Ruby 1.9.2 load path update</title><description>I encountered an odd error when I changed the "load" statement to "require" in section 1.3.3 on page 19 of David Black's book The Well Grounded Rubyist. &lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As of Ruby 1.9.2, the current directory, ".", was &lt;a href="http://stackoverflow.com/questions/2900370/why-does-ruby-1-9-2-remove-from-load-path-and-whats-the-alternative"&gt;removed from the load path for security reasons&lt;/a&gt;.&amp;nbsp;The load path is stored in the global variable "$:", which you can display by running the command 'ruby -e puts $:'&lt;br /&gt;&lt;br /&gt;The effect of this change means the step on page 19, changing load "loadee.rb" to require "load" will fail with an error:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;'require': cannot load such file -- loadee (LoadError)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The solution is to either add the current directory, './loadee', or use require_relative 'loadee'.&amp;nbsp;I hope this helps anyone else who puzzled over that error.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-6708118714303690218?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/05/ruby-192-load-path-update.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-6537891696025608649</guid><pubDate>Fri, 04 May 2012 00:12:00 +0000</pubDate><atom:updated>2012-05-03T17:12:58.546-07:00</atom:updated><title>DRY is for software, not for humans</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-AoyyDcBJZr4/T6MdKPx-5aI/AAAAAAAAGQs/P5QvJ-_bZz4/s1600/acro_stamps.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-AoyyDcBJZr4/T6MdKPx-5aI/AAAAAAAAGQs/P5QvJ-_bZz4/s1600/acro_stamps.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Right now I'm stepping through a manual testing procedure provided as a PDF document, using Acrobat Standard to make comments (It's the process, don't ask why).&lt;br /&gt;&lt;br /&gt;The fun part is stamping each step with the big green checkmark or the big red "X" as I complete each step.&lt;br /&gt;&lt;br /&gt;I'm on step 368. In the interest of saving a few keystrokes/bytes/pages, Step 368 tells me to "Repeat steps 132 through 138." Step 368 also tells me what values to use for this section instead of the values that were used in steps 132 through 138.&lt;br /&gt;&lt;br /&gt;Great, I have to split the screen (took a while to find that command, why can't I just double-click a toggle on the pane containing the page?), then scroll the top half back to find step 138, then mentally substitute the new values for the old ones, while eyeballing the HMI to make sure I'm clicking the right buttons and fields.&lt;br /&gt;&lt;br /&gt;This is &lt;a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself"&gt;DRY&lt;/a&gt; for humans. I think Don't Repeat Yourself is great for software. Who wants to chase around through sixteen different configuration files or print statements to change a value? But humans benefit from repetition, especially in a tedious list of test steps.&lt;br /&gt;&lt;br /&gt;Yes, we use automated testing on the application level. This is more functional testing - do the right values show in the right fields (are the fields even there to begin with?), can I click a button, does the right thing happen... stuff that's tricky to automate and stuff that automation might not catch. When I have to stop the flow, scroll up through screen after screen of identical-looking steps, find the old steps, substitute the new values, make sure I don't lose my place, well, it's no wonder I go off and rant about it.&lt;br /&gt;&lt;br /&gt;Now the troubling thing is, the test procedure document was generated by an application that sucks in XML data files that spell out the content of each step, then spits out the PDF all nicely formatted and tabulated.&lt;br /&gt;&lt;br /&gt;For the sake of exercising a few more CPU cycles, the scripts could include the repeated steps from a template, substituting in the new values, thus saving my limited brain cycles for understanding why the HMI doesn't match up to the values in the steps. Or something &lt;a href="http://www.cbc.ca/news/technology/story/2012/05/03/rim-blackberry-keyboard-operating-system.html"&gt;more important&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-6537891696025608649?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/05/dry-is-for-software-not-for-humans.html</link><author>noreply@blogger.com (Philip Steiner)</author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-AoyyDcBJZr4/T6MdKPx-5aI/AAAAAAAAGQs/P5QvJ-_bZz4/s72-c/acro_stamps.png' height='72' width='72'/><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-174248362801698485</guid><pubDate>Fri, 27 Apr 2012 21:12:00 +0000</pubDate><atom:updated>2012-04-27T15:50:19.513-07:00</atom:updated><title>Where is my Cygwin whereis?</title><description>THE useful&amp;nbsp;&lt;a href="http://ss64.com/bash/whereis.html"&gt;whereis&lt;/a&gt;&amp;nbsp;command was&amp;nbsp;AWOL from my most recent&amp;nbsp;&lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt;&amp;nbsp;install.&amp;nbsp;As&amp;nbsp;&lt;a href="http://blog.arithm.com/2009/12/14/cygwin-more/"&gt;blog.arithm&lt;/a&gt;&amp;nbsp;mentions you can this and many more Unix-y commands from&amp;nbsp;the&amp;nbsp;&lt;a href="http://freshmeat.net/projects/util-linux/"&gt;util-linux&lt;/a&gt;&amp;nbsp;package, "a suite of essential utilities for any Linux system":&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;addpart, agetty, blockdev, cal, cfdisk, chfn, chkdupexe, chrt, chsh, col, colcrt, colrm, column, ctrlaltdel, cytune, ddate, delpart, display-services, dmesg, elvtune, fastboot, fasthalt, fdformat, fdisk, flock, fsck.cramfs, fsck.minix, getopt, halt, hexdump, hwclock, initctl, ionice, ipcrm, ipcs, isosize, kill, last, line, logger, login, look, losetup, mcookie, mesg, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap, more, mount, namei, need, newgrp, partx, pg, pivot_root, provide, ramsize, raw, rdev, readprofile, reboot, rename, renice, reset, rev, rootflags, script, scriptreplay, setsid, setterm, sfdisk, shutdown, simpleinit, swapoff, swapon, taskset, tailf, tunelp, ul, umount, vidmode, vipw, wall, &lt;b&gt;whereis&lt;/b&gt;, and write&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-174248362801698485?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/04/restore-linux-utilities-to-cygwin.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-6326351312220294271</guid><pubDate>Fri, 13 Apr 2012 16:08:00 +0000</pubDate><atom:updated>2012-04-27T15:51:18.125-07:00</atom:updated><title>iPads</title><description>Usually I'm the only one reading an iPad on my daily bus commute. This&amp;nbsp;morning, I spotted no fewer than three other guys (yes, guys) tapping away on&amp;nbsp;various iPad models. Steve Jobs must be smiling down from Heaven.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-6326351312220294271?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/04/ipads.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-5961109306169453426</guid><pubDate>Wed, 11 Apr 2012 21:42:00 +0000</pubDate><atom:updated>2012-04-11T14:42:42.075-07:00</atom:updated><title>Parsing Large XML Documents in Ruby</title><description>Bill Rawlinson tells how in&amp;nbsp;&lt;a href="http://code.rawlinson.us/2012/01/parsing-large-xml-documents-in-ruby.html?spref=bl"&gt;Parsing Large XML Documents in Ruby&lt;/a&gt;. The takeaway: use &lt;a href="http://nokogiri.org/"&gt;Nokogiri&lt;/a&gt; despite the state of its documentation. Bill gives us an example code listing as well. Thanks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5961109306169453426?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/04/parsing-large-xml-documents-in-ruby.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-1836292724134294476</guid><pubDate>Wed, 11 Apr 2012 20:28:00 +0000</pubDate><atom:updated>2012-04-11T13:28:53.661-07:00</atom:updated><title>Gmail: how to remove "on behalf of" from sender name</title><description>I use my Gmail account to send email from my philip@psteiner.com email account, but I noticed the recipient sees it as sent from me "on behalf of" my Gmail account, i.e.&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;b&gt;From:&lt;/b&gt; dontusethisemail@gmail.com on behalf of Philip Steiner &amp;lt;philip@psteiner.com&amp;gt;&lt;/blockquote&gt;The tricky thing for me is that my psteiner.com domain is hosted on Google Apps, so I have no mail server available at the psteiner.com domain, nor do I want to pay bucks every month just for this service - at least not when Google can provide it for free.&lt;br /&gt;&lt;br /&gt;Luckily &lt;a href="http://blog.stevemould.com/"&gt;Steve Mould&lt;/a&gt; over at LifeHacker was generous enough to share his solution for&amp;nbsp;&lt;a href="http://lifehacker.com/5733436/use-a-google-apps-account-to-authenticate-outgoing-mail-from-your-regular-gmail-account"&gt;configuring Gmail&lt;/a&gt;&amp;nbsp;to use Google Apps as the outgoing mail server. Huzzah!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-1836292724134294476?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/04/gmail-how-to-remove-on-behalf-of-from.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-1502693528140980841</guid><pubDate>Wed, 11 Apr 2012 20:00:00 +0000</pubDate><atom:updated>2012-04-11T13:00:10.884-07:00</atom:updated><title>How to configure cygwin to use ctrl + arrow to move cursor a word at a time</title><description>&lt;a href="http://trumaze.blogspot.com/2011/04/how-to-configure-cygwin-to-use-ctrl.html?spref=bl"&gt;TruMaze&lt;/a&gt;&amp;nbsp;points the way to DOS box fumble-finger compatibility&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-1502693528140980841?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/04/how-to-configure-cygwin-to-use-ctrl.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-6508221109647803109</guid><pubDate>Wed, 11 Apr 2012 03:11:00 +0000</pubDate><atom:updated>2012-04-10T20:11:29.562-07:00</atom:updated><title>Curses, Cygwin! Let's be clear...</title><description>Out of the box &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt;&amp;nbsp;doesn't include the 'clear' command. Hmm.&amp;nbsp;&lt;a href="http://www.wisdomandwonder.com/link/3290/clearing-the-terminal-screen-in-cygwin"&gt;Install ncurses to get it&lt;/a&gt;.&amp;nbsp;Then add&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;alias cls='clear' &lt;/span&gt;&lt;span style="font-family: inherit;"&gt;to your &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;.bashrc&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;or &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;.bash_profile.&amp;nbsp;&lt;/span&gt;Also learned bash responds to Control-L to clear the screen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-6508221109647803109?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/04/curses-cygwin-lets-be-clear.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-983196986755038491</guid><pubDate>Mon, 09 Apr 2012 05:00:00 +0000</pubDate><atom:updated>2012-04-22T21:44:16.418-07:00</atom:updated><title>Rails 3 on Ubuntu 11.10 on VirtualBox VM on Windows 7</title><description>Okay, so Rails runs pretty well for development on Windows 7 using &lt;a href="http://railsinstaller.org/"&gt;RailsInstaller&lt;/a&gt;, but you're still running in a Windows environment. This is apparently now tolerable, but &lt;a href="http://stackoverflow.com/questions/4673876/ruby-on-rails-development-on-windows"&gt;still not recommended&lt;/a&gt;, for two-fisted Rails development. I figure the best approach is to set up a development environment that's similar to the deployment environment. The defacto &lt;a href="http://railsmachine.com/managed-hosting/"&gt;commercial&lt;/a&gt;&amp;nbsp;&lt;a href="https://engineyard.zendesk.com/entries/21009842-engine-yard-technology-stack"&gt;Rails&lt;/a&gt;&amp;nbsp;stacks now consists of some Linux distro, Passenger, Rails, MySQL and Git, so that's what I'll approach in this setup.&lt;br /&gt;&lt;br /&gt;In the spirit of (and cribbing from) &lt;a href="http://alandjackson.wordpress.com/2011/04/19/developing-rails-3-on-windows-with-an-ubuntu-virtual-machine/"&gt;notes that Alan D. Jackson made&lt;/a&gt;&amp;nbsp;while setting up Rails 3 on Windows with Ubuntu on a VM, here's my experience doing the same thing:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If you don't have it already, download and install &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html"&gt;Putty&lt;/a&gt;&amp;nbsp;or &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; for the ssh client&lt;/li&gt;&lt;li&gt;Download&amp;nbsp;&lt;a href="https://www.virtualbox.org/wiki/downloads/"&gt;VirtualBox for Windows Hosts&lt;/a&gt;.&amp;nbsp;Based on&amp;nbsp;&lt;a href="http://www.computechworld.com/2012/03/desktop-virtualization-smackdown-parallels-vs-vmware-vs-virtualbox/"&gt;this comparison of VMs&lt;/a&gt;, VirtualBox is the best choice for this application.&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Install VirtualBox. I installed version 4.1.12.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Not knowing any better, I left all of the defaults selected. We'll soon see if that was the right choice.&lt;/li&gt;&lt;li&gt;The install wizard proceeded as expected. Let it start VirtualBox.&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Download the latest&amp;nbsp;&lt;a href="http://www.ubuntu.com/download/ubuntu/download"&gt;Ubuntu&lt;/a&gt;&amp;nbsp;ISO file.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Hrm, first question. I'm running Windows 7 64-bit, so I &lt;i&gt;guess &lt;/i&gt;that means I want 64-bit Ubuntu? I don't know, the VirtualBox setup wizard lets me select either 32- or 64-bit. However, the &lt;a href="http://www.ubuntu.com/download/ubuntu/download"&gt;Ubuntu download page&lt;/a&gt; recommends 32-bit. I'll go with the 32-bit for now.&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Set up a new VM&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Click the "New" VM button, name it "Rails 3.2 on Ubuntu". Helpfully VB selects Ubuntu from the OS list.&lt;/li&gt;&lt;li&gt;Memory: the default is 512Mb. Alan recommends 384. Since I have 3Gb available, I'll splurge on 512Mb.&lt;/li&gt;&lt;li&gt;Virtual Hard Disk: create a new 8Gb disk.&lt;/li&gt;&lt;li&gt;Virtual Disk Creation Wizard: leave the default "VDI" selected as recommended&lt;/li&gt;&lt;li&gt;Virtual Disk Storage Details: leave the default "Dynamically allocated" selected as recommended&lt;/li&gt;&lt;li&gt;Virtual Disk File Location and Size: leave the default values selected&lt;/li&gt;&lt;li&gt;Review the Summary, then click Create&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;File -&amp;gt; Virtual Media Manager&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Select CD/DVD Images&lt;/li&gt;&lt;li&gt;Add the Ubuntu ISO image&lt;/li&gt;&lt;li&gt;click Close&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Select the new VM image -&amp;gt; Settings&amp;nbsp;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Storage&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Storage Tree: Select IDE Controller -&amp;gt; Empty&lt;/li&gt;&lt;li&gt;Attributes: click the tiny little CD image to right of the "CD/DVD Drive" dropdown and select the ubuntu ISO image&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Network&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Select Adapter 2 tab&lt;/li&gt;&lt;li&gt;Check Enable Network Adapter&lt;/li&gt;&lt;li&gt;Select Host-only Adapter&lt;/li&gt;&lt;li&gt;Click OK&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;li&gt;Start the VM, then select "Install Ubuntu".&lt;/li&gt;&lt;li&gt;Let the Ubuntu installer do its thing, then reboot the VM.&lt;/li&gt;&lt;li&gt;After the VM reboots, install guest additions to get shared folder?&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.noobslab.com/2012/03/configure-samba-sharing-between-ubuntu.html"&gt;Install samba&lt;/a&gt;&amp;nbsp;(Windows file sharing)&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;sudo apt-get install samba samba-common&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;sudo apt-get install python-glade2&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;sudo apt-get install system-config-samba&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Open Samba Server Configuration from Ubuntu desktop -&amp;gt; Dash home -&amp;gt; Applications -&amp;gt; Samba&lt;/li&gt;&lt;li&gt;In Samba Server Configuration, select File -&amp;gt; Add Share -&amp;gt; Basic&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Directory: /home/[your name]&lt;/li&gt;&lt;li&gt;Leave share name and description as is&lt;/li&gt;&lt;li&gt;Select Writable and Visible&lt;/li&gt;&lt;li&gt;On the Access tab, select Allow access to everyone. You'll still have to logon as the user from Windows&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;In Preferences -&amp;gt; Server Settings,&amp;nbsp;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;change the workgroup name to your PC's workgroup name. You can find the Windows workgroup name in the Windows "System" control panel&lt;/li&gt;&lt;li&gt;Leave all of the other settings at their defaults.&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;In Preferences -&amp;gt; Samba Users, you might have to set the Samba password for the user account&lt;/li&gt;&lt;li&gt;Close Samba&lt;/li&gt;&lt;li&gt;In windows, browse to \\server\user (e.g. \\ubuntu\philip), then enter the username/password when prompted&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Install Open SSH Server&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;sudo apt-get install openssh-server&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;ssh from Windows desktop via Cygwin or Putty: ssh you@your_ubuntu&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/820517/bashrc-at-ssh-login" style="font-family: inherit;"&gt;Create a .bash_profile file&lt;/a&gt;&lt;span style="font-family: inherit;"&gt; to source .bashrc for aliases, etc. when you log in via ssh:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;if [ -f ~/.bashrc ]; then&lt;br /&gt;&amp;nbsp; &amp;nbsp; . ~/bashrc&lt;br /&gt;fi&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Dev setup&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Install aptitude (if needed): &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;sudo apt-get install aptitude&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Install basic packages:  &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;sudo aptitude -y install curl git-core build-essential zlib1g-dev libssl-dev libyaml-dev libreadline5-dev sqlite3 libsqlite3-dev autoconf automake nodejs&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;a href="http://beginrescueend.com/" style="font-family: inherit;"&gt;Install rvm&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;(Ruby Version Manager)&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;curl -L get.rvm.io | bash -s stable&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Reload shell (or close and reopen it): &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;source ~/.bash_profile&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Add rvm setup to .bashrc file:&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;if [[ -s "$HOME/.rvm/scripts/rvm" ]]; then source "$HOME/.rvm/scripts/rvm" ; fi&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Install Ruby and Rails. Insert the latest version numbers:&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;rvm install 1.9.3 &amp;amp;&amp;amp; rvm --default ruby-1.9.3 &amp;amp;&amp;amp; gem install rails sqlite3&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Smoke test:&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;philip@ubi:~$ ruby -v &amp;amp;&amp;amp; rails -v&lt;br /&gt;ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux]&lt;br /&gt;Rails 3.2.3&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Create a Rails test site:&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;mkdir ~/sites &amp;amp;&amp;amp; cd ~/sites&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;rails new rails_app &amp;amp;&amp;amp; cd rails_app &amp;amp;&amp;amp; rails s&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: inherit;"&gt;Browse to http://yoursite:3000/, if all goes well you'll see the default Rails home page&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;a href="http://nowfromhome.com/virtualbox-slow-network-from-windows-host-to-linux-guest/" style="font-family: inherit;"&gt;Make Rails faster&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;!&amp;nbsp;Edit this setting in ~/.rvm/rubies/ruby-1.9.X-pXXX/lib/ruby/1.9.X/webrick/config.rb to speed up browsing the rails app from the Windows host:&lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;# :DoNotReverseLookup =&amp;gt; nil,&lt;br /&gt;:DoNotReverseLookup =&amp;gt; true,&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Now the app can be edited from the Samba share on Windows.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-983196986755038491?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/04/rails-3-on-windows-ubuntu-on-virtualbox.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>3</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-636407271554112998</guid><pubDate>Tue, 03 Apr 2012 23:02:00 +0000</pubDate><atom:updated>2012-04-04T09:53:04.909-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Rails</category><title>How to replace WEBrick with Thin for Windows development</title><description>WEBrick still seems awful slow on Windows. Last time I played with Rails, Mongrel was the goto replacement for WEBrick. Alas, Mongrel's no longer supported. So then I learned &lt;a href="http://en.wikipedia.org/wiki/Mongrel_(web_server)#Future_in_the_Rails_world"&gt;Thin is the new Mongrel&lt;/a&gt;. Here's how to get it working on Windows:&lt;br /&gt;&lt;br /&gt;First, you might have to do this to&amp;nbsp;&lt;a href="http://stackoverflow.com/a/4200880/234235"&gt;install&lt;/a&gt;&amp;nbsp;&lt;a href="http://code.macournoyer.com/thin/"&gt;thin&lt;/a&gt;&amp;nbsp;on Windows:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;gem install eventmachine --pre&lt;br /&gt;gem install thin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;thanks to &lt;a href="http://stackoverflow.com/users/405017/phrogz"&gt;frogz&lt;/a&gt;&lt;/i&gt;&lt;/blockquote&gt;Then add the line&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;gem 'thin'&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;&amp;nbsp;to your Gemfile to make Thin the default server when you run &lt;/span&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;rails s&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;, &lt;i&gt;et voila:&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;=&amp;gt; Booting Thin&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;=&amp;gt; Rails 3.2.1 application starting in development on http://0.0.0.0:3000&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;=&amp;gt; Call with -d to detach&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;=&amp;gt; Ctrl-C to shutdown server&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&amp;gt; Thin web server (v1.3.1 codename Triple Espresso)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&amp;gt; Maximum connections set to 1024&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;gt;&amp;gt; Listening on 0.0.0.0:3000, CTRL+C to stop&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-636407271554112998?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/04/how-to-replace-webrick-with-thin-for.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-5612500362061306410</guid><pubDate>Tue, 03 Apr 2012 05:28:00 +0000</pubDate><atom:updated>2012-04-04T09:53:04.896-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Rails</category><title>Rails: How to kill WEBrick 1.3.1 on Windows 7</title><description>This worked for me, using RailsInstaller on Windows 7 -&amp;nbsp;launch the WEBrick process into a separate command window by using the &lt;b&gt;start &lt;/b&gt;command:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;C:\Sites\myapp&amp;gt;start "rails"&amp;nbsp;rails s&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;This will open a new command window entitled "rails - rails s", running the WEBrick process, leaving the original command window available for use.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;When you're ready to kill WEBrick, just close the "rails" command window. Brutal, but effective.&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-5612500362061306410?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/04/rails-how-to-kill-webrick-131-on.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-8657555080516361189</guid><pubDate>Mon, 02 Apr 2012 20:33:00 +0000</pubDate><atom:updated>2012-04-02T21:39:42.204-07:00</atom:updated><title>Is Node.js the next Big Next Thing?</title><description>Andrew Chen explains that&amp;nbsp;&lt;a href="http://andrewchenblog.com/2012/04/01/visual-basic-php-rails-is-node-js-next/"&gt;Node.js might be poised to be the next Big Next Thing for web apps&lt;/a&gt;. He asserts that "Rails, PHP and Visual Basic were all successful&amp;nbsp;because&amp;nbsp;they made it easy to build form-based applications," and if the Node.js community can make something as easy as&amp;nbsp;&lt;a href="http://media.rubyonrails.org/video/rails_take2_with_sound.mov"&gt;How to build a blog engine in 15 min with Rails&lt;/a&gt;, then it may pick up real traction.&lt;br /&gt;&lt;br /&gt;Or it may become just a footnote in web history - anyone remember &lt;a href="http://en.wikipedia.org/wiki/ColdFusion"&gt;ColdFusion&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.cynic.org.uk/photos/ap/small/20091127/dsc_1444.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.cynic.org.uk/photos/ap/small/20091127/dsc_1444.jpg" width="239" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="text-align: -webkit-auto;"&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;1949 torus for fusion experiments, Clarendon Laboratory, Oxford courtesy&amp;nbsp;&lt;a href="http://www.cynic.org.uk/"&gt;Robin Stevens&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-8657555080516361189?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/04/is-nodejs-next-big-next-thing.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-2322734929866812659</guid><pubDate>Wed, 28 Mar 2012 17:50:00 +0000</pubDate><atom:updated>2012-03-31T14:25:10.060-07:00</atom:updated><title>Rats in the attic</title><description>Sometimes you have to deal with the rats in the attic.&lt;br /&gt;&lt;br /&gt;A coworker dropped by to brainstorm a perplexing problem he noticed in the report he was working on. The report is a PDF document generated from XML using XSLT and Apache FOP. An index table appears on the last page of the report, listing the name and page number of each section in the report. All of the sections were listed with the correct page number, except the section output on page 2 of the report, which the index showed as starting on page 1.&lt;br /&gt;&lt;br /&gt;After tracing through the legacy XSLT code for a couple of minutes, we realized that the section start was flagged in the XSL-FO code in an "invisible" table that happened to come out at the very bottom of page 1, forcing the "visible" table over to page 2. Thus the table of contents correctly but deceptively showed the section starting on page 1.&amp;nbsp;The code base that generates this report is several years old, and it has gone through multiple hands, as such code often does, so we had no idea why&amp;nbsp;the original designers chose to output the section start flag in this way.&lt;br /&gt;&lt;br /&gt;We came up with a couple of possible fixes he could to try, like eliminating the "invisible" table and moving the flag into the visible table, or if the invisible table was really necessary, apply a "keep with next" attribute so it would always stick to its corresponding section.&lt;br /&gt;&lt;br /&gt;My coworker then said the problem reminded him of a &lt;a href="http://www.youtube.com/watch?v=ZrBbMZk4vY4"&gt;scene from Bad Boys 2&lt;/a&gt;&amp;nbsp;(caution, link is &lt;b&gt;not&lt;/b&gt; PG or SFW!), wherein Cuban drug lord Johnny Tapia, crawling through the attic where he stashed a mountain of stolen cash, discovers a nest of huge rats gnawing through the piles of loot. After blasting the rats with a cannon-sized revolver, Tapia exclaims to his henchman, "Carlos, this is a stupid f****ing problem to have, &lt;i&gt;but&lt;/i&gt;, it is a problem, nonetheless!"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5625478444715094438-2322734929866812659?l=www.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/03/rats-in-attic.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>2</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-5106501662313646978</guid><pubDate>Thu, 16 Feb 2012 00:43:00 +0000</pubDate><atom:updated>2012-02-15T16:43:47.722-08:00</atom:updated><title>A Fundamental Law of the Universe</title><description>&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.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/02/fundamental-law-of-universe.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-3934625221071697253</guid><pubDate>Wed, 11 Jan 2012 23:01:00 +0000</pubDate><atom:updated>2012-04-24T20:28:54.709-07:00</atom:updated><title>How to write regexs matches that span multiple lines in Visual Studio search</title><description>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;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;xsl:apply-templates select="Alph" mode="frobit"/&gt;&lt;br /&gt;&amp;lt;xsl:apply-templates select="Bob" mode="zap"/&gt;&lt;br /&gt;&amp;lt;xsl:apply-templates select="Cam"/&gt;&lt;br /&gt;&lt;/pre&gt;I want to match the two statements with the &lt;code class="prettyprint"&gt;mode="frobit"&lt;/code&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;code class="prettyprint"&gt;mode="zap"&lt;/code&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;select.*\n@.*mode="frobit"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The first bit, &lt;code class="prettyprint"&gt;select.*\n,&lt;/code&gt; is standard Perlish for &amp;quot;match from the word &lt;code class="prettyprint"&gt;select&lt;/code&gt; to the end of line character, &lt;code class="prettyprint"&gt;\n&lt;/code&gt;.&amp;quot;&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;code class="prettyprint"&gt;mode="frobit"&lt;/code&gt;, so the match in this case would make one giant match, including all of the text from &lt;code class="prettyprint"&gt;select=&amp;quot;Alph&amp;quot;&lt;/code&gt; all the way to the last &lt;code class="prettyprint"&gt;&amp;quot;frobit&amp;quot;&lt;/code&gt; 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.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/01/how-to-write-regexs-matches-that-span.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-5988289292911713860</guid><pubDate>Sat, 07 Jan 2012 03:48:00 +0000</pubDate><atom:updated>2012-01-06T19:48:53.938-08:00</atom:updated><title>How to clean up Windows Media Player</title><description>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.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/01/how-to-clean-up-windows-media-player.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-9140594222778812914</guid><pubDate>Tue, 03 Jan 2012 23:51:00 +0000</pubDate><atom:updated>2012-01-03T15:51:56.574-08:00</atom:updated><title>How to restore TortoiseSVN icons in Windows Explorer</title><description>&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.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2012/01/how-to-restore-tortoisesvn-icons-in.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-37489927453246428</guid><pubDate>Thu, 01 Dec 2011 20:56:00 +0000</pubDate><atom:updated>2011-12-01T13:22:07.885-08:00</atom:updated><title>Open Windows Explorer from the command line with a Folder tree</title><description>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.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2011/12/open-windows-explorer-from-command-line.html</link><author>noreply@blogger.com (Philip Steiner)</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></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-4254719833406471732</guid><pubDate>Sun, 20 Nov 2011 04:32:00 +0000</pubDate><atom:updated>2011-11-19T20:32:23.037-08:00</atom:updated><title>Good advice</title><description>&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.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2011/11/good-advice.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-920163214213612412</guid><pubDate>Wed, 17 Aug 2011 15:24:00 +0000</pubDate><atom:updated>2011-08-17T08:24:03.026-07:00</atom:updated><title>The Anti-Car Movement</title><description>&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.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2011/08/anti-car-movement.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-32742155650609852</guid><pubDate>Sat, 30 Jul 2011 20:04:00 +0000</pubDate><atom:updated>2011-07-30T13:04:43.931-07:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>Writing</category><title>Foolish things done in a moment of weakness</title><description>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.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2011/07/foolish-things-are-done-in-moment-of.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-5625478444715094438.post-8119064202185401679</guid><pubDate>Mon, 25 Apr 2011 14:59:00 +0000</pubDate><atom:updated>2011-04-25T08:02:33.166-07:00</atom:updated><title>Failure</title><description>&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.psteiner.com' alt='' /&gt;&lt;/div&gt;</description><link>http://www.psteiner.com/2011/04/failure.html</link><author>noreply@blogger.com (Philip Steiner)</author><thr:total>0</thr:total></item></channel></rss>
