<?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-9167981196729784488</id><updated>2012-01-29T10:55:17.390-06:00</updated><category term='Modern Computing and Gaming'/><category term='Development'/><category term='General'/><category term='Retro Computing and Gaming'/><category term='Music'/><title type='text'>Welcome to My Nerditorium</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-5458866206106965223</id><published>2011-11-30T22:42:00.001-06:00</published><updated>2011-11-30T23:28:06.054-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Your ASP.NET.* Project is Not Just Your UI Layer</title><content type='html'>&lt;p&gt;In &lt;a href="http://lostechies.com/jimmybogard/2011/11/28/dealing-with-transactions/?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+LosTechies+%28LosTechies%29"&gt;this&lt;/a&gt; post by Jimmy Bogard about “dealing with non-transactional operations that must happen if some transaction succeeds,” the often embraced, but sometimes criticized, &lt;a href="https://www.google.com/search?gcx=c&amp;amp;sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=session+per+request"&gt;Session Per Request&lt;/a&gt; pattern (aka Transaction Per Request), came under fire in the comments.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-jST-nPyEIPg/TtcFxTOTGJI/AAAAAAAAAN4/YhWV3Dhp_4U/s1600-h/image%25255B10%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-aJBrablBtSQ/TtcFyK-vZ3I/AAAAAAAAAOA/FsjBWVGEHoc/image_thumb%25255B6%25255D.png?imgmax=800" width="620" height="782" /&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;I’ve had this conversation with other developers who have raised similar concerns before, and the reason brought up against going with this pattern is based off of the notion that the “Web” project must not orchestrate or indirectly know about the other layers of the application because it is the “UI” layer.&lt;/p&gt;  &lt;p&gt;The fact is, that the web project houses two conceptual layers:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;It houses the UI layer for the application.&lt;/li&gt;    &lt;li&gt;It houses the entry point / bootstrapping for the infrastructure of the application. It is the application.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I am perfectly fine with the plumbing of the web project directly managing transactions. Some part of the application must manage this, and I a believe that the it should be pushed as far out to the seams of the application platform as possible. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-5458866206106965223?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/5458866206106965223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2011/11/your-aspnet-project-is-not-just-your-ui.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5458866206106965223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5458866206106965223'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2011/11/your-aspnet-project-is-not-just-your-ui.html' title='Your ASP.NET.* Project is Not Just Your UI Layer'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-aJBrablBtSQ/TtcFyK-vZ3I/AAAAAAAAAOA/FsjBWVGEHoc/s72-c/image_thumb%25255B6%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-861921372044244616</id><published>2011-08-08T20:06:00.004-05:00</published><updated>2011-08-08T21:53:56.175-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>All Paths to a Sitefinity Image are not Equal</title><content type='html'>&lt;p&gt;Recently, while doing a performance pass through a Sitefinity 4 application, I noticed that a public facing page had an unusually slow load time. Of course, the first thing I did was open up Firebug to see where the time was being spent. To my surprise, the majority of the time was spent waiting for the initial response from the server. After a little digging, I narrowed down the time-sink to a custom widget that pulled images from a Sitefinity image album. In particular, the query to figure out which images to display was the source of slothness.&lt;/p&gt;  &lt;p&gt;A few things to note:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;There were about 250 image albums in the CMS (all but 5 or so of them were empty at the time of discovery, however). &lt;/li&gt;    &lt;li&gt;There were roughly 30 images in the album we were querying against. &lt;/li&gt;    &lt;li&gt;When the original query was written, there were only a few images in the system, and that is why the issue wasn’t apparent right when the query was written. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here’s an approximation of the original call to retrieve the images through the Sitefinity API:&lt;/p&gt;  &lt;div&gt;&lt;script src="https://gist.github.com/1133189.js?file=gistfile1.cs"&gt;&lt;/script&gt;&lt;/div&gt;  &lt;p&gt;In this bit of code, we are querying for all images that belong to the image album named “Foo”. Note that the query is structured in a way where we query through the image object to determine what album it belongs to.&lt;/p&gt;  &lt;p&gt;The above query took about 2 seconds to return roughly 30 Sitefinity Image objects. This would not do. Therefore, I took to tweaking the query. I tried several different things while maintaining the original approach, but since Sitefinity’s LINQ provider isn’t a complete implementation, I couldn’t make much headway.&lt;/p&gt;  &lt;p&gt;I eventually decided to rethink the approach and query for the images by going in through the album instead of going through the image object. &lt;/p&gt;  &lt;div&gt;&lt;script src="https://gist.github.com/1133244.js?file=gistfile1.cs"&gt;&lt;/script&gt;&lt;/div&gt;  &lt;p&gt;This reduced the query time down to about .2 seconds.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-861921372044244616?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/861921372044244616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2011/08/all-paths-to-sitefinity-image-are-not.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/861921372044244616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/861921372044244616'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2011/08/all-paths-to-sitefinity-image-are-not.html' title='All Paths to a Sitefinity Image are not Equal'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-1962594106433635731</id><published>2011-05-15T19:36:00.002-05:00</published><updated>2011-05-15T19:37:19.384-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Matt Chat–The YouTube Channel You Should be Watching if You Played Video Games in the 80s or 90s</title><content type='html'>&lt;a href="http://lh5.ggpht.com/_q7jyIQc7ftY/TdBxmiqC3iI/AAAAAAAAALg/aH92h50kcrU/s1600-h/mattChat%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="mattChat" border="0" alt="mattChat" align="right" src="http://lh5.ggpht.com/_q7jyIQc7ftY/TdBxm6aFWyI/AAAAAAAAALk/rp0UTDFeOAg/mattChat_thumb.jpg?imgmax=800" width="92" height="92" /&gt;&lt;/a&gt;  &lt;p&gt;Nerd service announcement:&lt;/p&gt;  &lt;p&gt;If you played video games in the 80s and/or 90s and have never heard of, or watched &lt;a href="http://www.youtube.com/user/blacklily8"&gt;Matt Chat&lt;/a&gt;, you you are in for a treat. One of my friends aptly described it as, “Behind the Music for vintage video games.” &lt;/p&gt;  &lt;p&gt;Matt Barton (College Professor and Author) debuted &lt;a href="http://www.youtube.com/user/blacklily8"&gt;Matt Chat&lt;/a&gt; in February 2009 with a low-production-quality, but loving, retrospective of SSI’s classic AD&amp;amp;D CRPG, “Pool of Radiance.” Since then, Matt has produced an additional 100 episodes, and has made leaps-and-bounds in production value. In addition to his editorial retrospectives, Matt began doing interviews with game developers around episode 40. &lt;/p&gt;  &lt;p&gt;To whet your appetite, here is a &lt;a href="http://eab.abime.net/showthread.php?t=59007"&gt;listing&lt;/a&gt; of the first 101 episodes of &lt;a href="http://www.youtube.com/user/blacklily8"&gt;Matt Chat&lt;/a&gt; :&lt;/p&gt;  &lt;p&gt;1: Pool of Radiance  &lt;br /&gt;2: Myst   &lt;br /&gt;3: Defender of the Crown   &lt;br /&gt;4: M.U.L.E.   &lt;br /&gt;5: Elite   &lt;br /&gt;7: The Sims   &lt;br /&gt;8: The Secret of Monkey Island   &lt;br /&gt;9: The Oregon Trail   &lt;br /&gt;10: Lemmings   &lt;br /&gt;11: Civilization   &lt;br /&gt;12: Metroid   &lt;br /&gt;13: Adventure   &lt;br /&gt;14: The Lost Vikings   &lt;br /&gt;15: The PLATO Computer System   &lt;br /&gt;16: Lode Runner   &lt;br /&gt;17: Ultima VII, The Black Gate   &lt;br /&gt;18: Summer Games   &lt;br /&gt;19: Gauntlet   &lt;br /&gt;20: Worms and Artillery Games   &lt;br /&gt;21: Super Mario Kart   &lt;br /&gt;22: Deja Vu, Uninvited, Shadowgate, and MacVentures   &lt;br /&gt;23: Planescape Torment   &lt;br /&gt;24: Star Control II and the Spacewar Legacy   &lt;br /&gt;25: Knights of the Old Republic   &lt;br /&gt;26: David Crane's Ghostbusters   &lt;br /&gt;27: Autoduel   &lt;br /&gt;28: Maniac Mansion   &lt;br /&gt;29: Wizardry   &lt;br /&gt;30: Fallout   &lt;br /&gt;31: A Rockstar Ate My Hamster   &lt;br /&gt;32: Tomb Raider   &lt;br /&gt;33: Jade Empire   &lt;br /&gt;34: System Shock 2   &lt;br /&gt;35: Alone in the Dark   &lt;br /&gt;36: Starcraft   &lt;br /&gt;37: Syndicate   &lt;br /&gt;38: Legacy of the Ancients   &lt;br /&gt;39: World of Warcraft Part One   &lt;br /&gt;39: World of Warcraft Part Two   &lt;br /&gt;40: Sword of Fargoal with Jeff McCord   &lt;br /&gt;41: The History of Cinemaware with Bob Jacob   &lt;br /&gt;42: Dragon Age Origins   &lt;br /&gt;43: Archon   &lt;br /&gt;44: Ralph Baer, the Father of Videogames   &lt;br /&gt;45: Rogue   &lt;br /&gt;46: Choose Your Own Adventure with R.A. Montgomery   &lt;br /&gt;47: Quest for Glory   &lt;br /&gt;48: Dungeons of Daggorath   &lt;br /&gt;49: Nancy Drew featuring Jessica Chiang   &lt;br /&gt;50 Part 1: Leisure Suit Larry featuring Al Lowe   &lt;br /&gt;50 Part 2: Leisure Suit Larry featuring Al Lowe   &lt;br /&gt;51: Interview with John Romero (Early Days)   &lt;br /&gt;52: Wolfenstein 3D with John Romero   &lt;br /&gt;53: Doom with John Romero   &lt;br /&gt;54: Quake with John Romero   &lt;br /&gt;55: Daikatana with John Romero   &lt;br /&gt;56: Ocarina of Time   &lt;br /&gt;57: Tunnels of Doom   &lt;br /&gt;58: Heroes of Might and Magic   &lt;br /&gt;59: The Settlers   &lt;br /&gt;60: X-COM, UFO Defense   &lt;br /&gt;61: Sid Meier's Pirates   &lt;br /&gt;62: Chris Avellone's Early Days   &lt;br /&gt;63: Planescape Torment with Chris Avellone   &lt;br /&gt;64: Sean Cooper's Early Days   &lt;br /&gt;65: Syndicate with Sean Cooper   &lt;br /&gt;66: Fallout with Tim Cain, Pt. 1   &lt;br /&gt;67: Fallout with Tim Cain Pt. 2   &lt;br /&gt;68: Arcanum and More with Tim Cain   &lt;br /&gt;69: Howard Scott Warshaw's Early Days   &lt;br /&gt;70: ET and Yar's Revenge with Howard Scott Warshaw   &lt;br /&gt;71: The Bard's Tale   &lt;br /&gt;72: Deus Ex   &lt;br /&gt;73: The Dig   &lt;br /&gt;74: Dune II   &lt;br /&gt;75: Interview with Megan Gaiser and Rob Riedl of Her Interactive   &lt;br /&gt;76: King's Quest   &lt;br /&gt;77: Darklands   &lt;br /&gt;78: Arnold Hendrick Interview Pt. 1   &lt;br /&gt;78: Interview with Arnold Hendrick Pt. 2   &lt;br /&gt;78: Interview with Arnold Hendrick Pt. 3   &lt;br /&gt;79: Scott Adams' Early Days   &lt;br /&gt;80: Adventureland with Scott Adams   &lt;br /&gt;81: Questprobe and More with Scott Adams   &lt;br /&gt;82: Interview with Rebecca "Burger" Heineman Pt. 1   &lt;br /&gt;83: Rebecca Heineman Pt. 2   &lt;br /&gt;84: Rebecca Heineman Pt. 3   &lt;br /&gt;85: Rebecca Heineman Pt. 4   &lt;br /&gt;86: Bard's Tale IV and Wasteland II with Rebecca Heineman   &lt;br /&gt;87: Twilight Scene it with Don Kurtz (censored)   &lt;br /&gt;88: The Donimator Gets His   &lt;br /&gt;89: Bard's Tale and Wizardry with Brian Fargo   &lt;br /&gt;90: Wasteland and Fallout with Brian Fargo   &lt;br /&gt;91: The Fall of Interplay with Brian Fargo   &lt;br /&gt;92: Mail Order Monsters   &lt;br /&gt;93: Scratches and Asylum with Agustín Cordes   &lt;br /&gt;94: Interview with Agustín Cordes Pt. 2   &lt;br /&gt;95: Skylanders and more with Paul Reiche and Fred Ford   &lt;br /&gt;96: Star Control and More with Paul Reiche and Fred Ford   &lt;br /&gt;97: The Horde and More with Fred Ford and Paul Reiche   &lt;br /&gt;98: Scott Miller Interview Pt. 1   &lt;br /&gt;99: Duke Nukem with Scott Miller   &lt;br /&gt;100: Scott Miller will Live Forever   &lt;br /&gt;101: Baldur's Gate&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-1962594106433635731?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/1962594106433635731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2011/05/matt-chatthe-youtube-channel-you-should.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/1962594106433635731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/1962594106433635731'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2011/05/matt-chatthe-youtube-channel-you-should.html' title='Matt Chat–The YouTube Channel You Should be Watching if You Played Video Games in the 80s or 90s'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_q7jyIQc7ftY/TdBxm6aFWyI/AAAAAAAAALk/rp0UTDFeOAg/s72-c/mattChat_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-4333210120246019926</id><published>2011-04-12T18:49:00.001-05:00</published><updated>2011-04-12T18:49:19.131-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>My Sister Always Said I’d Turn Out to be a Nerd</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_q7jyIQc7ftY/TaTk_ckA4JI/AAAAAAAAALI/1Mw74GkfMTU/s1600-h/smokingNerd%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px; padding-top: 0px" title="smokingNerd" border="0" alt="smokingNerd" align="right" src="http://lh4.ggpht.com/_q7jyIQc7ftY/TaTk_uJ9dsI/AAAAAAAAALM/IibDIViYlkY/smokingNerd_thumb.jpg?imgmax=800" width="244" height="186" /&gt;&lt;/a&gt;Today was a good day. As &lt;a href="http://mynerditorium.blogspot.com/2011/02/moving-on.html"&gt;mentioned&lt;/a&gt; &lt;a href="http://mynerditorium.blogspot.com/2011/03/full-stack-interview-coding-challenges.html"&gt;previously&lt;/a&gt;, I’ve been looking for a new career opportunity for the past month-and-a-half or so. My journey came to a head yesterday when I received two fantastic job offers. I’m happy to report that I have accepted an offer to join&amp;#160; &lt;br /&gt;&lt;a href="http://www.nerdery.com/"&gt;the Nerdery&lt;/a&gt; as a Software Engineer. I’m looking forward to working with this group of people who are way smarter than I am, and for the chance to grow with this unique company.&lt;/p&gt;  &lt;p&gt;Additionally, I’ve been reflecting on the overall job search experience. I am very aware of how lucky I am to have rubbed shoulders with many insanely smart and experienced professionals. I really appreciate the time everyone took to meet with me. Life is good.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-4333210120246019926?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/4333210120246019926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2011/04/my-sister-always-said-id-turn-out-to-be.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/4333210120246019926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/4333210120246019926'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2011/04/my-sister-always-said-id-turn-out-to-be.html' title='My Sister Always Said I’d Turn Out to be a Nerd'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_q7jyIQc7ftY/TaTk_uJ9dsI/AAAAAAAAALM/IibDIViYlkY/s72-c/smokingNerd_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-579392270682991857</id><published>2011-03-25T15:23:00.001-05:00</published><updated>2011-03-25T15:42:23.460-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Full Stack Interview Coding Challenges</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_q7jyIQc7ftY/TYz5pDkKmEI/AAAAAAAAALA/lBPjdkKerno/s1600-h/Challenge%20Accepted%5B3%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="Challenge Accepted" border="0" alt="Challenge Accepted" align="right" src="http://lh6.ggpht.com/_q7jyIQc7ftY/TYz5phRfk0I/AAAAAAAAALE/GofCG35o9pI/Challenge%20Accepted_thumb%5B1%5D.jpg?imgmax=800" width="244" height="94" /&gt;&lt;/a&gt;It’s been seven years since I was last looking for a job, so I’m not sure if this is a new trend or not: Over half the companies I’ve started the interview process with have given me time-unlimited full-stack coding challenges as part of the interview process. I just completed my third one in two weeks and I thought I’d share my thoughts about this practice in general.&lt;/p&gt;  &lt;h4&gt;Challenge Requirements   &lt;br /&gt;&lt;font size="2"&gt;&lt;font style="font-weight: normal"&gt;Here are highly condensed versions of the requirements for each challenge:&lt;/font&gt;&lt;/font&gt;&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;Company A:&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Create an ASP.NET MVC application that consists of one page that allows users to add, remove, and rate movies. Movie ratings are to be indicated with a star rating control similar to what Netflix uses.&lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;Create a Javascript widget that a user can host on their blog which pulls and displays their movie ratings from the application.&lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p align="left"&gt;&lt;strong&gt;Company B:&lt;/strong&gt;&lt;/p&gt;  &lt;p align="left"&gt;Create an ASP.NET MVC website that allows users to upload and view images. If the image is more than 500 pixels wide, or 700 pixels tall, downsize the image to the maximum allowed size, but maintain the aspect ratio. All images should be stored on the server, including the original image when images are resized.&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;Company C:&lt;/strong&gt;&lt;/p&gt;  &lt;p align="left"&gt;Create an ASP.NET application (Webforms or MVC) that allows users to add and vote on Xbox game titles for the company break room. Users can only vote once a day, and they cannot vote on the weekends. Any user can mark a game as owned, in which case it ends up on a list of owned games. The titles and votes will be stored / retrieved via a set of WCF services that are provided for you. In addition to sending the code in for review, submit a URL to a running copy of the application.&lt;/p&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;What I Liked About the Process&lt;/h4&gt;  &lt;p&gt;First off, I really liked that these companies wanted to see code. I think far too many places hire developers without seeing a line of code. True, you can determine what somebody is capable of through conversation (especially at senior / expert levels), but I think it’s a pretty big risk. Some people are really good at talking, and / or look good on paper when in truth they don’t know what they are doing.&lt;/p&gt;  &lt;p&gt;Secondly, I really enjoyed doing these challenges. They’ve helped me from getting rusty during this period of unemployment. Additionally, I had to learn at least one thing for each of the applications. For company A’s challenge, I had to learn how to create a widget that used &lt;a href="http://en.wikipedia.org/wiki/JSONP"&gt;JSONP&lt;/a&gt;. For company B’s challenge I had to learn to resize an image while keeping its aspect ratio using only the core .NET framework. For company C’s challenge, I learned how to use the &lt;a href="http://mvccontrib.codeplex.com/"&gt;MVCContrib&lt;/a&gt; Grid and the &lt;a href="http://www.datatables.net/"&gt;jquery.dataTable&lt;/a&gt; plugin. I also learned and used &lt;a href="http://appharbor.com/"&gt;AppHarbor&lt;/a&gt; to host the application.&lt;/p&gt;  &lt;h4&gt;What I didn’t Like or was Uncomfortable With During the Process&lt;/h4&gt;  &lt;p&gt;Finding time to do all three of these within a couple of weeks was a little rough. I did find the time, but part of me was wondering if the companies were wondering why I hadn’t turned the challenge in yet. In reality they didn’t know that I was working on three of them simultaneously. This is something I probably should have communicated to them.   &lt;br /&gt;    &lt;br /&gt;The thing I was most uncomfortable with was that I felt like I had more than enough rope to hang myself with in terms of doing things that weren’t wrong per say, but that the reviewer might frown upon due to personal taste. One thing that I was really torn on was how C# 2/3/4 idiomatic I should make my code. Taking advantage of generics, lambdas, linq, anonymous types, etc… could cause the code to look like gibberish to the reviewer if he or she is still writing code in C#1 style. On the flip side, I felt that I would look like I was stuck in the past if I didn’t write modern C#. I’m not sure that finding the middle ground is the right thing to do in this case either as it could look inconsistent.     &lt;br /&gt;    &lt;br /&gt;Along the same lines, I found it very difficult to decide on the right level of architectural complexity to use. These apps were all a bit more than trivial, so I could have gone either way with the complexity. As with idiomatic C#, I found myself wondering if the reviewer was going to think I was oversimplifying or overcomplicating things. Additionally the reviewer may actually want me to overcomplicated things a bit to show what architectural patterns I know.&amp;#160; &lt;br /&gt;    &lt;br /&gt;These two issues are things that usually get sorted out when you hash over ideas with people in person, but I found it difficult to know who my audience was when given nothing but a set of requirements.    &lt;br /&gt;&lt;/p&gt;  &lt;h4&gt;Final thoughts&lt;/h4&gt;  &lt;p&gt;All-in-all, I thought it was a positive and enjoyable experience. If I’m ever in the position to help with hiring again, I would probably really push hard for code samples to be part of the process. However, I probably wouldn’t give such open ended challenges. I’d probably give multiple smaller and more focused problems.   &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-579392270682991857?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/579392270682991857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2011/03/full-stack-interview-coding-challenges.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/579392270682991857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/579392270682991857'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2011/03/full-stack-interview-coding-challenges.html' title='Full Stack Interview Coding Challenges'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_q7jyIQc7ftY/TYz5phRfk0I/AAAAAAAAALE/GofCG35o9pI/s72-c/Challenge%20Accepted_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-920614010402386145</id><published>2011-02-28T21:03:00.016-06:00</published><updated>2011-04-30T19:13:20.833-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>.NET Dependency Management in a Pre-Nuget World</title><content type='html'>&lt;p class="MsoNormal"&gt;This post is an attempt to capture how my previous team dealt with dependency / package management. The team, at its largest point, consisted of about 15 developers. There were roughly 200 3&lt;span class="Apple-style-span"&gt;rd&lt;/span&gt; party dlls, and roughly 150 internal dlls in the dependency mix. No single app needed all 350 dlls, but groups of these dlls were common to applications in the same domain space of the enterprise. 3&lt;span class="Apple-style-span"&gt;rd&lt;/span&gt; party dlls were things such as the MS Enterprise Library, image conversion libraries, desktop scanner interop libraries, etc… Internal dlls were things such as common utility libraries, WCF service contracts, DTOs etc…&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Until the recent development of projects such as &lt;a href="http://haacked.com/archive/2010/10/06/introducing-nupack-package-manager.aspx"&gt;Nuget&lt;/a&gt; and &lt;a href="http://www.openwrap.org/"&gt;OpenWrap&lt;/a&gt;, dependency management in .NET has been a big problem. The larger a development group’s topology is, the more of a pain point it is. Because this is the case, a lot of teams don’t even realize they are going to have issues until the pain is upon them. Additionally, I think the complexity of describing the problem has helped to keep package management as an elephant in the .NET room for a long time. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Since there has been abundant discussion on this issue lately, I’m going to skip describing the problems with dependency management and get straight into what we tried over the years, and what the final solution ended up being. It’s important to note that my team used TFS (2008) for source control because some of the steps we took were in response to TFS’ weaknesses.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;First attempt ending in Failure:&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Manage all 3rd party dlls by putting them in a [sln]/bin folder (tracked by TFS).&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt; Manage all internal dependencies as shared projects across multiple slns. &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;I’m sure some of you are already cringing after reading the last bullet point, but you’ll have to admit it is the first solution that comes to mind to a lot of developers. Additionally, it is a very simple solution. The biggest issue with this solution is with sharing a project over several slns. Unfortunately, any bit of code in those shared projects is easily changeable from multiple slns; therefore it is very easy to break several slns in one fell swoop. Secondly configuration management goes out the window because every time a sln is compiled, each shared project gets a new version that bypasses any sort of change management.&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;Second attempt ending in failure:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Manage all 3rd party and internal dlls by putting them in a [sln]/bin folder.&lt;/b&gt; &lt;/li&gt;&lt;/ul&gt;This solution complicates things slightly (in a positive way) by requiring each sln to use a proper release of all internal dlls; therefore you are able to have some degree of configuration management. However, this solution failed for us because of one simple fact: TFS does not track binaries well. We never ran into this weakness with the first solution because all of the 3rd party dlls were set-and-forget. They never changed after setting the initial reference. The internal dlls however, would change daily, or even hourly. At first this seemed like the perfect solution, however all sorts of strange errors started occurring. One person would get latest and everything would work, but another person would get latest and have errors. TFS simply could not tell if you needed a new version of the dlls in the /bin folder. Sadly, even a “clean all" and "get specific version" didn't fix things a lot of the time.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;Third attempt ending in Success:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Build a custom package management system.&lt;/b&gt; &lt;/li&gt;&lt;/ul&gt;Our custom package management system worked thusly: We created a network share. For each logical release (i.g. MS EntLib, Internal.Common.Util) we created both a [networkShare]\[package]\LatestRelease folder and a [networkShare]\[package]\Release_[version number] folder. We then created a console EXE with a bunch of options that would: 1) go and grab all of the latest dlls for all projects and dump them into one pre-defined “latest” folder on the developer PC and 2) Recreate the “releases” tree structure on the developer PC. This way, developers have the ability to drink from the fire-hose (the latest folder) or go for set releases (from the releases folder tree). TFS is not tracking dlls at all. Rather, we are relying on an absolute path file reference. Additionally, calling this executable becomes a build task on the CI server.&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;This solution isn't perfect. Namely, it relies on developers to remember to run the executable from time to time. Additionally, there are potentially some versioning scenarios that could occur between packages that expect a different versions of sub dependencies. However that issue never manifested itself in our environment.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;Nuget is not the final answer for teams using TFS&lt;/b&gt;&lt;br /&gt;&lt;del&gt;I've been following the Nuget dev list closely, and Nuget is considered to be a development time dependency resolver only, not a build time resolver. This means that if you use TFS to track your Nuget package folders, you could still run into dll versioning issues.&lt;/del&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update (4/17/2011)&lt;/b&gt;&lt;br /&gt;Nuget team member David Ebbo has blogged that functionality has been added to allow use of Nuget without committing the packages folder to source control.&lt;a href="http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html"&gt;http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;Update (4/30/2011)&lt;/b&gt;&lt;br /&gt;According to Phil Haack, Nuget is going to be getting official support for non-committed packages: &lt;a href="http://haacked.com/archive/2011/04/27/feedback-request-for-using-nuget-without-committing-packages.aspx"&gt;http://haacked.com/archive/2011/04/27/feedback-request-for-using-nuget-without-committing-packages.aspx&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;I know that many of us have had to face this problem, therefore I'd really enjoy hearing about how you addressed this issue.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="font-size: 15px; font-family: Calibri,sans-serif; line-height: 17px;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-920614010402386145?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/920614010402386145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2011/02/net-dependency-management-in-pre-nuget.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/920614010402386145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/920614010402386145'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2011/02/net-dependency-management-in-pre-nuget.html' title='.NET Dependency Management in a Pre-Nuget World'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-8007405683330166692</id><published>2011-02-23T12:18:00.004-06:00</published><updated>2011-02-23T21:31:38.903-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Moving On</title><content type='html'>Yesterday was a tough day. I resigned from my position of seven years as a Developer / Analyst for the Office of the Minnesota Secretary of State. &lt;br /&gt;&lt;br /&gt;Over the past couple of months, the development group has gone through several reorganizations. Yesterday another reorganization happened, including a substantial software platform shift. I did not feel this shift was good for my career, nor was it something I wanted to participate in. Additionally, I think the days of in-house software development for government agencies are coming to an end at light speed. Therefore, with heavy heart, I felt it was time for me to go. Up until recently, it was the most enjoyable job of my career. I wish my former coworkers the best of luck, and I look forward to hearing their war stories as time goes on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-8007405683330166692?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/8007405683330166692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2011/02/moving-on.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/8007405683330166692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/8007405683330166692'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2011/02/moving-on.html' title='Moving On'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-5018773381627205674</id><published>2011-02-16T09:18:00.013-06:00</published><updated>2011-02-16T09:49:50.218-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>The Case of Web Deploy 2.0 and the Missing MSDeploy.exe</title><content type='html'>&lt;div&gt;This week, I decided to install the newly released Web Deploy 2.0 on my machine at work. I already had Web Deploy 1 on my machine, so I decided to uninstall that first before installing 2.0. After the installation I begain getting the following error when trying to execute VS2010 created web deployment packages from the command line:&lt;/div&gt;&lt;br /&gt;&lt;pre class="bash" name="code"&gt;&lt;br /&gt;Error:  The system was unable to find the specified registry key or value&lt;br /&gt;msdeploy.exe is not found on this machine. Please install Web Deploy before exe&lt;br /&gt;cute the script.&lt;br /&gt;Please visit http://go.microsoft.com/?linkid=9278654&lt;br /&gt;=========================================================&lt;br /&gt;=========================================================&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Of course the first thing I did was validate that MSDeploy was indeed installed with Web Deploy 2.0. It was. I then tried adding MSDeploy's location to the path environment variable. No dice. I then tried reinstalling Web Deploy 2.0. Still no luck. After trying some other things I cracked open the deployment package's cmd file and found this:&lt;br /&gt;&lt;pre class="bash" name="code"&gt;&lt;br /&gt;@rem ---------------------------------------------------------------------------------&lt;br /&gt;@rem if user does not set MsDeployPath environment variable, we will try to retrieve it from registry.&lt;br /&gt;@rem ---------------------------------------------------------------------------------&lt;br /&gt;if "%MSDeployPath%" == "" (&lt;br /&gt;for /F "usebackq tokens=2*" %%i  in (`reg query "HKLM\SOFTWARE\Microsoft\IISExtensions\MSDeploy\1" /v InstallPath`) do (&lt;br /&gt;if "%%~dpj" == "%%j" ( &lt;br /&gt;set MSDeployPath=%%j&lt;br /&gt;))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For whatever reason, Web Deploy 2.0 did not add either of these items during install. I ended up adding the MSDeployPath environment variable, and all was good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-5018773381627205674?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/5018773381627205674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2011/02/case-of-web-deploy-20-and-missing.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5018773381627205674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5018773381627205674'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2011/02/case-of-web-deploy-20-and-missing.html' title='The Case of Web Deploy 2.0 and the Missing MSDeploy.exe'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-2699274006517681934</id><published>2011-01-11T21:28:00.003-06:00</published><updated>2011-01-11T22:06:25.487-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Programming is a Craft</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_q7jyIQc7ftY/TS0gHB6tO_I/AAAAAAAAAK0/cZt9yDx8JFM/s1600/witchcraft1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 243px; height: 400px;" src="http://1.bp.blogspot.com/_q7jyIQc7ftY/TS0gHB6tO_I/AAAAAAAAAK0/cZt9yDx8JFM/s400/witchcraft1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5561136420018273266" /&gt;&lt;/a&gt;&lt;div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-color: transparent; "&gt;&lt;span id="internal-source-marker_0.7762323848437518" style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;Here are my initial thoughts after reading: &lt;a href="http://dannorth.net/2011/01/11/programming-is-not-a-craft/"&gt;Programming is not a Craft&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-size: 11pt; background-color: transparent;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;“craft -noun 1. an art, trade, or occupation requiring special skill, esp. manual skill: the craft of a mason." (&lt;a href="http://dictionary.reference.com/browse/craft"&gt;dictionary.com&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-size: 11pt; background-color: transparent;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;“In English, to describe something as a &lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;craft&lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt; is to describe it as lying somewhere between an &lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;art&lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt; (which relies on talent) and a &lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;science&lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt; (which relies on knowledge). In this sense, the English word &lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;craft&lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt; is roughly equivalent to the ancient Greek term&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Techne" style="font-family: Times; font-size: medium; "&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt; &lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; "&gt;techne&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;." (&lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; "&gt;&lt;a href="http://en.wikipedia.org/wiki/Craft"&gt;wikipedia.com&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-size: 11pt; background-color: transparent;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;In my opinion, on a whole, software development is a combination of craft and primitive engineering (&lt;a href="http://www-2.cs.cmu.edu/afs/cs.cmu.edu/project/compose/ftp/pdf/shaw_90.pdf"&gt;which is slowly emerging as a true engineering discipline&lt;/a&gt;). The term craft usually means &lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;how&lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt; something was made, not &lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: italic; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;what&lt;/span&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt; was made or the perceived value of the end result by the layman. One of the commenters on the original post mentioned carpentry as a craft that may not always be defined by the value placed on the end product by the layman. In this vein, I will also mention that witchcraft is considered a craft.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-size: 11pt; background-color: transparent;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt;One of the hallmarks of craft is that that it is filled with heuristics and folklore. Much of the work of today's software developer is squarely within this realm. More often than not, there is no clear-cut way to solve a problem. We craft a solution based off of our experiences and the folklore we encounter. It is worth noting that I consider blogs, google searches, MSDN, visits at a coworker's desk, irc, and &lt;/span&gt;&lt;a href="http://stackoverflow.com/" style="font-family: Times; font-size: medium; "&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 153); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap; "&gt;stackoverflow.com&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; "&gt; to be sources of folklore. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 11pt; font-family: Arial; color: rgb(0, 0, 0); background-color: transparent; font-weight: normal; font-style: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap; font-size: 11pt; background-color: transparent;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; vertical-align: baseline; "&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 11pt; white-space: pre-wrap;"&gt;I must say that I do agree with much of the post, but I think the terminology that is presented is incorrect. I think it would have been wiser to say that software development is &lt;i&gt;most often not&lt;/i&gt; an art, and ego has no place in it. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-color: transparent; "&gt;&lt;span style="background-color: transparent; vertical-align: baseline; "&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 11pt; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; background-color: transparent; "&gt;&lt;span style="background-color: transparent; vertical-align: baseline; "&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 11pt; white-space: pre-wrap;"&gt;I also have to concede that in hindsight, I believe that the &lt;a href="http://manifesto.softwarecraftsmanship.org/"&gt;software craftsmanship manifesto&lt;/a&gt; was a bad idea. I recently learned there was a period of time when it was being debated if there should be clause in it to forbid using anything (tools, languages, etc...) that was not OSS. In my opinion the manifesto only serves to force a definition on something that needs no additional definition.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-2699274006517681934?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/2699274006517681934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2011/01/programming-is-craft.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/2699274006517681934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/2699274006517681934'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2011/01/programming-is-craft.html' title='Programming is a Craft'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_q7jyIQc7ftY/TS0gHB6tO_I/AAAAAAAAAK0/cZt9yDx8JFM/s72-c/witchcraft1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-7329454759324941290</id><published>2011-01-09T20:48:00.005-06:00</published><updated>2011-01-09T21:13:15.305-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>The Mythology of Commodore Told in about 15 Minutes by Jim Butterfield</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_q7jyIQc7ftY/TSpziRvuMhI/AAAAAAAAAKs/8oGSCYcEbY0/s1600-h/jimbutterfield-centrefold%5B10%5D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="jimbutterfield-centrefold" border="0" alt="jimbutterfield-centrefold" align="left" src="http://lh5.ggpht.com/_q7jyIQc7ftY/TSpziudkquI/AAAAAAAAAKw/L-FNOyTOCWY/jimbutterfield-centrefold_thumb%5B3%5D.jpg?imgmax=800" width="171" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I was cleaning up the data drive on my computer tonight and I came across this gem, which is also hosted on blip.tv: &lt;/p&gt;  &lt;br /&gt;   &lt;br /&gt;&lt;center&gt;               &lt;script type="text/javascript" src="http://blip.tv/scripts/pokkariPlayer.js?ver=2009070701"&gt;&lt;/script&gt;     &lt;script type="text/javascript" src="http://blip.tv/syndication/write_player?skin=js&amp;posts_id=3086397&amp;source=3&amp;autoplay=true&amp;file_type=flv&amp;player_width=&amp;player_height="&gt;&lt;/script&gt;     &lt;div id="blip_movie_content_3086397"&gt;     &lt;a rel="enclosure" href="http://blip.tv/file/get/RobertBernardo-JimButterfieldAtTheChicagoCExpo1998405.wmv" onclick="play_blip_movie_3086397(); return false;"&gt;&lt;img title="Click to play" alt="Video thumbnail. Click to play" src="http://blip.tv/file/get/RobertBernardo-JimButterfieldAtTheChicagoCExpo1998405.wmv.jpg" border="0" title="Click To Play" /&gt;&lt;/a&gt;     &lt;br /&gt;     &lt;a rel="enclosure" href="http://blip.tv/file/get/RobertBernardo-JimButterfieldAtTheChicagoCExpo1998405.wmv" onclick="play_blip_movie_3086397(); return false;"&gt;Click To Play&lt;/a&gt;     &lt;/div&gt;          &lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Many of us owe our career to &lt;a href="http://en.wikipedia.org/wiki/Jim_Butterfield"&gt;Butterfield&lt;/a&gt;, and the father of the 65XX - &lt;a href="http://en.wikipedia.org/wiki/Chuck_Peddle"&gt;Chuck Peddle&lt;/a&gt;.     &lt;br /&gt;If you are interested in the history of Commodore, please check out Brian Bagnall’s: &lt;a href="http://www.variantpress.com/books/on-the-edge"&gt;Commodore: A Company on the Edge&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://www.pcmuseum.ca/images/jimglobe.gif" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-7329454759324941290?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/7329454759324941290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2011/01/mythology-of-commodore-told-in-about-15.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/7329454759324941290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/7329454759324941290'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2011/01/mythology-of-commodore-told-in-about-15.html' title='The Mythology of Commodore Told in about 15 Minutes by Jim Butterfield'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_q7jyIQc7ftY/TSpziudkquI/AAAAAAAAAKw/L-FNOyTOCWY/s72-c/jimbutterfield-centrefold_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-5915889895869005144</id><published>2010-12-26T19:43:00.021-06:00</published><updated>2011-02-16T09:56:40.150-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Getting RVM to Work when GVim is Launched from Ubuntu's Menu</title><content type='html'>If you want to use GVim as your Ruby editor in Ubuntu (and most likely any other Gnome based distro), you've probably found out that your .bashrc file is not read when launching GVim from the Gnome menu. This means that your RVM paths are not available in the scope of apps launched from the menu. However, when launching apps from the menu, the launcher can access your .profile file. That being the case, here is a quick work-around for this issue:&lt;br /&gt;&lt;br /&gt;1) Add the following code to your ~/.profile file:&lt;br /&gt;&lt;pre class="Bash" name="code"&gt;# This loads RVM into the session scope of the launcher.&lt;br /&gt;[[ -s "$HOME/.rvm/scripts/rvm" ]] &amp;amp;&amp;amp; . "$HOME/.rvm/scripts/rvm"&lt;/pre&gt;2) Create a script that you can use to start up GVim. Example ~/Apps/GVim/gvimstart.sh. In this script, place the following:&lt;br /&gt;&lt;pre class="bash" name="code"&gt;#!/bin/bash&lt;br /&gt;source ~/.profile &lt;br /&gt;gvim&lt;/pre&gt;3)Right click on the applications menu and choose "Edit Menus". Then find your GVim launcher and point the command entry to your script.&lt;br /&gt;&lt;br /&gt;I am, by no means, a Gnome expert, so please let me know if you are aware of a better solution.&lt;br /&gt;&lt;br /&gt;Happy coding!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-5915889895869005144?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/5915889895869005144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2010/12/getting-rvm-to-work-when-gvim-is.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5915889895869005144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5915889895869005144'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2010/12/getting-rvm-to-work-when-gvim-is.html' title='Getting RVM to Work when GVim is Launched from Ubuntu&apos;s Menu'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-9002442372056389621</id><published>2010-12-10T00:39:00.004-06:00</published><updated>2010-12-26T20:41:03.017-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Learn WPF for Free</title><content type='html'>&lt;p&gt;In my &lt;a href="http://mynerditorium.blogspot.com/2010/08/time-until-productivity-in-wpf.html"&gt;last WPF related post&lt;/a&gt; I spoke a bit about my WPF learning experience. I was fortunate enough to have an MSDN Universal subscription and any book I wanted via my employer as I went down the path. Unexpectedly, I recently received an email from a reader who wanted to learn WPF on a budget of $0.00. After thinking for a bit, I came to the conclusion that WPF can be learned without spending any money (assuming you have a computer that can run the tools). Below is a roadmap on how to do so.&lt;/p&gt;  &lt;h3&gt;Get the tools for free&lt;/h3&gt;  &lt;p&gt;Visual Studio Express, which is able to create WPF apps can be found here:    &lt;br /&gt;&lt;a href="http://www.microsoft.com/express/Windows/"&gt;http://www.microsoft.com/express/Windows/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you need any other tools, such as SQL Server Express, you can most likely find them via the Web Platform Installer here: &lt;a href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;http://www.microsoft.com/web/downloads/platform.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Learn the Framework&lt;/h3&gt;  &lt;p&gt;Between MSDN and the community, there is more than enough well-written documentation out there to help one become an expert on the WPF framework itself. In his book, “&lt;a href="http://joshsmithonwpf.wordpress.com/advanced-mvvm/"&gt;Advanced MVVM&lt;/a&gt;”, WPF expert, Josh “The Maestro” Smith, recommends the following documents to come up to speed with the WPF framework:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Introduction to WPF&lt;/strong&gt;: &lt;a href="http://msdn.microsoft.com/en-us/library/aa970268.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa970268.aspx&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;WPF Architecture&lt;/strong&gt;: &lt;a href="http://msdn.microsoft.com/en-us/library/ms750441.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms750441.aspx&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;A Guided Tour of WPF&lt;/strong&gt;: &lt;a href="http://joshsmithonwpf.wordpress.com/a-guided-tour-of-wpf/"&gt;http://joshsmithonwpf.wordpress.com/a-guided-tour-of-wpf/&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;Customize Data Display with Data Binding and WPF&lt;/strong&gt;: &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc700358.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/cc700358.aspx&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;ItemsControl: ‘I’ is for the Item Container&lt;/strong&gt;: &lt;a href="http://drwpf.com/blog/2008/03/25/itemscontrol-i-is-for-item-container/"&gt;http://drwpf.com/blog/2008/03/25/itemscontrol-i-is-for-item-container/&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;A lot of the information in the above links is difficult to absorb, but I think it is very worthwhile to go through the material, &lt;b&gt;and work through the examples&lt;/b&gt;, at least once. If some of the documents are unclear, you can always go back to them as you learn more and need more clarification.&lt;/p&gt;  &lt;h3&gt;Learn MVVM&lt;/h3&gt;  &lt;p&gt;Many people blow off MVVM as “the latest popular design pattern”, but learning MVVM is essential to working with WPF. This is because MVVM is a natural pattern to use considering the way databinding works with WPF. Yes, you can write WPF apps using tried-and-true code-behind and click event handlers like people did with winforms, but you’ll be doing yourself a disservice.&lt;/p&gt;  &lt;p&gt;When learning MVVM, the first place to look is this very simple video by the Jason “The Enigma” Dolinger, where he explains what MVVM is, and what the pattern’s strengths are: &lt;a href="http://blog.lab49.com/archives/2650"&gt;http://blog.lab49.com/archives/2650&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;The next place I would look is the “MVVM In the box” training by Karl “The Educator” Schifflett:     &lt;br /&gt;&lt;a href="http://karlshifflett.wordpress.com/2010/11/07/in-the-box-ndash-mvvm-training/"&gt;http://karlshifflett.wordpress.com/2010/11/07/in-the-box-ndash-mvvm-training/&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;As a lesson summary, an in-depth overview of MVVM written by Josh Smith can be found here: &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/dd419663.aspx&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Apply what you’ve learned&lt;/h3&gt;  &lt;p&gt;While there is no WPF “best practices” sample that I am aware of, I think the following can get one to see how WPF fits into an application architecture.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Building a Desktop TO-DO application with NHibernate:&lt;/strong&gt; &lt;a href="http://msdn.microsoft.com/en-us/magazine/ee819139.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/ee819139.aspx&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;Understanding the MVVM Pattern:&lt;/strong&gt; &lt;a href="http://live.visitmix.com/MIX10/Sessions/EX14"&gt;http://live.visitmix.com/MIX10/Sessions/EX14&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;Build Your Own MVVM Framework:&lt;/strong&gt; &lt;a href="http://live.visitmix.com/MIX10/Sessions/EX15"&gt;http://live.visitmix.com/MIX10/Sessions/EX15&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;Not strictly MVVM, but worth looking at as application and framework samples:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;PRISM:&lt;/strong&gt; &lt;a href="http://compositewpf.codeplex.com/"&gt;http://compositewpf.codeplex.com/&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;Caliburn Micro:&lt;/strong&gt; &lt;a href="http://caliburnmicro.codeplex.com/"&gt;http://caliburnmicro.codeplex.com/&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;Caliburn Micro Soup To Nuts Series:&lt;/strong&gt; &lt;a href="http://caliburnmicro.codeplex.com/documentation"&gt;http://caliburnmicro.codeplex.com/documentation&lt;/a&gt;     &lt;br /&gt;&lt;strong&gt;MVVM Light:&lt;/strong&gt; &lt;a href="http://mvvmlight.codeplex.com/"&gt;http://mvvmlight.codeplex.com/&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;Keep Learning&lt;/h3&gt;  &lt;p&gt;Read Blogs! Search out WPF related blogs. There are enough out there to fill your news reader every day. &lt;a href="http://10rem.net/"&gt;Pete “6510” Brown&lt;/a&gt;&amp;#160; puts out a Windows Client roundup frequently which is a good starting point.&lt;/p&gt;  &lt;p&gt;Read and participate in the knowledge dump at &lt;a href="http://stackoverflow.com/questions/tagged/wpf"&gt;http://stackoverflow.com/questions/tagged/wpf&lt;/a&gt;.     &lt;br /&gt;At first you may find that some of the questions are the same things you are wondering about. After awhile, you will find that you can answer some of the questions. As you answer questions, you’ll reinforce what you’ve learned.&lt;/p&gt;  &lt;h3&gt;Share&lt;/h3&gt;  &lt;p&gt;Software development is still largely a folklore based discipline. It is your duty to share what you have learned in the best way you know how.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-9002442372056389621?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/9002442372056389621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2010/12/learn-wpf-for-free.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/9002442372056389621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/9002442372056389621'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2010/12/learn-wpf-for-free.html' title='Learn WPF for Free'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-4559029555077844845</id><published>2010-11-22T21:49:00.004-06:00</published><updated>2010-11-23T09:01:13.386-06:00</updated><title type='text'>Katamari Code</title><content type='html'>&lt;p&gt;We’ve all worked on projects where the codebase is a mess. Here are a couple of common messy codebase analogies I’ve heard over the years:&lt;/p&gt;  &lt;p&gt;The House of Cards Codebase:&lt;/p&gt;  &lt;div style="padding: 0px; margin: 0px; display: inline; float: none;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:ff47ad36-f929-4c85-9e92-e3f4a1780e17" class="wlWriterEditableSmartContent"&gt;&lt;div id="a3501f16-5059-4c2c-95e7-98b023f61559" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=rheUs9v6hQo" target="_new"&gt;&lt;img src="http://lh6.ggpht.com/_q7jyIQc7ftY/TOs51P0yf5I/AAAAAAAAAKc/7j-5mymkAX0/video03b0f9aaa0c7%5B14%5D.jpg?imgmax=800" style="border-style: none;" galleryimg="no" onload="var downlevelDiv = document.getElementById('a3501f16-5059-4c2c-95e7-98b023f61559'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/rheUs9v6hQo?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/rheUs9v6hQo?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;The Jenga Codebase:&lt;/p&gt;  &lt;div style="padding: 0px; margin: 0px; display: inline; float: none;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:050b977a-eee5-43ec-8a6c-e656c25cbe30" class="wlWriterEditableSmartContent"&gt;&lt;div id="dcd7158d-b58a-4a3b-bbe5-b616080b6758" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=RdNeaSgqcFg" target="_new"&gt;&lt;img src="http://lh5.ggpht.com/_q7jyIQc7ftY/TOs51kVTQOI/AAAAAAAAAKg/O2bD6U-Q7rs/videof2597c0d10dd%5B12%5D.jpg?imgmax=800" style="border-style: none;" galleryimg="no" onload="var downlevelDiv = document.getElementById('dcd7158d-b58a-4a3b-bbe5-b616080b6758'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/RdNeaSgqcFg?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/RdNeaSgqcFg?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Although I can appreciate the above analogies, more often than not, I think Beautiful Katamari is the most appropriate analogy.&lt;/p&gt;  &lt;div style="padding: 0px; margin: 0px; display: inline; float: none;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:db6caaf3-dbef-4ede-a0f3-3c1fc27ab153" class="wlWriterEditableSmartContent"&gt;&lt;div id="5c3a494b-00a6-4b84-95cf-d7ec50e8d421" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=r2-5oM5bE4I" target="_new"&gt;&lt;img src="http://lh6.ggpht.com/_q7jyIQc7ftY/TOs51xNn-DI/AAAAAAAAAKk/YJijf5HJKGE/video9282ae344e46%5B3%5D.jpg?imgmax=800" style="border-style: none;" galleryimg="no" onload="var downlevelDiv = document.getElementById('5c3a494b-00a6-4b84-95cf-d7ec50e8d421'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/r2-5oM5bE4I?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/r2-5oM5bE4I?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;252\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-4559029555077844845?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/4559029555077844845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2010/11/katamari-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/4559029555077844845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/4559029555077844845'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2010/11/katamari-code.html' title='Katamari Code'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_q7jyIQc7ftY/TOs51P0yf5I/AAAAAAAAAKc/7j-5mymkAX0/s72-c/video03b0f9aaa0c7%5B14%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-779978742026228385</id><published>2010-08-10T21:51:00.003-05:00</published><updated>2010-08-11T11:50:06.891-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Time Until Productivity In WPF</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_q7jyIQc7ftY/TGIQL_U4H3I/AAAAAAAAAJ8/rsVGNcA5RLQ/s1600-h/kingkongtorso%5B5%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="kingkongtorso" border="0" alt="kingkongtorso" align="left" src="http://lh6.ggpht.com/_q7jyIQc7ftY/TGIQMO87i8I/AAAAAAAAAKA/q-0YNh9UQ6o/kingkongtorso_thumb%5B3%5D.jpg?imgmax=800" width="256" height="183" /&gt;&lt;/a&gt; One of the things I see over-and-over-again when reading about teams that are deciding if they should adopt WPF or not is the fear of the learning curve, and the worry that they will not be productive for a huge period of time. Given that I’ve recently become productive in WPF myself, I thought I would talk about my experience in this area.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;A little background about myself: I would consider myself to be your average mid-30 year old ALT.NET developer. I got my start programming BASIC and 65xx assembly as a kid in the early 80s on a Commodore 64, got my first programming job doing Java in the late 90s, and started using ASP.NET in the late 1.0 beta days. Programming is one of my hobbies, but I am not the type that stays up all hours of the night working on my pet OSS project. I am also not a “computer scientist” or language wonk. However, I am passionately interested in software craftsmanship. &lt;a href="http://en.wikipedia.org/wiki/Solid_(object-oriented_design)" target="_blank"&gt;S.O.L.I.D.&lt;/a&gt; is prominent in my tool belt.&lt;/p&gt;  &lt;p&gt;My attention was first turned to WPF in the early fall of 2008. My group was facing a large desktop project. The question came up as to if we should go with Winforms or WPF. No one on the team had any practical Winforms experience, so the initial reaction was that we should go with WPF since Microsoft had made it clear that it was the future of Windows desktop development. However, we all had heard rumblings about how difficult WPF was. That being the case, each member of the team created a very small drag-and-drop application to test the waters. The general consensus was that if you ignored the more advanced features of WPF, it was just as easy as Winforms drag-and-drop + code behind development. Mind you, we did not want to do that sort of development, but it became apparent that that style of development would be equally painful using either framework. Note that at this time, I really had no idea how to make a real application using WPF, but I did understand the very basic concept of how XAML markup changed the game from Winforms development.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Estimated time spent learning WPF during this period: 8 hours&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;After the initial decision making process, I returned to ASP.NET and WCF development. The WPF project didn’t really get started until spring 2009. I was not slated to work on the project, but I was enlisted to help decide the preliminary architecture. Once I was given that task, I began to look around for application frameworks, or at the very least, some patterns that had momentum behind them. At this time, I learned about the MVVM pattern via the still insightful &lt;a href="http://blog.lab49.com/archives/2650" target="_blank"&gt;Jason Dolinger video&lt;/a&gt;. It really seemed to click in my mind so I began looking for an application framework to support this pattern. I did not find a mature application framework per say, but I did come across &lt;a href="http://compositewpf.codeplex.com/" target="_blank"&gt;PRISM&lt;/a&gt;. There were a few other budding frameworks at the time, but PRISM was way ahead of the game. Therefore, we decided to go with PRISM using the MVVM presentation pattern on the client side of the application. Once that decision was made, I was back off the project and doing other things. I did however start following a few WPF blogs at this time, but I did not do any WPF coding.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Estimated time spent learning WPF during this period: 8 hours.     &lt;br /&gt;Total estimated time: 16 hours.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This July, my schedule freed up and I was put on the project 50% of my time. I was tasked with a reporting interface that had to show a list of available reports and then dynamically show parameter UI elements depending on which report was selected. &lt;/p&gt;  &lt;p&gt;As soon as I was assigned to the project, I got a copy of &lt;a href="http://www.manning.com/feldman2/" target="_blank"&gt;WPF in Action with Visual Studio 2008&lt;/a&gt;. I read the book half the day during my work week, and then a few hours each night at home. As someone who learned programming through &lt;a href="http://en.wikipedia.org/wiki/Type-in_program" target="_blank"&gt;type-in&lt;/a&gt; programming, I made sure that I recreated all of the samples myself. Also at this time, I grabbed the latest version of PRISM and took a peek at the examples.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Estimated time spent learning WPF during this period: 30 hours.     &lt;br /&gt;Total estimated time: 46 hours.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The first week of actual development was pretty brutal. MVVM was not the problem. PRISM was not the problem. XAML and databinding is where I was banging my head against the wall. It kind of worked like HTML, and it kind of didn’t. That first week was pretty aggravating, but pretty much every problem I encountered was just an internet search away.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Estimated time spent learning WPF during this period: 30 hours.     &lt;br /&gt;Total estimated time: 76 hours.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I became productive after that first week. I’ll be the first to admit that I don’t intimately know how WPF works behind the scenes (like I do with ASP.NET). However, I do think that I became productive within a reasonable amount of time.&lt;/p&gt;  &lt;p&gt;Looking back, I can safely say it took me about &lt;strong&gt;80 hours&lt;/strong&gt; to go from expert ASP.NET programmer to productive WPF programmer.&amp;#160; That being said, I do not know how long it would have taken me to go from expert ASP.NET programmer to productive Winforms developer. Something tells me it wouldn’t have been a number that would have made us use Winforms instead of WPF.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-779978742026228385?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/779978742026228385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2010/08/time-until-productivity-in-wpf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/779978742026228385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/779978742026228385'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2010/08/time-until-productivity-in-wpf.html' title='Time Until Productivity In WPF'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_q7jyIQc7ftY/TGIQMO87i8I/AAAAAAAAAKA/q-0YNh9UQ6o/s72-c/kingkongtorso_thumb%5B3%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-8504107361654100667</id><published>2010-07-19T21:51:00.001-05:00</published><updated>2010-07-19T21:51:59.680-05:00</updated><title type='text'>Should .NET Auto Properties Have Unit Tests?</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_q7jyIQc7ftY/TEUPTXjQkaI/AAAAAAAAAJk/msOQhdNwXMw/s1600-h/testing_scaled%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="testing_scaled" border="0" alt="testing_scaled" align="left" src="http://lh5.ggpht.com/_q7jyIQc7ftY/TEUPToq5lYI/AAAAAAAAAJo/sdyCLhr3Tao/testing_scaled_thumb%5B2%5D.jpg?imgmax=800" width="252" height="204" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Should .NET auto properties be unit tested? It is very easy to argue that testing auto properties falls into the “testing the .NET framework” smell and is a waste of time. However, experience has shown me otherwise. This is something that I’ve gone back and forth on many times since auto properties were introduced. For the time being, I think I’ve reached a conclusion. That conclusion is yes. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I typically do two types of testing: 1) Test Driven Design, and 2) Test while/after unit testing. Let’s consider these two scenarios.&lt;/p&gt;  &lt;p&gt;When doing test driven design, there is no question. You should write tests for your auto properties. Test driven design is not about testing; it’s about design. The rule of thumb is that you don’t write any code without a test dictating its need. Case closed (in general).&lt;/p&gt;  &lt;p&gt;Things get trickier when doing test while/after unit testing. This type of testing is more about creating a test harness. When writing tests after the fact, I know that the property is implemented using auto properties. Therefore, if I am taking a white box approach, I know that my implementation of the encapsulated property is simply the .NET framework. Following that line of thought, testing auto properties is testing the .NET framework. However, I tend to view test while/after testing as a test harness of the public contract. This is black box testing. A public property is an encapsulation, and therefore it should be tested. It’s not uncommon for an auto property to be converted into a regular property as an application lives on. I’d have to say that I would want a test there to capture any publicly facing change in that encapsulation.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-8504107361654100667?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/8504107361654100667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2010/07/should-net-auto-properties-have-unit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/8504107361654100667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/8504107361654100667'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2010/07/should-net-auto-properties-have-unit.html' title='Should .NET Auto Properties Have Unit Tests?'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_q7jyIQc7ftY/TEUPToq5lYI/AAAAAAAAAJo/sdyCLhr3Tao/s72-c/testing_scaled_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-1357829850531395545</id><published>2010-04-26T20:07:00.008-05:00</published><updated>2010-04-26T20:31:46.128-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Persistence Ignorant Lazy Loading For Your Hand-Rolled DAL In .NET 4.0 Using Lazy&lt;T&gt;</title><content type='html'>&lt;div&gt;This post is a brief update to the .NET 3.5 article I posted about &lt;a href="http://mynerditorium.blogspot.com/2010/01/practical-pi-lazy-loading-for-your-hand.html" target="_blank"&gt;P.I. lazy loading&lt;/a&gt;. The only major change I have made to the code is to use the new &lt;a href="http://msdn.microsoft.com/en-us/library/dd642331.aspx" target="_blank"&gt;Lazy&amp;lt;T&amp;gt;&lt;/a&gt; class that was introduced in .NET 4.0. This considerably cleans up the LazyLoadingList&amp;lt;T&amp;gt; class from the previous post.&lt;/div&gt;  &lt;br /&gt;&lt;div&gt;Here is the new LazyLoadingList&amp;lt;T&amp;gt;:  &lt;br /&gt;&lt;pre class="csharp" name="code"&gt;&lt;br /&gt;public class LazyLoadingList&amp;lt;T&amp;gt; : IList&amp;lt;T&amp;gt;&lt;br /&gt;{&lt;br /&gt;   private Lazy&amp;lt;IList&amp;lt;T&amp;gt;&amp;gt; _lazyList;&lt;br /&gt;&lt;br /&gt;   public LazyLoadingList(Lazy&amp;lt;IList&amp;lt;T&amp;gt;&amp;gt; lazyList)&lt;br /&gt;   {&lt;br /&gt;      _lazyList = lazyList;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   #region Implementation of IEnumerable&lt;br /&gt;&lt;br /&gt;   public IEnumerator&amp;lt;T&amp;gt; GetEnumerator()&lt;br /&gt;   {&lt;br /&gt;      return _lazyList.Value.GetEnumerator();&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   IEnumerator IEnumerable.GetEnumerator()&lt;br /&gt;   {&lt;br /&gt;      return _lazyList.Value.GetEnumerator();&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   #endregion&lt;br /&gt;&lt;br /&gt;   #region Implementation of ICollection&amp;lt;T&amp;gt;&lt;br /&gt;&lt;br /&gt;   public void Add(T item)&lt;br /&gt;   {&lt;br /&gt;      _lazyList.Value.Add(item);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public void Clear()&lt;br /&gt;   {&lt;br /&gt;      _lazyList.Value.Clear();&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public bool Contains(T item)&lt;br /&gt;   {&lt;br /&gt;      return _lazyList.Value.Contains(item);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public void CopyTo(T[] array, int arrayIndex)&lt;br /&gt;   {&lt;br /&gt;      _lazyList.Value.CopyTo(array, arrayIndex);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public bool Remove(T item)&lt;br /&gt;   {&lt;br /&gt;      return _lazyList.Value.Remove(item);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public int Count&lt;br /&gt;   {&lt;br /&gt;      get&lt;br /&gt;      {&lt;br /&gt;         return _lazyList.Value.Count;&lt;br /&gt;      }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public bool IsReadOnly&lt;br /&gt;   {&lt;br /&gt;      get&lt;br /&gt;      {&lt;br /&gt;         return ((ICollection&amp;lt;T&amp;gt;)_lazyList.Value).IsReadOnly;&lt;br /&gt;      }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   #endregion&lt;br /&gt;&lt;br /&gt;   #region Implementation of IList&amp;lt;T&amp;gt;&lt;br /&gt;&lt;br /&gt;   public int IndexOf(T item)&lt;br /&gt;   {&lt;br /&gt;      return _lazyList.Value.IndexOf(item);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public void Insert(int index, T item)&lt;br /&gt;   {&lt;br /&gt;      _lazyList.Value.Insert(index, item);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public void RemoveAt(int index)&lt;br /&gt;   {&lt;br /&gt;      _lazyList.Value.RemoveAt(index);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public T this[int index]&lt;br /&gt;   {&lt;br /&gt;      get&lt;br /&gt;      {&lt;br /&gt;         return _lazyList.Value[index];&lt;br /&gt;      }&lt;br /&gt;      set&lt;br /&gt;      {&lt;br /&gt;         _lazyList.Value[index] = value;&lt;br /&gt;      }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   #endregion&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Here are the changes to the invoking code:&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;&lt;br /&gt;public class CompanyDAO : ICompanyDAO&lt;br /&gt;{&lt;br /&gt;   List&amp;lt;Company&amp;gt; _companiesInDatabase = new List&amp;lt;Company&amp;gt;&lt;br /&gt;         {&lt;br /&gt;             new Company(){Name = "ACME"},&lt;br /&gt;             new Company(){Name = "Hardees"}&lt;br /&gt;         };&lt;br /&gt;&lt;br /&gt;   #region Implementation of ICompanyDAO&lt;br /&gt;&lt;br /&gt;   public Company GetByName(string name)&lt;br /&gt;   {&lt;br /&gt;      // Write to console to demonstrate when loading is happening&lt;br /&gt;      Console.WriteLine("---Loading Company---");&lt;br /&gt;&lt;br /&gt;      // Pretend we are calling / mapping from a store procedure&lt;br /&gt;      var company = _companiesInDatabase.Where(x =&gt; x.Name == name).First();&lt;br /&gt;&lt;br /&gt;      &lt;br /&gt;      // Create / add the lazily loaded collection&lt;br /&gt;      if (company != null)&lt;br /&gt;      {&lt;br /&gt;         var lazyLoader = new Lazy&amp;lt;IList&amp;lt;Employee&amp;gt;&amp;gt;(&lt;br /&gt;               () =&gt;&lt;br /&gt;                     {&lt;br /&gt;                        var employeeDAO = new EmployeeDAO();&lt;br /&gt;                        return employeeDAO.GetByCompanyName(name).ToList();&lt;br /&gt;                     }&lt;br /&gt;            );&lt;br /&gt;&lt;br /&gt;         company.Employees = new LazyLoadingList&amp;lt;Employee&amp;gt;(lazyLoader);&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      return company;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   #endregion&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The full source can be found here: &lt;a href="http://github.com/dauger/BlogSamples"&gt;http://github.com/dauger/BlogSamples&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-1357829850531395545?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/1357829850531395545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2010/04/persistent-ignorant-lazy-loading-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/1357829850531395545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/1357829850531395545'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2010/04/persistent-ignorant-lazy-loading-for.html' title='Persistence Ignorant Lazy Loading For Your Hand-Rolled DAL In .NET 4.0 Using Lazy&amp;lt;T&amp;gt;'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-814118832650921646</id><published>2010-04-07T10:09:00.005-05:00</published><updated>2010-06-12T10:39:45.939-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>How to fail at ORM</title><content type='html'>&lt;p&gt;&lt;a href="http://www.nhforge.org"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="NoORM" border="0" alt="NoORM" align="left" src="http://lh6.ggpht.com/_q7jyIQc7ftY/S7ygKmyfOxI/AAAAAAAAAH4/PBz-J0DBaP4/NoORM_thumb%5B5%5D.png?imgmax=800" width="117" height="112" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Let's face it: if trends continue, some form of ORM will be a fact of life at most .net organizations that develop business / enterprise software. Microsoft isn't playing games this time with Entity Framework. They mean for it to succeed. Additionally, at the time of writing this, NHibernate has been downloaded 391,024 times from sourceforge alone (there is more than one place to download it from). This being the case, I’m going to give everyone a few pointers to ensure that their first attempt at ORM fails.&lt;/p&gt;  &lt;p&gt;Here are my tips to insure ORM adoption failure (in no particular order):&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Consider the ORM’s SQL engine as a replacement for SQL knowledge.&lt;/strong&gt; The whole point behind ORMs is so that I don’t have to write or understand SQL right? WRONG!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Consider the ORM’s SQL engine to be a black box. &lt;/strong&gt;I got back the correct dataset, so this must be the best SQL the ORM can produce right? WRONG! Most ORMs will create drastically different SQL depending on how the object query is structured.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Don’t get more than a skin deep understanding of the ORM. &lt;/strong&gt;If you run into a brick wall with a bit of behavior from the ORM, you can follow two paths. You can A) learn about the finer points of the ORM to resolve the issue, or B) rip the ORM out of your application. The latter is the outcome I’ve seen more often than not. A classic example of this is the N+1 select issue where the app calls the database in a loop. ORMs have things such as eager loading, multi-queries, and future queries to avoid extra trips to the database. However, it’s best to ignore the existence of those features if you want to fail at ORM.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Use ORM generated schema without manually tweaking it. &lt;/strong&gt;Many ORMs will happily create a schema for the developer just how they specified it, and index free. Ideally you shouldn’t use generated schema at all once you are up and running. A DBA should be creating a schema using relational theory. However, if you want to fail, it’s best to just used that generated schema.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Use the ORM for 100% of your data access.     &lt;br /&gt;&lt;/strong&gt;Most ORMs allow for dropping into prepared SQL, stored procedures, and even db function calls. However, it’s best to ignore this functionality if you want to fail. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Maintain OO purity at all costs.     &lt;br /&gt;&lt;/strong&gt;Does fetching your aggregate root cause an 11 table join? So be it. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Cut the DBA out of the development process.     &lt;br /&gt;&lt;/strong&gt;The whole point of ORM is to cut out the DBA right? WRONG! The DBA should be just as active with helping to craft the data access strategy as they would with a hand rolled data access layer. Cutting the DBA of the picture is a recipe for failure.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Don’t profile your application.     &lt;br /&gt;&lt;/strong&gt;If you want to fail, it’s best to find out if you have have created a SQL nightmare once you hit production. NHProf, EFProf, L2SProf, and SQL Profiler are your friends. Ignore them to fail.&lt;/p&gt;  &lt;p&gt;I hope you find these tips helpful. I’d like to hear about any other tips for ORM failure you might have.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-814118832650921646?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/814118832650921646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2010/04/how-to-fail-at-orm.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/814118832650921646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/814118832650921646'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2010/04/how-to-fail-at-orm.html' title='How to fail at ORM'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_q7jyIQc7ftY/S7ygKmyfOxI/AAAAAAAAAH4/PBz-J0DBaP4/s72-c/NoORM_thumb%5B5%5D.png?imgmax=800' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-6356571283801980178</id><published>2010-03-12T15:45:00.012-06:00</published><updated>2010-03-30T17:55:48.444-05:00</updated><title type='text'>Possibly The Most Important C# Interview Question</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_q7jyIQc7ftY/S5q2PBEDi0I/AAAAAAAAAHs/OWsNrkCFNI4/s1600-h/brain_resized%5B3%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="brain_resized" border="0" alt="brain_resized" align="left" src="http://lh3.ggpht.com/_q7jyIQc7ftY/S5q2PRvTf3I/AAAAAAAAAHw/NivJNU9RUBQ/brain_resized_thumb%5B1%5D.jpg?imgmax=800" width="108" height="145" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;&lt;br /&gt;The Problem&lt;/h4&gt;  &lt;p&gt;Recently I was reviewing some code at work that was written by a senior developer that had left the organization. I saw something along these lines that set off a huge red flag in my head:&lt;/p&gt;&lt;pre class="csharp" name="code"&gt;Address newAddress = customer.Address;&lt;br /&gt;newAddress.LineOne = "122 SongbirdLane"; // more changes etc...&lt;br /&gt;customer.Address = newAddress; // RED FLAG!&lt;/pre&gt;&lt;p&gt;Although the above code technically works, I took it as a warning sign indicating that the developer probably didn’t understand how references work. Sadly, my suspicions were confirmed after I dug through some more code. Even worse, the application was littered with hacks to fix areas where this misunderstanding manifested problems.&lt;/p&gt;&lt;p&gt;Yes ladies and gentlemen, there are people out there that have been doing C# development since .NET 1.0 that don’t have a functional mental model of how the language works. I wish I could say this was the first time I’ve run into this. Sadly, I’ve run into it several times over the years.&lt;/p&gt;&lt;h4&gt;The Solution&lt;/h4&gt;&lt;p&gt;It is very easy to weed these people out during the interview process by asking a very simple interview question. That question is:&lt;/p&gt;&lt;p&gt;What does the following program output to the command line?&lt;/p&gt;&lt;pre class="csharp" name="code"&gt;&lt;br /&gt;public class Person&lt;br /&gt;{&lt;br /&gt;   public string Name { get; set; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Program&lt;br /&gt;{&lt;br /&gt;   static void Main(string[] args)      &lt;br /&gt;   {&lt;br /&gt;      Person joe = new Person();&lt;br /&gt;      joe.Name = "Joe";&lt;br /&gt;&lt;br /&gt;      Person tim = joe;&lt;br /&gt;      tim.Name = "tim";&lt;br /&gt;&lt;br /&gt;      Console.WriteLine(joe.Name);&lt;br /&gt;      Console.WriteLine(tim.Name);&lt;br /&gt;&lt;br /&gt;      int myNumber = 666;&lt;br /&gt;&lt;br /&gt;      DoSomething(myNumber);&lt;br /&gt;&lt;br /&gt;      Console.WriteLine(myNumber);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   private static void DoSomething(int someNumber)&lt;br /&gt;   {&lt;br /&gt;      someNumber = 777;&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;The trick is that you have to ask it to every developer, no matter how many years they have under their belt.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-6356571283801980178?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/6356571283801980178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2010/03/possibly-most-important-c-interview.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6356571283801980178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6356571283801980178'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2010/03/possibly-most-important-c-interview.html' title='Possibly The Most Important C# Interview Question'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_q7jyIQc7ftY/S5q2PRvTf3I/AAAAAAAAAHw/NivJNU9RUBQ/s72-c/brain_resized_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-6553427440051800195</id><published>2010-02-20T19:59:00.001-06:00</published><updated>2010-02-20T19:59:20.029-06:00</updated><title type='text'>Speeding Up Cassini In Vista And Windows 7</title><content type='html'>&lt;p&gt;I was doing some ASP.NET MVC work this evening on my new supa-fast Windows 7 machine using the built-in Visual Studio Cassini webserver. For some odd reason, it was taking a few seconds for my tiny pages to resolve / render. I was using Chrome, so I decided to try Firefox. Firefox was just as slow. I then tried using IE and it performed with the speediness I was used to on my old XP install. I did some digging, and I came across the solution to the problem in two places:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.wagnerdanda.me/2009/12/asp-net-development-server-slow-on-windows-vista7-with-firefox-or-chrome/" href="http://www.wagnerdanda.me/2009/12/asp-net-development-server-slow-on-windows-vista7-with-firefox-or-chrome/"&gt;http://www.wagnerdanda.me/2009/12/asp-net-development-server-slow-on-windows-vista7-with-firefox-or-chrome/&lt;/a&gt;    &lt;br /&gt;&lt;a title="http://stackoverflow.com/questions/1416128/my-local-host-goes-so-slow-now-that-i-am-on-windows-7-and-asp-net-mvc" href="http://stackoverflow.com/questions/1416128/my-local-host-goes-so-slow-now-that-i-am-on-windows-7-and-asp-net-mvc"&gt;http://stackoverflow.com/questions/1416128/my-local-host-goes-so-slow-now-that-i-am-on-windows-7-and-asp-net-mvc&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It turns this is an issue with ipv6 and resolving localhost on Vista and Windows 7. The fix is very easy – you simply need to uncomment the localhost entry in your&amp;#160; C:\Windows\System32\drivers\etc\hosts file by changing this:&lt;/p&gt;  &lt;p&gt;# localhost name resolution is handled within DNS itself.   &lt;br /&gt;#&amp;#160;&amp;#160;&amp;#160; 127.0.0.1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; localhost    &lt;br /&gt;    &lt;br /&gt;to:&lt;/p&gt;  &lt;p&gt;# localhost name resolution is handled within DNS itself.   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 127.0.0.1&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; localhost&lt;/p&gt;  &lt;p&gt;You may need to run your text editor as administrator in order to save the changes.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-6553427440051800195?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/6553427440051800195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2010/02/speeding-up-cassini-in-vista-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6553427440051800195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6553427440051800195'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2010/02/speeding-up-cassini-in-vista-and.html' title='Speeding Up Cassini In Vista And Windows 7'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-7813784248826379504</id><published>2010-01-31T22:08:00.022-06:00</published><updated>2010-04-27T11:46:42.181-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Practical Persistence Ignorant Lazy Loading For Your Hand-rolled DAL</title><content type='html'>&lt;h3&gt;Introduction – A Word Of Warning&lt;/h3&gt;  First off - I &lt;strong&gt;do not&lt;/strong&gt; recommend you write your own hand-rolled data access solution for an OO .NET application. Ayende has a &lt;a href="http://ayende.com/Blog/archive/2006/05/12/25ReasonsNotToWriteYourOwnObjectRelationalMapper.aspx" target="_blank"&gt;great post&lt;/a&gt; that should convince you to use something like &lt;a href="http://nhforge.org/" target="_blank"&gt;NHibernate&lt;/a&gt;, &lt;a href="http://www.llblgen.com/" target="_blank"&gt;LLBLGen&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/ADO.NET_Entity_Framework" target="_blank"&gt;Entity Framework&lt;/a&gt;, or &lt;a href="http://en.wikipedia.org/wiki/LINQ_to_SQL#LINQ_to_SQL" target="_blank"&gt;Linq2Sql&lt;/a&gt;. I strongly agree with him. I’ve worked on several projects which had a hand rolled, stored procedure based DAL. All of the DALs that were of a medium-to-large-size eventually turned into a huge mess, or something with tons of friction and poor performance. That being said, I am not allowed to use an ORM at my current employer, and I know that many others are not as well. That being the case, I think this post may be of use for other people in the same situation.&lt;br /&gt;&lt;br /&gt;Secondly – I specifically used the word “practical” to describe this strategy. Although there are ways to do this sort of thing with code gen and/or reflection, I am going to assume that most places that don’t use ORMs will find those techniques to be too complex.&lt;br /&gt;&lt;br /&gt;Thirdly – This article is focused on the lazy loading aspect of the sample code. The implementation / organization of the data access layer is not to be taken as best practices. It is organized in a way to be easily understood, and so it does not get in the way of the topic at hand. I am also ignoring many other features of a robust data access layer (change tracking, transactions, etc…) as I think they do not need to be understood in order to put this concept in action. However, there is nothing about this implementation that would exclude it from being used with other ORM concepts.&lt;br /&gt;&lt;h3&gt;Terminology&lt;/h3&gt;  As far as this article is concerned, here are the operational definitions of the core terms:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Entity: &lt;/strong&gt;An object that is persisted to the database that has business related behaviors.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Data Access Object (DAO): &lt;/strong&gt;A DAO is a data access layer (DAL) object that has the responsibility of calling the database and mapping the results to entities. The Repository Pattern is a relative of the DAO pattern.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Persistence Awareness (PA):&lt;/strong&gt; An entity that is persistence aware is one that is responsible for its own persistence.&lt;br /&gt;&lt;br /&gt;Examples: &lt;pre class="csharp" name="code"&gt;var myClass = MyClass.LoadByID(id);&lt;br /&gt;myClass.Save();&lt;br /&gt;&lt;/pre&gt;A PA entity is either directly or indirectly aware of its data store and is responsible for coordinating the persistence of its children. When the persistence methods are called, it news up the appropriate DAO and gets the results back.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Persistence Ignorance (PI): &lt;/strong&gt;An entity that is persistence ignorant relies on other classes to handle the responsibility of persisting it.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;var myClassDAO = new MyClassDAO();&lt;br /&gt;var myClass = myClassDAO.GetByID(id);&lt;br /&gt;myClassDAO.Save(myClass);&lt;br /&gt;&lt;/pre&gt;The coordination of persisting and retrieving child entities is also handled by the external class.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Lazy Loading: &lt;/strong&gt;Lazy loading is a term that refers to delaying the retrieval of a child collection until it is accessed. This is done to save trips to the database and to reduce application memory consumption.  Consider the following code:&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;&lt;br /&gt;var userDAO = new UserDAO();&lt;br /&gt;var company = userDAO.GetByName("Hardees");&lt;br /&gt;&lt;br /&gt;Console.WriteLine(company.Name);&lt;br /&gt;&lt;br /&gt;foreach(var employee in Company.Employees)&lt;br /&gt;{&lt;br /&gt; Console.WriteLine(employee.Name);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;If we are using lazy loading, the employee collection would not be loaded until we hit the body of the foreach loop. If we were using eager loading, the employee collection would have been loaded when the company was loaded.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Why should PI be preferred to PA?&lt;/h3&gt;There are two reasons which are a bit related. First off, persistence code tends to be tricky and long winded. Often times there is more persistence code in a PA class than business logic. Secondly, you always want to give your class as few responsibilities / reasons to change as possible. The code in your entities should focus on business behavior rather than infrastructure concerns such as persistence.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;If PI is preferred, why do most hand rolled data access layers use PA?&lt;/h3&gt;In my experience, people usually prefer PA because it makes lazy loading extremely easy. The typical pattern is to hit the database when a property is accessed and its backing field is null. This is a very easy pattern to understand, but unfortunately it sticks our entities with all of the overhead and complexity of persistence concerns.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Less Talk, More Rock!&lt;/h3&gt;Now that we have all the background out of the way, let’s take a look at an implementation I’ve tried recently that seems to work well and is very easy to understand. It comes down to two classes which are coordinated by the application's DAO classes. These two classes are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;LazyLoadingList&amp;lt;T&amp;gt; &lt;/strong&gt;- This is a wrapper around List&amp;lt;T&amp;gt; which triggers a load whenever one of its methods is called.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;LoadDelegate&amp;lt;T&amp;gt; &lt;/strong&gt;-&lt;strong&gt; &lt;/strong&gt;This is the delegate that is executed when a LazyLoadingList&amp;lt;T&amp;gt;’s load method is triggered. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Here is the code for the LazyLoadingList&amp;lt;T&amp;gt;:&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public class LazyLoadingList&amp;lt;t&amp;gt; : IList&amp;lt;t&amp;gt;&lt;br /&gt;{&lt;br /&gt; private List&amp;lt;t&amp;gt; _list;&lt;br /&gt; private LoadDelegate&amp;lt;t&amp;gt; _loadDelegate;&lt;br /&gt;&lt;br /&gt; public LazyLoadingList(LoadDelegate&amp;lt;t&amp;gt; loadDelegate)&lt;br /&gt; {&lt;br /&gt;    _loadDelegate = loadDelegate;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void Load()&lt;br /&gt; {&lt;br /&gt;    _list = _loadDelegate().ToList();&lt;br /&gt;    Loaded = true;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private bool Loaded { get; set; }&lt;br /&gt;&lt;br /&gt; private void LoadIfNotLoaded()&lt;br /&gt; {&lt;br /&gt;    if (!Loaded)&lt;br /&gt;    {&lt;br /&gt;       Load();&lt;br /&gt;    }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #region Implementation of IEnumerable&lt;br /&gt;&lt;br /&gt; public IEnumerator&amp;lt;t&amp;gt; GetEnumerator()&lt;br /&gt; {&lt;br /&gt;    LoadIfNotLoaded();&lt;br /&gt;    return _list.GetEnumerator();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; IEnumerator IEnumerable.GetEnumerator()&lt;br /&gt; {&lt;br /&gt;    LoadIfNotLoaded();&lt;br /&gt;    return _list.GetEnumerator();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #endregion&lt;br /&gt;&lt;br /&gt; #region Implementation of ICollection&amp;lt;t&amp;gt;&lt;br /&gt;&lt;br /&gt; public void Add(T item)&lt;br /&gt; {&lt;br /&gt;    LoadIfNotLoaded();&lt;br /&gt;    _list.Add(item);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void Clear()&lt;br /&gt; {&lt;br /&gt;    LoadIfNotLoaded();&lt;br /&gt;    _list.Clear();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public bool Contains(T item)&lt;br /&gt; {&lt;br /&gt;    LoadIfNotLoaded();&lt;br /&gt;    return _list.Contains(item);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void CopyTo(T[] array, int arrayIndex)&lt;br /&gt; {&lt;br /&gt;    LoadIfNotLoaded();&lt;br /&gt;    _list.CopyTo(array, arrayIndex);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public bool Remove(T item)&lt;br /&gt; {&lt;br /&gt;    LoadIfNotLoaded();&lt;br /&gt;    return _list.Remove(item);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public int Count&lt;br /&gt; {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;       LoadIfNotLoaded();&lt;br /&gt;       return _list.Count;&lt;br /&gt;    }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public bool IsReadOnly&lt;br /&gt; {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;       LoadIfNotLoaded();&lt;br /&gt;       return ((ICollection&amp;lt;t&amp;gt;)_list).IsReadOnly;&lt;br /&gt;    }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #endregion&lt;br /&gt;&lt;br /&gt; #region Implementation of IList&amp;lt;t&amp;gt;&lt;br /&gt;&lt;br /&gt; public int IndexOf(T item)&lt;br /&gt; {&lt;br /&gt;    LoadIfNotLoaded();&lt;br /&gt;    return _list.IndexOf(item);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void Insert(int index, T item)&lt;br /&gt; {&lt;br /&gt;    LoadIfNotLoaded();&lt;br /&gt;    _list.Insert(index, item);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void RemoveAt(int index)&lt;br /&gt; {&lt;br /&gt;    LoadIfNotLoaded();&lt;br /&gt;    _list.RemoveAt(index);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public T this[int index]&lt;br /&gt; {&lt;br /&gt;    get&lt;br /&gt;    {&lt;br /&gt;       LoadIfNotLoaded();&lt;br /&gt;       return _list[index];&lt;br /&gt;    }&lt;br /&gt;    set&lt;br /&gt;    {&lt;br /&gt;       LoadIfNotLoaded();&lt;br /&gt;       _list[index] = value;&lt;br /&gt;    }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #endregion&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Here is the code for the LoadDelegate&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public delegate IEnumerable&amp;lt;t&amp;gt; LoadDelegate&amp;lt;t&amp;gt;();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;The Demo&lt;/h3&gt;I’ve put a &lt;a href="http://github.com/dauger/BlogSamples/tree/master/LazyLoadingCollections/" target="_blank"&gt;demo up on Github&lt;/a&gt; that ties this altogether. The project is organized as follows:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_q7jyIQc7ftY/S2ZgSyylYBI/AAAAAAAAAHY/TRps3_UgVXA/s1600-h/LazyLoadingCollectionsProject%5B6%5D.jpg"&gt;&lt;img style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="LazyLoadingCollectionsProject" alt="LazyLoadingCollectionsProject" src="http://lh5.ggpht.com/_q7jyIQc7ftY/S2ZgTfARuEI/AAAAAAAAAHc/qvR2N3cVA2E/LazyLoadingCollectionsProject_thumb%5B4%5D.jpg?imgmax=800" border="0" width="296" height="491" /&gt;&lt;/a&gt;&lt;br /&gt;The Employee load delegate gets wired up in the Company DAO like so:&lt;/p&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public class FakeCompanyDAO : ICompanyDAO&lt;br /&gt;{&lt;br /&gt; List&amp;lt;company&amp;gt; _companiesInDatabase = new List&amp;lt;company&amp;gt;&lt;br /&gt; {&lt;br /&gt;    new Company(){Name = "ACME"},&lt;br /&gt;    new Company(){Name = "Hardees"}&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt; #region Implementation of ICompanyDAO&lt;br /&gt;&lt;br /&gt; public Company GetByName(string name)&lt;br /&gt; {&lt;br /&gt;    // Pretend we are calling / mapping from a store procedure&lt;br /&gt;    var company = _companiesInDatabase.Where(x =&amp;gt; x.Name == name).First();&lt;br /&gt;&lt;br /&gt;    if(company != null)&lt;br /&gt;    {&lt;br /&gt;       company.Employees = new LazyLoadingList&amp;lt;employee&amp;gt;(&lt;br /&gt;          () =&amp;gt;&lt;br /&gt;             {&lt;br /&gt;                var employeeDAL = new FakeEmployeeDAO();&lt;br /&gt;         &lt;br /&gt;                // To demonstrate when loading is happening&lt;br /&gt;                Console.WriteLine("Loading Employees");&lt;br /&gt;&lt;br /&gt;                return employeeDAL.GetByCompanyName(name);&lt;br /&gt;             }&lt;br /&gt;       );&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return company;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; #endregion&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The Demo program code:&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;class Program&lt;br /&gt;{&lt;br /&gt; static void Main(string[] args)&lt;br /&gt; {&lt;br /&gt;    ICompanyDAO db = new FakeCompanyDAO();&lt;br /&gt;&lt;br /&gt;    var company = db.GetByName("Hardees");&lt;br /&gt;&lt;br /&gt;    Console.WriteLine("Company Loaded: " + company.Name);&lt;br /&gt;    Console.WriteLine("About to iterate Employees");&lt;br /&gt;&lt;br /&gt;    foreach(var emp in company.Employees)&lt;br /&gt;    {&lt;br /&gt;       Console.WriteLine(emp.Name);&lt;br /&gt;    }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The output:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_q7jyIQc7ftY/S2ZgToyhq4I/AAAAAAAAAHg/-cnZM485QoU/s1600-h/Output%5B10%5D.jpg"&gt;&lt;img style="border-width: 0px; display: block; float: none; margin-left: auto; margin-right: auto;" title="Output" alt="Output" src="http://lh4.ggpht.com/_q7jyIQc7ftY/S2ZgT6jetrI/AAAAAAAAAHk/ma1VCqMxEDE/Output_thumb%5B6%5D.jpg?imgmax=800" border="0" width="432" height="250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Possible Improvements &lt;/h3&gt;There are many possible improvements to this strategy depending on how far one is willing to go. It would be very easy to auto wire up everything with one generic delegate if DAO semantics were uniform across DAOs etc…&lt;br /&gt;&lt;br /&gt;Source code: &lt;a title="http://github.com/dauger/BlogSamples/tree/master/LazyLoadingCollections/" href="http://github.com/dauger/BlogSamples/tree/master/LazyLoadingCollections/"&gt;http://github.com/dauger/BlogSamples/tree/master/LazyLoadingCollections/&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;UDPATE: This technique has been reworked for .NET 4.0 &lt;a href="http://mynerditorium.blogspot.com/2010/04/persistent-ignorant-lazy-loading-for.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-7813784248826379504?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/7813784248826379504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2010/01/practical-pi-lazy-loading-for-your-hand.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/7813784248826379504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/7813784248826379504'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2010/01/practical-pi-lazy-loading-for-your-hand.html' title='Practical Persistence Ignorant Lazy Loading For Your Hand-rolled DAL'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_q7jyIQc7ftY/S2ZgTfARuEI/AAAAAAAAAHc/qvR2N3cVA2E/s72-c/LazyLoadingCollectionsProject_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-5669350424730875300</id><published>2010-01-09T21:43:00.001-06:00</published><updated>2010-01-09T21:43:56.220-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Modern Computing and Gaming'/><title type='text'>Gnome Evolution’s Missing Feature</title><content type='html'>&lt;p&gt;Here is a screenshot of the Windows Live Email account setup:    &lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_q7jyIQc7ftY/S0lM9praO_I/AAAAAAAAAHA/yMlttjKgJ3Q/s1600-h/LiveMail%5B8%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="LiveMail" border="0" alt="LiveMail" src="http://lh3.ggpht.com/_q7jyIQc7ftY/S0lM962WcFI/AAAAAAAAAHE/-JnbyW7Qan4/LiveMail_thumb%5B4%5D.jpg?imgmax=800" width="392" height="473" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Here is a screenshot of Thunderbird’s account setup:   &lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_q7jyIQc7ftY/S0lM-Pk8kQI/AAAAAAAAAHI/Z-ByxWGIAI4/s1600-h/thunderbird%5B5%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="thunderbird" border="0" alt="thunderbird" src="http://lh3.ggpht.com/_q7jyIQc7ftY/S0lM-T7wsrI/AAAAAAAAAHM/aLWG7llHsLo/thunderbird_thumb%5B3%5D.jpg?imgmax=800" width="610" height="572" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Here is a screenshot of Gnome Evolution’s account setup:   &lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_q7jyIQc7ftY/S0lM-g8oB6I/AAAAAAAAAHQ/UFgCxHSH044/s1600-h/evolution%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="evolution" border="0" alt="evolution" src="http://lh5.ggpht.com/_q7jyIQc7ftY/S0lM-wDkf7I/AAAAAAAAAHU/5LTn0vxL3Oo/evolution_thumb%5B2%5D.jpg?imgmax=800" width="540" height="509" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice anything? Evolution does not give you the option to leave email on the server until you delete it. This will lead to an inbox management nightmare for those of use who multi-boot. Evolution is very nicely integrated into Ubuntu, but sadly I cannot use it because of this missing feature.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-5669350424730875300?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/5669350424730875300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2010/01/gnome-evolutions-missing-feature.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5669350424730875300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5669350424730875300'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2010/01/gnome-evolutions-missing-feature.html' title='Gnome Evolution’s Missing Feature'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_q7jyIQc7ftY/S0lM962WcFI/AAAAAAAAAHE/-JnbyW7Qan4/s72-c/LiveMail_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-2521849578146887385</id><published>2009-11-01T00:15:00.001-05:00</published><updated>2009-11-01T00:17:48.429-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Modern Computing and Gaming'/><title type='text'>Having Ubuntu 9.10 WIFI Problems?</title><content type='html'>&lt;p&gt;Apparently the new version of Ubuntu broke compatibility with a lot of wifi adaptors, including some relatively new USB adaptors. If you have upgraded to 9.10 but are having problems seeing and/or connecting to your wireless network you may want to try the following:&lt;/p&gt; &lt;p&gt;1. Open the update manager&lt;br&gt;2. Click the settings button&lt;br&gt;3. Click the updates tab&lt;br&gt;4. Check the “Unsupported updates (karmic-backports)” checkbox&lt;br&gt;5. Open a terminal and type (and reboot): &lt;/p&gt;&lt;pre&gt;sudo apt-get install linux-backports-modules-karmic&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-2521849578146887385?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/2521849578146887385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/11/having-ubuntu-910-wifi-problems.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/2521849578146887385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/2521849578146887385'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/11/having-ubuntu-910-wifi-problems.html' title='Having Ubuntu 9.10 WIFI Problems?'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-6996466715388743734</id><published>2009-10-31T14:37:00.001-05:00</published><updated>2009-10-31T14:45:34.548-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>NHibernate 2.1.1 GA Released!</title><content type='html'>&lt;p&gt;Fabio Maulo has &lt;a href="http://twitter.com/fabiomaulo/status/5320546312"&gt;announced&lt;/a&gt; the release of NHibernate 2.1.1 GA via Twitter.&lt;/p&gt;  &lt;p&gt;Get the bits and/or code here:    &lt;br /&gt;&lt;a title="http://sourceforge.net/projects/nhibernate/" href="http://sourceforge.net/projects/nhibernate/"&gt;http://sourceforge.net/projects/nhibernate/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-6996466715388743734?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/6996466715388743734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/nhibernate-211-ga-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6996466715388743734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6996466715388743734'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/nhibernate-211-ga-released.html' title='NHibernate 2.1.1 GA Released!'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-4501462056686959940</id><published>2009-10-25T22:59:00.001-05:00</published><updated>2009-10-31T14:42:13.926-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Reactions to the Legacy Programmer Boss</title><content type='html'>&lt;p&gt;There have been a couple blog responses to my “&lt;a href="http://mynerditorium.blogspot.com/2009/10/state-of-spolsky-or-how-i-learned-to.html"&gt;Legacy Programmer Boss&lt;/a&gt;” post. The first was by &lt;a href="http://www.thoughtclusters.com/2009/10/the-legacy-programmer-boss/"&gt;Krishna Kumar&lt;/a&gt; and the second was by &lt;a href="http://www.politicsofdesign.com/2009/10/7-helpful-legacy-programmer-boss-tips.html"&gt;Mike Marshall&lt;/a&gt;. Both bloggers really ran with the idea and came up with some very thoughtful and constructive posts. I’m very happy that neither of them reacted to the term as if I meant it in a pejorative way. Although I was a bit miffed at Joel, I didn’t mean it to be a pejorative. A person’s focus and expertise shift as they advance in their career. That being the case, it’s up to each and everyone of us to use our brain when assimilating advice from our peers and superiors. We are all responsible for thinking critically about any advice we take, no matter who it is from.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-4501462056686959940?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/4501462056686959940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/reactions-to-legacy-programmer-boss.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/4501462056686959940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/4501462056686959940'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/reactions-to-legacy-programmer-boss.html' title='Reactions to the Legacy Programmer Boss'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-6072140378921062189</id><published>2009-10-22T23:48:00.002-05:00</published><updated>2009-10-22T23:57:53.445-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>Grow Your Shop’s Maturity by Managing up via New Blood.</title><content type='html'>&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_q7jyIQc7ftY/SuE1udTe4hI/AAAAAAAAAFs/3CAhqpI2Bjg/s1600-h/2008_01_17_pb-kids-growth%5B14%5D.jpg"&gt;&lt;img style="border: 0px none ; display: inline; margin-left: 0px; margin-right: 0px;" title="2008_01_17_pb-kids-growth" alt="2008_01_17_pb-kids-growth" src="http://lh5.ggpht.com/_q7jyIQc7ftY/SuE1ulMVMYI/AAAAAAAAAFw/5scl5g80Gtg/2008_01_17_pb-kids-growth_thumb%5B12%5D.jpg?imgmax=800" width="199" align="left" border="0" height="244" /&gt;&lt;/a&gt; I work with a great team of people. Both of my managers used to sling code which is a godsend if you ever had to report under a person who hasn’t. I don’t have to convince them about the vagularities or the particulars surround about my craft etc… They inherently pad my estimates, or instinctually know what I mean when I say “this will be a hack that needs to be fixed in the next maintenance cycle” However, since they don’t code anymore, they can be skeptical (rightly so) of anything that happens in the industry post when they had their feet in the fire and may veto ideas that were out of reach when they were fighting the flames.&lt;/p&gt;  &lt;p&gt;When I joined the organization about 6 years ago, I took a look at the build process, I said: 1) All builds need to be done from the same machine (not individual developer machines) and 2) the builds and possibly the deployments need to be automated.&lt;/p&gt;  &lt;p&gt;When I joined and espoused these ideas we had severe build / deployment pain due to the manual process, but from management’s perspective, automated builds and deployments seemed too bleeding edge or too costly to implement. &lt;/p&gt;  &lt;p&gt;Time went on; the pain continued for years. I repeated my opinion several times a year.&lt;/p&gt;  &lt;p&gt;Eventually the economy tanked. We were in the position to hire new blood (both consultants and full-timers). I was fortunate enough to be either a part of the interview panel or have input on the “desired skills” of the want ads. Each time we interviewed new full-timers or consultants I specifically looked for people who had skills we required AND skills we didn’t have as an organization but I thought we needed.&lt;/p&gt;  &lt;p&gt;Over time, more and more people said: “we should automate the build!” Many voices are louder than one voice.&lt;/p&gt;  &lt;p&gt;We are now trying to automate the build.&lt;/p&gt;  &lt;p&gt;Thank you new blood.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-6072140378921062189?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/6072140378921062189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/grow-your-shops-maturity-by-managing-up.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6072140378921062189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6072140378921062189'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/grow-your-shops-maturity-by-managing-up.html' title='Grow Your Shop’s Maturity by Managing up via New Blood.'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_q7jyIQc7ftY/SuE1ulMVMYI/AAAAAAAAAFw/5scl5g80Gtg/s72-c/2008_01_17_pb-kids-growth_thumb%5B12%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-5963736953089630700</id><published>2009-10-22T22:04:00.002-05:00</published><updated>2009-10-22T22:57:45.902-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>In Response to: “Where is C# in the Programming Language Lifecycle?”</title><content type='html'>&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_q7jyIQc7ftY/SuEdRRAo4bI/AAAAAAAAAFk/N3kuXjX8YqM/s1600-h/david-bowie-102%5B11%5D.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="david-bowie-102" border="0" alt="david-bowie-102" align="left" src="http://lh3.ggpht.com/_q7jyIQc7ftY/SuEdRvG3D2I/AAAAAAAAAFo/Bt8WmCMY5vk/david-bowie-102_thumb%5B9%5D.jpg?imgmax=800" width="244" height="237" /&gt;&lt;/a&gt; &lt;strong&gt;&lt;font size="4"&gt;K. Scott Allen raises an interesting question when he asks&lt;/font&gt;&lt;/strong&gt; “&lt;a id="viewpost_ascx_TitleUrl" title="Title of this entry." href="http://odetocode.com/Blogs/scott/archive/2009/10/22/where-is-c-in-the-programming-language-lifecycle.aspx"&gt;Where is C# in the Programming Language Lifecycle?&lt;/a&gt;”&lt;/p&gt;  &lt;p&gt;The nearly 8 year production life of C# has been very interesting. As a former Java 1 / Java 2 developer I can honestly say that C# started out looking a lot like Java. However, it has evolved into its own over the years. Point in case: I recently wrote a framework that heavily leveraged the things introduced in .NET 2 and beyond (generics, lambdas, linq to objects, nullables, anonymous types, etc). Looking at the code, it barely resembles the C# we all wrote in the past and what the majority of C# coders are still writing. In fact it is rather illegible if you only know C# 1.x and semi-legible if you know C# 2.0. It seems that C# managed to become something else without bothering anyone who didn’t care to notice. &lt;/p&gt;  &lt;p&gt;Although C# has successfully managed to be a shape-shifter in the ever evolving world of language trends, I think K. Scott Allen is onto something when he questions whether or not C# will continue to thrive in the multi-threaded / multi-CPU world. I have a hunch that C# may remain a first class language if the single threaded / parallel language interop pans out in an easy fashion. I think C# (and VB) will remain to be the best way to model a domain and perform OOP in the Microsoft world, but perhaps other languages will advance to be the main application control / host languages. If the interop story goes South, people will choose something else. &lt;/p&gt;  &lt;p&gt;All that being said - how much change can a language go through before it falls under the weight of shims that allowed it to grow outside of its initial design? Eventually the need to implement a hot feature to keep the language popular could undermine the language. I do have to admit however, that the C# team seems to have managed to truly extend the language rather than shim it or fake it to get new features in. The way generics were introduced really allowed the 3.0 / 3.5 features to be added in a way that isn’t dissonant with the original base language. Anders and co. basically put in the the genetic possibility of growing another limb of indeterminate descent without disrupting the body. &lt;/p&gt;  &lt;p&gt;So what is my answer to the original question? C# has definitely hit maturity. Based off of the trends I am seeing in online code samples and forum questions, I think C# as it was in .net 1.0/1.1 timeframe is on the verge of decay as 3.5# semantics are probably just past the adoption/acceptance stage. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-5963736953089630700?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/5963736953089630700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/in-response-to-where-is-c-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5963736953089630700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5963736953089630700'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/in-response-to-where-is-c-in.html' title='In Response to: “Where is C# in the Programming Language Lifecycle?”'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_q7jyIQc7ftY/SuEdRvG3D2I/AAAAAAAAAFo/Bt8WmCMY5vk/s72-c/david-bowie-102_thumb%5B9%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-6317360527281836755</id><published>2009-10-07T22:33:00.026-05:00</published><updated>2009-10-08T00:10:28.276-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><title type='text'>The State of Spolsky or: How I Learned to Ignore the Legacy Programmer Boss.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_q7jyIQc7ftY/Ss1d89C5RzI/AAAAAAAAAEo/iDWpoVY-0fk/s1600-h/flat-planet-431x300.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 278px;" src="http://4.bp.blogspot.com/_q7jyIQc7ftY/Ss1d89C5RzI/AAAAAAAAAEo/iDWpoVY-0fk/s400/flat-planet-431x300.jpg" alt="" id="BLOGGER_PHOTO_ID_5390067630792591154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;If you don’t know who &lt;a href="http://joelonsoftware.com/AboutMe.html"&gt;Joel Spolsky&lt;/a&gt; is, you can probably pass on this blog entry.&lt;/span&gt; I have a ton of respect for Joel. I’ve learned a lot from his posts over the years, and I still consider him to be a guru in the business of software. I’m sure I'll continue to learn from him yet.&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:130%;"&gt;In recent weeks, Joel has made some controversial posts&lt;/span&gt; regarding what many people think are the hallmarks of modern programming (design patterns, TDD, IoC, etc…). In &lt;a href="http://joelonsoftware.com/items/2009/09/23.html"&gt;this&lt;/a&gt; blog post, Joel espouses the ethic of the “Duct Tape Programmer”. In &lt;a href="http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed-to-straightforward-di-code/871420#871420"&gt;this&lt;/a&gt; &lt;a href="http://www.stackoverflow.com/"&gt;stackoverflow.com&lt;/a&gt; answer he has this to say about IoC:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;IoC containers take a simple, elegant, and useful concept, and make it something you have to study for two days with a 200-page manual.&lt;/p&gt;    &lt;p&gt;I personally am perplexed at how the IoC community took a beautiful, &lt;a href="http://www.martinfowler.com/articles/injection.html"&gt;elegant article by Martin Fowler&lt;/a&gt; and turned it into a bunch of complex frameworks typically with 200-300 page manuals.&lt;/p&gt;    &lt;p&gt;I try not to be judgemental (HAHA!), but I think that people who use IoC containers are (A) very smart and (B) lacking in empathy for people who aren't as smart as they are. Everything makes perfect sense to them, so they have trouble understanding that many ordinary programmers will find the concepts confusing. It's the &lt;a href="http://www.nytimes.com/2007/12/30/business/30know.html"&gt;curse of knowledge&lt;/a&gt;. The people who understand IoC containers have trouble believing that there are people who don't understand it.&lt;/p&gt;    &lt;p&gt;The most valuable benefit of using an IoC container is that you can have a configuration switch in one place which lets you change between, say, test mode and production mode. For example, suppose you have two versions of your database access classes... one version which logged aggressively and did a lot of validation, which you used during development, and another version without logging or validation that was screamingly fast for production. It is nice to be able to switch between them in one place. On the other hand, this is a fairly trivial problem easily handled in a simpler way without the complexity of IoC containers.&lt;/p&gt;    &lt;p&gt;I believe that if you use IoC containers, your code becomes, frankly, a lot harder to read. The number of places you have to look at to figure out what the code is trying to do goes up by at least one. And somewhere in heaven an angel cries out.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I see two things happening here:&lt;br /&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Joel continues his (very worthwhile IMHO) crusade against the “&lt;a href="http://www.joelonsoftware.com/articles/fog0000000018.html"&gt;Architecture&lt;/a&gt; &lt;a href="http://www.joelonsoftware.com/items/2008/05/01.html"&gt;Astronaut&lt;/a&gt;” who is so far into the clouds that they aren’t writing code anymore but think they should tell people how to code, and the “shiny new toy” developers who have a solution looking for a problem. I’ve had very painful experiences with both of these archetypes. &lt;/li&gt;    &lt;li&gt;Joel inadvertently enters “Legacy Programmer Boss” territory as he discounts mainstream changes in programming that have happened since he stopped coding as his primary job. &lt;/li&gt; &lt;/ol&gt;The &lt;span style="font-weight: bold;"&gt;Legacy Programmer Boss&lt;/span&gt; is the manager who had a successful programming career in the past but sees many modern concepts as language baubles, academics, and anti-patterns because they are out of the loop. The fact that they once had a high degree of expertise gives them confidence in making mis-judgements.&lt;br /&gt;&lt;p&gt;There was a point in time where “design patterns” where purely academic. However now-a-days many design patterns have become as ubiquitous as the FOR loop (that was the idea behind defining these patterns). IoC is not difficult to understand by any developer who can understand the factory pattern. Frankly, the average developer can go to 0 – 60 with IoC by watching a &lt;a href="http://www.pnpguidance.net/Screencast/UnityDependencyInjectionIoCScreencast.aspx"&gt;22 minute video from David Hayden&lt;/a&gt;.  &lt;strong&gt;If a developer cannot understand the factory pattern, then they are doomed to be a duct tape programmer.&lt;/strong&gt; I’ve worked with many duct tape programmers, and over time their code requires more duct tape.&lt;/p&gt;  &lt;p&gt;Joel is justified in his efforts to decry the Architecture Astronaut, but his Duct Tape Programmer is just as bad. After years of experience in the field, I think &lt;a href="http://blog.objectmentor.com/articles/category/uncle-bobs-blatherings"&gt;Uncle Bob’s&lt;/a&gt; Clean Coder / Software Craftsman is the happy medium.&lt;/p&gt;  &lt;p&gt;If you write software for a living, you should keep up with the current practices and use them as you see fit. If you see your opinion in the minority, you are either a genius, an early adoptor, or wrong.  &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-6317360527281836755?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/6317360527281836755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/state-of-spolsky-or-how-i-learned-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6317360527281836755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6317360527281836755'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/state-of-spolsky-or-how-i-learned-to.html' title='The State of Spolsky or: How I Learned to Ignore the Legacy Programmer Boss.'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_q7jyIQc7ftY/Ss1d89C5RzI/AAAAAAAAAEo/iDWpoVY-0fk/s72-c/flat-planet-431x300.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-2471149689591118289</id><published>2009-10-03T00:14:00.008-05:00</published><updated>2009-10-03T01:21:24.885-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>This blog will be a’changin’</title><content type='html'>&lt;p&gt;Until now, this blog has been primarily focused on retro-gaming / retro-computing. I plan on expanding it in the very near future to include .NET development, slice of life, and some music / media related content.&lt;/p&gt;  &lt;p&gt;Things in the works:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strike&gt;Rework the theme to be wide enough for code.&lt;/strike&gt; (DONE 10/3) &lt;/li&gt;&lt;li&gt;&lt;strike&gt;Reorganize tags&lt;/strike&gt; (DONE 10/3)&lt;/li&gt;&lt;li&gt;&lt;strike&gt;Add RSS feeds based on tags so people can ignore the topics they don’t care about.&lt;/strike&gt; (DONE 10/3)&lt;/li&gt;    &lt;li&gt;Possibly move to a hosted Wordpress install on my Webhost4life site. I really haven’t made up my mind about this yet. &lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-2471149689591118289?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/2471149689591118289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/this-blog-will-be-achangin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/2471149689591118289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/2471149689591118289'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/this-blog-will-be-achangin.html' title='This blog will be a’changin’'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-7853137010431058101</id><published>2009-10-01T23:41:00.007-05:00</published><updated>2009-10-03T01:13:57.428-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Vectrex</title><content type='html'>I finally got my hands on a &lt;a href="http://en.wikipedia.org/wiki/Vectrex"&gt;Vectrex&lt;/a&gt; via ebay complete with 12 games, manuals, and overlays. My neighbor had one of these when I was a kid, and I've seriously been lusting after it ever since. I spent many hours playing Scramble and Star Trek on one of these in my youth. &lt;br /&gt;&lt;br /&gt;The Vectrex has to be one of the most unique early 80s game systems. It's a vector graphics based console that came with its own CRT monitor. It had one built-in game (Minestorm) and a cartridge slot for purchased games. The screen displayed black and white vector graphics but used transparent overlays that were placed on the screen to add color and other graphical elements. In my opinion, it remains the best way to recreate vector graphics arcade games at home. Emulation is great, but nothing can beat seeing these graphics on a CRT. &lt;br /&gt;&lt;br /&gt;Here is the system I acquired:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://s128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/10012009/?action=view&amp;current=02_Vectrex.jpg" target="_blank"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/10012009/02_Vectrex.jpg" border="0" alt="Vectrex"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;My camera's autofocus had a hell of a time dealing with the CRT's refresh rate. It tended to snap some trippy pictures. Here is the cleanest picture I could snap of Minestorm in action:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://s128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/10012009/?action=view&amp;current=03_Vectrex.jpg" target="_blank"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/10012009/03_Vectrex.jpg" border="0" alt="Vectrex"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Here is one of the trippier interpretations my camera made of Minestorm:&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://s128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/10012009/?action=view&amp;current=04_Vectrex.jpg" target="_blank"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/10012009/04_Vectrex.jpg" border="0" alt="Vectrex"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;If you are a fan of vector graphics, but are unfamiliar with the vectrex, you owe yourself a peek at the following video from Classic Game Room:&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/rFlHdlfZQgI&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/rFlHdlfZQgI&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Here is a great retrospective video of several classic Vectrex games. This video is done via an emulator and I'll think you'll see that quite a bit of sparkle is missing. It's still cool nonetheless.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/J8eZOJr5rs4&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/J8eZOJr5rs4&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Finally, just to prove that the Vectrex was the shizzle back in the day:&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/O1dkR4WaaX8&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/O1dkR4WaaX8&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-7853137010431058101?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/7853137010431058101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/vectrex.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/7853137010431058101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/7853137010431058101'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/10/vectrex.html' title='Vectrex'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-5584442160848869547</id><published>2009-08-31T16:58:00.015-05:00</published><updated>2009-10-03T01:15:15.201-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Autoduel</title><content type='html'>For those who aren't familiar with this game, Autoduel is a classic computer strategy/RPG conversion of the Car Wars table top game. I've been hunting for an affordable good condition copy of Autoduel for quite some time now. One with a decent BIN price showed up on ebay late last week. I couldn't resist. I used to have this as a kid and I wanted to get a physical copy back into my collection. The awesome box art and cool map that comes with the game make this worth having. &lt;br /&gt;&lt;br /&gt;Coincidentally, this week's episode of &lt;a href="http://www.youtube.com/user/blacklily8#play/user/86169BC590748B1B"&gt;Matt Chat&lt;/a&gt; is on none other than Autoduel!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_q7jyIQc7ftY/SpxISmGftkI/AAAAAAAAAEY/pb6THfgf2kY/s1600-h/Autoduel.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 392px;" src="http://4.bp.blogspot.com/_q7jyIQc7ftY/SpxISmGftkI/AAAAAAAAAEY/pb6THfgf2kY/s400/Autoduel.jpg" alt="" id="BLOGGER_PHOTO_ID_5376251539476166210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;object width="400" height="246"&gt;&lt;param name="movie" value="http://www.youtube.com/v/XNVFCM3hUqA&amp;hl=en&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/XNVFCM3hUqA&amp;hl=en&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="246"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-5584442160848869547?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/5584442160848869547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/08/autoduel.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5584442160848869547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5584442160848869547'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/08/autoduel.html' title='Autoduel'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_q7jyIQc7ftY/SpxISmGftkI/AAAAAAAAAEY/pb6THfgf2kY/s72-c/Autoduel.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-5959178918055189504</id><published>2009-07-08T22:23:00.004-05:00</published><updated>2009-07-08T22:36:19.319-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>The Mouse's Reprieve</title><content type='html'>When I arrived home from work this evening, I was greeted by an odd clickety clack sound. A quick glance around the kitchen revealed this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_q7jyIQc7ftY/SlVjSi2B7RI/AAAAAAAAAEQ/PHaLP4tKP-g/s1600-h/StupidMouse.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_q7jyIQc7ftY/SlVjSi2B7RI/AAAAAAAAAEQ/PHaLP4tKP-g/s400/StupidMouse.JPG" alt="" id="BLOGGER_PHOTO_ID_5356296502069292306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Apparently a mouse had got itself caught in a trap I had set out, but only by its arm. The mouse then ran around the side of the refrigerator (pooping several times apparently) and squeezed inside the refrigerator's vent cover. I initially tried to pull the mouse out of the slot it crawled into, but it emitted a pitiful squeak. I ended up taking the cover off and letting it go outside. It took off ok, so I'm sure I'll be seeing it in my kitchen again soon. Next time it may not be so lucky.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-5959178918055189504?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/5959178918055189504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/07/mouse-that-couldnt-get-away.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5959178918055189504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5959178918055189504'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/07/mouse-that-couldnt-get-away.html' title='The Mouse&apos;s Reprieve'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_q7jyIQc7ftY/SlVjSi2B7RI/AAAAAAAAAEQ/PHaLP4tKP-g/s72-c/StupidMouse.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-3496057578435246283</id><published>2009-06-15T22:46:00.007-05:00</published><updated>2009-10-03T01:14:59.081-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Hello C64 From Ebay. Will You Be My PAL?</title><content type='html'>I finally managed to get my hands on a PAL C64. It came with a light gun, tension adjustable joystick, Datasette, and several games on tape. I have a NTSC/PAL S-Video to VGA converter box, but unfortunately the results were pretty horrible. I'm going to have to get myself a PAL capable monitor ASAP.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://s128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/06152009/?action=view&amp;amp;current=PAL_Wide.jpg" target="_blank"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/06152009/PAL_Wide.jpg" alt="C64,Retro computing" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-3496057578435246283?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/3496057578435246283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/06/hello-c64-from-ebay-will-you-be-my-pal.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/3496057578435246283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/3496057578435246283'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/06/hello-c64-from-ebay-will-you-be-my-pal.html' title='Hello C64 From Ebay. Will You Be My PAL?'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-4008906284642650430</id><published>2009-06-12T00:13:00.011-05:00</published><updated>2009-10-03T01:15:27.332-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Breadbox64 - The Commodore 64 Twitter Client</title><content type='html'>As unbelievable as it may sound, there is now a Twitter client for the C64. It is called &lt;a href="http://www.vandenbrande.com/wp/2009/06/breadbox64-a-twitter-client-for-the-c64/"&gt;Breadbox64&lt;/a&gt; and it was written by Johan Van den Brande. It is built on top of the &lt;a href="http://en.wikipedia.org/wiki/Contiki"&gt;Contiki &lt;/a&gt;network stack and requires a RR-Net compatible Ethernet card.&lt;br /&gt;&lt;br /&gt;I have sent my first tweet from my C64 and it was good.&lt;br /&gt;&lt;br /&gt;If you don't believe me, see for yourself. Here is a video from the author of the software:&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8m86mm-SMGA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/8m86mm-SMGA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-4008906284642650430?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/4008906284642650430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/06/breadbox-commodore-64-twitter-client.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/4008906284642650430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/4008906284642650430'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/06/breadbox-commodore-64-twitter-client.html' title='Breadbox64 - The Commodore 64 Twitter Client'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-7025372644002759310</id><published>2009-05-14T23:52:00.007-05:00</published><updated>2009-10-03T01:15:43.745-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Did You Know That New Games Are Still Being Released For The Commodore 64?</title><content type='html'>It may surprise you to read this, but the venerable Commodore 64 is still getting new commercial game releases in this day and age. Although 99.99999% of the software industry left the C64 behind in the early 90s, there are a few independent developers and publishers here and there that still put out releases. One such label is  &lt;a href="http://www.binaryzone.org/psytronik/"&gt;Psytronik Software&lt;/a&gt;. Psytronic specializes in creative conversions and re-releases of classic 8 bit hits, and the development of new titles.  Their most recent project, "Knight'n'Grail" has been getting a lot of positive buzz in the C64 community, and all indications point to the possibility of an instant classic. Check out this pre-release video:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ygbyiXGX6ho&amp;amp;rel=0&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/ygbyiXGX6ho&amp;amp;rel=0&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;More information about Knight'n'Grail can be found here:&lt;br /&gt;&lt;a href="http://psytronik.blogspot.com/2009/04/quest-for-holy-grail.html"&gt;http://psytronik.blogspot.com/2009/04/quest-for-holy-grail.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.binaryzone.org/retrostore/index.php?main_page=product_info&amp;amp;products_id=473"&gt;http://www.binaryzone.org/retrostore/index.php?main_page=product_info&amp;amp;products_id=473&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-7025372644002759310?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/7025372644002759310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/05/did-you-know-that-new-games-are-still.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/7025372644002759310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/7025372644002759310'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/05/did-you-know-that-new-games-are-still.html' title='Did You Know That New Games Are Still Being Released For The Commodore 64?'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-4836090338501646046</id><published>2009-05-11T21:56:00.009-05:00</published><updated>2009-10-03T01:16:00.887-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><category scheme='http://www.blogger.com/atom/ns#' term='Music'/><title type='text'>I've Got Pac-Man Fever</title><content type='html'>If you grew up in the Atari age you'll undoubtedly remember the top-ten hit Pac-Man Fever. Pac-Man Fever was a single (1981) and &lt;a href="http://en.wikipedia.org/wiki/Pac-Man_Fever_%28album%29"&gt;album&lt;/a&gt; (1982) by recording artists &lt;a href="http://en.wikipedia.org/wiki/Buckner_%26_Garcia"&gt;Buckner &amp;amp; Garcia&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://s128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/051109/?action=view&amp;amp;current=PacManFever.jpg" target="_blank"&gt;&lt;img border="0" alt="Pac-Man Fever" src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/051109/PacManFever.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My fiancee happened to have a copy of the 1982 album which I've become rather reattached to since I recently got a Technics SL-1200MK2 Turntable. If you like Weird Al, you may find this album to be liquid crack. Unfortunately her copy has all signs of being owned by a child back in the day, so I set out on a hunt to get an archivable copy. Of course, the first thing I did was look to see if it made it to CD. I found it had been released on CD as a rerecording. Sadly the rerecording just doesn't do it for those nostalgic memories as the voices have aged and the original sound effects were not able to be re-licensed. Luckily I was able to import a "sealed" copy via &lt;a href="http://gemm.com/"&gt;gemm.com&lt;/a&gt;. It arrived from a record shop in Italy still in its wrap, but the seal was not 100% unbroken. Therefore, it had some mold/mildew on it that creeped in over the years, but otherwise it was untouched. I've managed to clean it up and I hope to digitally archive it ASAP.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;&lt;span class="mw-headline"&gt;Track listing&lt;/span&gt;&lt;/h2&gt;&lt;ol&gt;&lt;li&gt;"&lt;a title="Pac-Man Fever (song)" href="http://en.wikipedia.org/wiki/Pac-Man_Fever_%28song%29"&gt;Pac-Man Fever&lt;/a&gt;" (&lt;i&gt;&lt;a title="Pac-Man" href="http://en.wikipedia.org/wiki/Pac-Man"&gt;Pac-Man&lt;/a&gt;&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;"Froggy's Lament" (&lt;i&gt;&lt;a title="Frogger" href="http://en.wikipedia.org/wiki/Frogger"&gt;Frogger&lt;/a&gt;&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;"Ode to a Centipede" (&lt;i&gt;&lt;a title="Centipede (video game)" href="http://en.wikipedia.org/wiki/Centipede_%28video_game%29"&gt;Centipede&lt;/a&gt;&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;"Do the Donkey Kong" (&lt;i&gt;&lt;a class="mw-redirect" title="Donkey Kong (arcade game)" href="http://en.wikipedia.org/wiki/Donkey_Kong_%28arcade_game%29"&gt;Donkey Kong&lt;/a&gt;&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;"Hyperspace" (&lt;i&gt;&lt;a class="mw-redirect" title="Asteroids (game)" href="http://en.wikipedia.org/wiki/Asteroids_%28game%29"&gt;Asteroids&lt;/a&gt;&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;"The Defender" (&lt;i&gt;&lt;a class="mw-redirect" title="Defender (game)" href="http://en.wikipedia.org/wiki/Defender_%28game%29"&gt;Defender&lt;/a&gt;&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;"Mouse Trap" (&lt;i&gt;&lt;a title="Mouse Trap" href="http://en.wikipedia.org/wiki/Mouse_Trap"&gt;Mouse Trap&lt;/a&gt;&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;"Goin' Berzerk" (&lt;i&gt;&lt;a title="Berzerk" href="http://en.wikipedia.org/wiki/Berzerk"&gt;Berzerk&lt;/a&gt;&lt;/i&gt;)&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/9167981196729784488-4836090338501646046?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/4836090338501646046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/05/ive-got-pac-man-fever.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/4836090338501646046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/4836090338501646046'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/05/ive-got-pac-man-fever.html' title='I&apos;ve Got Pac-Man Fever'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-6332899023519520789</id><published>2009-05-05T22:08:00.005-05:00</published><updated>2009-10-03T01:16:27.300-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Yes, I'm a Cultist.</title><content type='html'>According to Infoworld.com, I'm a member of one of the biggest tech cults of all time:&lt;br /&gt;&lt;a href="http://www.infoworld.com/d/adventures-in-it/true-believers-biggest-cults-in-tech-433?page=0,4"&gt;http://www.infoworld.com/d/adventures-in-it/true-believers-biggest-cults-in-tech-433?page=0,4&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-6332899023519520789?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/6332899023519520789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2009/05/yes-im-cultist.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6332899023519520789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6332899023519520789'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2009/05/yes-im-cultist.html' title='Yes, I&apos;m a Cultist.'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-561000776568235070</id><published>2008-10-24T18:31:00.006-05:00</published><updated>2009-10-03T01:16:14.691-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>New Goodies</title><content type='html'>A few new goodies have shown up over the past few weeks.&lt;br /&gt;&lt;br /&gt;First up is a copy of Elementary Commodore 64. This book is very unique because the book is littered with some very trippy 80s artwork interpretations of computer language concepts. I may devote a future post to the artwork in this book since I didn't have time to take many photos today. &lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/10242008/04_Elementary_400.jpg"&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/10242008/05_Elementary_Gosub_400.jpg"/&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;My &lt;a href="http://www.1541ultimate.net/"&gt;1541ultimate&lt;/a&gt; with Ethernet arrived last week. This is an amazing cartridge which offers full 1541 emulation while reading/writing to a SD card. It even has an audio out which sends audio that mimics the sound of a 1541. It also has a flashable cartridge ROM and many other very cool features. The current feature set can be found &lt;a href="http://www.1541ultimate.net/content/index.php?option=com_content&amp;view=article&amp;id=7&amp;Itemid=20"&gt;here&lt;/a&gt;. Apparently &lt;a href="http://www.cmdweb.de/scpu.htm"&gt;SuperCPU&lt;/a&gt; emulation is coming soon too, which is something I am very excited about.   &lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/10242008/03_1541u_400.jpg"/&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Other notable recent items include a pleather dust cover for my main 1541 and &lt;a href="http://www.cmdweb.de/jiffy.htm"&gt;JiffyDOS&lt;/a&gt; sets for 2 of my C64s, 1 1541, and 1 1541 II.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-561000776568235070?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/561000776568235070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/10/new-goodies.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/561000776568235070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/561000776568235070'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/10/new-goodies.html' title='New Goodies'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-6807468560192287175</id><published>2008-10-24T17:04:00.006-05:00</published><updated>2009-10-03T01:16:53.557-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>The Kindness of Strangers Near and Far</title><content type='html'>Last night I received a private message from a fellow &lt;a href="http://lemon64.com/"&gt;lemoner&lt;/a&gt; who lives in the Toronto area that the &lt;a href="http://www.edinaartcenter.com/content/facilities/art_center/facilities/media_arts_studio/index.htm"&gt;Peggy Kelly Media Arts Studios&lt;/a&gt; had a Commodore 64, Commodore 1702 monitor, Commodore 1541 floppy drive, and a Star SL-10C printer that they were trying to find a home for. The manager of this arts center had posted to a mailing list that my internet acquaintance reads. Thankfully he remembered that I live in Saint Paul, MN.&lt;br /&gt;&lt;br /&gt;I left a message with the arts center last night to let them know that I was interested. I received a call this morning that I could come and pick it up. Since I had the day off, I decided to make the drive across the metro area to save these retro goodies from ending up in a landfill. While I was there, I was shown around the the studio. The studio has a training area for electronic media production, a photography studio, a media conversion room (photos/VHS/Film to DVD, PAL to NTSC conversion, etc...), and a sound booth/audio recording facility. The art center that houses this studio also has an art gallery, coffee shop, and a shop with jewelry and other crafted items. The center is located in Edina and I recommend any readers in the area to check it out.&lt;br /&gt;&lt;br /&gt;My thanks go out to both Golan and Phil for their kindness. &lt;br /&gt;&lt;br /&gt;... and of course, the obligatory photos:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/10242008/01_commodore_package_400.jpg"&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/10242008/02_printer_400.jpg"&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;As you can see, both the printer and the drive appear to have never been used. The monitor is lightly used and in good condition. The tube appears to be in better shape than the 1702 that I've been using over the past year. The C64 is in good cosmetic condition, but unfortunately it boots to a blank screen. This is a very common issue with C64s that can be caused by several different failures that are usually easy to fix. I have a stack of dead C64s that I can use for parts, so I am pretty sure I can bring this one back to life with a chip swap or two.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-6807468560192287175?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/6807468560192287175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/10/kindness-of-strangers-near-and-far.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6807468560192287175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6807468560192287175'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/10/kindness-of-strangers-near-and-far.html' title='The Kindness of Strangers Near and Far'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-6383129374631301617</id><published>2008-08-25T19:14:00.011-05:00</published><updated>2009-10-03T01:17:04.194-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>The History of the Commodore 64  VH1/I Love the 80s Style</title><content type='html'>I stumbled across the following rather entertaining video via the following blog post: &lt;a href="http://www.bebizzy.com/blog/?p=233"&gt;http://www.bebizzy.com/blog/?p=233&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://blip.tv/play/AcSGb46DSQ" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="240"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-6383129374631301617?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/6383129374631301617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/08/history-of-commodore-64-vh1i-love-80s.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6383129374631301617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6383129374631301617'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/08/history-of-commodore-64-vh1i-love-80s.html' title='The History of the Commodore 64  VH1/I Love the 80s Style'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-3457547779679843061</id><published>2008-08-25T17:26:00.008-05:00</published><updated>2009-10-03T01:17:19.260-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Asheron's Call 100th Update Goes Live August 26th</title><content type='html'>As &lt;a href="http://games.slashdot.org/article.pl?sid=08/06/09/1437200"&gt;reported in June&lt;/a&gt;, August brings the &lt;a href="http://ac.turbine.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=407-ancient-powers&amp;amp;catid=74-2008&amp;amp;Itemid=68"&gt;100th content update&lt;/a&gt; to the venerable MMO, &lt;a href="http://ac.turbine.com/"&gt;Asheron's Call&lt;/a&gt;. The game servers will go down on August 26th at 7am Eastern time for the update. When they come back up at 2pm, users will be greeted with a slew of new content and functionality which is outlined in the update's &lt;a href="http://ac.turbine.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=405-august-2008-release-notes&amp;amp;catid=74-2008&amp;amp;Itemid=68"&gt;release notes&lt;/a&gt;. In a recent &lt;a href="http://www.mmorpg.com/gamelist.cfm?GAME=18&amp;amp;FEATURE=2146&amp;amp;bhcp=1"&gt;video interview&lt;/a&gt;, AC Community Manager Andy Cataldo revealed that this update will be about the size of a retail expansion pack.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Highlights include:&lt;list&gt;&lt;/list&gt;&lt;/p&gt;&lt;li&gt; Three lore-related player/creature factions (Good/Neutral/Evil)&lt;br /&gt;&lt;/li&gt;&lt;li&gt; PvP/Faction land control over two new PK Towns&lt;br /&gt;&lt;/li&gt;&lt;li&gt; New Loot Tier&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Level 8 Spells&lt;br /&gt;&lt;/li&gt;&lt;li&gt; A new landmass called Freebooter Isle, a new area called the Moarsman City, and the expansion of the already existing Graveyard area.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;More information can be found at: &lt;a href="http://ac.turbine.com/"&gt;http://ac.turbine.com&lt;/a&gt;&lt;/li&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-3457547779679843061?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/3457547779679843061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/08/asherons-call-100th-update-goes-live.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/3457547779679843061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/3457547779679843061'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/08/asherons-call-100th-update-goes-live.html' title='Asheron&apos;s Call 100th Update Goes Live August 26th'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-3028069535323893634</id><published>2008-07-25T01:01:00.013-05:00</published><updated>2009-10-03T01:14:42.127-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Modern Computing and Gaming'/><title type='text'>My Unfinished PC Game Wall of Shame</title><content type='html'>My top three hobbies are currently the following:&lt;br /&gt;&lt;br /&gt;1. Playing Guitar&lt;br /&gt;2. Computer Programming/Software Development&lt;br /&gt;3. PC Gaming&lt;br /&gt;&lt;br /&gt;All three of these are time consuming hobbies, which unfortunately means that I don't have a whole lot of time to devote to gaming during the average work week. This became all too obvious to me after I beat &lt;a href="http://www.2kgames.com/bioshock/"&gt;Bioshock&lt;/a&gt; two days ago. I began playing Bioshock on 3/2/2008 and finished it on 7/23/2008. It took me nearly 5 months to make it through a 40 hour game. Oddly enough, I plowed through the 2nd 20 hours of the game over the span of three days this week. I'm currently on a two week &lt;a href="http://www.urbandictionary.com/define.php?term=staycation"&gt;staycation&lt;/a&gt; at the moment so I have a lot of extra time to burn on video games.&lt;br /&gt;&lt;br /&gt;Since I had finally finished Bioshock, I began looking for the game that I would tackle next. Finding a game to play from my current collection is not a difficult task. Apparently over the years I've become very good at buying games and either never playing them or never finishing them for various reasons.&lt;br /&gt;&lt;br /&gt;Ladies and Gentlemen, I offer to you my unfinished PC game wall of shame:&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/07242008/UnfinishedGames_400.jpg" alt="Photobucket" border="0" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;From left-to-right and row-by-row starting at the top:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Oblivion/Shivering Isles/Knights of the Nine &lt;/span&gt;&lt;br /&gt;I began playing this but quit early on because my previous computer was not quite beefy enough.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Call of Cthulu: The Dark Corners of the Earth&lt;/span&gt;&lt;br /&gt;I made it about halfway through this. My save games were lost in a hard drive crash.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Diablo II: Lord of Destruction&lt;/span&gt;&lt;br /&gt;I recently found this in the bargain bin for $10. However, I'm not really sure I want to play all the way through Diablo II again to get to the expansion material.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;The Orange Box (Half Life 2 + Episodes 1 &amp;amp; 2, Team Fortress 2, Portal)&lt;/span&gt;&lt;br /&gt;I have not played this yet except for taking a quick peak at Portal. I should note that I have not played Half Life 2 before either.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The Witcher&lt;/span&gt;&lt;br /&gt;I made it through the first couple chapters of the game, but I immediately quit playing when I heard about the &lt;a href="http://witcher.wikia.com/wiki/Enhanced_edition"&gt;enhanced edition&lt;/a&gt; patch that is due out in September.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Unreal Tournament III&lt;/span&gt;&lt;br /&gt;I'll be frank. I think the single player campaign is laughable. I quit after about 5 missions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Unreal II&lt;/span&gt;&lt;br /&gt;My PC was a little too weak when I originally tried this one.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Neverwinter Knights&lt;/span&gt;&lt;br /&gt;The single player campaign was pretty bad. I quit about 20 hours into it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Fallout 1/2/Tactics&lt;/span&gt;&lt;br /&gt;I just bought this recently and I have not started it yet.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Wheel of Time&lt;/span&gt;&lt;br /&gt;My PC was too wimpy when it came out.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Deus Ex&lt;/span&gt;&lt;br /&gt;I don't remember why I never finished this one. I remember liking it quite a bit.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Vampire the Masquerade&lt;/span&gt;&lt;br /&gt;I think I ran into a show stopper bug, but my memory is a little foggy here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Doom 3&lt;/span&gt;&lt;br /&gt;PC was too wimpy.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Morrowind/Tribunal/Bloodmoon&lt;/span&gt;&lt;br /&gt;PC was too wimpy.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Thief&lt;/span&gt;&lt;br /&gt;This came with a video card. I have never given it a fair shake.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Baldur's Gate/Tales of the Sword Coast&lt;/span&gt;&lt;br /&gt;I never finished this game due to a really stupid blunder on my part. I spent roughly 200 hours playing Baldur's Gate. I purchased the expansion when I was in the last battle of the game. I installed the expansion without backing up my saves. Unfortunately, the expansion just adds some more material to the original story line and raises the difficulty of the last battle quite a bit because they expect that your party will be at a higher level due to the expansion. Unfortunately where my saves were, I could not exit the final battle to go get more experience. Therefore I was trapped in an impossible battle.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Rune&lt;/span&gt;&lt;br /&gt;I lost my save games in a hard drive crash.&lt;br /&gt;&lt;br /&gt;So the question becomes: what should I play next? I'm leaning towards Oblivion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-3028069535323893634?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/3028069535323893634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/07/my-unfinished-pc-game-wall-of-shame.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/3028069535323893634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/3028069535323893634'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/07/my-unfinished-pc-game-wall-of-shame.html' title='My Unfinished PC Game Wall of Shame'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-2101239337651035895</id><published>2008-07-10T23:25:00.007-05:00</published><updated>2009-10-03T01:17:32.643-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Infocom Aquisitions Round 4</title><content type='html'>I'm getting fairly close to having a complete collection of Infocom titles excluding the later years after the brand was purchased. I hope to have a more comprehensive post about this soon, but in the meantime here is what arrived since my last post on the subject:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Infidel_(computer_game)"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/07102008/01_infidel.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/A_Mind_Forever_Voyaging"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/07102008/02_aMindForeverVoyaging.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Journey_(computer_game)"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/07102008/04_Journey.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Plundered_Hearts"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/07102008/03_PlunderedHearts.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/center&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://mynerditorium.blogspot.com/2008/06/infocom-aquisitions-round-3.html"&gt;Round Three&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mynerditorium.blogspot.com/2008/05/infocom-acquisitions-round-2.html"&gt;Round Two&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mynerditorium.blogspot.com/2008/05/infocom-acquisitions-round-1.html"&gt;Round One&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-2101239337651035895?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/2101239337651035895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/07/infocom-aquisitions-round-4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/2101239337651035895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/2101239337651035895'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/07/infocom-aquisitions-round-4.html' title='Infocom Aquisitions Round 4'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-2013042276810426632</id><published>2008-06-25T23:54:00.007-05:00</published><updated>2009-10-03T01:17:51.698-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Infocom Aquisitions Round 3</title><content type='html'>It turns out that I am still collecting Infocom titles. Here are the recent arrivals.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/James_Clavell%27s_Sh%C5%8Dgun"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/06252008/01_Shogun.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;I managed to get my hands on another "big box" package like I did for Sorcerer.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Enchanter_(computer_game)"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/06252008/02_Enchanter.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Trinity_(computer_game)"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/06252008/03_Enchanter.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, like my copy of Stationfall, Planetfall turned out to be a bit of a dud as the box is in poor shape and it is missing some feelies.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/stationfall"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/06252008/04_Stationfall.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;I'm pretty excited about this one because I never played it back in the day and I am a Sherlock Holmes fan. Also, as an added bonus, it is sealed.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Sherlock:_The_Riddle_of_the_Crown_Jewels"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/06252008/05_Sherlock.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-2013042276810426632?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/2013042276810426632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/06/infocom-aquisitions-round-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/2013042276810426632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/2013042276810426632'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/06/infocom-aquisitions-round-3.html' title='Infocom Aquisitions Round 3'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-6428102488483023286</id><published>2008-06-25T23:01:00.006-05:00</published><updated>2009-10-03T01:18:04.136-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Random Acquisitions</title><content type='html'>I've collected a few notable items over the past couple weeks, all of which are a lot of fun.&lt;br /&gt;&lt;br /&gt;I'm still working on building up a comprehensive C64 book library. Here is my latest addition:&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/08_CSBOTC.jpg" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;The second Commodore 64 related item this week is a game that is near and dear to my geek heart. This is the first game I ever played that attempted to translate the pen and paper experience to the computer screen.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Pool_of_Radiance"&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/07_POR.jpg" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;The third Commodore 64 related item that arrived is a HardSID4U device. This is a little usb device that houses four Commodore 64 sound chips which are known as the Sound Interface Device. This unit can be used to give you authentic sound when using an emulator, however it's primary design is to be a synth device that can be controlled by modern recording software and can be used in music production.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://www.hardsid.com/"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/09_HardsidFront.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.hardsid.com/"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/10_HardsidBack.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Finally, here is something to help me ramp up for Fallout 3.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Fallout_%28series%29"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/blog/06_Fallout.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-6428102488483023286?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/6428102488483023286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/06/random-acquisitions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6428102488483023286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/6428102488483023286'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/06/random-acquisitions.html' title='Random Acquisitions'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-606767185317550025</id><published>2008-05-31T18:08:00.008-05:00</published><updated>2009-10-03T01:18:21.080-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Infocom Acquisitions Round 2</title><content type='html'>Here's what I've accumulated via ebay and Amazon on the Infocom front since &lt;a href="http://mynerditorium.blogspot.com/2008/05/infocom-acquisitions-round-1.html"&gt;round 1&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/retrocomputing/053108/01_LeatherGoddess.jpg"&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/retrocomputing/053108/02_Starcross.jpg"&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/retrocomputing/053108/03_Planetfall.jpg"&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/retrocomputing/053108/04_Ballyhoo.jpg"&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/retrocomputing/053108/05_BeyondZork.jpg"&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/retrocomputing/053108/06_Moonmist.jpg"&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/retrocomputing/053108/08_hollywoodhijinks.jpg"&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/retrocomputing/053108/09_Witness.jpg"&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/retrocomputing/053108/Suspect_400.jpg"&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;I am especially fond of this last one. I purchased it used on Amazon and had no idea it wasn't going to be the standard grey box edition. Heck, I didn't even know there was a folio version.&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/retrocomputing/053108/07_Sorcerer.jpg"&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-606767185317550025?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/606767185317550025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/05/infocom-acquisitions-round-2.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/606767185317550025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/606767185317550025'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/05/infocom-acquisitions-round-2.html' title='Infocom Acquisitions Round 2'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-3349575920693450005</id><published>2008-05-14T23:22:00.005-05:00</published><updated>2009-10-03T01:18:39.254-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Infocom Acquisitions Round 1</title><content type='html'>&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/DeadlineFolio_400.jpg" alt="Photobucket - Video and Image Hosting"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/ZorkTrilogy_400.jpg" alt="Photobucket - Video and Image Hosting"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/Bureaucracy_400.jpg" alt="Photobucket - Video and Image Hosting"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051308/400/Cutthroats_400.jpg" alt="Photobucket - Video and Image Hosting"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051408/HH_400.jpg" alt="Photobucket - Video and Image Hosting"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051408/Suspended_400.jpg" alt="Photobucket - Video and Image Hosting"&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051408/wishbringer_400.jpg" alt="Photobucket - Video and Image Hosting"&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-3349575920693450005?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/3349575920693450005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/05/infocom-acquisitions-round-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/3349575920693450005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/3349575920693450005'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/05/infocom-acquisitions-round-1.html' title='Infocom Acquisitions Round 1'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-5749750100075564083</id><published>2008-05-14T23:14:00.009-05:00</published><updated>2009-10-03T01:19:01.973-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>New In box 1541 II and Other Goodies Arrive</title><content type='html'>What better to match my NIB C64C than a matching drive?&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/1541BoxClosed_400.jpg" alt="Photobucket - Video and Image Hosting" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/1541OpenDisk_400.jpg" alt="Photobucket - Video and Image Hosting" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/1541BoxOpenNoDisk_400.jpg" alt="Photobucket - Video and Image Hosting" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/1541Docs_400.jpg" alt="Photobucket - Video and Image Hosting" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/1351Mouse_400.jpg" alt="Photobucket - Video and Image Hosting" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/AllAboutTheCommodore1_400.jpg" alt="Photobucket - Video and Image Hosting" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/ButterField_400.jpg" alt="Photobucket - Video and Image Hosting" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/Calc_400.jpg" alt="Photobucket - Video and Image Hosting" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/DrWatsonClosed_400.jpg" alt="Photobucket - Video and Image Hosting" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/DrWatsonOpen_400.jpg" alt="Photobucket - Video and Image Hosting" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/MMR_REPLAY_400.jpg" alt="Photobucket - Video and Image Hosting" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/RetroSurvival_400.jpg" alt="Photobucket - Video and Image Hosting" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051108/400/Tac2s_400.jpg" alt="Photobucket - Video and Image Hosting" /&gt;&lt;br /&gt;&lt;BR&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/051308/DustCover.jpg?t=1210825763"/&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-5749750100075564083?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/5749750100075564083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/05/new-in-box-1541-ii-and-other-goodies.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5749750100075564083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5749750100075564083'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/05/new-in-box-1541-ii-and-other-goodies.html' title='New In box 1541 II and Other Goodies Arrive'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-8721672278164619930</id><published>2008-04-28T22:03:00.017-05:00</published><updated>2009-10-03T01:19:21.911-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>New Old Stock In-Box C64C Arrives</title><content type='html'>As stated in my previous blog, I always wanted a C64C when I was a kid. Someone on ebay happened to be selling one that had never been used. I was a little skeptical of that claim when I purchased it, but from what I can tell upon inspection, it does seem to be 100% mint. All of the cables were still wrapped in original plastic with aged looking tape. The manuals were all sealed, and the computer itself did not have a spot of dust on it or in it. All connectors and slots appear to be virgin.&lt;br /&gt;&lt;br /&gt;Without further ado:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/01_BoxTop_400.jpg" border="0" alt="Photobucket"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/02_BoxBottom_400.jpg" border="0" alt="Photobucket"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/03_BoxOpen_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/04_BoxInside_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/05_DocsWrapped_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/06_QuickstartBottom_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/07_C64CFront_400-1.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/08_Geos_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/09_Manuals_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/10_Notice_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/11_MECC_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/12_QLink1_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/13_QLink2_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/14_Qlink3_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/15_Qlink4_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/16_QLink5_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/17_QlinkReg_400.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/Nerditorium/Commodore/C64C%20Unboxing/400/18_NeedModem_400.jpg" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Needless to say, while I was opening everything up, I felt like a kid on Christmas day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-8721672278164619930?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/8721672278164619930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/04/new-old-stock-in-box-c64c-arrives.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/8721672278164619930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/8721672278164619930'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/04/new-old-stock-in-box-c64c-arrives.html' title='New Old Stock In-Box C64C Arrives'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-5198010922834120725</id><published>2008-04-26T01:11:00.011-05:00</published><updated>2009-10-03T01:19:34.510-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Raymond Computer, St Paul, MN</title><content type='html'>&lt;span class="postbody"&gt;I've driven by the place probably 1000 times in my life because I've been in various bands that have rented rehearsal spaces near his shop. Finally a few months ago I noticed the Commodore logo in the window. Today I decided to peek my head in there since I'm currently on the prowl for a few things.&lt;br /&gt;&lt;br /&gt;OH MY GOD! This place is a Commodork's dream come true. Here's a photoshoot of the place thanks to &lt;a href="http://www.lemon64.com/forum/"&gt;Lemoner&lt;/a&gt; Brian Day:&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/24965817@N02/sets/72157604224011802/" target="_blank" class="postlink"&gt;http://www.flickr.com/photos/24965817@N02/sets/72157604224011802/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Those photos only do the shop partial justice because they can't really capture the full glory and size of the space. I think there are 3 rooms total. The entry way is roughly 12x12ft, and then there is another room roughly the same size. Then there is a much larger space in the back (20x 20ft?) which appears to be the workshop area. That is also where the point of sale terminal is (a c64 and dot matrix printer). Every square inch of this place is covered in goodies.&lt;br /&gt;&lt;br /&gt;As the photos show, there is way too much stuff to take in, but I did notice ample amounts of commodores (vics, 64s, 128s, and Amigas), plus all of the displays, printers, and other peripherals you could care to shake a stick at. Also, there was a ton of software (opened and unopened), plus a good shelf of books, and a magazine rack filled with gems.&lt;br /&gt;&lt;br /&gt;I was in a little bit of a hurry, but I was able to spend some time talking with the owner. He seems like a really interesting fellow who obviously has a vast knowledge of Commodores. He has most of the common stuff you'd find on Ebay, oldsoftware.com, and cmdrkey. His pricing seems to be pretty fair as well. I doubt he can keep his website in check with his inventory so if you are ever looking for something and it's not on his site, fire him off an email. He ships internationally and does repairs.&lt;br /&gt;&lt;br /&gt;Let me tell you, going into that place was much more fun than scrounging ebay. I left there with a &lt;a href="http://www.retrothing.com/2006/03/commodore_1702_.html"&gt;1702&lt;/a&gt; and a geek buzz.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.raycomp.com/" target="_blank" class="postlink"&gt;http://www.raycomp.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="mailto:raycomp@visi.com"&gt;raycomp@visi.com&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-5198010922834120725?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/5198010922834120725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/04/raymond-computers-st-paul-mn.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5198010922834120725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/5198010922834120725'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/04/raymond-computers-st-paul-mn.html' title='Raymond Computer, St Paul, MN'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9167981196729784488.post-2994181273561934901</id><published>2008-04-20T22:55:00.006-05:00</published><updated>2009-10-03T01:19:48.702-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Retro Computing and Gaming'/><title type='text'>Commodore 64 Tax Refund Revival</title><content type='html'>I am 32 years old at the time of writing this blog. I make my living as a computer programmer. I got my start at programming when my father purchased a C64 at a COMBS outlet store (COMBS became LeBelle's, which became Best Buy) after a coworker had informed him that  their POS terminal was mismarking a full C64+Monitor+1571 Drive at $19.95. My best guess is that this was around 1982 or 1983. My C64 was my best friend from 1982 until 1992 when my family eventually got with the times and bought a PC.&lt;br /&gt;&lt;br /&gt;Thanks to the 2008 IRS economic stimulus package, I've decided to whole heartedly reclaim my love for the c64. Here is what I have purchased over the week via the interwebs:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Books:&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;All About the Commodore 64 Volume 1&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;All About the Commodore 64 Volume 2&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="text-align: center;"&gt;&lt;span&gt;&lt;span&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/ebay/435e_1.jpg" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;I also picked up THE c64 programming guide:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/ebay/3018_1.jpg" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Media:&lt;br /&gt;&lt;/span&gt;The C64 uses double-sided, double-density 5.25 " disks which aren't in production anymore, so I'll have to start stockpiling them. I've got my eyes on a large unopened stock on ebay, but here is what will get me by in the meantime:&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/ebay/71_1.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-weight: bold;"&gt;Hardware:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Of course I'm going to need a C64 and Disk drive right? That being the case I picked up a classic C64&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/ebay/f398_1.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;I was always jealous of my neighbor who eventually got the C64C with the improved ergonomics and sound chip, so I got one of those too, which happens to be a never used new in box find (oh yeah!!!):&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/ebay/a80e_1.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/ebay/a973_1.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/ebay/aaff_1.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;And of course, there is the mandatory FastLoad cartridge:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/ebay/3a84_1.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Here's a little device that will allow me to hook the c64 drives up to my PC so I can transfer software I download from the internet to the c64 floppy drive:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://i12.ebayimg.com/04/i/000/b6/7a/02d0_1.JPG" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;Finally, a little something to turn my girlfriend's head:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://i128.photobucket.com/albums/p193/dauger75/ebay/f3_1_b.jpg" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9167981196729784488-2994181273561934901?l=mynerditorium.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mynerditorium.blogspot.com/feeds/2994181273561934901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mynerditorium.blogspot.com/2008/04/commodore-64-tax-refund-revival.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/2994181273561934901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9167981196729784488/posts/default/2994181273561934901'/><link rel='alternate' type='text/html' href='http://mynerditorium.blogspot.com/2008/04/commodore-64-tax-refund-revival.html' title='Commodore 64 Tax Refund Revival'/><author><name>Daniel Auger</name><uri>https://profiles.google.com/102544391792773917741</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-fWhtx9sis80/AAAAAAAAAAI/AAAAAAAAANM/mAuznszrtJQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i128.photobucket.com/albums/p193/dauger75/ebay/th_435e_1.jpg' height='72' width='72'/><thr:total>9</thr:total></entry></feed>
