<?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-17460230</id><updated>2011-12-29T01:59:10.064-08:00</updated><category term='speech'/><category term='Opera'/><category term='project management'/><category term='IIS 7'/><category term='scrum'/><category term='Ruby'/><category term='computers'/><category term='software'/><category term='Asp.Net'/><category term='Silverlight'/><category term='HTML'/><title type='text'>On Software...</title><subtitle type='html'>Musings on programming and software development</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.grantkeiser.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.grantkeiser.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Grant Keiser</name><uri>http://www.blogger.com/profile/01175352912402705765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17460230.post-850823826914584013</id><published>2009-01-20T08:21:00.000-08:00</published><updated>2009-01-20T08:27:51.762-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Asp.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS 7'/><title type='text'></title><content type='html'>&lt;span style="font-weight: bold;"&gt;Problem: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You just received your brand new Vista 64 bit machine and you try to develop an Asp.Net application using IIS 7.   The error "is not a valid Win32 application" is displayed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Open a command window and paste this in:&lt;br /&gt;&lt;br /&gt;cscript %SystemDrive%\inetpub\AdminScripts\adsutil.vbs set w3svc/AppPools/Enable32bitAppOnWin64 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Google Credits:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cassidy.dk/blog/sitecore/2008/06/is-not-valid-win32-application.html"&gt;http://www.cassidy.dk/blog/sitecore/2008/06/is-not-valid-win32-application.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eggheadcafe.com/articles/20050417.asp"&gt;http://www.eggheadcafe.com/articles/20050417.asp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17460230-850823826914584013?l=blog.grantkeiser.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.grantkeiser.net/feeds/850823826914584013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17460230&amp;postID=850823826914584013' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/850823826914584013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/850823826914584013'/><link rel='alternate' type='text/html' href='http://blog.grantkeiser.net/2009/01/problem-you-just-get-brand-new-vista-64.html' title=''/><author><name>Grant Keiser</name><uri>http://www.blogger.com/profile/01175352912402705765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17460230.post-4193481198338573445</id><published>2009-01-19T08:17:00.000-08:00</published><updated>2009-01-19T08:30:52.954-08:00</updated><title type='text'></title><content type='html'>To replace text in multiple files in PowerShell:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;  $localPath = $dirPath&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;  cd $localPath&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;  $files = dir * -Include *.Master&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;  foreach ( $file in $files   )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;        $path = $file.fullname&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;        $text = [System.IO.File]::ReadAllText($path)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;        $new = $text.Replace("vs:Form", "form")&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;        Set-Content $path -Value $new&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;    }&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17460230-4193481198338573445?l=blog.grantkeiser.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.grantkeiser.net/feeds/4193481198338573445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17460230&amp;postID=4193481198338573445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/4193481198338573445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/4193481198338573445'/><link rel='alternate' type='text/html' href='http://blog.grantkeiser.net/2009/01/to-replace-text-in-multiple-files-in.html' title=''/><author><name>Grant Keiser</name><uri>http://www.blogger.com/profile/01175352912402705765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17460230.post-4882840350228495115</id><published>2007-12-31T13:14:00.001-08:00</published><updated>2007-12-31T13:14:16.934-08:00</updated><title type='text'></title><content type='html'>Test post....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17460230-4882840350228495115?l=blog.grantkeiser.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.grantkeiser.net/feeds/4882840350228495115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17460230&amp;postID=4882840350228495115' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/4882840350228495115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/4882840350228495115'/><link rel='alternate' type='text/html' href='http://blog.grantkeiser.net/2007/12/test-post.html' title=''/><author><name>Grant Keiser</name><uri>http://www.blogger.com/profile/01175352912402705765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17460230.post-7928990414812225222</id><published>2007-10-23T19:37:00.001-07:00</published><updated>2007-10-23T20:06:12.143-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='speech'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Opera'/><title type='text'></title><content type='html'>So I've read some semi-interesting things on speech recognition software, and have wanted to experiment with it. When I fired up my latest &lt;a href="http://www.opera.com/"&gt;favorite browser&lt;/a&gt; tonight I was told a new version was available.  I downloaded it and quickly glanced through the new features, noticing something called Opera Voice, which promised to read to me!&lt;br /&gt;&lt;br /&gt;I couldn't resist, and ran out to Best Buy and bought a "Premium Stereo Headset" by Logitech.  (This is where a real blogger, one who really cared about his three readers, would find the actual model and supply a link.)  Now while surfing or reading blogs with Google Reader, I can simply highlight some text, hold down my Scroll Lock key, and order, "Opera, speak"!  I tend to say this sternly, like I'm talking to a big I think might follow my orders, but I found out I don't need all that when my wife calmly stated the same command in her normal speaking voice.  So now I can get a bunch of reading done on the web while resting my eyes, and I even understand most of what the Opera guy is saying.  Click &lt;a href="http://www.archive.org/download/OperaReader/OperaReader_64kb.m3u"&gt;here&lt;/a&gt; for a sample of that Opera guy reading one of &lt;a href="http://computerzen.com/"&gt;Scott Hanselman's&lt;/a&gt; recent posts on home networking. The real, live Opera guy sounds even better, given that I used Windows Sound Recorder to capture the audio.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17460230-7928990414812225222?l=blog.grantkeiser.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.grantkeiser.net/feeds/7928990414812225222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17460230&amp;postID=7928990414812225222' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/7928990414812225222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/7928990414812225222'/><link rel='alternate' type='text/html' href='http://blog.grantkeiser.net/2007/10/so-ive-seen-read-some-semi-interesting.html' title=''/><author><name>Grant Keiser</name><uri>http://www.blogger.com/profile/01175352912402705765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17460230.post-3395546714042785895</id><published>2007-09-25T12:58:00.000-07:00</published><updated>2007-09-25T14:11:31.754-07:00</updated><title type='text'></title><content type='html'>Asp.Net Validators Gotcha&lt;br /&gt;&lt;br /&gt;Today I was working with an Asp.Net 2.0 Web Project&lt;span style="font-family: monospace;"&gt;.&lt;/span&gt;  I debugged the javascript with firebug, looked at the web.configs, and finally figured it out. I was using the "New in Asp.Net 2.0" property ValidationGroup, and failed to indicate the group on the button.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17460230-3395546714042785895?l=blog.grantkeiser.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.grantkeiser.net/feeds/3395546714042785895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17460230&amp;postID=3395546714042785895' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/3395546714042785895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/3395546714042785895'/><link rel='alternate' type='text/html' href='http://blog.grantkeiser.net/2007/09/asp.html' title=''/><author><name>Grant Keiser</name><uri>http://www.blogger.com/profile/01175352912402705765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17460230.post-4731576563210622382</id><published>2007-09-07T15:36:00.000-07:00</published><updated>2007-09-07T19:45:24.395-07:00</updated><title type='text'></title><content type='html'>If you ever surf the web, then you probably know the feeling of following links around, with each destination more interesting than the previous, until, after a half hour, or maybe longer (on good days) you think to yourself, "What the hell was I doing anyway?".  Well I thought I'd quickly share my last link journey (can it really be called that, I only have 4 links).&lt;br /&gt;&lt;br /&gt;I started reading some blogs, which may be, by the way, the laziest, least effective, but most interesting way to &lt;a href="http://www.hanselman.com/blog/HanselminutesPodcast72BeABetterDeveloperInSixMonths.aspx"&gt;be a better programmer&lt;/a&gt;.  And interestingly enough, the last link on this post is also how my journey started.  In reading a recent post of &lt;a href="http://www.hanselman.com/blog/"&gt;Mr. Hanselman&lt;/a&gt; he linked to a&lt;a href="http://www.google.com/search?q=programmer+intent&amp;rls=com.microsoft:*&amp;amp;amp;ie=UTF-8&amp;oe=UTF-8&amp;amp;startIndex=&amp;amp;startPage=1"&gt; Google search&lt;/a&gt;.  The top two results of said search both were, surprisingly enough, links to posts by Mr. Hanselman himself. (Do you think he realized that, when he provided the link?)  I digress.&lt;br /&gt;&lt;br /&gt;The first result of said search was &lt;a href="http://www.hanselman.com/blog/ProgrammerIntentOrWhatYoureNotGettingAboutRubyAndWhyItsTheTits.aspx"&gt;this post&lt;/a&gt;, which had a link to &lt;a href="http://www.rubyrailways.com/sometimes-less-is-more/"&gt;here&lt;/a&gt;.  The post Scott linked to was enjoyable, but it linked to a &lt;a href="http://www.paulgraham.com/power.html"&gt;great article&lt;/a&gt;, and it seems like these deep dives into the web always involve Paul Graham.  What does that say about me?  Among other things, it may mean that I have similar values to Mr. Graham, minus the love of &lt;a href="http://www.paulgraham.com/lisp.html"&gt;Lisp&lt;/a&gt;,  the ambition, the money, and probably the intelligence and writing skills as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17460230-4731576563210622382?l=blog.grantkeiser.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.grantkeiser.net/feeds/4731576563210622382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17460230&amp;postID=4731576563210622382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/4731576563210622382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/4731576563210622382'/><link rel='alternate' type='text/html' href='http://blog.grantkeiser.net/2007/09/if-you-ever-surf-internet-then-you.html' title=''/><author><name>Grant Keiser</name><uri>http://www.blogger.com/profile/01175352912402705765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17460230.post-140429912129314380</id><published>2007-07-25T22:18:00.000-07:00</published><updated>2007-07-25T19:53:01.995-07:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_TsUDroOB2Z8/RqgMCvgL-VI/AAAAAAAAAA8/BlwSd3U8Oyw/s1600-h/ironruby.JPG"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_TsUDroOB2Z8/RqgMCvgL-VI/AAAAAAAAAA8/BlwSd3U8Oyw/s400/ironruby.JPG" alt="" id="BLOGGER_PHOTO_ID_5091332619993086290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tonight I'm back on my machine, playing around a little with IronRuby, Microsoft's  recently released (Pre-Alpha) ruby implementation.  I just downloaded the source, (yes I said source; it's being released under &lt;a href="http://www.microsoft.com/resources/sharedsource/licensingbasics/permissivelicense.mspx"&gt;Microsoft's Permissive Licence&lt;/a&gt;), opened the solution, and built.&lt;br /&gt;&lt;br /&gt;Here's a screen shot of IronRuby's version of irb, called rbx.exe, an interactive Ruby shell.   Notice the class return is 'mutable string', whereas in Ruby the class would just be string.  I'm guessing they're avoiding name conflicts with the .Net strings, which are, of course, immutable.  From John Lam's &lt;a href="http://www.iunknown.com/"&gt;blog&lt;/a&gt;,&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"In micro-benchmarks which measure method call performance, we are significantly faster than Ruby 1.8.6. In micro-benchmarks which measure library performance, we are on par with Ruby 1.8.6; we expect to see performance improvements in these benchmarks in the future."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;In somewhat related news, &lt;a href="http://digg.com/"&gt;Digg&lt;/a&gt; has abandoned Google for its online ad service, and chosen a young, innovative upstart, Microsoft.  Read the &lt;a href="http://www.forbes.com/feeds/ap/2007/07/25/ap3952909.html"&gt;gory details&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm not sure, but I think I actually feel good about being a Microsoft developer, at least for the moment.  Weird...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17460230-140429912129314380?l=blog.grantkeiser.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.grantkeiser.net/feeds/140429912129314380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17460230&amp;postID=140429912129314380' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/140429912129314380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/140429912129314380'/><link rel='alternate' type='text/html' href='http://blog.grantkeiser.net/2007/07/tonight-im-back-on-my-machine-playing.html' title=''/><author><name>Grant Keiser</name><uri>http://www.blogger.com/profile/01175352912402705765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_TsUDroOB2Z8/RqgMCvgL-VI/AAAAAAAAAA8/BlwSd3U8Oyw/s72-c/ironruby.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17460230.post-2587346757974561898</id><published>2007-07-18T18:50:00.000-07:00</published><updated>2007-07-18T19:01:18.590-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'></title><content type='html'>I was just made aware of a great &lt;a href="http://video.google.co.uk/videoplay?docid=-7230144396191025011"&gt;video&lt;/a&gt; on scrum, a popular agile process to help manage software projects.&lt;br /&gt;&lt;br /&gt;It's a long video, but at least watch the few minutes starting at about 41:15.  It really hit home for me, and demonstrates the exact message I've been struggling to explain for weeks.&lt;br /&gt;&lt;br /&gt;Basically, it explains how 'hurrying up' by reducing quality to meet a deadline makes all the work after that start at slower pace, or forces teams to reduce quality even further.  Good stuff...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17460230-2587346757974561898?l=blog.grantkeiser.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.grantkeiser.net/feeds/2587346757974561898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17460230&amp;postID=2587346757974561898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/2587346757974561898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/2587346757974561898'/><link rel='alternate' type='text/html' href='http://blog.grantkeiser.net/2007/07/i-was-just-made-aware-of-great-video-on.html' title=''/><author><name>Grant Keiser</name><uri>http://www.blogger.com/profile/01175352912402705765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17460230.post-5069682105421633652</id><published>2007-07-16T20:24:00.000-07:00</published><updated>2007-07-16T21:18:07.187-07:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_TsUDroOB2Z8/Rpw-XSmGcRI/AAAAAAAAAAk/b6iL37V8ecM/s1600-h/IronRubyScreenShot.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_TsUDroOB2Z8/Rpw-XSmGcRI/AAAAAAAAAAk/b6iL37V8ecM/s400/IronRubyScreenShot.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5088010248871375122" /&gt;&lt;/a&gt;&lt;br /&gt;==&gt;    I'm writing a bit of Ruby in Visual Studio tonight.  No, I'm not using Orcas, Silverlight, and the &lt;/span&gt;&lt;a style="font-family: arial; color: rgb(51, 51, 51);" href="http://www.google.com/url?sa=t&amp;ct=res&amp;amp;cd=1&amp;url=http%3A%2F%2Fblogs.msdn.com%2Fhugunin%2Farchive%2F2007%2F04%2F30%2Fa-dynamic-language-runtime-dlr.aspx&amp;amp;ei=ATecRvXlEpWQigHHsY3EBw&amp;usg=AFQjCNF39-Bw4DLjtLt6EXdeVh4e4Nus8A&amp;amp;sig2=Ltl1lIQmYnnyI7Peftx7_g"&gt;DLR&lt;/a&gt;&lt;span style="color: rgb(51, 51, 51);font-family:arial;" &gt;.  I'm using a Visual Studio 2005 add-in by a company named Saphire Steel, and this is apparently their only product.  It's called Ruby In Steel, and me likey.  Considering it's affiliated with VS, it was a fairly small download.  Once I installed and pointed Ruby in Steel to my Ruby executable location, I had a ruby project going in a couple minutes.&lt;br /&gt;&lt;br /&gt;Ruby In Steel offers intellisense, (where it can, anyway, Ruby &lt;span style="font-style: italic;"&gt;is &lt;/span&gt;dynamic), debugging, and the familiar Solution-Project setup, and support for Rails.  The professional version is $199, and includes intellisense and  a faster debugger than the developer(free) version I'm using. &lt;br /&gt;&lt;br /&gt;If you can read the ruby text above, that's one example of using Ruby's version of reflection.  I've declared a private method in my class, then invoked that method by calling send on the first element of the array returned by the private_methods method, which every object gets.  The false parameter indicates that I don't want methods from parent classes returned.  Is it me, or does this seem a little more convenient than .Net's reflection API?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17460230-5069682105421633652?l=blog.grantkeiser.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.grantkeiser.net/feeds/5069682105421633652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17460230&amp;postID=5069682105421633652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/5069682105421633652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/5069682105421633652'/><link rel='alternate' type='text/html' href='http://blog.grantkeiser.net/2007/07/im-writing-bit-of-ruby-in-visual-studio.html' title=''/><author><name>Grant Keiser</name><uri>http://www.blogger.com/profile/01175352912402705765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_TsUDroOB2Z8/Rpw-XSmGcRI/AAAAAAAAAAk/b6iL37V8ecM/s72-c/IronRubyScreenShot.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17460230.post-5985389402817432263</id><published>2007-07-13T21:56:00.000-07:00</published><updated>2007-07-13T22:28:08.883-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'></title><content type='html'>Do you write HTML? Do you care if it's XHTML compliant? You should.  I've been playing around a bit with Ruby and Ruby on Rails and recently came across &lt;a href="http://haml.hamptoncatlin.com/"&gt;Haml&lt;/a&gt;, an application written in Ruby that takes the drudgery out of all those angle brackets to help you get XHTML-compliant markup faster.  It's meant to be used as a replacement for templates in Rails applications, but is easy to use outside of Rails.&lt;br /&gt;&lt;br /&gt;I downloaded Haml and produced this markup:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div class="'mainContent'"&amp;gt;&lt;br /&gt;&amp;lt;h2This is huge!&amp;lt;/h2&amp;gt;&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;One Item&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;Another Item&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;strong&amp;gt;2007-07-13T23:33:34-05:00&amp;lt;/strong&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I simply pointed the Haml parser to a file that looked like this:&lt;br /&gt;&lt;br /&gt;.mainContent&lt;br /&gt;%H2 This is huge!&lt;br /&gt;%ul&lt;br /&gt;  %li One Item&lt;br /&gt;  %li Another Item&lt;br /&gt;- now = DateTime.now&lt;br /&gt;%strong= now&lt;br /&gt;&lt;br /&gt;It took another 5 minutes or so to take the output above (the valid XHTML) and spit out a .html file.  I could easily change the extension to .aspx and have a helpful start to my pages, (especially if I had taken better notes at the semantic HTML training at &lt;a href="http://www.geonetric.com/"&gt;work&lt;/a&gt;).  And even better, how about having Haml in &lt;a href="http://www.blogger.com/www.iunknown.com/2007/04/introducing_iro.html"&gt;IronRuby&lt;/a&gt; and writing the above code in visual studio, with intellisense!  That may not be far off, see my &lt;a href="http://grantkeiser.blogspot.com/2007/07/this-weekend-i-was-doing-what-i-think.html"&gt;last post&lt;/a&gt; for more IronRuby.&lt;br /&gt;&lt;br /&gt;Would something like this be useful for the client-side gurus?  Anybody writing Html, let me know what you think, and I'll see what our resident expert, &lt;a href="http://michaelherringdesign.com/"&gt;Michael&lt;/a&gt;, thinks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17460230-5985389402817432263?l=blog.grantkeiser.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.grantkeiser.net/feeds/5985389402817432263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17460230&amp;postID=5985389402817432263' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/5985389402817432263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/5985389402817432263'/><link rel='alternate' type='text/html' href='http://blog.grantkeiser.net/2007/07/do-you-write-html-does-it-matter-that.html' title=''/><author><name>Grant Keiser</name><uri>http://www.blogger.com/profile/01175352912402705765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17460230.post-2461747937658053508</id><published>2007-07-10T19:12:00.000-07:00</published><updated>2007-07-10T19:42:10.340-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'></title><content type='html'>This weekend I was doing what I think developers ought to do, especially if, like me, they love new technology and the struggles of &lt;a href="http://en.wikipedia.org/wiki/Agile_Software_Development"&gt;software projects&lt;/a&gt; more than the actual programming itself.  I was seeing what I could learn about &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Orcas&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Silverlight&lt;/span&gt; without actually installing the monstrous, 8-part download for &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5d9c6b2d-439c-4ec2-8e24-b7d9ff6a2ab2&amp;DisplayLang=en"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Orcas&lt;/span&gt;&lt;/a&gt; Beta1.  If you followed the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Orcas&lt;/span&gt; link you'll notice that you'll have to deal with some 5 GB of downloads, only to install and perhaps find that the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;IDE&lt;/span&gt; &lt;a href="http://forums.asp.net/t/1119215.aspx"&gt;wreaks havoc&lt;/a&gt; with VS 2005.&lt;br /&gt;&lt;br /&gt;I found Microsoft's &lt;a href="http://www.visitmix.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;MixOnline&lt;/span&gt;&lt;/a&gt; site, which has a nice search utility to find presentations and keynotes, and quickly found what I was looking for.  &lt;a href="http://www.iunknown.com/"&gt;John Lam&lt;/a&gt; and Jim &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Hugunin&lt;/span&gt;, creators of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;RubyCLR&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;IronPython&lt;/span&gt;, respectively, gave an entertaining and impressive talk on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Silverlight&lt;/span&gt; and the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;DLR&lt;/span&gt; (Dynamic Language &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Runtime&lt;/span&gt;).   They demoed javascript, ruby, python and C# code all intermingled and talking to each other seamlessly!  This &lt;a href="http://216.94.10.61/mix07/silverlight/default.html?title=DEV02%20-%20Just%20Glue%20It%21%20Ruby%20and%20the%20DLR%20in%20Silverlight&amp;amp;speakers=Jim%20Hugunin,%20John%20Lam&amp;presentationCode=DEV02&amp;amp;source=DEV02.wmv"&gt;link&lt;/a&gt; shows the talk in a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;Silverlight&lt;/span&gt; media player and requires a quick download.  Enjoy...&lt;br /&gt;&lt;br /&gt;After watching, you can check out &lt;a href="http://www.theatlantic.com/doc/198207/fallows-computer/2?ca=bOqRsFAmRaYter7f9z%2Fc17x5FOX0lL%2Fyj88UJJn3tR4%3D"&gt;this article&lt;/a&gt; from the Atlantic to get some perspective on just how far we've come in 20 years.  I didn't read the entire article, but it speaks admiringly of "hard disks" costing several thousand dollars than can store "&lt;span&gt;&lt;span class="arttype"&gt;from two or three on up to several dozen megabytes".&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/17460230-2461747937658053508?l=blog.grantkeiser.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.grantkeiser.net/feeds/2461747937658053508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17460230&amp;postID=2461747937658053508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/2461747937658053508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/2461747937658053508'/><link rel='alternate' type='text/html' href='http://blog.grantkeiser.net/2007/07/this-weekend-i-was-doing-what-i-think.html' title=''/><author><name>Grant Keiser</name><uri>http://www.blogger.com/profile/01175352912402705765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17460230.post-5815173073319212213</id><published>2007-07-09T11:58:00.001-07:00</published><updated>2007-07-09T12:01:02.538-07:00</updated><title type='text'></title><content type='html'>I should really rail against Sql Server development tools, but instead I want to point out how an agile team can come together and produce good work and overcome many &lt;a href="http://www.agileadvice.com/archives/2006/03/the_art_of_obst.html"&gt;obstacles&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17460230-5815173073319212213?l=blog.grantkeiser.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.grantkeiser.net/feeds/5815173073319212213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17460230&amp;postID=5815173073319212213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/5815173073319212213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17460230/posts/default/5815173073319212213'/><link rel='alternate' type='text/html' href='http://blog.grantkeiser.net/2007/07/i-should-really-rail-against-sql-server.html' title=''/><author><name>Grant Keiser</name><uri>http://www.blogger.com/profile/01175352912402705765</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
