<?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-8832633</id><updated>2012-02-16T12:17:32.454-05:00</updated><category term='Me'/><category term='CodeMash'/><category term='SpaceWeather'/><category term='teched'/><category term='orlando'/><category term='Day of .NET'/><category term='sapi'/><category term='blogger'/><category term='SQL'/><category term='MERGE'/><category term='WoW'/><category term='PDC'/><category term='Katmai'/><category term='COM'/><category term='vista'/><category term='.NET'/><category term='SSMS'/><category term='zmachine'/><category term='Upsert'/><title type='text'>A View Inside My Head</title><subtitle type='html'>Jason's Random Thoughts of Interest</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default?start-index=101&amp;max-results=100'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>495</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8832633.post-5893385422406715395</id><published>2007-08-16T17:19:00.000-04:00</published><updated>2007-08-16T17:21:22.436-04:00</updated><title type='text'>Blog Move</title><content type='html'>It's the end of an era.  I am moving off of the Blogger platform and domain onto a new one that is all my own:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jasonfollas.com/blog"&gt;http://jasonfollas.com/blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The blog feed (through Feedburner) has already been updated.  If you subscribe to the feed, then chances are that you will not see this post.  ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-5893385422406715395?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/5893385422406715395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=5893385422406715395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5893385422406715395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5893385422406715395'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/08/blog-move.html' title='Blog Move'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-4770134466521215285</id><published>2007-08-06T09:46:00.000-04:00</published><updated>2007-08-06T09:53:11.889-04:00</updated><title type='text'>New Developer Evangelist</title><content type='html'>It's old news at this point, but the replacement for Drew Robbins has been announced:&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.jeffblankenburg.com/blog/' target='_blank'&gt;Jeff Blankenburg&lt;/a&gt;, previously of Quick Solutions fame, is now a blue badge!  &lt;br /&gt;&lt;br /&gt;I think the first item on his agenda will be to revamp or retire the talk that he gave at Day of .NET in Ann Arbor entitled "Google APIs: Why Aren't You Using Them?"  /grin&lt;br /&gt;&lt;br /&gt;Congratulations, Jeff.  I look forward to working with you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-4770134466521215285?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/4770134466521215285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=4770134466521215285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/4770134466521215285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/4770134466521215285'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/08/new-developer-evangelist.html' title='New Developer Evangelist'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-3497599911935153367</id><published>2007-07-01T15:40:00.000-04:00</published><updated>2007-07-01T15:54:26.109-04:00</updated><title type='text'>Thank you, Microsoft</title><content type='html'>When I did my blog reading this afternoon, I noticed the normal flurry of "I'm a MVP!" posts that happen on the first day of each quarter.  I checked my email, and there was nothing.  Oh, well!  Maybe next quarter.&lt;br /&gt;&lt;br /&gt;Then, a bit later, I returned to my email.  On a hunch, I checked the Spam folder and there staring back at me was a 4-hour old message from "support" with the subject line:&lt;br /&gt;&lt;br /&gt;"[MVP] Congratulations! You have received the &lt;a href='http://mvp.support.microsoft.com/' target='_blank'&gt;Microsoft MVP Award&lt;/a&gt;"&lt;br /&gt;&lt;br /&gt;Thank you, Microsoft!  I'm truly honored!  I look forward to meeting my MVP lead, Steve Dybing, and my fellow &lt;a href='https://mvp.support.microsoft.com/communities/mvp.aspx?product=1&amp;competency=Windows+Server+System+-+SQL+Server' target='_blank'&gt;SQL Server MVPs&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And Google, we need to have a talk about this little prank that you played on me.  Please don't hide my important emails in the Spam folder, mmmmkay?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-3497599911935153367?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/3497599911935153367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=3497599911935153367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/3497599911935153367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/3497599911935153367'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/07/thank-you-microsoft.html' title='Thank you, Microsoft'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-4650455557396526976</id><published>2007-06-20T15:26:00.000-04:00</published><updated>2007-06-21T11:44:05.108-04:00</updated><title type='text'>Lenovo Battery Recall</title><content type='html'>My new laptop's battery is part of the Lenovo battery recall.  You know, because they spontaneously catch on fire and stuff.&lt;br /&gt;&lt;br /&gt;I went through the process of submitting my shipping information, and received the following confirmation:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Thank you for placing your order for a replacement battery. We have received your order and will ship your replacement as soon as supply is available. Please allow up to 4 weeks for your replacement battery to arrive.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Boy, I'm glad that they're rushing it to me!  I hope this one doesn't flame up in the next &lt;b&gt;4 weeks&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE/FYI/ETC:&lt;/b&gt; The details about the recall, which was issued months ago (as a reader pointed out), can be found here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=BATT-LENOVO" target="_blank"&gt;http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=BATT-LENOVO&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-4650455557396526976?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/4650455557396526976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=4650455557396526976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/4650455557396526976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/4650455557396526976'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/06/lenovo-battery-recall.html' title='Lenovo Battery Recall'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-2722307372971259577</id><published>2007-06-19T12:00:00.001-04:00</published><updated>2007-06-19T12:06:16.541-04:00</updated><title type='text'>UAC Deactivated</title><content type='html'>I'm sorry Microsoft.  I had to do it.  I just joined the growing ranks of developers out there who deactivated UAC on Vista.&lt;br /&gt;&lt;br /&gt;I gave it a try.  I really did!  I didn't even mind answering all of the "Are you sure?" prompts whenever I tried to do anything (it's really not as bad as what that "Hi, I'm a PC... and I'm a Mac" commercial makes it out to be).&lt;br /&gt;&lt;br /&gt;The final straw for me was the inability to work with files on my hard drive unless they were in certain directories (folders).  For whatever reason, when I copied my "C:\Dev" directory structure from a backup onto my hard drive, I couldn't edit any of the files.  As a developer, this is a pretty bad thing to have happen.&lt;br /&gt;&lt;br /&gt;Even a simple change to an XML file using Notepad would not overwrite the existing file.  I tinkered around for 30 minutes trying to get this one task to work, playing with things like changing the NTFS owner of the file and directory tree.  No luck.&lt;br /&gt;&lt;br /&gt;Alas, the need for productivity superceded the security benefits.  Deactivating UAC allowed me to overwrite files in my source directory.  &lt;br /&gt;&lt;br /&gt;And now, back to work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-2722307372971259577?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/2722307372971259577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=2722307372971259577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/2722307372971259577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/2722307372971259577'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/06/uac-deactivated.html' title='UAC Deactivated'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-811748279478167249</id><published>2007-06-18T14:53:00.000-04:00</published><updated>2007-06-18T16:00:28.428-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSMS'/><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Making SQL Server Management Server work on Windows Vista</title><content type='html'>Under Windows XP, I could define a "Stored User Name and Password" that would use a domain wildcard.  That is, I could say "DOMAINX\*" and then the provided user/password would work for any computer that was a member of DOMAINX.&lt;br /&gt;&lt;br /&gt;Note: The "Stored User Name and Password" interface is available from the User Accounts control panel, select a user (under XP; the current user is auto selected under Vista), and then click "Manage my Network Passwords" on the left.&lt;br /&gt;&lt;br /&gt;This feature was particularly useful to me, as a consultant with a laptop that is not part of my client's domain.  I log onto the laptop as a local user, yet I had the ability to seamlessly access any domain resource without being prompted for credentials.  This mechanism also allowed me to override individual servers, just in case I needed to use a different user/password for specific situations.&lt;br /&gt;&lt;br /&gt;It seems that Vista, either by design or due to a bug, does not allow this concept of domain wildcarding - at least in respect to NetBIOS or LM or any related technology.  This particularly crippled me in that I could not connect to any of the SQL Servers at this location using SQL Management Studio.&lt;br /&gt;&lt;br /&gt;Using a network packet sniffer (Ethereal), I could see that the SQL Server was challenging my client for domain credentials, but my client would reply with local credentials instead.  The end result:&lt;br /&gt;&lt;br /&gt;Login failed for user '(null)'.  Not associated with a trusted SQL Server connection (18452).&lt;br /&gt;&lt;br /&gt;I sent a few emails off to a few Microsoft folks that I knew, and then began to play around while waiting for any sort of response.&lt;br /&gt;&lt;br /&gt;The first signs of success started when I mapped a network drive to any fileshare on the domain, just to kick-off a domain-specific connection.  Then, I created one password rule per SQL Server that I wanted to connect to, and finally forced the SSMS connection to use Named Pipes.  Cumbersome, but it seemed to work (albeit, a little flaky on boot-up, because the mapped drive would not automatically reconnect for some reason, requiring me to remap it before things started to work).&lt;br /&gt;&lt;br /&gt;I then stepped back, and remembered the "RunAs" command.  By creating a new shortcut to SQL Server Management Studio using my network credentials, I am able to consistantly force SSMS to authenticate with the SQL Servers using my domain user every time, including over TCP/IP (instead of Named Pipes).&lt;br /&gt;&lt;br /&gt;The shortcut runs the following (all one command, broken up for readability):&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;pre&gt;C:\Windows\System32\runas.exe /netonly /user:&lt;i&gt;domainx\myusername&lt;/i&gt;&lt;br /&gt;   "C:\Program Files\Microsoft SQL Server\90\Tools\Binn\VSShell\Common7\IDE\SqlWb.exe"&lt;/pre&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This is the workaround that I'll be using until MS fixes the "Stored User Names and Passwords" feature (or explains why the Vista behavior is different than the XP behavior as far as domain wildcards go).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-811748279478167249?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/811748279478167249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=811748279478167249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/811748279478167249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/811748279478167249'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/06/making-sql-server-management-server.html' title='Making SQL Server Management Server work on Windows Vista'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-167970003291869659</id><published>2007-06-07T13:30:00.001-04:00</published><updated>2007-06-07T14:03:49.830-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teched'/><title type='text'>Wrapping up Tech Ed</title><content type='html'>While the conference is not yet over, the energy level is certainly winding down.  Today is the last day of the Expo, so I have been making my rounds to say goodbye to all of the people who I have worked with in previous sponsorships (for CodeMash and Day of .NET in Ann Arbor).&lt;br /&gt;&lt;br /&gt;One vendor (&lt;a href="http://www.avepoint.com/"&gt;AvePoint&lt;/a&gt;) totally missed an opportunity that they had.  Today, they raffled off a &lt;a href="http://en.wikipedia.org/wiki/Ducati"&gt;Ducati&lt;/a&gt; motorcycle, so at the time of the drawing, 1-2 Thousand people congregated in the aisle around their booth.  This crowd assembled a full 15 minutes before the drawing, and were simply standing there with nothing to do (I was in that crowd, btw).  AvePoint had the PERFECT opportunity to give a quick sales presentation to a very captive audience, but they did nothing of the sorts.  Next year, perhaps?  (And bring some amplification to the event, plskthx).&lt;br /&gt;&lt;br /&gt;One of my favorite vendors, &lt;a href="http://www.red-gate.com/"&gt;Red Gate Software&lt;/a&gt;, gave me a demo of upcoming changes to their SQL Compare tool.  What's exciting for me is that SQL Compare will now include the ability to use scripts as source or destination schema.  So, you can reverse engineer your development database and generate individual SQL script files for each object in the schema.  Or, you can start with individual scripts (i.e., one per table or proc, etc) and push changes to the database.  The greatest utility of this that I see is the ability to easily capture your database change history into source control (especially with Subversion and TortoiseSVN, which works at the filesystem/Windows Explorer level).  Direct SCCM capabilities should come in a future release, they say.  :-)&lt;br /&gt;&lt;br /&gt;Last night at the influencer party, Javier Lozano (Iowa .NET User Group) and I spoke in depth about what it takes to organize a small-to-midsized conference, like a Day of .NET or a CodeMash.  Look for some good things to come out of the Iowa area over the coming year!&lt;br /&gt;&lt;br /&gt;All in all, I didn't get a sense of anything big on the horizon.  All of the new product releases weren't accompanied with great fanfare, and as a result, I'm just not leaving here as excited as I was last year.  Don't get me wrong: there's a lot of cool things coming out, but I think they could have been hyped more than what they are.&lt;br /&gt;&lt;br /&gt;Lastly, I leave you with an observation: Microsoft did an outstanding job at marketing Silverlight as a new technology that has never been seen before (my observation).  When you peel back the covers, though, it's nothing more than the latest iteration of the Java Applet or ActiveX control paradigm.  If you start thinking of Silverlight in this way, instead of a totally new whizbang all-containing platform, then I think you'll be more successful in implementing the technology in your solutions.  &lt;br /&gt;&lt;br /&gt;I cannot wait to get back home so that I can [finally] install Visual Studio 2008 ("Orcas") and SQL Server 2008 ("Katmai") and begin to work with the new things that I've seen here.&lt;br /&gt;&lt;br /&gt;(Attendee party tonight!  See you there!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-167970003291869659?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/167970003291869659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=167970003291869659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/167970003291869659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/167970003291869659'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/06/wrapping-up-tech-ed.html' title='Wrapping up Tech Ed'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-5677878397244268439</id><published>2007-06-06T01:13:00.001-04:00</published><updated>2007-06-06T01:20:28.448-04:00</updated><title type='text'>Sky Diving.... Indoors?</title><content type='html'>&lt;a href="http://www.flickr.com/photos/81259708@N00/532831501/" title="Photo Sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1063/532831501_60e2ad0f7e.jpg" width="500" height="334" alt="Jason Flying" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This evening, I was invited to the Central Region's gathering at an indoor skydiving place (thanks Drew and Josh).  This is a huge vertical wind tunnel that you actually "fly" in, due mostly in part to the 120+ MPH wind that is generated right under you.&lt;br /&gt;&lt;br /&gt;Our time per flight was about 90 seconds.  According to the instructor, a normal freefall from an airplane (before you deploy your chute) is about 60 seconds.  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dustin Campbell was also in the same group that was in the airlock at the same time, so I have his pictures on the DVD's that were provided to us as a keepsake:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/81259708@N00/532831493/" title="Photo Sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1132/532831493_7b396407bb.jpg" width="500" height="334" alt="Dustin Flying" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-5677878397244268439?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/5677878397244268439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=5677878397244268439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5677878397244268439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5677878397244268439'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/06/sky-diving-indoors.html' title='Sky Diving.... Indoors?'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1063/532831501_60e2ad0f7e_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-6760266009283666599</id><published>2007-06-05T15:56:00.000-04:00</published><updated>2007-06-21T12:05:59.310-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Upsert'/><category scheme='http://www.blogger.com/atom/ns#' term='MERGE'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Katmai'/><title type='text'>Tech Ed: Day 1 Wrap Up/Day 2</title><content type='html'>For me, one of the bigger product announcements this year is SQL Server 2009 (Katmai).  I'm trying to take in as much content as I can, because I definitely see some of my trademark presentations being changed to account for new functionality.&lt;br /&gt;&lt;br /&gt;For instance, and I've been thinking a lot about this over the past few months, but just haven't articulated it:&lt;br /&gt;&lt;br /&gt;SQL Server is evolving into much more than just a transactional data system.  It's becoming its own data platform.  Not every database has to be highly tuned to support millions of transactions per second, and as a result, you can begin to move more of the data processing locally (by means of SQLCLR, or by taking advantage of XML processing on the server, etc).  By doing so, you eliminate the need to transfer data across the wire before starting to take action upon it, which is a good thing in my book.  YMMV, depending on your particular situation.&lt;br /&gt;&lt;br /&gt;In session yesterday, they made a point that the cost of storage is quickly approaching zero, which means that we're going to have more storage than we'll ever be able to use.  Suddenly, you don't need to have all of the questions that you'll be asking about your data before you store it.&lt;br /&gt;&lt;br /&gt;For instance, let's say that you acquire a piece of data in XML format.  You have several tables defined in the system, and shred the XML in order to extract the data that you need.  But, you also discover that the XML has more data than you're using (more information than the tables are set up to hold).  Just because you don't have a use for that extra information today doesn't mean that you have to throw it away.  Go ahead and shred it to populate your tables, but then keep a copy of the XML intact.  If you need to later query all of the XML for data that you never thought you would need, you have it (and SQL Server makes it easy to do so).&lt;br /&gt;&lt;br /&gt;SQL Server 2008 will also come with support for "Policies".  Like the same concept in Windows, etc, a Policy is just a rule that is executed at runtime (query time).  Let's say that you don't want anyone to create tables in the "DBO" schema.  Just create a policy, and the server will enforce it for you.  (That's great, and all, but I'm not really a DBA, so I'm hoping that there's utility for this functionality beyond that).&lt;br /&gt;&lt;br /&gt;Also, SQL Server 2008 comes with built-in support for spacial geometry.  Do you have two geocodes and want to know how far apart they are?  No problem!  Find all stores within 50 miles of your customer location?  Just put it in the WHERE clause.  Have a complex polygon, maybe with "holes" or "rings" in it, and need to know if a point is within the polygon?  Supposedly, it's a breeze with Katmai.&lt;br /&gt;&lt;br /&gt;Last, there's "UPSERT" support.  This is the ability to either perform an INSERT or an UPDATE on a table, depending on whether the data already exists or not.  UPSERT is actually implemented using the MERGE statement, as in the following simple example (provided to me by Christian Kleinerman, Group Program Manager for Microsoft SQL Server):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;MERGE dest_table&lt;br /&gt;USING src_table ON (src_table.keycol = dest_table.keycol)&lt;br /&gt;WHEN MATCHED THEN&lt;br /&gt;   UPDATE SET dest_table.datacolumn = src_table.datacolumn&lt;br /&gt;WHEN NOT MATCHED THEN&lt;br /&gt;   INSERT VALUES (src_table.keycol, src_table.datacolumn)&lt;br /&gt;WHEN SOURCE NOT MATCHED THEN&lt;br /&gt;   DELETE&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Disclaimer: These were handwritten notes, and I haven't tested on a Katmai installation yet to ensure that I transcribed his example verbatim&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Today, I sat in a pretty cool session led by Karen Liu (that's Dr. Karen Liu, Ph.D,  btw, who likes Raytracing, so she's got to be cool in my book!) of the Visual C# IDE Team where she demonstrated some useful features in the new IDE.  My take on it: There's nothing that I saw that CodeRush and Refactor! can't do.  You'll definitely be happier if you bought the Developer Express product to supplement the out-of-the-box experience that &lt;strike&gt;Orcas&lt;/strike&gt;Visual Studio 2008 provides.&lt;br /&gt;&lt;br /&gt;That's it for now...  Don't expect any more entries this week (so you'll be pleasantly surprised when I do in fact write one).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-6760266009283666599?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/6760266009283666599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=6760266009283666599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6760266009283666599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6760266009283666599'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/06/tech-ed-day-1-wrap-upday-2.html' title='Tech Ed: Day 1 Wrap Up/Day 2'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-6780751373833341481</id><published>2007-06-04T14:51:00.000-04:00</published><updated>2007-06-04T14:55:12.464-04:00</updated><title type='text'>TechEd: 64-bit Question Game Show</title><content type='html'>I had forgotten all about this until I walked past the "Virtual Tech Ed" glass booth this afternoon: Carl and Richard will be hosting a "64-bit Question" game show at 6PM this evening (during the Expo party).&lt;br /&gt;&lt;br /&gt;BTW: Carl is sitting inside of that glass room at the moment with his flashing laptop, looking out at people passing by.  It somewhat reminded me of an exhibit at a natural history museum.  ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-6780751373833341481?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/6780751373833341481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=6780751373833341481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6780751373833341481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6780751373833341481'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/06/teched-64-bit-question-game-show.html' title='TechEd: 64-bit Question Game Show'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-807079765228073566</id><published>2007-06-04T11:54:00.001-04:00</published><updated>2007-06-04T11:59:51.661-04:00</updated><title type='text'>Tech Ed: Day 1</title><content type='html'>This morning's keynote was... just okay.  As is typical with Microsoft keynotes, there was a Hollywood theme to the presentation that kept introducing itself, and this year's theme was Back to the Future.  They actually had the Delorian and "Doc" (Christopher Lloyd) there on stage with Bob...  That was the highlight of the morning, IMHO.  If you slept through the keynote, just watch the beginning of it online, and you'll be caught up.  ;-)&lt;br /&gt;&lt;br /&gt;This morning, I've been walking around the convention center to get a handle on how things are layed out.  I stopped by the INETA booth and talked with Chris (Pels) and Nancy for a little while, and then Nancy introduced me to Kate Gregory (super nice lady from east of Toronto).&lt;br /&gt;&lt;br /&gt;The wi-fi here seems to be a bit spotty, not so much the signal strength, but just getting an address.  I'm forced to compose this blog post from one of the CommNet terminals.&lt;br /&gt;&lt;br /&gt;On to lunch and then a tour of the Expo hall...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-807079765228073566?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/807079765228073566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=807079765228073566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/807079765228073566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/807079765228073566'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/06/tech-ed-day-1.html' title='Tech Ed: Day 1'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-3394655299503524526</id><published>2007-06-03T15:54:00.001-04:00</published><updated>2007-06-03T16:45:26.147-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teched'/><category scheme='http://www.blogger.com/atom/ns#' term='orlando'/><title type='text'>Tech Ed Orlando: Day 0</title><content type='html'>I'm in beautiful Orlando, staying at the Hilton in the Walt Disney World Resort.  This hotel is on the conference shuttle route, and Keith Elder is also here with his wife Ellen.  &lt;br /&gt;&lt;br /&gt;Getting to this point wasn't without incident, though.  First off, since my employer paid for the flight, I had to make reservations with the company's travel agency.  Despite my desire to fly Delta TOL-ATL-MCO, they wanted me to take Northwest TOL-DTW-MCO.  That flight was actually cheaper with the connection, if you can believe it, than if I drove to DTW and just took the second leg flight by itself...  So, I agreed.&lt;br /&gt;&lt;br /&gt;Well, I showed up at the airport bright and early (well, not so much bright, since the SUN WASN'T UP YET!!!), and find that the first leg had been cancelled.  Luckily, Northwest had already booked me onto a Continental flight.  TOL-CLE-MCO.  When I check in at the Continental desk, I learn that the flight is oversold.  I'm instructed to wait on the side with other people who were in the same situation.  60 minutes left until that flight leaves...&lt;br /&gt;&lt;br /&gt;The first two of those folks were bumped to Delta.  Yep, they got to fly my desired TOL-ATL-MCO route.  I chuckled to myself, thinking that I would get my way after all.  Then it was my turn to check in, and as luck would have it, the flight was no longer oversold, so I was forced to take the Continental route... :(&lt;br /&gt;&lt;br /&gt;Going through security, I was told to step into a special line.  Then some big TSA guy walks towards me, pulling on a pair of rubber gloves!  Despite all of the horror stories that I had heard about cavity searching and whatnot, he only patted me down while another agent went through my carry-on belongings.&lt;br /&gt;&lt;br /&gt;I made it onto the small turboprop commuter plane (16 seater?) which flew me to Cleveland, passing by Cedar Point on the way, and flying low over Jacob's Field on our final approach.  I actually like these low-and-slow flights, especially when I have a window seat (on this bird, all seats were window seats).&lt;br /&gt;&lt;br /&gt;Then the flight to Orlando: You know, the home of Disney World.  Parents take their kids to Disney World, and a "kid" can mean a pleasant 8-year old just as much as it can mean a screaming 1-year old.  Well, on this 737-800, there were 1-year olds all around me, and not a one wanted to sit still or be quiet.  That made for an relaxing 2-hour flight (I'm using a little thing that we call "sarcasm" here).  &lt;br /&gt;&lt;br /&gt;Oh, did I mention that before the flight even began, we were stuck at the gate with the doors closed because the sorting room had lost 8 bags for my flight...  Did I also mention that this was a 45-minute delay waiting for those bags?  I didn't?  Hmmmm...&lt;br /&gt;&lt;br /&gt;I arrived at MCO about 45 minutes late (go figure), and headed down to the car rental counter.  There I stood in a line for an hour!  But, when I did finally make it to the counter, I learned that my "intermediate" car that the travel agency booked turned out to be this cool charcoal-colored Mustang!  Wowsers!  Not a convertible, though...&lt;br /&gt;&lt;br /&gt;I've done a bit of exploring around the area of the hotel, as I tend to do in all new cities.  Since Tina isn't here with me, I don't have to worry about getting lost.  I'm impressed by the different plant and wildlife here, especially the little lizards and spanish moss growing on trees.  Also, the grass here isn't the fescue that I'm used to at home, which I thought was interesting.&lt;br /&gt;&lt;br /&gt;Here at the Hilton, there are regular bus stops to take you to the various Disney parks in the area.  I thought that it would only be natural for the Tech Ed shuttle to also stop at that entrance.  So, I waited on a bench for about 45 minutes.  After three Disney shuttles came and went, I gave up and asked the hotel.  It seems that there's a "Convention Entrance" where the Tech Ed busses stop.  Glancing at my bus schedule that the front desk gave me, I do see handwriting that says "Microsoft Transportation Convention Entrance"....  Oh, so THAT'S what that means... :-/&lt;br /&gt;&lt;br /&gt;Registration at the venue was extremely easy, thanks to a large number of staffers.  Get in line, approach a staffer, provide your ID, they print a badge, and then you walk down to the "Materials" section to pick up your laptop bag (a convertible backpack/man purse concept, it appears) stuffed with marketing slicks and whatnot.&lt;br /&gt;&lt;br /&gt;That was enough excitement for me, so I returned to the hotel to compose this blog post and then work on loading software onto my newly paved laptop.  Party with Palermo tonight!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-3394655299503524526?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/3394655299503524526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=3394655299503524526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/3394655299503524526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/3394655299503524526'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/06/tech-ed-orlando-day-0.html' title='Tech Ed Orlando: Day 0'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-7719599699680898860</id><published>2007-05-23T15:15:00.001-04:00</published><updated>2007-05-23T15:23:06.650-04:00</updated><title type='text'>How I Managed To Successfully Update My Zune to 1.3</title><content type='html'>&lt;p&gt;Until today, I haven't been able to update my Zune from firmware version 1.2 to the 1.3 release, which has been out for about 1.5 months now.&amp;nbsp; I would get the screen inside of the Zune software (running on my computer) stating that there was an update, but when I tried to actually install it, the software would simply stare back at me with&amp;nbsp;a messagebox stating "It is not possible to change sync settings at this time. Try again later."&lt;/p&gt; &lt;p&gt;Searching the Internet proved that others were having the same issue, but there wasn't a clear explanation about what the problem was, or more importantly, how to resolve it.&amp;nbsp; It also seems that this error message is generic in nature: if any problems at all are encountered while trying to upgrade the firmware, you get this message box.&amp;nbsp; (That's my disclaimer to state that what worked for me may not work for you)&lt;/p&gt; &lt;p&gt;In typical fashion, there were a lot of posts saying "ZOMFG, Microsoft is teh sux0rz...&amp;nbsp; Screw dis, I'm buying an iPod".&amp;nbsp; But, I personally love my Zune, so I made it my morning mission to figure out what was wrong, and then fix it if it turned out to be something that was under my control.&lt;/p&gt; &lt;p&gt;My particular environment (details that matter, in this case): &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Windows XP SP2  &lt;li&gt;A&amp;nbsp;corporate network using ISA Server (that requires authentication against Active Directory)&amp;nbsp;for web proxy.&amp;nbsp; &lt;em&gt;Note that I never attempted the upgrade from home or any other network - I just never thought about the firmware except&amp;nbsp;while at work.&lt;/em&gt;  &lt;li&gt;I log into my machine as a local user and have password rules established for network resources (Control Panel -&amp;gt; User Accounts | Manage My Network Passwords).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The first thing that I did was try to find where the new update might have been saved to my disk (to see if it actually existed, and then to see if there was a way that I could manually install the update).&amp;nbsp; I found the following (hidden) directory:&lt;/p&gt; &lt;p&gt;C:\Documents and Settings\&lt;em&gt;&lt;strong&gt;yourUserNameHere&lt;/strong&gt;&lt;/em&gt;\Local Settings\Application Data\Microsoft\Zune\Firmware Updates&lt;/p&gt; &lt;p&gt;Inside was another directory with a GUID name:&lt;/p&gt; &lt;p&gt;{EF56D6F0-08D7-4866-AB2F-208E48FF9796}&lt;/p&gt; &lt;p&gt;And inside of that, a lot of zero-byte files like: BIT6A4.tmp, BIT4C2.tmp, etc.&lt;/p&gt; &lt;p&gt;Hmmm... That looks an awful lot like temporary files for the Background Intelligent Transfer Service (BITS).&amp;nbsp; Since there were scores of these files (roughly coinciding with the number of times that I've attempted to install the update), I think that I found an important&amp;nbsp;clue.&lt;/p&gt; &lt;p&gt;I fired up Fiddler, the HTTP Debugging Proxy, and started logging HTTP traffic that took place on my machine.&amp;nbsp; I then selected "Check for Zune Device Updates" within the Zune software (context menu for the device itself), and observed the resulting HTTP traffic.&amp;nbsp; &lt;/p&gt; &lt;p&gt;One request retrieved an XML document from a Zune server&amp;nbsp;that contained information about the latest firmware version, including a link to the updated file.&amp;nbsp; There were actually 3 HTTP requests that occurred before the XML itself was returned:&amp;nbsp;the first tried without proxy authentication, and failed with a 407 status code.&amp;nbsp; The second was to get the NTLM challenge from the proxy server, and also resulted in a 407.&amp;nbsp; The third was the same request again with an appropriate NTLM response in the Proxy-Authorization header, and this time, the resulting status code was 200 and the payload from the remote web server was successfully returned.&amp;nbsp; The user agent for all three of these requests was "Zune/1.3.5728.0", so it was the software itself trying to make the connection.&lt;/p&gt; &lt;p&gt;&lt;em&gt;Note: This might seem like a noisy exchange, and it kind of is, but this is what happens behind the scenes when you web browser makes HTTP requests using a proxy server and NTLM authentication.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Another request, which tried to get the updated firmware CAB file itself, would fail with a status&amp;nbsp;code of 407&amp;nbsp;in the same fashion as the very first web request made by the Zune software.&amp;nbsp; Interestingly enough, the user agent for this request was "Microsoft BITS/6.6", confirming my suspicion that the Zune software uses BITS to download the firmware images.&amp;nbsp; Furthermore, as soon as the 407 came through, the error messagebox displayed in the Zune software, and no further attempts were made to negotiate authentication with the proxy server by the BITS service.&lt;/p&gt; &lt;p&gt;At this point, I concluded that the Zune software was able to connect to the Internet, but the BITS client was not.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Since I couldn't change the Zune software, I looked around to see if I could force the BITS client to authenticate against the proxy server, just like Internet Explorer (and even the Zune software itself) does automatically.&amp;nbsp; One option sounded promising: I could set up a small proxy server on my computer that would accept an unauthenticated request, but would then authenticate with the real proxy server when it forwarded that request to the Internet.&lt;/p&gt; &lt;p&gt;Luckily, though, I stumbled upon the following KB article:&lt;/p&gt; &lt;p&gt;&lt;a title="http://support.microsoft.com/kb/842309" href="http://support.microsoft.com/kb/842309"&gt;http://support.microsoft.com/kb/842309&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Interesting snippet from the article:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= &lt;p&gt;&lt;strong&gt;BITS 2.0 clients may not successfully complete the transfer of a file&lt;/strong&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;HTTP 407-Proxy Authentication.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;Note&lt;/b&gt; When the BITS 2.0 client receives this error message, it may also receive error code 0x80190197. &lt;br&gt;&lt;br&gt;This problem occurs when all the following conditions are true:  &lt;ul&gt; &lt;li&gt;The client program that is using BITS 2.0 does not specify that the credentials of the client can be used by calling the IBackgroundCopyJob2::SetCredentials method.&lt;br&gt;&amp;nbsp; &lt;li&gt;The Microsoft LAN Manager compatibility level (LmCompatibilityLevel) on the BITS 2.0 client contains a value that is set to 1 or to 0. You can find the LAN Manager compatibility level entry n the following registry subkey: &lt;br&gt;&lt;br&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\LmCompatibilityLevel&lt;br&gt;&amp;nbsp; &lt;li&gt;The file transfer is performed through a Windows-based server or a Windows-based Internet proxy server that requires Integrated Windows authentication.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Authentication behavior in BITS 2.0&lt;/strong&gt;&lt;/p&gt;For security reasons, to avoid passing credentials to any proxy or server that requests logon credentials, BITS 2.0 allows logon credentials to be used only if one of the following conditions is true:  &lt;ul&gt; &lt;li&gt;A program prompts for credentials to be applied by calling the following function and similar parameters: &lt;br&gt;&amp;nbsp;&lt;br&gt;IBackgroundCopyJob2::SetCredentials. (target=&lt;var&gt;ProxyorServer&lt;/var&gt;, Negotiate/NTLM, username=NULL,password=NULL)&lt;br&gt;&amp;nbsp; &lt;li&gt;If the LmCompatibilityLevel value on the client is set to a value that is greater than or equal to 2.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;b&gt;Important&lt;/b&gt; By default, Windows XP sets the LmCompatibilityLevel to 0. With BITS 2.0, logon credentials will not be used if the LmCompatibilityLevel is set to 0. &lt;/p&gt; &lt;p&gt;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Now I was getting somewhere!&amp;nbsp; I checked the registry, and LmCompatibilityLevel was indeed set to 0, which exactly explains why BITS was not automatically authenticating with the proxy server.&lt;/p&gt; &lt;p&gt;Before changing values, I used the BITSADMIN program (you can find it on your XP CD-ROM in Support Tools) to see how many BITS jobs existed (bitsadmin /list) and then cleared out the list (bitsadmin /reset).&amp;nbsp; This&amp;nbsp;eliminated the scores of failed (inactive) jobs that were still hanging around.&lt;/p&gt; &lt;p&gt;I then changed LmCompatibilityLevel to a value of 2, and then restarted the BITS service, reset the Zune (hold the Back Arrow and Up at the same time until it resets), and restarted the Zune software.&amp;nbsp; This time, the firmware CAB file was successfully downloaded by the BITS client, and the moment that this finished, the Zune client proceeded with installing the firmware onto the device.&lt;/p&gt; &lt;p&gt;Sweet!&lt;/p&gt; &lt;p&gt;&lt;em&gt;Note: The reason for this BITS behavior is based on security: you really don't want background processes to be automatically authenticating with servers on your behalf if you're not aware of what they might be doing.&amp;nbsp; The nature of BITS is that you can disconnect from one network, and later connect to a different network (maybe at a coffee shop), and your download will resume automatically without requiring any action on your part.&amp;nbsp; So, if you do happen to change your LmCompatibilityLevel in order to upgrade the Zune, then be sure to change it back when you are finished in order to preserve your system's integrity.&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-7719599699680898860?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/7719599699680898860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=7719599699680898860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/7719599699680898860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/7719599699680898860'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/05/how-i-managed-to-successfully-update-my.html' title='How I Managed To Successfully Update My Zune to 1.3'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-1852581768965416722</id><published>2007-05-18T10:29:00.001-04:00</published><updated>2007-05-18T10:29:12.929-04:00</updated><title type='text'>RDP Console Session: Did You Know About It?</title><content type='html'>&lt;p&gt;I continue to be surprised by how many IT professionals that depend on Remote Desktop to access servers for administration do not know about this:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;For Windows 2003 servers, you can use the following:&lt;/p&gt; &lt;p&gt;START | RUN: &lt;p&gt;mstsc /v:whqs7610 /console &lt;p&gt;(without the “/console”, it just connects regularly.&amp;nbsp; With “/console”, you grab the actual console session, as if you were at the monitor and keyboard downstairs in the server room).&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Out of the box, Windows Server 2003 provides two regular RDP sessions (for Administrators), plus the ability to connect to the actual console session.&amp;nbsp; So, in effect, there are now three RDP sessions available for use at the same time. &lt;p&gt;Here at my client site, it seems that&amp;nbsp;multiple people will jump onto a server&amp;nbsp;and then not logoff when they are done.&amp;nbsp; The two "free" RDP sessions then become occupied, not allowing anyone else to connect. &lt;p&gt;But, by connecting to the Console Session itself, you can logoff one (or both) of the regular sessions using the Terminal Services Manager application (Administrative Tools&amp;nbsp;program group), and then reconnect not using the "/console" switch to grab a regular session.&amp;nbsp; (That is, we try to reserve the use of the Console session for "emergencies").&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-1852581768965416722?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/1852581768965416722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=1852581768965416722' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/1852581768965416722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/1852581768965416722'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/05/rdp-console-session-did-you-know-about.html' title='RDP Console Session: Did You Know About It?'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-5050633945979946293</id><published>2007-05-16T09:28:00.001-04:00</published><updated>2007-05-21T10:03:07.715-04:00</updated><title type='text'>Party with Palermo: Tech Ed Style</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;I'll be there!  &lt;p&gt;&lt;a href="http://partywith.palermo.cc/"&gt;&lt;img height="90" alt="" src="http://farm1.static.flickr.com/206/498762885_26806c75c9_m.jpg" width="120" align="middle" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Website:&amp;nbsp; &lt;a href="http://partywith.palermo.cc/"&gt;http://partywith.palermo.cc&lt;/a&gt;&lt;br&gt;June 3rd, 2007 @ 7PM - 11PM&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-5050633945979946293?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/5050633945979946293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=5050633945979946293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5050633945979946293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5050633945979946293'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/05/party-with-palermo-tech-ed-style.html' title='Party with Palermo: Tech Ed Style'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/206/498762885_26806c75c9_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-2004272435049409796</id><published>2007-05-14T14:31:00.001-04:00</published><updated>2007-05-14T14:40:44.885-04:00</updated><title type='text'>VirtualPC Console Not Displaying</title><content type='html'>&lt;p&gt;For the past several weeks, I've had a problem with VirtualPC.&amp;nbsp; Whenever I started the program, I would see it running in the taskbar, but the console itself would not show up on the screen.&amp;nbsp; Luckily, I could still start all of my VPC images using the context menu of the task item.&lt;/p&gt; &lt;p&gt;Today, I finally looked for a cause, and found it.&amp;nbsp; &lt;/p&gt; &lt;p&gt;VPC stored it's configuration in the following file:&lt;/p&gt;&lt;pre&gt;%APPDATA%\Microsoft\Virtual PC\Options.xml&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Within that XML file, I found the following node:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;window&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;console&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;height&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"integer"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;246&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;height&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&lt;font color="#333333"&gt;    &lt;/font&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;left&lt;/span&gt;&lt;span style="color: #ff0000"&gt;_position&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"integer"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;4294935296&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;left&lt;/span&gt;_position&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&lt;font color="#333333"&gt;    &lt;/font&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;top&lt;/span&gt;&lt;span style="color: #ff0000"&gt;_position&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"integer"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;4294935296&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;top&lt;/span&gt;_position&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&lt;font color="#333333"&gt;    &lt;/font&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;visible&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"boolean"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;visible&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&lt;font color="#333333"&gt;    &lt;/font&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;width&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"integer"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;359&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;width&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&lt;font color="#333333"&gt;  &lt;/font&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;console&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;new&lt;/span&gt;&lt;span style="color: #ff0000"&gt;_pc&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;left&lt;/span&gt;&lt;span style="color: #ff0000"&gt;_position&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"integer"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;449&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;left&lt;/span&gt;_position&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&lt;font color="#333333"&gt;    &lt;/font&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;top&lt;/span&gt;&lt;span style="color: #ff0000"&gt;_position&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"integer"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;329&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;top&lt;/span&gt;_position&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&lt;font color="#333333"&gt;  &lt;/font&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;new&lt;/span&gt;_pc&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;virtual&lt;/span&gt;&lt;span style="color: #ff0000"&gt;_disk_wizard&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;left&lt;/span&gt;&lt;span style="color: #ff0000"&gt;_position&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"integer"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;727&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;left&lt;/span&gt;_position&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&lt;font color="#333333"&gt;    &lt;/font&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;top&lt;/span&gt;&lt;span style="color: #ff0000"&gt;_position&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"integer"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;184&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;top&lt;/span&gt;_position&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&lt;font color="#333333"&gt;  &lt;/font&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;virtual&lt;/span&gt;_disk_wizard&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;window&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Interesting to see the values that were being used for "left_position" and "top_position"...&amp;nbsp; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;4,294,935,296 = 0xFFFF8300&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Expressed as a 32-bit signed integer, this is the same as -32,000.&amp;nbsp; Doesn't tell me anything specific, but I found it interesting nonetheless.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Resetting these to 0 fixed the issue.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-2004272435049409796?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/2004272435049409796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=2004272435049409796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/2004272435049409796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/2004272435049409796'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/05/virtualpc-console-not-displaying.html' title='VirtualPC Console Not Displaying'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-1514506101757681399</id><published>2007-05-07T12:14:00.001-04:00</published><updated>2007-05-07T12:14:27.517-04:00</updated><title type='text'>Day of .NET in Ann Arbor: RECAP</title><content type='html'>&lt;p&gt;The Day of .NET in Ann Arbor 2007 Edition is over!&amp;nbsp; Like its predecessor last year, this event turned out to be very well received, and therefore, I think very successful.&lt;/p&gt; &lt;p&gt;The conference was again organized by three .NET user groups in this area: &lt;a href="http://www.migang.org" target="_blank"&gt;GANG&lt;/a&gt;, &lt;a href="http://www.nwnug.com/" target="_blank"&gt;NWNUG&lt;/a&gt;, and &lt;a href="http://www.aadnd.org/" target="_blank"&gt;AADND&lt;/a&gt;.&amp;nbsp; Specifically, the following people are who performed the day-to-day activities in bringing this event together:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;John Hopkins (president of GANG): overall chairman of DoDN/AA 2007&lt;/li&gt; &lt;li&gt;Jason Follas (president of NWNUG): speaker/session coordinator&lt;/li&gt; &lt;li&gt;Darrell Hawley (program chair of AADND): registration coordinator&lt;/li&gt; &lt;li&gt;David Baldwin (AADND webmaster): sponsorship/public relations&lt;/li&gt; &lt;li&gt;Scott Zischerk (AADND): the DoDN webmaster (and T-Shirt designer)&lt;/li&gt; &lt;li&gt;Dave Redding (vice president of AADND): sponsorship&lt;/li&gt; &lt;li&gt;Chris Kotsis (secretary of GANG): sponsorship&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The day of the event, we had some attendees who volunteered to help out with registration (and ended up missing the first session as a result).&amp;nbsp; Many thanks go to:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Dan Hounshell, Telligent&lt;/li&gt; &lt;li&gt;David Patow, Compuware&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;In all, we're pretty confident that there were actually 205 people in attendance!&amp;nbsp; This represents less than a 20% dropoff from our registration numbers.&amp;nbsp; For a free event like this, and for weather being as nice as it was, that is actually a great number (speaking from experience in having organized several events like this).&amp;nbsp; &lt;/p&gt; &lt;p&gt;However, we were anticipating a greater dropoff rate, and as a result, we ended up a little short on food at lunchtime.&amp;nbsp; Our sincere apologizes to anyone who might not have gotten any pizza, but we truly were trying to avoid last year's problem of having way too much food (which we even had a hard time trying to give it away to people passing by).&amp;nbsp; For full disclosure, we were anticipating the need to feed 180 people, not 205, to give you an idea of the challenge that we faced in trying to plan meals.&lt;/p&gt; &lt;p&gt;Another hiccup the day of the event was the fact that the campus facilities deactivated the air conditioning units in order to conserve energy (because WCC is in between semesters).&amp;nbsp; So, while there was airflow in the rooms, it wasn't necessarily "cool air".&amp;nbsp; The result was a very sauna-like experience while attending some of the sessions.&amp;nbsp; Let me just say that this very much took us by surprise as well!&lt;/p&gt; &lt;p&gt;We also considered people's feedback from the prior year, and tried to make little changes to improve on the experience this time around.&amp;nbsp; One thing that we tried hard to avoid was raffling off 100+ books during the closing.&amp;nbsp; So, we pre-selected book/software winners based on raffle tickets, and staged a giveaway in the hallway leading to the event.&amp;nbsp; &lt;/p&gt; &lt;p&gt;This actually worked well, but was not clearly communicated to all of the attendees as to how it worked (i.e., we didn't have enough books for everyone this year, so only the posted numbers were actual winners).&amp;nbsp; Also, we had unclaimed books when it came time to go into the closing session, so they were boxed up and left in the hallway in case someone came to us after the event to claim a winning prize.&amp;nbsp; To my surprise, all that was left afterwards were empty boxes, so even remaining valid winners were unable to claim their books.&amp;nbsp; I just hope that they went to good homes, and won't show up on eBay or Amazon.&lt;/p&gt; &lt;p&gt;Up to this point, I haven't heard anything negative about the Vendor Sessions that we inserted into the lineup.&amp;nbsp; I'm very much in agreement with the "Code Camp" mentality that our attendees shouldn't be over-marketed to by sponsors.&amp;nbsp; However, our sponsors are what make this level of event (which truly is a conference and not just a gathering of geeks who have nothing better to do)&amp;nbsp;totally free to the attendees, so we have to show some love to them.&amp;nbsp; &lt;/p&gt; &lt;p&gt;In the past, I've often received inquiries from sponsors asking if they can have a breakout session to show off their products.&amp;nbsp; I've always had to deny such requests because I felt that sessions should be somewhat neutral in topic with concern to third-party products.&amp;nbsp; Otherwise, there might be a sense of mistrust by the attendees as to what the motives of the event organizers might be.&lt;/p&gt; &lt;p&gt;The Vendor Session, though, was the attempt to satisfy both worlds.&amp;nbsp; This was a dedicated timeslot where only vendors were presenting concurrently with one another.&amp;nbsp; The goal was to offer value-added sessions, and not just blind marketing, because session audiences would probably consist of current customers, or people who have already started researching the products.&amp;nbsp; These timeslots were also 1/2 the length of normal sessions, which helped to focus the presentations, and also helped to prevent boredom from developing in the audience.&amp;nbsp; More than anything else is the fact that there was no pretense involved: you knew going in that the content would be centered around a vendor's product.&lt;/p&gt; &lt;p&gt;The organizers will be having a post-mortem conference call tonight to discuss how we can improve upon this experience for next year's event.&amp;nbsp; If you happen to have any ideas, we would be glad to hear them!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-1514506101757681399?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/1514506101757681399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=1514506101757681399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/1514506101757681399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/1514506101757681399'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/05/day-of-net-in-ann-arbor-recap.html' title='Day of .NET in Ann Arbor: RECAP'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-4139114020913588910</id><published>2007-04-30T16:05:00.001-04:00</published><updated>2007-04-30T16:05:06.633-04:00</updated><title type='text'>TechEd 2007</title><content type='html'>&lt;p&gt;&lt;a href="http://go.microsoft.com/?linkid=6369334"&gt;&lt;img src="http://techedbloggers.net/Images/Flair/teched07_120X90_v2w.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Yup, I'm allowed to go again...&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/8832633-4139114020913588910?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/4139114020913588910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=4139114020913588910' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/4139114020913588910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/4139114020913588910'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/04/teched-2007.html' title='TechEd 2007'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-8529514780232914699</id><published>2007-04-26T10:34:00.001-04:00</published><updated>2007-04-26T10:35:13.475-04:00</updated><title type='text'>IntelliSense for App.Config Stopped Working</title><content type='html'>&lt;p&gt;Ugh!&amp;nbsp; I've wasted the past hour trying to figure out why I no longer had IntelliSense while hand-editing my App.Config file in Visual Studio 2005.&lt;/p&gt; &lt;p&gt;Among all of the noise from my search results, I found an old newsgroup post stating that the XML Schema file that VS2005 uses for .NET config files is kept at:&lt;br&gt;&lt;br&gt;C:\Program Files\Microsoft Visual Studio 8\Xml\Schemas\DotnetConfig.xsd&lt;br&gt;&lt;br&gt;Hmm, I don't have that file.&amp;nbsp; Could it be that this was an old file used by a beta of VS2005, and that it's just not distributed in RTM?&lt;/p&gt; &lt;p&gt;I IM'd &lt;a href="http://www.diditwith.net/" target="_blank"&gt;Dustin&lt;/a&gt;, and sure enough, he had that file on his machine.&amp;nbsp; So, something was not playing nice, and actually&amp;nbsp;DELETED it from my machine.&amp;nbsp; The nerve!&lt;/p&gt; &lt;p&gt;My solution: Download a new one to that directory&amp;nbsp;(there's an &lt;a href="http://www.peterritchie.com/Hamlet/Downloads/74.aspx" target="_blank"&gt;improved version here&lt;/a&gt;), and wouldn't you know: IntelliSense started working again!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-8529514780232914699?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/8529514780232914699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=8529514780232914699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/8529514780232914699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/8529514780232914699'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/04/intellisense-for-appconfig-stopped.html' title='IntelliSense for App.Config Stopped Working'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-6268777519443632741</id><published>2007-04-25T16:40:00.001-04:00</published><updated>2007-04-26T07:41:52.456-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Closures in SQL?</title><content type='html'>&lt;p&gt;Through my daily blog reading, I came across &lt;a href="http://sqlservercode.blogspot.com/2007/04/you-should-never-use-in-in-sql-to-join.html" target="_blank"&gt;this post&lt;/a&gt; making an argument for not using the SQL "IN" clause as a substitute for a JOIN.&amp;nbsp; I saw something familiar and interesting in one of the examples listed, and will try to demonstrate it here.&lt;/p&gt; &lt;p&gt;The right-hand side of an "IN" clause is simply a set of values.&amp;nbsp; This can be provided by means of a comma-separated list of literals, or by a SELECT statement.&lt;/p&gt; &lt;p&gt;To demonstrate the syntax, consider the following table:&lt;br&gt;&lt;br&gt; &lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Day&lt;/th&gt;&lt;th&gt;Vehicle&lt;/th&gt;&lt;th&gt;Miles&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Mo&lt;/td&gt;&lt;td&gt;Bike&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Tu&lt;/td&gt;&lt;td&gt;Car&lt;/td&gt;&lt;td&gt;85&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;We&lt;/td&gt;&lt;td&gt;Truck&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Th&lt;/td&gt;&lt;td&gt;Bike&lt;/td&gt;&lt;td&gt;74&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Fr&lt;/td&gt;&lt;td&gt;Car&lt;/td&gt;&lt;td&gt;23&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If I wanted only the miles for trips taken by Cars and Bikes, then I could provide those literals as:&lt;/p&gt; &lt;p&gt;&lt;pre&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt; Vehicle, Miles &lt;br /&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;   TripLog &lt;br /&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHERE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHERE&lt;/a&gt;  Vehicle &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=IN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;IN&lt;/a&gt; ( '&lt;span style="color: #8b0000"&gt;Car&lt;/span&gt;', '&lt;span style="color: #8b0000"&gt;Bike&lt;/span&gt;' )&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Or, I could store the values within fields of another table, and SELECT them (the caveat is that I can only select a single field in my subquery):&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;MPG&lt;/th&gt;&lt;th&gt;Fuel&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Car&lt;/td&gt;&lt;td&gt;28.1&lt;/td&gt;&lt;td&gt;Gasoline&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bike&lt;/td&gt;&lt;td&gt;32.4&lt;/td&gt;&lt;td&gt;Gasoline&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Rocket Ship&lt;/td&gt;&lt;td&gt;0.0000000421&lt;/td&gt;&lt;td&gt;Hydrazine&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;pre&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt; Vehicle, &lt;br&gt;       Miles&lt;br /&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;   TripLog&lt;br /&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHERE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHERE&lt;/a&gt;  Vehicle &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=IN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;IN&lt;/a&gt; ( &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt; Type &lt;br&gt;                    &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt; PreferredVehicle )&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The point that the other blogger was trying to make was that you might just want to use a simple INNER JOIN.&amp;nbsp; But, I'm not here to argue that point.&amp;nbsp; Instead, I'd like to expand on a path that he just touched on in a counter example.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Suppose that I mistyped the subquery used in the "IN" clause, and used "Vehicle" instead of "Type" for the selected column:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;pre&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  Vehicle,&lt;br /&gt;        Miles&lt;br /&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;    TripLog&lt;br /&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHERE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHERE&lt;/a&gt;   Vehicle &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=IN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;IN&lt;/a&gt; ( &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt; Vehicle&lt;br /&gt;                     &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;   PreferredVehicle )&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The result is that I would get all rows returned, including the one for "Truck".&amp;nbsp; This is despite the fact that there is no column in [PreferredVehicle] called "Vehicle", and that "Truck" doesn't appear anywhere in the [PreferredVehicle] table.&amp;nbsp; Why?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Let's first look at another query that sort of demonstrates what is happening:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;pre&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  '&lt;span style="color: #8b0000"&gt;Car&lt;/span&gt;'&lt;br /&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;    PreferredVehicle&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The result is that you'll get one row returned in the resultset for every row in the table, with each returned row containing only the value "Car".&amp;nbsp; This is because a SELECT FROM query evaluates for every row in the FROM clause (filtered by a WHERE clause, if present). And, since we're only selecting a literal string and no other fields from the table, then the output will however many rows there are in [PreferredVehicle] with each row containing only that string value.&amp;nbsp; Simple, right?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;But how does this explain why all rows were returned when the subquery used a column name that doesn't even exist in the subquery's table?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;From the language point of view, the subquery from the "IN" clause is executing within the context of the outer query.&amp;nbsp; An interesting side effect is that the subquery has access to all of the "locals" in the outer query.&amp;nbsp; That is, if you think of this executing row by row, then think of the subquery having access to the columns in each row returned by the outer query.&amp;nbsp; That is, you have a Closure!  Sort of...  (Since you can think of the subquery as being sort of like an anonymous function defined within another function)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So, if you're still imagining this row-by-row evaluation of the subquery, then you can see how the "Vehicle" from each row in the outer query is simply selected as the output of the subquery -- much like when the literal string was used.&amp;nbsp; And, because the "Vehicle" from the row of the outer query matches a value in the set returned from the subquery (it actually matches every value in the set that is returned for that row), then that WHERE clause predicate is satisfied, and the row from the outer query is returned.&amp;nbsp; &lt;br&gt;&lt;br&gt;"Truck" is in the set&amp;nbsp;["Truck", "Truck", "Truck"]&lt;br&gt;"Car" is in the set ["Car", "Car", "Car"], etc, etc.&amp;nbsp; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;As a developer, knowing and exploiting this behavior will likely scare the hell out of your DBA's if and when they perform code reviews.&amp;nbsp; But, it also allows you to do some "elegant" things in your code.&amp;nbsp; And some unexpected things, too, if you're not careful.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;For example, let's try to select [TripLog] entries for vehicle types where I was able to drive&amp;nbsp;at least one day for under $5.00.&amp;nbsp; I'll use an amazingly cheap current gasoline price of $2.90 per gallon in this calculation, grabbing the Miles from the [TripLog] row, and the MPG from the [PreferredVehicle] table.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;You would think that the following query would do the job of building a set of Vehicle Types that match our criteria, and then using that set as the right-hand side of the "IN" clause.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;pre&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  Vehicle, &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=Day&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;Day&lt;/a&gt;&lt;br /&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;    TripLog&lt;br /&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHERE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHERE&lt;/a&gt;   Vehicle &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=IN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;IN&lt;/a&gt; ( &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt; Type&lt;br /&gt;                     &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;   PreferredVehicle&lt;br /&gt;                     &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=where&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHERE&lt;/a&gt;  ( 2.90 * Miles / MPG ) &amp;lt; 5.00 )&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;As such, I would expect the query to output the following:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;pre&gt;Mo     Bike     50&lt;br /&gt;Tu     Car      85&lt;br /&gt;Th     Bike     74&lt;br /&gt;Fr     Car      23&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;because both Bike and Car have days where the cost of the trip were under $5.00,&amp;nbsp;so therefore, I would think that all Bike and Car rows should be returned.&amp;nbsp; Truck is not in [PreferredVehicle], so, it would not be returned.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;However, here is the actual output:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;pre&gt;Mo     Bike     50&lt;br /&gt;Fr     Car      23&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Yes, I got the rows where the trip price was under $5.00.&amp;nbsp; But, the query actually filtered out all rows where the price exceeded $5.00.&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;That certainly doesn't seem correct from a set-based point of view, but is very consistent to a Closure-based point of view.&amp;nbsp; When evaluated row-by-row, the [TripLog] entries with too many miles will fail the "IN" clause test, and will therefore, not be included in the output.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In reality, the results are exactly the same as if we had used an INNER JOIN with a WHERE clause:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;pre&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=SELECT&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;SELECT&lt;/a&gt;  &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=Day&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;Day&lt;/a&gt;,&lt;br /&gt;        Vehicle,&lt;br /&gt;        Miles&lt;br /&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=FROM&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;FROM&lt;/a&gt;    TripLog &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=AS&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;AS&lt;/a&gt; TL &lt;br /&gt;        &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=JOIN&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;JOIN&lt;/a&gt; PreferredVehicle &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=AS&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;AS&lt;/a&gt; PV&lt;br /&gt;            &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=ON&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;ON&lt;/a&gt; TL.Vehicle = PV.Type&lt;br /&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=WHERE&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;WHERE&lt;/a&gt;   ( 2.90 * TL.Miles / PV.MPG ) &amp;lt; 5.00&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;But, the execution plans are different.&amp;nbsp; In fact, despite all of the negative comments said about using INNER JOINs versus IN clauses, the "Closure" version is less than half the cost of the JOIN/WHERE version of the query...&amp;nbsp; which totally surprised me.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photo_zoom.gne?id=472768917&amp;amp;size=o" target="_blank"&gt;&lt;img height="204" alt="queryplans" src="http://farm1.static.flickr.com/175/472768917_1e7e211e27.jpg" width="500"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Closures in SQL... Who knew!!??!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-6268777519443632741?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/6268777519443632741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=6268777519443632741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6268777519443632741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6268777519443632741'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/04/closures-in-sql.html' title='Closures in SQL?'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/175/472768917_1e7e211e27_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-8512934961446681777</id><published>2007-04-09T09:53:00.001-04:00</published><updated>2007-04-09T09:58:25.424-04:00</updated><title type='text'>Level 70</title><content type='html'>&lt;p&gt;We&amp;nbsp;spent the holiday weekend at my parent's place in Louisville, KY.&amp;nbsp; Because a certain Dwarf Paladin (a.k.a., my wife) permitted me to play a little more than usual, I was able to finally knock out the last level of WoW-TBC...&lt;/p&gt; &lt;p&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/81259708@N00/452363027/"&gt;&lt;img height="375" alt="70!" src="http://farm1.static.flickr.com/253/452363027_927ac6e780.jpg" width="500"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;You know what? There were no balloons or confetti falling from the sky, no fireworks, no noisemakers, no "Welcome to the 70-Club" tells sent by Blizzard, and not even a "grats" whispered by anyone online (not for a few hours after the fact, at least).&amp;nbsp; Kind of anti-climactic, eh?&lt;/p&gt; &lt;p&gt;Now I can resume my normal life....&amp;nbsp; Yeah, right!&amp;nbsp; This just means that the experience known as EGC (End Game Content) is just beginning.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-8512934961446681777?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/8512934961446681777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=8512934961446681777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/8512934961446681777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/8512934961446681777'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/04/level-70.html' title='Level 70'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/253/452363027_927ac6e780_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-2258239931602456083</id><published>2007-04-02T15:20:00.001-04:00</published><updated>2007-04-02T15:20:02.400-04:00</updated><title type='text'>ZMachine.NET Moved to CodePlex</title><content type='html'>&lt;p&gt;With the eminent shutdown of GotDotNet, I have created a CodePlex workspace to serve as the home of the ZMachine.NET project:&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.codeplex.com/zmachine" href="http://www.codeplex.com/zmachine"&gt;http://www.codeplex.com/zmachine&lt;/a&gt;&lt;/p&gt; &lt;p&gt;With any luck, I'll have a chance soon to breathe some new life into this dormant project (and finally add the V5 support that people keep asking for).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-2258239931602456083?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/2258239931602456083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=2258239931602456083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/2258239931602456083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/2258239931602456083'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/04/zmachinenet-moved-to-codeplex.html' title='ZMachine.NET Moved to CodePlex'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-7090917762060646699</id><published>2007-03-29T09:28:00.001-04:00</published><updated>2007-03-30T14:18:06.013-04:00</updated><title type='text'>Impromptu Channel 9 Videos</title><content type='html'>&lt;p&gt;Scott Hanselman and&amp;nbsp;Rory Blyth going into a random office in Building 42 and letting the camera roll: it could have turned into a disaster, but what happened was that they stumbled into Polita Paulus's office, and discovered the developer who created the ASP.NET GridView and ObjectDataSource controls (as well as BLINQ)!!!&lt;/p&gt; &lt;p&gt;&lt;a title="http://channel9.msdn.com/showpost.aspx?postid=295919" href="http://channel9.msdn.com/showpost.aspx?postid=295919"&gt;http://channel9.msdn.com/showpost.aspx?postid=295919&lt;/a&gt;&lt;/p&gt; &lt;p&gt;(This one's well worth watching: just under 15 minutes)&lt;/p&gt; &lt;p&gt;Of course, about 1/2 way through the video, I was screaming at Scott and Rory to go across the hall and talk to the guy that wrote the XmlDataSource and find out why &lt;a href="http://jasonf-blog.blogspot.com/2006/08/xmldatasource-xpath-workaround-for.html" target="_blank"&gt;there's no Namespace support&lt;/a&gt; (Scott even brought that up in the video)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-7090917762060646699?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/7090917762060646699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=7090917762060646699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/7090917762060646699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/7090917762060646699'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/03/impromptu-channel-9-videos.html' title='Impromptu Channel 9 Videos'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-6477402212427460365</id><published>2007-03-16T13:31:00.001-04:00</published><updated>2007-03-31T17:49:03.125-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zmachine'/><category scheme='http://www.blogger.com/atom/ns#' term='sapi'/><title type='text'>It Talks!</title><content type='html'>&lt;p&gt;Almost two years ago, I threw together an interpreter for the &lt;a href="http://en.wikipedia.org/wiki/Zmachine" target="_blank"&gt;Infocom Z-Machine&lt;/a&gt; using C#.&amp;nbsp; This was actually an exercise that I used while teaching myself the internals of the Z-Machine itself.&amp;nbsp; I've said it before in this blog, but in my opinion, the single best way for a high-level language developer (like myself) to learn the low-level aspects of a particular machine architecture (be it a Z80, 6802, Atmel AVR, PIC, Z-Machine, etc), is to write an emulator to run&amp;nbsp;the native code bytes.&amp;nbsp; Once you've gone through that exercise (especially the debugging process), you pretty much know exactly how each opcode works.&lt;/p&gt; &lt;p&gt;I've pulled out this Z-Machine library a couple of times when I wanted to test the capabilities of a particular technology.&amp;nbsp; For instance, when I wanted to see what SQLCLR could/could not do, I created a stored procedure interface to my library, and was able to play Zork completely on the database server itself (it turns out that you can do a lot using SQLCLR if you wanted to).&lt;/p&gt; &lt;p&gt;Last year, I plopped the source code into a GotDotNet workspace, and pretty much forgot about it.&amp;nbsp; Until yesterday when &lt;a href="http://www.imaginativeuniversal.com/" target="_blank"&gt;James Ashley&lt;/a&gt; from the Atlanta&amp;nbsp;area&amp;nbsp;emailed me to let me know about a little project of his that he is working on.&lt;/p&gt; &lt;p&gt;It turns out that &lt;a href="http://www.codeproject.com/useritems/Vista_Speech_Recognition.asp" target="_blank"&gt;James is really into SAPI&lt;/a&gt; (much like an INETA speaker from my area, &lt;a href="http://www.tabletumlnews.com/" target="_blank"&gt;Martin L. Shoemaker&lt;/a&gt;), and was able to create a System.Speech-based interface into my Z-Machine library.&amp;nbsp; What a great demo of the SAPI capabilities of the .NET Framework v3.0 by playing a text adventure game using only your computer's speakers and a microphone!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; James' article can be found here: &lt;a href="http://www.codeproject.com/useritems/SAPISophia.asp" target="_blank"&gt;http://www.codeproject.com/useritems/SAPISophia.asp&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/8832633-6477402212427460365?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/6477402212427460365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=6477402212427460365' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6477402212427460365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6477402212427460365'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/03/it-talks.html' title='It Talks!'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-5847021333894088643</id><published>2007-03-15T10:03:00.001-04:00</published><updated>2007-03-15T10:03:12.923-04:00</updated><title type='text'>Day of .NET Blog Badges</title><content type='html'>&lt;p&gt;Scott Zischerk, the guy behind the fantastic looking &lt;a href="http://www.dayofdotnet.org/badges.aspx" target="_blank"&gt;Day of .NET in Ann Arbor website&lt;/a&gt;, has created a couple of badges that you can post on your blogs!&lt;/p&gt;&lt;a href="http://www.dayofdotnet.org" target="_blank"&gt;&lt;img alt="Day of .Net May 5, 2007 - I'll be there!" src="http://www.dayofdotnet.org/images/DoDNBadge.png"&gt;&lt;/a&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.dayofdotnet.org" target="_blank"&gt;&lt;img alt="Day of .Net May 5, 2007 - I'll be there!" src="http://www.dayofdotnet.org/images/DoDNBadge2.png"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;HTML code is available at: &lt;a href="http://www.dayofdotnet.org/badges.aspx" target="_blank"&gt;http://www.dayofdotnet.org/badges.aspx&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/8832633-5847021333894088643?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/5847021333894088643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=5847021333894088643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5847021333894088643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5847021333894088643'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/03/day-of-net-blog-badges.html' title='Day of .NET Blog Badges'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-7572847299926658083</id><published>2007-03-14T12:37:00.001-04:00</published><updated>2007-03-14T12:37:10.685-04:00</updated><title type='text'>Great Bill Gates Story</title><content type='html'>&lt;p&gt;&lt;a href="http://geekswithblogs.net/lorint/archive/2007/03/14/108732.aspx" target="_blank"&gt;Lorin Thwaits tells a great story about asking Bill Gates a question&lt;/a&gt; this week at the MVP Summit.&lt;/p&gt; &lt;p&gt;I won't spoil it with details, but give it a read!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-7572847299926658083?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/7572847299926658083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=7572847299926658083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/7572847299926658083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/7572847299926658083'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/03/great-bill-gates-story.html' title='Great Bill Gates Story'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-6938800363056628032</id><published>2007-03-06T16:00:00.001-05:00</published><updated>2007-03-06T16:00:03.117-05:00</updated><title type='text'>Day of .NET in Ann Arbor: Postponed 1 Week</title><content type='html'>&lt;p&gt;Due to &lt;a href="http://www.umich.edu/~gradinfo/spring/" target="_blank"&gt;some previously unforeseen coincidental events taking place on April 28th&lt;/a&gt;, we have decided that the Day of .NET in Ann Arbor conference had to be postponed one week.&amp;nbsp; Otherwise, there would just not be any lodging available within a 40+ mile radius of Ann Arbor.&lt;/p&gt; &lt;p&gt;So, cross off the previously reserved date, and create a new entry in your calendar for &lt;strong&gt;MAY 5, 2007&lt;/strong&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Also, if you have the means, then please help to spread the word that the &lt;a href="http://www.dodn.org/" target="_blank"&gt;Day of .NET in Ann Arbor&lt;/a&gt; conference is now being held on &lt;strong&gt;MAY 5, 2007&lt;/strong&gt;.&amp;nbsp; All other details remain the same.&lt;/p&gt; &lt;p&gt;Thanks!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-6938800363056628032?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/6938800363056628032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=6938800363056628032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6938800363056628032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6938800363056628032'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/03/day-of-net-in-ann-arbor-postponed-1.html' title='Day of .NET in Ann Arbor: Postponed 1 Week'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-5680509935797502778</id><published>2007-03-03T16:17:00.000-05:00</published><updated>2007-03-03T16:26:50.253-05:00</updated><title type='text'>My Programmer Personality</title><content type='html'>I saw this on &lt;a href="http://keithelder.net/blog/archive/2007/03/01/My-Programmer-Personality.aspx"&gt;Keith's blog&lt;/a&gt;, so I had to do it too....  It's kind of like the &lt;a href="http://en.wikipedia.org/wiki/Myers-Briggs"&gt;Myers-Briggs personality test&lt;/a&gt;, but for programmers (and not as in depth).  (For the curious, my MBTI is INTP...)&lt;br /&gt;&lt;br /&gt;From &lt;a href="http://www.doolwind.com/index.php?page=11"&gt;http://www.doolwind.com/index.php?page=11&lt;/a&gt;, I am being told:&lt;br /&gt;&lt;br /&gt;Your programmer personality type is:   &lt;strong&gt;DHSB&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;You're a &lt;strong&gt;D&lt;/strong&gt;oer.&lt;br /&gt;You are very quick at getting tasks done. You believe the outcome is the most important part of a task and the faster you can reach that outcome the better. After all, time is money.&lt;br /&gt;&lt;br /&gt;You like coding at a &lt;strong&gt;H&lt;/strong&gt;igh level.&lt;br /&gt;The world is made up of objects and components, you should create your programs in the same way.&lt;br /&gt;&lt;br /&gt;You work best in a &lt;strong&gt;S&lt;/strong&gt;olo situation.&lt;br /&gt;The best way to program is by yourself. There's no communication problems, you know every part of the code allowing you to write the best programs possible.&lt;br /&gt;&lt;br /&gt;You are a li&lt;strong&gt;B&lt;/strong&gt;eral programmer.&lt;br /&gt;Programming is a complex task and you should use white space and comments as freely as possible to help simplify the task. We're not writing on paper anymore so we can take up as much room as we need.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-5680509935797502778?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/5680509935797502778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=5680509935797502778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5680509935797502778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5680509935797502778'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/03/my-programmer-personality.html' title='My Programmer Personality'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-6767279458709559582</id><published>2007-03-03T10:11:00.000-05:00</published><updated>2007-03-03T16:05:23.749-05:00</updated><title type='text'>Memorabilia</title><content type='html'>One of my readers (we'll call her Mom, because that's her name) sent me this photo today:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm1.static.flickr.com/145/408760139_87558b0d07.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;This was the first "PC" in my house growing up, speaking specifically of IBM-compatible machines. My house had always had a computer in one form or another, from TRS-80's to a Commodore VIC-20 and the Commodore 64. This is the machine that took over the main computing needs of the family at the tail end of the C-64 days (my late high school days, if I recall).&lt;br /&gt;&lt;br /&gt;Notice the important details though:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This 286 had the spiral phone cord-like keyboard cable. They just don't make them like that anymore!&lt;/li&gt;&lt;li&gt;The mouse has a definite home in its holder affixed to the case. I don't know how many times today that I wish I had a place to put my mouse when I'm done using it.&lt;/li&gt;&lt;li&gt;Speaking of the mouse, I don't know if you can make it out, but there's a mousepad there with gridlines on it. You know, for when you need the highest precision in mouse usage, or so that you can pretend that you're at a CAD workstation or something.&lt;/li&gt;&lt;li&gt;Even in the days of this 286, there was a format war going on between 3.5" floppies and 5.25" floppies. Thankfully, this computer could handle both. Imagine if it only had a 3.5" drive: those disks in the cases to the right wouldn't work, and I bet inside of those cases were copies of MS-DOS 4.01. (Do they even sell computers with floppy drives these days?)&lt;/li&gt;&lt;li&gt;There's no Windows keys on that keyboard. No sir, they didn't exist back then. I don't even think that we would have seen a pirated copy of Windows 3.1 for a few more years, and by that time, I think that this particular machine was in retirement.&lt;/li&gt;&lt;li&gt;There are no speakers because... well, there was no sound card in this thing. And no CD-ROM drive because if they were out, then they probably cost as much as this computer.&lt;/li&gt;&lt;li&gt;And, lastly, there's the ever-important beer can lamp that I think my younger brother made in shop class.&lt;/li&gt;&lt;/ul&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/8832633-6767279458709559582?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/6767279458709559582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=6767279458709559582' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6767279458709559582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6767279458709559582'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/03/memorabilia.html' title='Memorabilia'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/145/408760139_87558b0d07_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-8127761918727514696</id><published>2007-03-02T11:14:00.001-05:00</published><updated>2007-03-02T11:14:33.380-05:00</updated><title type='text'>Still using Data Dude... Still not "Wow'd"</title><content type='html'>&lt;p&gt;I'm forcing myself to use VSTEDP for my current project, which involves making a wide variety of changes to an existing database schema in order to support new functionality required by my web application.&amp;nbsp; Hopefully, I'll have a seemless deployment of the changes into production when the time comes (holding breath).&amp;nbsp; I mean, that is one of the advertised benefits...&lt;/p&gt; &lt;p&gt;What I like is visibility into any breaking changes.&amp;nbsp; "Data Dude" does all of the dependency checking for me, and will create errors in the Visual Studio task list if a change breaks other objects.&lt;/p&gt; &lt;p&gt;What I dislike is how painful it is to actually make the changes using VSTEDP itself.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Come on, guys.&amp;nbsp; Visual Studio is known for being more than just a text editor.&amp;nbsp; Microsoft is known for providing great GUI database tools in addition to just "Query Analyzer" functionality.&amp;nbsp; IMHO, you shouldn't have released "Data Dude" without the same level of database editing support that Visual Studio itself supports against live databases.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Am I just using the product incorrectly, or coming into it with way too much expectation?&amp;nbsp; &lt;/p&gt; &lt;p&gt;The&amp;nbsp;only solution that I found was that I could make&amp;nbsp;changes to a live (development) database and then use the schema compare functionality in order to capture the deltas.&amp;nbsp; This seems to work, and allows me to use tools that I'm already familiary with.&amp;nbsp; I would just have preferred to do everything against my "one version of the truth" right in the tool itself.&amp;nbsp; Not to mention that if I were actually in a "team" environment, then this solution does not provide a very solid way to prevent people's changes from stepping on each other.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-8127761918727514696?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/8127761918727514696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=8127761918727514696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/8127761918727514696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/8127761918727514696'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/03/still-using-data-dude-still-not.html' title='Still using Data Dude... Still not &amp;quot;Wow&amp;#39;d&amp;quot;'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-6006654330061299509</id><published>2007-02-28T20:42:00.000-05:00</published><updated>2007-02-28T20:46:21.576-05:00</updated><title type='text'>Congratulations Drew!</title><content type='html'>This is actually old news, I guess, since the email arrived yesterday...  But, I've been in training this week, and just checked my work email this evening and saw the notice from &lt;a href="http://drewby.spaces.live.com/"&gt;Drew Robbins&lt;/a&gt; that stated:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Toshinori Robbins was born at 8:07a on 2/27. He weighs in at 7lbs 1oz and&lt;br /&gt;is 20 inches long. Mother and baby are doing well. However, I’m still pale in&lt;br /&gt;the face after leaving the room twice during delivery.  ;-)&lt;/blockquote&gt;&lt;br /&gt;Congratulations Drew and family!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-6006654330061299509?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/6006654330061299509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=6006654330061299509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6006654330061299509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/6006654330061299509'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/02/congratulations-drew.html' title='Congratulations Drew!'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-5053049367900482756</id><published>2007-02-26T11:00:00.001-05:00</published><updated>2007-02-26T11:00:12.642-05:00</updated><title type='text'>Podcast: WebDevRadio</title><content type='html'>&lt;p&gt;I met &lt;a href="http://fosterburgess.com/wp/" target="_blank"&gt;Michael Kimsal&lt;/a&gt; at CodeMash this year, thanks to a casual&amp;nbsp;introduction through &lt;a href="http://keithelder.net/" target="_blank"&gt;Keith Elder&lt;/a&gt;.&amp;nbsp; I didn't know at the time, chiefly because it wasn't specifically mentioned, but Michael has a podcast called "&lt;a href="http://www.webdevradio.com/" target="_blank"&gt;WebDevRadio&lt;/a&gt;".&lt;/p&gt; &lt;p&gt;He recently interviewed a few friends of mine, and fellow user group leaders from southwestern Ohio: &lt;a href="http://frazzleddad.blogspot.com" target="_blank"&gt;Jim Holmes&lt;/a&gt; and &lt;a href="http://www.dotavery.com/blog/" target="_blank"&gt;James Avery&lt;/a&gt;, authors of &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FWindows-Developer-Power-Tools-Turbocharge%2Fdp%2F0596527543&amp;amp;tag=aviewinsidmyh-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325"&gt;Windows Developer Power Tools&lt;/a&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a title="http://www.webdevradio.com/index.php?id=44" href="http://www.webdevradio.com/index.php?id=44" target="_blank"&gt;http://www.webdevradio.com/index.php?id=44&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;I'm listening now, and it's actually a great interview (/grin)!&amp;nbsp; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-5053049367900482756?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/5053049367900482756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=5053049367900482756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5053049367900482756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5053049367900482756'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/02/podcast-webdevradio.html' title='Podcast: WebDevRadio'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-78154458881369709</id><published>2007-02-23T15:50:00.001-05:00</published><updated>2007-02-23T15:50:20.730-05:00</updated><title type='text'>Finally Using "Data Dude"</title><content type='html'>&lt;p&gt;Microsoft Visual Studio Team Edition for Database Professionals:&lt;/p&gt; &lt;p&gt;I've had it installed ever since the product RTM, but up to this point, I have resisted using it to actually manage my database projects.&amp;nbsp; But, today, I decided to bite the bullet and see exactly what it could do for me.&lt;/p&gt; &lt;p&gt;Ever since I saw the first demos at TechEd, I've&amp;nbsp;been a fan of the&amp;nbsp;features of VSTEDP.&amp;nbsp; Especially appealing to me is having&amp;nbsp;full source control around every single database object, as well as the refactoring capabilities like renaming a table or column and have every reference (i.e., in views and stored procedures) also change to reflect the new name.&amp;nbsp; I imagine that deploying a schema change will be a delight, but truthfully, I haven't gotten that far yet (this is a real SQL 2000-based project that I'm working on, btw).&lt;/p&gt; &lt;p&gt;In fact,&amp;nbsp;VSTEDP&amp;nbsp;appears to be&amp;nbsp;the first "Team Edition" SKU that adds value to Visual Studio that even a small ISV can take advantage of right out of the box.&amp;nbsp; I'm not easily impressed by the functionality of the other VSTE SKUs.&lt;/p&gt; &lt;p&gt;Despite all that it is, "Data Dude" apparently does not include all of the functionality that you are used to for managing live databases using&amp;nbsp;Management Studio, or even Visual Studio's Server Explorer for that matter.&amp;nbsp; &lt;/p&gt; &lt;p&gt;My case-in-point for today's experience is the fact that everything in VSTEDP appears to be SQL-only.&amp;nbsp; There's no graphical capabilities for editing tables or relationships (Table Designer), etc.&amp;nbsp; Everything that you do (aside from the Rename Refactoring, as it would appear)&amp;nbsp;results in a DDL script appearing in a code editing window.&amp;nbsp; Heck, even clicking on a Column name in Schema View doesn't let you edit any of the properties that show up in the Property list.&lt;/p&gt; &lt;p&gt;For what it's worth, I'm not DDL-dumb.&amp;nbsp; But, by the same token, I've gotten used to using the Table Designer to do my work, since I've been doing this using SEM since SQL 7.&amp;nbsp; I just shouldn't need to abandon that design paradigm in order to take advantage of "Data Dude's" useful features.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-78154458881369709?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/78154458881369709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=78154458881369709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/78154458881369709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/78154458881369709'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/02/finally-using-dude.html' title='Finally Using &amp;quot;Data Dude&amp;quot;'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-668065084632196790</id><published>2007-02-21T21:32:00.001-05:00</published><updated>2007-02-21T21:32:18.570-05:00</updated><title type='text'>WoW!</title><content type='html'>&lt;p&gt;A month ago, before the release of BC, this might have meant more...&amp;nbsp; But, tonight, after about 16.5 days (/played),&amp;nbsp;Jaesyn of Dalaran&amp;nbsp;leveled to 60.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Not too bad for starting this particular toon in November and not being part of a guild.&lt;/p&gt; &lt;p&gt;&lt;a title="Guess Who's 60?" href="http://www.flickr.com/photos/81259708@N00/398269178/"&gt;&lt;img alt="Guess Who's 60?" hspace="0" src="http://static.flickr.com/141/398269178_a1d85c3f1d.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Now the push to 70 begins...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-668065084632196790?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/668065084632196790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=668065084632196790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/668065084632196790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/668065084632196790'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/02/wow.html' title='WoW!'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-5769510154066765516</id><published>2007-02-20T17:24:00.001-05:00</published><updated>2007-02-20T17:24:13.428-05:00</updated><title type='text'>Closures</title><content type='html'>&lt;p&gt;&lt;a href="http://diditwith.net/" target="_blank"&gt;Dustin Campbell&lt;/a&gt; has written a great series over the past few weeks on functional programming topics, which despite being a classic computer science topic, tends to be a little bit ahead of the curve as far as modern day .NET programming is concerned (that will all change in the near future, though - trust me!).&lt;/p&gt; &lt;p&gt;"Closures" is one of the topics that both he and &lt;a href="http://www.srtsolutions.com/public/blog/20574" target="_blank"&gt;Bill Wagner&lt;/a&gt; are expressing a lot of passion for these days, because understanding what they are and how they work are a critical as we move forward into everyday acceptance of&amp;nbsp;Anonymous Methods, Lambda Expressions, and scary things like that.&lt;/p&gt; &lt;p&gt;I've had a pretty good understanding of what a Closure was up to this point, thanks mostly to seeing Dustin present on the topic, as well as spending six hours trapped in a car with him as we drove to and from Dayton one evening.&amp;nbsp; However, I read something today that really made it click.&lt;/p&gt; &lt;p&gt;I was reading up on the programming language LUA, which just happens to be used to create add-on modules for World of Warcraft (wink, wink).&amp;nbsp; LUA is a dynamically typed language that supports using functions as first-class variables.&amp;nbsp; It also supports the concept of anonymous/inline functions, as demonstrated by the following:&lt;/p&gt;&lt;pre&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=function&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;function&lt;/a&gt; makeaddfunc(x)&lt;br /&gt;  &lt;span style="color: #008000"&gt;-- Return a new function that adds x to the argument&lt;/span&gt;&lt;br /&gt;  &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=return&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;return&lt;/a&gt; &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=function&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;function&lt;/a&gt;(y)&lt;br /&gt;    &lt;span style="color: #008000"&gt;-- When we refer to the variable x, which is outside of the current&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #008000"&gt;-- scope and whose lifetime is shorter than that of this anonymous&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #008000"&gt;-- function, Lua creates a closure.&lt;/span&gt;&lt;br /&gt;    &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=return&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;return&lt;/a&gt; x + y&lt;br /&gt;  &lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=end&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;end&lt;/a&gt;&lt;br /&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=end&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;end&lt;/a&gt;&lt;br /&gt;plustwo = makeaddfunc(2)&lt;br /&gt;&lt;a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;amp;siteid=us%2Fdev&amp;amp;p=1&amp;amp;nq=NEW&amp;amp;qu=print&amp;amp;IntlSearch=&amp;amp;boolean=PHRASE&amp;amp;ig=01&amp;amp;i=09&amp;amp;i=99"&gt;print&lt;/a&gt;(plustwo(5)) &lt;span style="color: #008000"&gt;-- Prints 7&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;(&lt;em&gt;Credit: &lt;/em&gt;&lt;a title="http://en.wikipedia.org/wiki/Lua_programming_language" href="http://en.wikipedia.org/wiki/Lua_programming_language"&gt;&lt;em&gt;http://en.wikipedia.org/wiki/Lua_programming_language&lt;/em&gt;&lt;/a&gt;&lt;em&gt;)&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;From that Wikipedia article comes this quote, which resulted in my "ah-ha!" moment:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;A new closure for the variable &lt;tt&gt;x&lt;/tt&gt; is created every time &lt;tt&gt;makeaddfunc&lt;/tt&gt; is called, so that the anonymous function returned will always access its own &lt;tt&gt;x&lt;/tt&gt; parameter. The closure is managed by Lua's garbage collector, just like any other object.&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;So, the simplified point is that because makeaddfunc(x) contains an anonymous function that uses "x", a closure is created &lt;strong&gt;each time&lt;/strong&gt; that makeaddfunc(x) is called in order to preserve the state of variables that are defined outside of the scope of the anonymous function.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I'm not sure if this will help to clear things up for other people as well as it did for me, but here's hoping!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-5769510154066765516?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/5769510154066765516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=5769510154066765516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5769510154066765516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5769510154066765516'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/02/closures.html' title='Closures'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-5757121837997931133</id><published>2007-02-19T21:33:00.001-05:00</published><updated>2007-03-07T09:27:37.098-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Day of .NET'/><title type='text'>Day of .NET in Ann Arbor: We're Doin' It Again!</title><content type='html'>&lt;p&gt;Just a quick announcement that we're busy organizing another Day of .NET in Ann Arbor, which will take place on Saturday, &lt;strike&gt;April 28, 2007&lt;/strike&gt;May 5, 2007 on the campus of Washtenaw Community College.&lt;/p&gt;&lt;p&gt;Last year's event was a huge success, with around 150 people in attendance.  At the end, over $40,000 worth of swag was raffled away, with everyone walking away with something.  &lt;/p&gt;&lt;p&gt;Keep an eye on the web site for further details as they evolve:&lt;/p&gt;&lt;p&gt;&lt;a title="http://www.dodn.org/" href="http://www.dodn.org/"&gt;&lt;a href="http://www.dodn.org" target="_new" atomicselection="true"&gt;&lt;img height="100" alt="Day of .NET in Ann Arbor" src="http://dodn.org/images/dayOfDotNetLogo_200px.gif" width="100" /&gt;&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a title="Day of .NET in Ann Arbor" href="http://www.dodn.org/" target="_blank"&gt;http://www.dodn.org/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The "Call for Speakers" is currently underway, with submissions being due by March 10, 2007.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-5757121837997931133?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/5757121837997931133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=5757121837997931133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5757121837997931133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5757121837997931133'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/02/day-of-net-in-ann-arbor-we-doin-it.html' title='Day of .NET in Ann Arbor: We&amp;#39;re Doin&amp;#39; It Again!'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-5633809480012426626</id><published>2007-02-16T16:25:00.000-05:00</published><updated>2007-02-16T16:36:40.905-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='COM'/><title type='text'>The Specified Module Could not be Found</title><content type='html'>This week, I'm helping another branch out with some bug fixes on a web application that I originally assisted with years ago. Or, I should say that I'm attempting to help them out. The first challenge is getting my development environment set up to run this massive application.&lt;br&gt;&lt;br&gt;Today, everything was working until I tried to test reporting (which happens to also be the area of the system that my issue involves). These reports use a third-party tool to create Excel documents on the server. Despite everything that I could think of, I kept getting a pretty generic error message during the ctor() call of one of the objects in that Excel writer library:&lt;br&gt;&lt;br&gt;"The specified module could not be found."&lt;br&gt;&lt;br&gt;The problem, as it turned out, was &lt;u&gt;not&lt;/u&gt; due to ASP.NET's inability to find the assembly. What happened was that the assembly was merely an interop wrapper for a COM library, and because I had just "xcopy deployed" the web application, the COM library never got registered.&lt;br&gt;&lt;br&gt;The solution: regsvr32 the COM DLL that the Interop Assembly required.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-5633809480012426626?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/5633809480012426626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=5633809480012426626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5633809480012426626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/5633809480012426626'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/02/specified-module-could-not-be-found.html' title='The Specified Module Could not be Found'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-84506522725635314</id><published>2007-01-24T12:45:00.000-05:00</published><updated>2007-01-24T12:47:52.414-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><title type='text'>Working on Blog Template</title><content type='html'>I upgraded to Blogger's new account, and need to rework my template to take advantage of new features.  Until I get the time, I just picked one of their existing templates to start working off of (though, I really didn't need to since the classic templates still work, but I wanted a fresh start). &lt;br /&gt;&lt;br /&gt;As a result, things like Haloscan are not yet linked up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-84506522725635314?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/84506522725635314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/84506522725635314'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/01/working-on-blog-template.html' title='Working on Blog Template'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116940854894156484</id><published>2007-01-21T14:33:00.000-05:00</published><updated>2007-01-21T14:43:14.050-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='PDC'/><title type='text'>PDC '07: What's going to be revealed?</title><content type='html'>&lt;a href="http://www.diditwith.net" target="_blank"&gt;Dustin&lt;/a&gt;, &lt;a href="http://aspadvice.com/blogs/ssmith/" target="_blank"&gt;Steve&lt;/a&gt;, and I were chatting at the &lt;a href="http://www.devexpress.com/" target="_blank"&gt;Developer Express&lt;/a&gt; booth at &lt;a href="http://www.codemash.org/" target="_blank"&gt;CodeMash&lt;/a&gt; about what we thought might be revealed at &lt;a href="http://msdn.microsoft.com/events/pdc/" target="_blank"&gt;PDC '07&lt;/a&gt;.  The Professional Developer Conference is an event where Microsoft usually reveals all of the cool stuff that will be upcoming (1-2 years out).&lt;br /&gt;&lt;br /&gt;So, what can possibly be revealed that hasn't already been?  Certainly, they won't be talking about Visual Studio 2007 (Orcas), because that's old news by that time. &lt;br /&gt;&lt;br /&gt;Then we started speculating.  With Ray Ozzie at the helm, I think I know exactly where they're going with the Visual Studio IDE:&lt;br /&gt;&lt;br /&gt;&amp;lt;TotalSatire PleaseDoNotSueMe="true"&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/x/blogger/1476/158/1600/342330/VSLive.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/1476/158/400/57333/VSLive.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/TotalSatire&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116940854894156484?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116940854894156484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116940854894156484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116940854894156484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116940854894156484'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/01/pdc-07-whats-going-to-be-revealed.html' title='PDC &apos;07: What&apos;s going to be revealed?'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116940565837886262</id><published>2007-01-21T13:54:00.000-05:00</published><updated>2007-01-21T14:57:43.056-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeMash'/><title type='text'>CodeMash: Closing Thoughts</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;div id="content"&gt; &lt;div id="main-content"&gt; &lt;div class="post"&gt; &lt;div class="post-body"&gt; &lt;div&gt;CodeMash&amp;nbsp;2007 v1.0&amp;nbsp;is now complete, and I've had the chance to finally get plenty of sleep in my own bed.&amp;nbsp; I uploaded the last photos from my camera to &lt;a href="http://www.flickr.com/photos/tags/codemash/" target="_blank"&gt;Flickr,&lt;/a&gt; and now I'm just sitting here amazed that the event went so smoothly and is getting great feedback on the &lt;a href="http://www.technorati.com/search/codemash" target="_blank"&gt;Blogosphere&lt;/a&gt;&amp;nbsp;(in fact, "CodeMash" is &lt;strike&gt;the #2&lt;/strike&gt; &lt;a href="http://www.flickr.com/photos/81259708@N00/364891112/" target="_blank"&gt;#1 search term on Technorati&lt;/a&gt; at the moment--how cool is that!??!?).&lt;/div&gt; &lt;p&gt;The reason the conference was such a success really comes down to planning.&amp;nbsp; We didn't have all of the details nailed down when we arrived at the venue on Wednesday, but we did have the vast majority of them handled.&amp;nbsp; This created a natural momentum that allowed the event to just drive itself to completion, whether we were there or not!&amp;nbsp; &lt;/p&gt; &lt;p&gt;The Kalahari staff was just amazing in being responsive to our needs on that first day (I think we wore out the help line's digits on their phones).&amp;nbsp; They were able to provide anything that we needed, from tables and chairs to extension cords to stapling banners to the wall.&amp;nbsp; &lt;/p&gt; &lt;p&gt;As usual, I didn't get a chance to attend many sessions because I was traveling from room to room to make sure that there were no issues.&amp;nbsp; I also tried to chat with the exhibiting sponsors to handle issues or help them feel welcomed, and I popped into the speaker lounge on occasion to see who was hanging out.&amp;nbsp; By the end of the first day, my legs were really aching, and I had a wicked blister on my toe.&lt;/p&gt; &lt;p&gt;I thought it would be cool to start compiling a list of "fun facts" about the event.&amp;nbsp; Perhaps the other organizers will follow suit with trivia that I left out/was not aware of.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The CodeMash "Gear Head" logo was originally brown, not green.  &lt;li&gt;The conference was originally named "Free Your Mind", but that sounded like a better tagline than a conference name.&amp;nbsp; &lt;a href="http://www.dotnetrockstar.com/" target="_blank"&gt;John Hopkins&lt;/a&gt;, president of the &lt;a href="http://migang.org/" target="_blank"&gt;.NET User Group in Southfield, MI&lt;/a&gt;, owned the domain name "codemash.org", and let us have it.&amp;nbsp;  &lt;li&gt;"DevMash" was one of the names being considered alongside "CodeMash".  &lt;li&gt;There is a little error on the cover of the Conference Guide, but it's really only apparent to me (since I'm the one who did the layout).&amp;nbsp; The "2007" under the CodeMash logo is supposed to be in a wider/thicker/more-technical typeface.&amp;nbsp; However, I used a non-standard font when I created it, and forgot to provide this to the print shop.&amp;nbsp; The result is that MS Publisher defaulted to Arial, and the final "2007" came out small and weak looking.  &lt;li&gt;Speaking of the Conference Guide, the clever "Welcome" message was written by &lt;a href="http://www.wjgilmore.com/" target="_blank"&gt;Jason Gilmore&lt;/a&gt;.  &lt;li&gt;The blurry code that you see as the background of the cover is actually from my &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=f52bdaf1-4b0a-43e3-82f7-02f73f1d2048" target="_blank"&gt;ZMachine.NET project&lt;/a&gt;&amp;nbsp;(the opcode handler methods section).  &lt;li&gt;There's a reason why this event's T-shirt strongly resembles the &lt;a href="http://www.dayofdotnet.org/" target="_blank"&gt;Day of .NET in Ann Arbor&lt;/a&gt; shirt: I'm not all that creative, and I happened to have produced both shirts...&amp;nbsp; Maybe the next one will be done by a real designer!&amp;nbsp; /grin  &lt;li&gt;The registration fee that you paid went entirely for food (venue prices are expensive, for those of you playing along at home).&amp;nbsp; If we charged more, then we could have had hot meals all of the time.&amp;nbsp; But, I think that &lt;a href="http://frazzleddad.blogspot.com/" target="_blank"&gt;Jim Holmes&lt;/a&gt; and &lt;a href="http://www.srtsolutions.com/public/blog/60881" target="_blank"&gt;Dianne Marsh&lt;/a&gt;&amp;nbsp;did a fantastic job of balancing the menu and the pricing.  &lt;li&gt;Even with all of the planning around meals, we were surprised in the last week by the venue pricing for soda, bottled water, and coffee service.&amp;nbsp; A big thanks goes out to two of the sponsors in particular who stepped up after making their initial commitment to ensure that attendees would have free beverages throughout the days:&lt;br&gt;&lt;br&gt;&lt;a href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt; paid for coffee service (i.e., "Microsoft provided the Java")&lt;br&gt;&lt;br&gt;&lt;a href="http://www.pillartechnology.com/" target="_blank"&gt;Pillar Technology&lt;/a&gt; was a superb sponsor in stepping up and offering to cover the pop and bottled water expenses with no hesitation after we approached them while&amp;nbsp;they were setting up on site at the conference.&amp;nbsp;  &lt;li&gt;Many of the books that were given away at the close of the event were written by our speakers, and we had those speakers sign the books (look to see if yours was signed!).  &lt;li&gt;&lt;a href="http://www.ambysoft.com/" target="_blank"&gt;Scott Ambler&lt;/a&gt; signed each of his &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FRefactoring-Databases-Evolutionary-Addison-Wesley-Signature%2Fdp%2F0321293533%2Fsr%3D8-1%2Fqid%3D1169404486%3Fie%3DUTF8%26s%3Dbooks&amp;amp;tag=aviewinsidmyh-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325" target="_blank"&gt;Refactoring Databases&lt;/a&gt;&lt;img style="margin: 0px; border-top-style: none! important; border-right-style: none! important; border-left-style: none! important; border-bottom-style: none! important" height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=aviewinsidmyh-20&amp;amp;l=ur2&amp;amp;o=1" width="1" border="0"&gt; books with a unique message.  &lt;li&gt;&lt;a href="http://blogs.msdn.com/joshholmes/" target="_blank"&gt;Josh Holmes&lt;/a&gt; and &lt;a href="http://brianhprince.blogspot.com/" target="_blank"&gt;Brian Prince&lt;/a&gt; shaved their heads before the blog-post threshold was actually met...  &lt;li&gt;&lt;a href="http://www.neward.net/" target="_blank"&gt;Ted Neward&lt;/a&gt; loved the venue in part because they served Coke instead of Pepsi.&amp;nbsp; I didn't have the heart to tell him that I personally found this to be a flaw... ;-)&lt;br&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&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/8832633-116940565837886262?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116940565837886262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116940565837886262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116940565837886262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116940565837886262'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/01/codemash-closing-thoughts_21.html' title='CodeMash: Closing Thoughts'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116908255611940356</id><published>2007-01-17T20:09:00.000-05:00</published><updated>2007-01-17T20:09:16.230-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeMash'/><title type='text'>CodeMash: Day 0</title><content type='html'>&lt;p&gt;The exhibitor tables are in place, and a little more than half of the sponsors have already set up (some are not arriving until tomorrow morning).&amp;nbsp; There are some pretty neat displays, but one that everyone is talking about already is Quick Solution's booth, where there's a Wii that you can try out (and enter for a chance to win at the end of the event)!&lt;/p&gt; &lt;p&gt;The Expert Panel on Programming Languages is currently under way.&amp;nbsp; I snuck off to a quiet corner to crank out this blog post, and then I'll be returning.&amp;nbsp; Be sure to check out the Flickr tag "&lt;a href="http://www.flickr.com/photos/tags/codemash"&gt;Codemash&lt;/a&gt;" for photos from the conference.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116908255611940356?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116908255611940356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116908255611940356' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116908255611940356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116908255611940356'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/01/codemash-day-0.html' title='CodeMash: Day 0'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116904892957051876</id><published>2007-01-17T10:48:00.000-05:00</published><updated>2007-01-17T10:48:49.703-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeMash'/><title type='text'>CodeMash: Today's The Day!</title><content type='html'>&lt;p&gt;I'm trying to finalize all of my email and blogging before throwing some clothes into a bag, loading up my pickup truck with sponsor swag, books, t-shirts, and other conference material that have been piled up in my dining room for a week, and then jumping onto the Ohio Turnpike to head out to Sandusky to help set up &lt;a href="http://www.codemash.org" target="_blank"&gt;CodeMash&lt;/a&gt;.&amp;nbsp; The organizers are arriving mid-day, and sponsors will start to arrive soon after to set up their booths.&lt;/p&gt; &lt;p&gt;Don't worry: the conference itself doesn't officially start until tomorrow (Thursday).&amp;nbsp; But, if you're arriving this evening (Wednesday), try to get there around 5:00PM or so to check in.&lt;/p&gt; &lt;p&gt;We recognized that there would be a nice crowd of attendees arriving today, so there's an Expert Panel on programming languages scheduled for 7:00pm this evening as a pre-conference event.&amp;nbsp; Immediately after, Bruce Eckel will be introducing the concept of Open Spaces (this is another "something extra" that we're offering to enhance the conference experience).&amp;nbsp; Open Spaces is a little bit like Birds of a Feather, but from what I can gather, it's even more ad hoc and informal than BOFs typically are.&lt;/p&gt; &lt;p&gt;Of course, maybe you just want to swim tonight, and that's perfectly alright!&amp;nbsp; Make the most of the &lt;a href="http://www.kalahariresort.com/hub/" target="_blank"&gt;venue&lt;/a&gt;, which is a beautiful indoor waterpark.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116904892957051876?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116904892957051876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116904892957051876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116904892957051876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116904892957051876'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/01/codemash-todays-day.html' title='CodeMash: Today&apos;s The Day!'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116879891666680111</id><published>2007-01-14T13:21:00.000-05:00</published><updated>2007-01-14T13:21:56.773-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WoW'/><title type='text'>WoW, Someone Messed Up...</title><content type='html'>&lt;p&gt;A few days ago, Blizzard announced that there are 8 Million subscribers playing the World of Warcraft.&amp;nbsp; At $12-$15 a month (USA pricing), this is A LOT of revenue that they are bringing in.&lt;/p&gt; &lt;p&gt;This Tuesday, the much awaited expansion pack (Burning Crusades) is being released.&amp;nbsp; In an attempt to make sure that the game is ready, Blizzard&amp;nbsp;forced the second patch in a week today (Sunday).&amp;nbsp; This means that instead of me jumping into the game this morning, I instead sat drinking my coffee and watching the ever-so-slow "Downloading Updates" screen.&amp;nbsp; 15-20 minutes later, the game was patched, and I logged in.&lt;/p&gt; &lt;p&gt;Or, I attempted to log in.&amp;nbsp; Again....&amp;nbsp; and again.... and again...&lt;/p&gt; &lt;p&gt;"Ok, the authentication servers must just be busy because everyone patched at the same time, and now they're all trying to get in," I thought.&lt;/p&gt; &lt;p&gt;After maybe an hour of this insanity (trying the same thing over and over, expecting different results), I finally noticed a message from Blizzard on the login screen:&lt;/p&gt; &lt;p&gt;&lt;code&gt;[8:10am PST January 13th 2007]&lt;/p&gt; &lt;p&gt;The 2.0.5 client-side patch has caused issues with our authentication system. These issues can cause players to be suddenly disconnected from the game, as well as prevent them from logging in to the game. We are working to resolve this issue as soon as possible and will provide you with updates as soon as they are available.&lt;/code&gt; &lt;p&gt;Nice!&amp;nbsp; So, what they were probably doing is updating WoW in the 11th hour preparation for BC's release on Tuesday with some new top-secret authentication/anti-piracy system, but instead, they managed to lock out 8 Million paying subscribers!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116879891666680111?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116879891666680111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116879891666680111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116879891666680111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116879891666680111'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/01/wow-someone-messed-up.html' title='WoW, Someone Messed Up...'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116845804209667196</id><published>2007-01-10T14:40:00.000-05:00</published><updated>2007-01-14T13:33:11.533-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SpaceWeather'/><title type='text'>Bright Comet in the Sky</title><content type='html'>&lt;p&gt;If you haven't been paying attention, there's currently a very bright comet visible in the evening sky.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.spaceweather.com/comets/mcnaught/09jan07/Cook1.jpg" target="_blank"&gt;Comet McNaught (C/2006 P1)&lt;/a&gt; is approaching the sun, and has really brightened in the past week.&amp;nbsp; A few weeks ago, you would have needed a pair of binoculars or a telescope to see it, but now, it pops out of the western sky even before the sky is completely dark!&amp;nbsp; &lt;/p&gt; &lt;p&gt;The last comet that I was able to see was Hale-Bopp, and I remember that to be pretty bright.&amp;nbsp; McNaught is&amp;nbsp;supposedly brighter!&amp;nbsp;&amp;nbsp;In fact, only Venus shines brighter at the moment, and they say that this is currently the brightest comet in 30 years.&lt;/p&gt; &lt;p&gt;Today is really the first day that we have sunshine in Toledo, so I'm hoping to be somewhere with &lt;a href="http://www.spaceweather.com/images2007/08jan07/skymap_north.gif" target="_blank"&gt;a view of the western horizon when the sun sets&lt;/a&gt; this evening.&amp;nbsp; However, I don't know if being at the Ann Arbor IT Zone to &lt;a href="http://aadnd.org/Meetings/2007/January/tabid/163/Default.aspx" target="_blank"&gt;hear about Windows Workflow Foundation&lt;/a&gt; would necessarily qualify...&amp;nbsp; Maybe tomorrow...&lt;/p&gt; &lt;p&gt;&lt;strong&gt;UPDATE: &lt;/strong&gt;We've been cloudy and rainy here ever since I wrote this.&amp;nbsp; However, &lt;a href="http://www.spaceweather.com/" target="_blank"&gt;SpaceWeather.com&lt;/a&gt;&amp;nbsp;has been running a series of articles stating that you can see this comet during the day!&amp;nbsp; The caveat being that you first must stand in a shadow to block out the glare of the sun, and then search about 5 degrees above the sun&amp;nbsp;(roughly the size of your fist when held at arm's length from your eye) for the bright head (which will likely appear dim because of the blue sky surrounding it).&amp;nbsp; Supposedly, the tail can also be seen during the daytime, too, once you locate the comet.&amp;nbsp; I'll be sure to try this, if the clouds ever disappear.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116845804209667196?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116845804209667196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116845804209667196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116845804209667196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116845804209667196'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/01/bright-comet-in-sky.html' title='Bright Comet in the Sky'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116786420619166150</id><published>2007-01-03T17:43:00.000-05:00</published><updated>2007-01-03T17:48:53.330-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Me'/><title type='text'>Tag, I'm It...</title><content type='html'>&lt;p&gt;Dan Ciruli, the "I did 66,795 pushups last year and now my wife loves that I'm chiseled" guy &lt;a href="http://westcoastgrid.blogspot.com/2007/01/end-of-meme.html" target="_blank"&gt;tagged me&lt;/a&gt;.&amp;nbsp; I'll play along.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Five Things You May Not Have Known About Me:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1. College?&amp;nbsp; Uh, Yeah... I Went to College&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Despite being a decent student and taking college-prep courses in high school, I didn't start college right away, opting instead to work as a sorter for an overnight freight company.&amp;nbsp; When I did start at the University of Toledo, I only attended part time while I kept working for the same company.&amp;nbsp; I might have accumulated enough credits to be classified as a Sophomore before moving from manual labor into a programming position "upstairs".&amp;nbsp; Shortly after, I took a break from school in order to concentrate on my career.&amp;nbsp; That break is still continuing today, a decade later, as is my successful career...&lt;/p&gt; &lt;p&gt;&lt;strong&gt;2. Sure, I can swim.&amp;nbsp; Watch me!&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The summer between my 2nd and 3rd grade, I almost drowned at my town's public pool.&amp;nbsp; I wasn't a strong swimmer, and leaped into the "5-foot section".&amp;nbsp; I found myself further away from the wall than I should have been, couldn't touch bottom, and began to panic.&amp;nbsp; I remember being out of breath, and starting to take in water before a friend (Myles Cartwright) pulled me to safety.&amp;nbsp; Thanks, Myles!&lt;/p&gt; &lt;p&gt;For the record, I'm a great swimmer today, despite my adversion to cold water (and thus, my general adversion to swimming when presented with the opportunity)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;3. I've Traveled the World..... of Warcraft.....&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I'm hopelessly addicted to the World of Warcraft at the moment.&amp;nbsp; I resisted playing for so long, because I know my inability to control myself when presented with a game, let alone a never-ending game.&amp;nbsp; But, a couple of friends finally convinced me (damn you Blizzard and your free trials), and now I have two Tauren Druids that I'm alternating between (Jaesyn of Dalaran is currently a level 42, and Jaesyn of Dragonblight is currently a level 22).&amp;nbsp; Interestingly enough, my wife now plays, too, and her Dwarf Paladin is a level 28 on Dragonblight.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;4. Potty Pumper&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I am an Eagle Scout, and worked at different summer camps for 3-4 years.&amp;nbsp; One of the most respected camp employees, IMHO,&amp;nbsp;was the Camp Ranger who lived on-site year round and served as a caretaker for the property.&amp;nbsp; The ranger at the first camp that I worked for became a very influential role model to me, and helping him out was a very desireable activity among my circle of friends (because we drove trucks and tractors and did cool things that nobody else got to do).&amp;nbsp; &lt;/p&gt; &lt;p&gt;Interestingly enough (as I look back on this time of my life), a great assignment to receive was to "pump potties".&amp;nbsp; This involved pulling a large "honeydipper" (tank)&amp;nbsp;behind a tractor, backing up to the latrine, connecting a big hose to a pump, and filling the tank with whatever was in the latrine vault before you got there...&amp;nbsp; I'll leave that to your imagination.&amp;nbsp; Then, you had to transport the "stuff" to a septic pond and switch the pump from "suck" to "blow" in order to empty the tank.&amp;nbsp; I'll let you ponder the visual on that detail for a moment, too.&lt;/p&gt; &lt;p&gt;Another interesting fact: I later married the daughter of a different camp ranger.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;5. Skilled Performer&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;In high school, I used to perform for audiences all of the time.&amp;nbsp; I was a member of our Choir and Show Choir, and also acted in plays and musicals.&amp;nbsp; This is probably why I don't mind standing up in front of a group.&amp;nbsp; However, don't ask me to sing or dance today...&amp;nbsp; These activities are no longer performed... in public, at least.&amp;nbsp; I don't think I was exceptionally good back then, and certainly things have not gotten better over time.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Now, in the honored tradition of this Meme, I come to the point where I must tag five other bloggers in order to keep this pyramid scheme alive (and to give future Googlers more fodder to enjoy): &lt;a href="http://msmvps.com/blogs/greghuber/default.aspx" target="_blank"&gt;Greg Huber&lt;/a&gt;, &lt;a href="http://www.diditwith.net/" target="_blank"&gt;Dustin Campbell&lt;/a&gt;, &lt;a href="http://www.srtsolutions.com/public/blog/20574" target="_blank"&gt;Bill Wagner&lt;/a&gt;, &lt;a href="http://geekswithblogs.net/joshholmes" target="_blank"&gt;Josh Holmes&lt;/a&gt;, and &lt;a href="http://frazzleddad.blogspot.com/" target="_blank"&gt;Jim Holmes&lt;/a&gt;...&amp;nbsp; Have fun, guys!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116786420619166150?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116786420619166150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116786420619166150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116786420619166150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116786420619166150'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2007/01/tag-im-it.html' title='Tag, I&apos;m It...'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116681645240801996</id><published>2006-12-22T14:40:00.000-05:00</published><updated>2006-12-22T14:42:43.576-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Congratulations Jim and James</title><content type='html'>&lt;p&gt;Jim Holmes has posted that his book (Windows Developer Power Tools,&amp;nbsp;co-authored with James Avery), is now out!&lt;/p&gt; &lt;p&gt;&lt;a href="http://frazzleddad.blogspot.com/2006/12/book-is-ou..."&gt;&lt;a href="http://frazzleddad.blogspot.com/2006/12/book-is-out.html" target="_blank"&gt;http://frazzleddad.blogspot.com/2006/12/book-is-ou...&lt;/a&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I've read an early version of the book, and I can say that&amp;nbsp;it is definitely&amp;nbsp;a must-have.&amp;nbsp; Get your copy today (and then bring it to CodeMash in January to have it signed).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116681645240801996?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116681645240801996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116681645240801996' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116681645240801996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116681645240801996'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/12/congratulations-jim-and-james.html' title='Congratulations Jim and James'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116673437581780857</id><published>2006-12-21T15:52:00.000-05:00</published><updated>2006-12-21T15:52:55.906-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Me'/><title type='text'>Dan Ciruli's Pushup Challenge</title><content type='html'>&lt;p&gt;Doh!&amp;nbsp; I've been called out:&lt;/p&gt; &lt;p&gt;&lt;a href="http://westcoastgrid.blogspot.com/2006/12/your-new..."&gt;http://westcoastgrid.blogspot.com/2006/12/your-new...&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Dan Ciruli (that grid computing beast on the west coast) took on a New Year's resolution last January to do one pushup (and one sit-up/crunch) for each the day of the year.&amp;nbsp; For example, on Jan. 1, 2006, he did one pushup.&amp;nbsp; January 2, he did two pushups.&amp;nbsp; Today, being the 355th day of the year, he did 355 pushups!&lt;/p&gt; &lt;p&gt;What an animal.&lt;/p&gt; &lt;p&gt;And then, he had to go off and name a bunch of internet personalities (myself included) to take on this same crazy challenge for 2007.&lt;/p&gt; &lt;p&gt;Hmmmm.&amp;nbsp; Perhaps I will, my friend.... Perhaps I will....&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116673437581780857?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116673437581780857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116673437581780857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116673437581780857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116673437581780857'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/12/dan-cirulis-pushup-challenge.html' title='Dan Ciruli&apos;s Pushup Challenge'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116670919535838500</id><published>2006-12-21T08:53:00.000-05:00</published><updated>2006-12-21T08:53:15.513-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeMash'/><title type='text'>CodeMash Update</title><content type='html'>&lt;p&gt;&lt;strong&gt;CodeMash: January 18-19, 2007 at the Kalahari Resort in Sandusky, OH&lt;br&gt;&lt;a href="http://www.codemash.org" target="_blank"&gt;www.codemash.org&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The Early Bird rate of $99 has expired (fellow procrastinators: I'm sorry!).&amp;nbsp; The new registration fee is $149.&lt;/p&gt; &lt;p&gt;However, the Kalahari Resort has allowed us to continue the great deal on the hotel rooms ($88/night + tax for a "Hut" room) until 12/28, unless the hotel sells out before then.&lt;/p&gt; &lt;p&gt;So, for $325 + tax, you get to stay two nights at an indoor waterpark resort in the middle of January, plus attend CodeMash, which is looking to be &lt;em&gt;THE EVENT&lt;/em&gt; of 2007 that you don't want to miss!&amp;nbsp; &lt;/p&gt; &lt;p&gt;In fact, two people from London, England (that's like&amp;nbsp;this whole other country that's an ocean away from us) thought the same thing, and they are flying over just to attend!&amp;nbsp; Why?&amp;nbsp; One primary reason cited was because there is nothing like this event in Europe.&lt;/p&gt; &lt;p&gt;&lt;a href="http://frazzleddad.blogspot.com" target="_blank"&gt;Jim Holmes&lt;/a&gt;, fellow conference organizer, user group leader, and friend of mine, summed the event up quite nicely in the following (which I have permission to plagerize):&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;I’m making one last pitch to you in the hopes of convincing you to register and attend this terrific event.&lt;/p&gt; &lt;p&gt;Why is CodeMash something you should consider attending?&amp;nbsp; You should strongly consider attending because you’ll have the opportunity to attend sessions and keynotes from some of the software development industry’s finest minds.&amp;nbsp; We’ve three keynote addresses from luminaries who have been motivating forces behind some of the most significant products, methodologies, and changes in the development industry: &lt;p&gt;&amp;nbsp; &lt;ul&gt; &lt;li&gt;Bruce Eckel – Internationally Recognized Speaker and Author of “Thinking in Java”&lt;/li&gt; &lt;li&gt;Neal Ford – Application Architect at ThoughtWorks, Recognized Speaker on Languages and Compilers. &lt;/li&gt; &lt;li&gt;Scott Guthrie – General Manager, Microsoft Developer Division.&amp;nbsp; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Other internationally-recognized speakers include: &lt;p&gt;&amp;nbsp; &lt;ul&gt; &lt;li&gt;Scott Ambler – Internationally Recognized Speaker and Author on Agile Development and Database Refactoring.&amp;nbsp; &lt;/li&gt; &lt;li&gt;Marry Poppendieck – Recognized Expert on Lean Development Methodologies.&amp;nbsp; &lt;/li&gt; &lt;li&gt;Jay Pipes – North American Community Relations Manager at MySQL.&amp;nbsp; &lt;/li&gt; &lt;li&gt;Bill Wagner – Expert on all things C# and author of “Effective C#”&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If that’s not enough then consider that we’ve 40 sessions covering an immense range of technologies including .NET, PHP, Java, Ruby, and other platforms.&amp;nbsp; We’re holding sessions on design, architecture, testing, agile methodologies, and deep dives into areas of the technologies I just mentioned.&amp;nbsp; Some of the session topics include: &lt;p&gt;&amp;nbsp; &lt;ul&gt; &lt;li&gt;Curry Favor with Closures: An Introduction to Functional Programming in C# and &lt;a href="http://VB.NET"&gt;VB.NET&lt;/a&gt; (Bill Wagner, Microsoft Regional Director, Microsoft MVP and author of “Effective C#”)&lt;/li&gt; &lt;li&gt;SOA as a Conversation (Ken Faw, Regional Practice Director, Perficient, Inc.)&lt;/li&gt; &lt;li&gt;The Productive Programmer (Neal Ford, editor “No Fluff, Just Stuff”)&lt;/li&gt; &lt;li&gt;Let NHibernate Be Your Data Access Layer (Dave Donaldson, Microsoft MVP)&lt;/li&gt; &lt;li&gt;Lean Software Development (Mary Poppendeick, internationally recognized expert on agile/lean development and author of “Lean Software Development”)&lt;/li&gt; &lt;li&gt;Maximum Velocity MySQL (Jay Pipes, North American Community Relations Manager, MySQL)&lt;/li&gt; &lt;li&gt;EJB3 – What’s New? (Joseph Faisal Nusairat, author of “Beginning JBoss Seam”)&lt;/li&gt; &lt;li&gt;Ruby on Rails for Java Developers (Rob Stevenson, Quick Solutions, Inc.) &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;CodeMash is a terrific opportunity for developers of all ilk in this region.&amp;nbsp; I encourage you to register and attend.&amp;nbsp; It’s a conference that should not be missed! &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Also see Jim's post on the value proposition for management to send developers to events like this: &lt;p&gt;&lt;a href="http://frazzleddad.blogspot.com/2006/11/why-conferences-matter-and-how-to.html"&gt;http://frazzleddad.blogspot.com/2006/11/why-conferences-matter-and-how-to.html&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/8832633-116670919535838500?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116670919535838500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116670919535838500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116670919535838500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116670919535838500'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/12/codemash-update.html' title='CodeMash Update'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116631655579466892</id><published>2006-12-16T19:49:00.000-05:00</published><updated>2006-12-16T19:49:15.816-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blogger'/><title type='text'>New Type of Blog Comment Spam?</title><content type='html'>&lt;p&gt;I'm starting to get comment spam like the following:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;b&gt;I see you put a lot of work into this one A. I respect it!! Good luck and keep up the good work. &lt;u&gt;bruxelles hotel&lt;/u&gt; de &lt;u&gt;previsioni tempo estate&lt;/u&gt; &lt;u&gt;distillation de l alcool&lt;/u&gt; &lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;(The underlined parts in spanish link to *.es websites) &lt;p&gt;I just thought it was an interesting tactic that they used....&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116631655579466892?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116631655579466892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116631655579466892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116631655579466892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116631655579466892'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/12/new-type-of-blog-comment-spam.html' title='New Type of Blog Comment Spam?'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116621663490688385</id><published>2006-12-15T16:03:00.000-05:00</published><updated>2006-12-15T16:15:52.516-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Book Review: Foundations of WF</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Windows Workflow Foundation (WF) is a key component of the .NET Framework 3.0, and comes from the collection of API’s that were previously known as WinFX. It provides a robust framework that can be incorporated directly into a .NET application in order to provide workflow capabilities that would otherwise be complex and time consuming to develop.  &lt;p&gt;On more than one occasion in the past, I have had to build custom workflow capabilities for my applications to use. So, when it was announced that WF was to become part of the .NET Framework, I became very interested in figuring out how to use it instead of always reinventing the wheel.  &lt;p&gt;&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FFoundations-WF-Introduction-Workflow-Foundation%2Fdp%2F1590597184%2Fsr%3D8-1%2Fqid%3D1166217247%3Fie%3DUTF8%26s%3Dbooks&amp;amp;tag=aviewinsidmyh-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325" target="_blank"&gt;Foundations of WF: An Introduction to Windows Workflow Foundation&lt;/a&gt;&lt;img style="margin: 0px; border-top-style: none! important; border-right-style: none! important; border-left-style: none! important; border-bottom-style: none! important" height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=aviewinsidmyh-20&amp;amp;l=ur2&amp;amp;o=1" width="1" border="0"&gt; by Brian R. Myers is the first book that I have read through on the topic. Brian has a conversational style of writing that I found easy to follow. He includes a lot of screenshots and source code snippets to break up the text into smaller, more palatable bites. This book is sure to become one of my standard reference manuals on the topic.  &lt;p&gt;One good thing about this book is that there are examples in both VB.NET and C#, so you do not need to translate syntax in your mind if you know only one of these languages. But, this also becomes a bad thing when trying to use this book as a reference.  &lt;p&gt;I personally prefer a single language version of books because I find it distracting to repeat sections of content for the sole purpose of displaying a different language’s syntax. In addition, I recall a couple of places in this book where the C# section refers you to something that was described in detail in the VB.NET section. If you tend to read a technical book sequentially from front to back, then this might be acceptable. I, on the other hand, tended to skip over the VB.NET sections of each chapter since the C# sections were found immediately after.  &lt;p&gt;Aside from the dual code issue, and some minor stylistic/creative decisions that he made in creating the demo source code (i.e., his method of padding a purchase order number with leading zeros makes me cringe every time that I see that snippet of code), I found this book to be a great companion to step me through the “Hello World” and beyond of WF.  &lt;p&gt;You will not only learn what is required to use WF in your application, but you will also become exposed to the different types of workflow provided by WF, the various out-of-the-box Activities, how to create your own custom Activities, and how to deploy your workflow-enabled application. As a bonus, Brian also includes a chapter on using WF with Office 2007 and SharePoint (chiefly by means of a single example scenario using an InfoPath form).  &lt;p&gt;Full Disclosure: A review copy of this book was provided to me by Apress.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116621663490688385?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116621663490688385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116621663490688385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116621663490688385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116621663490688385'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/12/book-review-foundations-of-wf.html' title='Book Review: Foundations of WF'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116621072323722574</id><published>2006-12-15T14:25:00.000-05:00</published><updated>2006-12-15T14:25:23.346-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SpaceWeather'/><title type='text'>Look for Auroras Tonight and Tomorrow</title><content type='html'>&lt;p&gt;We're currently at the Solar Minimum, or the point in the 11-year solar cycle where the Sun doesn't really do too much.&amp;nbsp; However, there has been some strong activity over the past few days that have caused geomagnetic storming here on Earth.&lt;/p&gt; &lt;p&gt;A Coronal Mass Ejection (CME) passed by Earth yesterday, which started a strong GM storm.&amp;nbsp; This resulted in the Northern Lights being seen in lower Michigan and Ohio, and possibly even further away.&lt;/p&gt; &lt;p&gt;Another CME that resulted from a X1 solar flare on Dec 14 will reach our planet some time in the next day.&amp;nbsp; This will most likely enhance the storm levels again to the Strong, Severe, or possibly even Extreme levels.&lt;/p&gt; &lt;p&gt;For those of us not worried about keeping satellites in orbit, or maintaining a working electric power grid, this usually means that we can go somewhere dark (away from city lights) and look to the North for an absolutely beautiful display of nature.&amp;nbsp; Be advised that during particularly strong storms, you may need to look up, or even to the South (depending on your latitude) because the Auroras would have been pushed that far away from the magnetic poles.&lt;/p&gt; &lt;p&gt;&lt;em&gt;Disclaimer: I have seen instances where an incoming CME completely halts all GM activity, so don't be surprised if nothing at all happens.&amp;nbsp; It's important to be patient when hunting the Aurora.&amp;nbsp; It's well worth the wait if you find an active display in session.&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116621072323722574?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116621072323722574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116621072323722574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116621072323722574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116621072323722574'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/12/look-for-auroras-tonight-and-tomorrow.html' title='Look for Auroras Tonight and Tomorrow'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116535478036073205</id><published>2006-12-05T16:39:00.000-05:00</published><updated>2006-12-06T10:19:01.710-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeMash'/><title type='text'>Blog about CodeMash and Win a Zune!</title><content type='html'>&lt;p&gt;&lt;a href="http://www.codemash.org/Blog4ZuneContest.aspx"&gt;http://www.codemash.org/Blog4ZuneContest.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Help us spread the word about CodeMash using your blog, and you could win a Zune!&lt;/p&gt;&lt;p&gt;There's about two weeks left to register and take advantage of the early bird pricing. $99 for the conference, and $88/night (+ tax) for the rooms. That's just an awesome price for an event like this, so don't miss out. &lt;/p&gt;&lt;p&gt;Besides the conference, you also get admission to the indoor waterpark at the Kalahari Resort in Sandusky, OH. In fact, many people are planning to take advantage of this by bringing their families for a little vacation in the middle of January!&lt;/p&gt;&lt;p&gt;Don't know what CodeMash is? Check out the site for information and a list of keynote speakers and sessions:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.codemash.org"&gt;http://www.codemash.org&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: Note that CodeMash is not just a conference for people in Ohio and Michigan.  Sandusky is located between Toledo and Cleveland, Ohio, and both of these cities have airports serviced by major carriers.  CodeMash is a full-blown, multi-day conference with nationally-known speakers, and is not to be confused with a Code Camp or other similar event.&lt;/p&gt;&lt;p&gt;Hope to see you there!&lt;/p&gt;&lt;p&gt;tags: &lt;a href="http://technorati.com/tag/CodeMash" rel="tag"&gt;CodeMash&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/8832633-116535478036073205?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116535478036073205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116535478036073205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116535478036073205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116535478036073205'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/12/blog-about-codemash-and-win-zune.html' title='Blog about CodeMash and Win a Zune!'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116500155219553920</id><published>2006-12-01T14:32:00.000-05:00</published><updated>2006-12-01T14:32:32.516-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL Server Date Trick</title><content type='html'>&lt;p&gt;Need an easy way to truncate a SQL Server DateTime to just the date part (i.e., midnight of the day that is represented)?&lt;/p&gt; &lt;p&gt;You can cast a DateTime as a float, take the floor value of that in order to get an unrounded integer, and then cast that back to a DateTime.&amp;nbsp; &lt;/p&gt;&lt;pre&gt;cast(floor(cast(@fromDate as float)) as datetime)&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;This works because almost any modern platform's datetime value is a floating point value that represents a number of days since an epoch date (with the fractional part representing the time of day).&amp;nbsp; Negative numbers are days prior to the epoch, etc.&amp;nbsp; So, trim off the fraction, and you have just days.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This is much cleaner than another way that I found in some stored procedure code which essentially subtracts the hours, minutes, seconds, and fractions of a second from a given DateTime...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116500155219553920?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116500155219553920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116500155219553920' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116500155219553920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116500155219553920'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/12/sql-server-date-trick.html' title='SQL Server Date Trick'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116465691233933696</id><published>2006-11-27T14:48:00.000-05:00</published><updated>2006-11-27T14:50:10.123-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Me'/><title type='text'>You Never Know Who's Reading...</title><content type='html'>&lt;p&gt;I found the following link to my blog today while checking out my referrer stats:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.toledofreepress.com/?id=4326"&gt;http://www.toledofreepress.com/?id=4326&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://glasscityjungle.com/" target="_blank"&gt;Lisa Renee Ward&lt;/a&gt;, a prolific blogger about Toledo topics, picked up on AVIMH's 2-year anniversary announcement and included that fact in her "Blog It! Toledo" online column in the &lt;em&gt;&lt;a href="http://www.toledofreepress.com/" target="_blank"&gt;Toledo Free Press&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116465691233933696?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116465691233933696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116465691233933696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116465691233933696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116465691233933696'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/11/you-never-know-whos-reading.html' title='You Never Know Who&apos;s Reading...'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116338211008565475</id><published>2006-11-12T20:41:00.000-05:00</published><updated>2006-11-12T20:41:50.216-05:00</updated><title type='text'>OSU - Michigan Week</title><content type='html'>&lt;p&gt;This is the week!&amp;nbsp; The annual rivalry between Ohio State and the University of Michigan will be played out on Saturday November 18.&amp;nbsp; It should be a very interesting game this year, with OSU being #1 in the standings, and Michigan #2 (both teams are undefeated this season).&amp;nbsp; &lt;/p&gt; &lt;p&gt;But, I have to be honest: that's about all of the sports facts that I know.&lt;/p&gt; &lt;p&gt;For me, this game represents bragging rights for the next year.&amp;nbsp; Not only among most of my co-workers, who actually live in Michigan &lt;strong&gt;&lt;em&gt;by choice &lt;/em&gt;&lt;/strong&gt;(yeah, what are they thinking?), but also between me and my wife, who has always been a Wolverine fan, despite living in the glorious land of scarlet and gray all of her life.&lt;/p&gt; &lt;p&gt;I have one particularly fond memory of OSU-Michigan week.&amp;nbsp; Back when I had a local office that was 7 miles from my house&amp;nbsp;(instead of the current 80 miles), I also had control over the office infrastructure.&amp;nbsp; We had one particularly obnoxious U of M alumnus who was brave enough to drive down to Toledo on the Friday before the game.&amp;nbsp; We'll call this individual Erik, because that's his name.&lt;/p&gt; &lt;p&gt;Erik always makes it his mission to stir the pot, and this Friday was no exception.&lt;/p&gt; &lt;p&gt;We used ISA Server for the office firewall, which allowed me to set up all kinds of little rules.&amp;nbsp; One thing that I did was create a rule so that every so often, the firewall would refuse to load whatever internet web page that he was trying to get to, and instead take him to a locally hosted "error" page.&amp;nbsp; The particular page that I created was adorned with OSU-related stuff, and even played the OSU fight song.&amp;nbsp; Yes, my friend, we Buckeyes pwned him on that day.&amp;nbsp; DFWN&lt;/p&gt; &lt;p&gt;I've been lucky enough to have bragging rights for the past 2 years.&amp;nbsp; Let's make it 3 in a row!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116338211008565475?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116338211008565475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116338211008565475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116338211008565475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116338211008565475'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/11/osu-michigan-week.html' title='OSU - Michigan Week'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116317692452285686</id><published>2006-11-10T11:42:00.000-05:00</published><updated>2006-11-10T11:45:05.240-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeMash'/><title type='text'>CodeMash Registration is now Open!</title><content type='html'>&lt;p&gt;There's been a few hiccups in getting the registration site live for CodeMash, but today, you are now able to &lt;a href="https://www.codemash.org/register.aspx" target="_blank"&gt;register through the website&lt;/a&gt;!&lt;/p&gt; &lt;p&gt;CodeMash (&lt;a href="http://www.codemash.org" target="_blank"&gt;www.codemash.org&lt;/a&gt;) is a fairly unique conference that will be held on January 18-19, 2007 at the Kalahari Lodge in Sandusky, OH.&amp;nbsp; It stands out from other conferences that I've attended because it is&amp;nbsp;will be a cross-pollenation event, bringing together developers&amp;nbsp;from many different technologies (Java, .NET, Ruby, PHP, etc) into one common forum.&amp;nbsp; &lt;/p&gt; &lt;p&gt;It is also completely organized by the developer community, acting as a non-profit entity.&amp;nbsp; This means that your registration fees (which are extremely low for a conference like this) are being spent on the conference (i.e., your meals, etc), and not as a means of turning a profit.&lt;/p&gt; &lt;p&gt;We toured the venue last week, and I was totally blown away.&amp;nbsp; I had no idea that we had this high of quality of a conference facility in Northern Ohio outside of major metro areas.&amp;nbsp; Sandusky is halfway between Cleveland and Toledo, and is probably better known as the location of &lt;a href="http://www.cedarpoint.com/" target="_blank"&gt;Cedar Point&lt;/a&gt;, one of the best amusement parks in the entire world.&amp;nbsp; Kalahari is also an indoor waterpark resort, so it will be an attractive destination in the middle of January.&lt;/p&gt; &lt;p&gt;If you're interested in attending this conference, then you will want to register soon.&amp;nbsp; Not only do you have to worry about being shut out (registration is capped at 500 attendees), but also there is a time limit for making room reservations at a great price ($88 a night, which includes admission to the waterpark).&lt;/p&gt; &lt;p&gt;&lt;a href="https://www.codemash.org/register.aspx"&gt;https://www.codemash.org/register.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;(If this conference sounds interesting to you, even if you can't attend, then please help to spread the word through your blog, or by telling a friend, etc).&lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/CodeMash" rel="tag"&gt;CodeMash&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Kalahari" rel="tag"&gt;Kalahari&lt;/a&gt;, &lt;a href="http://technorati.com/tag/.NET" rel="tag"&gt;.NET&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Java" rel="tag"&gt;Java&lt;/a&gt;, &lt;a href="http://technorati.com/tag/PHP" rel="tag"&gt;PHP&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Ruby" rel="tag"&gt;Ruby&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/8832633-116317692452285686?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116317692452285686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116317692452285686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116317692452285686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116317692452285686'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/11/codemash-registration-is-now-open.html' title='CodeMash Registration is now Open!'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116269012055696390</id><published>2006-11-04T20:28:00.000-05:00</published><updated>2006-11-04T20:28:40.686-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>NetFX 3.0</title><content type='html'>&lt;p&gt;&lt;a href="http://diditwith.net/" target="_blank"&gt;Dustin Campbell&lt;/a&gt; and I were chatting the other day about the whole confusion behind the .NET Framework v3.0, and why they decided on that version number despite the fact that the core (i.e., the CLR) is remaining at v2.0.&amp;nbsp; He filled me in on a little nugget of information that I think, if entirely accurate [not that I doubt Dustin, but I doubt my ability to correctly remember&amp;nbsp;everything that he said], should have been articulated by Microsoft in the first place to stop whiners like me from making such a big deal about the versioning.&lt;/p&gt; &lt;p&gt;It seems that all of the upcoming Orcas features that we've been calling "3.0" (LINQ, extension methods, yada yada yada) do not require anything new in the CLR.&amp;nbsp; The languages&amp;nbsp;will have new compilers, but the new&amp;nbsp;compiler will still generate v2.0 MSIL and metadata (i.e., they will generate CLR 2.0 assemblies).&amp;nbsp;&lt;/p&gt; &lt;p&gt;So, from that perspective, I can start to see why it's no longer important to tie the framework version number to the CLR version number.&amp;nbsp; It seems that the CLR is stable, and could effectively remain at the current version indefinitely without hindering the ability to add additional functionality to the languages (like LINQ and extension methods).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116269012055696390?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116269012055696390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116269012055696390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116269012055696390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116269012055696390'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/11/netfx-30.html' title='NetFX 3.0'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116238220730432210</id><published>2006-11-01T06:56:00.000-05:00</published><updated>2006-11-01T06:56:50.396-05:00</updated><title type='text'>Mac Ads</title><content type='html'>&lt;p&gt;Never been a fan of Apple's new series of ads.&amp;nbsp; I mean, they're very well done (kudos to the agency that thought those up), it's just that I'm on the opposing team.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Apparently, &lt;a href="http://neopoleon.com/home/blogs/neo/archive/2006/10/31/22527.aspx" target="_blank"&gt;Rory doesn't like them either&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/mac" rel="tag"&gt;mac&lt;/a&gt;, &lt;a href="http://technorati.com/tag/pc" rel="tag"&gt;pc&lt;/a&gt;, &lt;a href="http://technorati.com/tag/rory+blyth" rel="tag"&gt;rory blyth&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/8832633-116238220730432210?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116238220730432210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116238220730432210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116238220730432210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116238220730432210'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/11/mac-ads.html' title='Mac Ads'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116189358102163210</id><published>2006-10-26T16:13:00.000-04:00</published><updated>2006-10-26T16:13:01.103-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeMash'/><title type='text'>CodeMash!</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;The &lt;a href="http://www.codemash.org/"&gt;CodeMash website&lt;/a&gt; is live!  &lt;p&gt;You can now &lt;a href="http://www.codemash.org/Speakers.aspx"&gt;submit abstracts if you want to present&lt;/a&gt; and you can &lt;a href="http://www.codemash.org/Attendees.aspx"&gt;pre-register to hold your spot in line&lt;/a&gt;. Official registration should be open soon and will cost only $99 for a two-day event!  &lt;p&gt;Bruce Eckel, Neal Ford and Scott Guthrie are all keynoting the event.  &lt;p&gt;&lt;a href="http://www.codemash.org"&gt;&lt;img alt="CodeMash &amp;ndash; I&amp;rsquo;ll be there!" src="http://www.codemash.org/includes/images/bloggerbadge.gif"&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://www.codemash.org/Sponsors.aspx"&gt;You can also download information about the event if you are interested in sponsoring.&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/8832633-116189358102163210?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116189358102163210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116189358102163210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116189358102163210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116189358102163210'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/10/codemash.html' title='CodeMash!'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116169468502766298</id><published>2006-10-24T08:58:00.000-04:00</published><updated>2006-10-24T08:58:05.133-04:00</updated><title type='text'>Heartland User Group Webcasts</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Upcoming Webcast: November 6, 2006 at Noon EST&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Heartland User Group Webcasts&lt;br&gt;Functional Programming and LINQ - Shifting your object paradigm.&lt;/strong&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Bill Wagner – Ann Arbor .NET Developers&lt;br&gt;&lt;br&gt;Join us for technical presentations by experts from around our the user groups in Michigan, Ohio, Kentucky and Tennessee. In this webcast, Bill Wagner will demonstrate the new language extensions in C# and VB.NET called LINQ.&lt;br&gt;&lt;br&gt;The language features added for the Orcas release of C# and VB.NET start moving those languages out of their Object Oriented roots into the realm of functional programming. It’s a different way of programming. Rather than designing classes with behaviors and data, you create functions that take data as inputs and produce different data as outputs. That radical shift can lead to much simpler ways to express your designs. &lt;br&gt;&lt;br&gt;In this session, you’ll see the new syntax in these languages, and how you can leverage those additions to create more concise programs in less time. &lt;br&gt;&lt;br&gt;Registration: &lt;a href="http://msevents.microsoft.com/cui/eventdetail.aspx?EventID=1032314537&amp;amp;Culture=en-US"&gt;http://msevents.microsoft.com/cui/eventdetail.aspx?EventID=1032314537&amp;amp;Culture=en-US&lt;/a&gt;&lt;br&gt;Event ID: 1032314537&lt;br&gt;&lt;br&gt;Upcoming Topics:&lt;br&gt;11/20 – Intro to Workflow. What’s all the Noise About? – Brian Prince, Central Ohio .NET Developers Group&lt;br&gt;1/8 – Web Services Software Factory – Mike Wood, Cincinnati .NET Users Group&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116169468502766298?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116169468502766298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116169468502766298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116169468502766298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116169468502766298'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/10/heartland-user-group-webcasts.html' title='Heartland User Group Webcasts'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116168649967288839</id><published>2006-10-24T06:41:00.000-04:00</published><updated>2006-10-24T06:41:40.516-04:00</updated><title type='text'>Another Year Down...</title><content type='html'>&lt;p&gt;Just a FYI to anybody keeping stats at home:&amp;nbsp; This blog turned 2 years old on October 22.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Thanks go out to everybody who actually subscribe to and read my posts.&amp;nbsp; I don't think I'd be writing if I didn't have my 4 regular readers....&amp;nbsp; Well, 2 readers if you don't count my parents....&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116168649967288839?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116168649967288839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116168649967288839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116168649967288839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116168649967288839'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/10/another-year-down.html' title='Another Year Down...'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116126451852622134</id><published>2006-10-19T09:28:00.000-04:00</published><updated>2006-10-19T09:28:38.663-04:00</updated><title type='text'>IE7</title><content type='html'>&lt;p&gt;I've been using Internet Explorer 7 as my primary browser for about 6 months now (various beta versions).&amp;nbsp; I've always been an IE fan, dating back to version 4--, actually preferring it over the various Mozilla flavors.&amp;nbsp; This probably has a lot to do with the fact that most of my clients standardized on IE, so any web application that I developed was targeted for that single platform.&lt;/p&gt; &lt;p&gt;I only had a few minor problems with the beta versions of IE7, so my experience has been excellent thusfar.&amp;nbsp; Yesterday, I downloaded and installed the RTM version.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Perhaps it is simply a coincidence, but I've been noticing some weird problems now with my laptop.&amp;nbsp; For instance, it goes into sleep mode when I close the display.&amp;nbsp; More than once now in the past 24 hours, upon waking up, the laptop does not show the login dialog--just the wallpaper and mouse pointer.&amp;nbsp; The only thing that I seem to be able to do is power down and reboot.&lt;/p&gt; &lt;p&gt;Also, more than once, the browser has just seemed to stop responding for 1-2 minutes.&amp;nbsp; It doesn't allow me to switch tabs, or scroll.&lt;/p&gt; &lt;p&gt;I don't want to just blindly blame the RTM version of IE7 for these problems, but I find it strangely coincidental that they started after I installed this most recent update.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-116126451852622134?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116126451852622134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116126451852622134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116126451852622134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116126451852622134'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/10/ie7.html' title='IE7'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-116053349985377965</id><published>2006-10-10T22:24:00.000-04:00</published><updated>2006-10-11T12:49:37.830-04:00</updated><title type='text'>Trouble in MVP World</title><content type='html'>&lt;p&gt;The Microsoft MVP program is a recognition award for leadership in the Microsoft-platform user community.&amp;nbsp; I'm not a Microsoft MVP, but many of my friends are.&amp;nbsp; Some things happened during the last round of awards (beginning of October) that make me question the intention and/or value of the program.&lt;/p&gt; &lt;p&gt;First, they awarded, and then rescinded the MVP status for Cyril Paciullo, the maker of Messenger Plus, a free addon for MSN Messenger that is also a distribution vehicle for LOP (nasty adware program).&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.networkworld.com/news/2006/100606-microsoft-awards-mvp-status-to.html"&gt;http://www.networkworld.com/news/2006/100606-micro...&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Next, they didn't renew the award for Jamie Cansdale.&amp;nbsp; Jamie wrote TestDriven.NET, which is probably one of the most widely used addins for Visual Studio by unit testing advocates everywhere.&amp;nbsp; The reason cited: Jamie violated the "MVP Code of Conduct" because he happened to make his program work with the Express SKUs (Visual C# Express, Visual Basic.NET Express, etc).&amp;nbsp;&amp;nbsp; Or, at least this is the speculation of what the violation was.&lt;/p&gt; &lt;p&gt;&lt;a href="http://weblogs.asp.net/nunitaddin/archive/2006/10/10/MVP-Code-of-Conduct.aspx"&gt;http://weblogs.asp.net/nunitaddin/archive/2006/10/...&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://weblogs.asp.net/rosherove/archive/2006/10/1..."&gt;&lt;a href="http://weblogs.asp.net/rosherove/archive/2006/10/11/How-to-get-disqualified-as-an-MVP.aspx"&gt;How to get disqualified as an MVP&lt;/a&gt;&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/8832633-116053349985377965?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/116053349985377965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=116053349985377965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116053349985377965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/116053349985377965'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/10/trouble-in-mvp-world.html' title='Trouble in MVP World'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115999032899850360</id><published>2006-10-04T15:32:00.000-04:00</published><updated>2006-10-04T15:32:12.116-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>ClickOnce/VS2005 Version Number Issue</title><content type='html'>&lt;p&gt;This is not severe, but still annoys me every time that it comes up.&amp;nbsp; Look at this screenshot:&lt;/p&gt; &lt;p&gt;&lt;a title="clickonce_issue" href="http://www.flickr.com/photos/81259708@N00/260857318/"&gt;&lt;img alt="clickonce_issue" hspace="0" src="http://static.flickr.com/102/260857318_71512ce2ab.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Here I have the project set up so that ClickOnce will automatically increment the revision number after each publish.&amp;nbsp; Well, something apparently is not working,&amp;nbsp; because it seems that at least once a day, I get "Version already exists on the server" errors.&lt;/p&gt; &lt;p&gt;Blah!&amp;nbsp; Is it me, or VS2005 that's at fault?&amp;nbsp; I'm going to blame the latter, since I never make mistakes.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115999032899850360?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115999032899850360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115999032899850360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115999032899850360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115999032899850360'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/10/clickoncevs2005-version-number-issue.html' title='ClickOnce/VS2005 Version Number Issue'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115984814612530542</id><published>2006-10-03T00:02:00.000-04:00</published><updated>2006-10-03T00:02:26.226-04:00</updated><title type='text'>Congratulations, Josh!</title><content type='html'>&lt;p&gt;A good friend of mine in the Microsoft community, Josh Holmes, has made the jump and became a blue badge himself.&amp;nbsp; Congratulations!&lt;/p&gt; &lt;p&gt;Details from Josh himself: &lt;a href="http://www.srtsolutions.com/public/item/143418"&gt;http://www.srtsolutions.com/public/item/143418&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/8832633-115984814612530542?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115984814612530542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115984814612530542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115984814612530542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115984814612530542'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/10/congratulations-josh.html' title='Congratulations, Josh!'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115983761629645790</id><published>2006-10-02T21:06:00.000-04:00</published><updated>2006-10-02T21:16:16.443-04:00</updated><title type='text'>Photo</title><content type='html'>&lt;p&gt;My work email&amp;nbsp;account filled up (I hate quotas), so I had to find things to delete.&amp;nbsp; One was an email from &lt;a href="http://mokee-mike-blog.blogspot.com/" target="_blank"&gt;Mokee&lt;/a&gt; containing a really neat picture of my Bubby (Evan) staring out of Mike's back door at the swingset.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I simply titled it "Yearning"...&lt;/p&gt; &lt;p&gt;&lt;a title="IMG_2309_cropped" href="http://www.flickr.com/photos/81259708@N00/259251105/"&gt;&lt;img alt="IMG_2309_cropped" hspace="0" src="http://static.flickr.com/115/259251105_22b21cedda.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;(I think it looks great as my computer's&amp;nbsp;wallpaper)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115983761629645790?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115983761629645790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115983761629645790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115983761629645790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115983761629645790'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/10/photo.html' title='Photo'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115965102121256571</id><published>2006-09-30T17:08:00.000-04:00</published><updated>2006-09-30T17:17:01.230-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Delegates</title><content type='html'>NWNUG'ers: I'll probably publish the &lt;em&gt;NWNUG Introduces... Delegates&lt;/em&gt; screencast and article to the user group web site later this week.  I'm still thinking about what format I want the followups to these presentations to be.  Definitely an article format instead of just the PowerPoint slide deck, but still debating on the whole screencast thing (bandwidth and all).&lt;br /&gt;&lt;br /&gt;If you attend the group, but missed the last meeting on 9/26, then what I'm referring to is a new Intro-level mini-presentation (30 minutes or less) that we're going to try to have at the start of each meeting.  The artifacts from this presentation will then be made available on the website for future reference.&lt;br /&gt;&lt;br /&gt;My new favorite Delegate trick (courtesy of &lt;a href="http://www.diditwith.net"&gt;Dustin&lt;/a&gt;, who raves about it just about every time that we get together):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;somelist.ForEach(Console.WriteLine);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Console.WriteLine qualifies as an Action delegate!  The result is that you can dump out an entire collection to the console with one line of code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115965102121256571?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115965102121256571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115965102121256571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115965102121256571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115965102121256571'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/09/delegates.html' title='Delegates'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115962261884388445</id><published>2006-09-30T09:23:00.000-04:00</published><updated>2006-09-30T15:42:57.363-04:00</updated><title type='text'>What is Your "Home Office"?</title><content type='html'>&lt;p&gt;I think that most people who actually know me also know that I have two young twins who run around my relatively small house making all sorts of noise (and creating an equal amount of chaos, which I've come to accept).  I don't have the space to dedicate an entire room as a soundproof home office, so when I &amp;lt;airQuotes&amp;gt; Work From Home &amp;lt;/airQuotes&amp;gt;, it really means that I'm at a Panera Bread somewhere drinking the same cup of coffee that I purchased hours before.  (Sidenote: Don't get me wrong--I loves their &lt;a href="http://www.panera.com/menu/cafe/sandwiches.php" target="_blank"&gt;Turkey Artichoke&lt;/a&gt; panini and soups as well, so they've gotten plenty of my money for what little Wi-Fi I actually use).&lt;/p&gt;&lt;p&gt;Up to about 4 years ago, I had an actual office only 7 miles from my house.  And then it moved to 50 miles away, and most recently to 80 miles away.  Heading into the office on a weekend in order to get a little project work done is no longer feasible.&lt;/p&gt;&lt;p&gt;I'm wondering what other possibilities there are out there for a place to actually work.  It would have to have exposed electrical outlets (so that I can keep my laptop charged), free Wi-Fi Internet access, and allow me to talk on my cellphone without getting "shushed".  There should also be free parking, and restrooms nearby.  ;-)&lt;/p&gt;&lt;p&gt;The public libraries around here qualify for almost everything except for the "talking on the cellphone" part.  There are other restaurants besides Panera (i.e., Starbucks and even McDonalds), but Wi-Fi is typically not free.&lt;/p&gt;&lt;p&gt;What I really need (and this is one of those business ventures that I'll never have the time or money to pursue) is an office complex where I can rent an actual office by the day, week, or month if I need to.  It would be targeted for all of us remote workers, and priced to be much more affordable than leasing a small office space.  The building would provide the internet connectivity and even offer a phone extension that you can use.  Oh, and like any real office, it should also have a watercooler and coffee maker for free coffee ("a penny saved is just a penny").&lt;/p&gt;&lt;p&gt;I know that there is something similar to this in Southfield, MI (for example), but I think it's more for providing a facade that you have an office rather than just giving a remote employee of some company a place to sit for a day.  Besides, Southfield is as far away from my house as my current office, so that doesn't help my present situation.&lt;/p&gt;&lt;p&gt;So, anyways, with a lack of alternatives, it looks like I'll be heading to Panera in Perrysburg either this afternoon or tomorrow afternoon to get some things done.  Can I get anyone a panini while I'm there?&lt;/p&gt;&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; As I sit here in Panera, I realize why I keep coming back here instead of just anyplace with wifi: Delicious soup, some light jazz playing on the speakers, and interesting people all around ("interesting" in both the good and bad sense).  For an observer type like me, it's just a neat place to hang out and get some things done.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115962261884388445?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115962261884388445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115962261884388445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115962261884388445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115962261884388445'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/09/what-is-your.html' title='What is Your &amp;quot;Home Office&amp;quot;?'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115957337071452401</id><published>2006-09-29T19:40:00.000-04:00</published><updated>2006-09-29T22:00:43.036-04:00</updated><title type='text'>Browsing this Blog</title><content type='html'>Blogger's navigation kind of sucks. I experimented with a tag cloud (in sidebar), but the 3rd party provider of this service isn't as good as I had hoped.&lt;br /&gt;&lt;br /&gt;The best way for someone to browse this blog is to use the monthly archives (also in the right-hand sidebar). That will give you all posts for a month on a single page.&lt;br /&gt;&lt;br /&gt;I'll probably move the blog later this year and finally use dasBlog on a hosted server. Then I'll have a little more control over how content is displayed to the user (specifically surrounding navigation options).&lt;br /&gt;&lt;br /&gt;Until then, enjoy catching up on my thoughts, plskthx! ;-)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; I think I realized why I received a few complaints about it hard being able to navigate.  In my template, I only had the Archive list showing for the main page and archive pages.  So, if someone landed on a specific post, the monthly archive list would not be displayed.  Whoops!  Problem fixed.  Dig away!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115957337071452401?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115957337071452401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115957337071452401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115957337071452401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115957337071452401'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/09/browsing-this-blog.html' title='Browsing this Blog'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115937777713967306</id><published>2006-09-27T13:22:00.000-04:00</published><updated>2006-09-27T13:22:58.120-04:00</updated><title type='text'>Unnecessary Error</title><content type='html'>&lt;p&gt;Time to complain about an annoying feature in an otherwise awesome product: SQL Server Management Studio.&lt;/p&gt; &lt;p&gt;I opened a table today to do some editing of bit field data.&amp;nbsp; This is your basic Boolean (True/False) column in a database table.&amp;nbsp; SQL Server itself represents Boolean (bit) data as 0 and 1.&lt;/p&gt; &lt;p&gt;But, SSMS displays "True" and "False" for the field values.&amp;nbsp; Furthermore, while editing a bit field, it only accepts the words "true" and "false".&lt;/p&gt; &lt;p&gt;So, look at the error that pops up when I try to change a "True" value to false by entering "0" (which, I'll reiterate for clarity, is what SQL Server ITSELF requires for "false"):&lt;/p&gt; &lt;p&gt;&lt;a title="StupidError" href="http://www.flickr.com/photos/81259708@N00/254204813/"&gt;&lt;img alt="StupidError" hspace="0" src="http://static.flickr.com/83/254204813_ee2981f2ed.jpg" border="0"&gt;&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/8832633-115937777713967306?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115937777713967306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115937777713967306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115937777713967306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115937777713967306'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/09/unnecessary-error.html' title='Unnecessary Error'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115926842932579636</id><published>2006-09-26T07:00:00.000-04:00</published><updated>2006-09-26T07:00:29.420-04:00</updated><title type='text'>Me on an Episode of The Simpsons</title><content type='html'>&lt;p&gt;I was recently an extra on the set for an upcoming episode of The Simpsons.&amp;nbsp; It was so much fun watching the filming process.&amp;nbsp; Homer is totally like&amp;nbsp;his character&amp;nbsp;in real life, and Lisa is quite the Diva!&amp;nbsp; &lt;/p&gt; &lt;p&gt;I had one of the grips snap a picture before they kicked us off of the set:&lt;/p&gt; &lt;p&gt;&lt;a title="simpsons_char" href="http://www.flickr.com/photos/81259708@N00/253190067/"&gt;&lt;img alt="simpsons_char" hspace="0" src="http://static.flickr.com/81/253190067_d64efaa02a.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.flashportal.com/playmovie.php?id=148&amp;amp;w=large" target="_blank"&gt;See for yourself!&lt;/a&gt;&lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/Simpsons" rel="tag"&gt;Simpsons&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/8832633-115926842932579636?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115926842932579636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115926842932579636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115926842932579636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115926842932579636'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/09/me-on-episode-of-simpsons.html' title='Me on an Episode of The Simpsons'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115828460491644361</id><published>2006-09-14T21:43:00.000-04:00</published><updated>2006-09-14T21:43:25.023-04:00</updated><title type='text'>New Windows Live Local Feature</title><content type='html'>&lt;p&gt;I noticed today that there are now some drawing tools on the Windows Live Local scratchpad that allow you to draw polygons and lines right onto your map!&amp;nbsp; Cool!&lt;/p&gt; &lt;p&gt;Here's a map that I marked up.&amp;nbsp; Path #1 shows what my "commute" looks like if and when I go to my office (note that by policy, this is not supposed to be mileage that I can expense since it is considered a commute).&amp;nbsp; #2 demonstrates that even after a polygon is added to a map, you&amp;nbsp;can still&amp;nbsp;edit vertices if you need to.&lt;/p&gt; &lt;p&gt;&lt;a title="newLiveLocal" href="http://www.flickr.com/photos/81259708@N00/243518126/"&gt;&lt;img alt="newLiveLocal" hspace="0" src="http://static.flickr.com/88/243518126_6485b50ed7.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;These are groovy features, but one thing that I didn't like was that while drawing the line, there was no way to pan the map.&amp;nbsp; I'm not sure how that problem would be solved since panning normally involves mouse-down dragging, but it is definitely a limitation.&amp;nbsp; (I zoomed out to solve the issue, but this results in a lack of accuracy in placing the points).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115828460491644361?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115828460491644361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115828460491644361' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115828460491644361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115828460491644361'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/09/new-windows-live-local-feature.html' title='New Windows Live Local Feature'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115815488788890741</id><published>2006-09-13T09:41:00.000-04:00</published><updated>2006-09-13T09:43:52.900-04:00</updated><title type='text'>Internet Explorer: RTL Address Bar</title><content type='html'>&lt;p&gt;I love the "CTRL-ENTER" shortcut in Internet Explorer.&amp;nbsp; &lt;/p&gt; &lt;p&gt;That is, if you want to go to a www dot com website, like &lt;a href="http://www.microsoft.com"&gt;http://www.microsoft.com&lt;/a&gt; for instance, just type Microsoft in the address bar, and then press CTRL and ENTER at the same time.&amp;nbsp; The "Microsoft" will be wrapped with "http://www." and ".com".&lt;/p&gt; &lt;p&gt;Well, every now and then, I would mistype the CTRL-ENTER part, and the contents of the address bar would shift to be right-aligned (for Right-to-Left reading).&amp;nbsp; I could never figure out what keys I pressed, because it would always happen so fast.&lt;/p&gt; &lt;p&gt;This morning, I finally figured it out.&amp;nbsp; CTRL-Right Shift (the one right under the ENTER key) will shift to RTL reading order, and CTRL-Left Shift will return to LTR reading order.&amp;nbsp; Note that there's also a right-click context menu on the address bar combo box that allows you to do the same thing.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Now I don't have to assume that my laptop is possessed by mischievous demons.&lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/IE" rel="tag"&gt;IE&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Internet+Explorer" rel="tag"&gt;Internet Explorer&lt;/a&gt;, &lt;a href="http://technorati.com/tag/RTL" rel="tag"&gt;RTL&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/8832633-115815488788890741?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115815488788890741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115815488788890741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115815488788890741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115815488788890741'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/09/internet-explorer-rtl-address-bar.html' title='Internet Explorer: RTL Address Bar'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115815283631516949</id><published>2006-09-13T09:07:00.000-04:00</published><updated>2006-09-13T09:44:25.503-04:00</updated><title type='text'>XML Notepad 2006</title><content type='html'>&lt;p&gt;My first experience with XML was in 1998, and at that time, there was an invaluable tool (so I thought) from Microsoft called XML Notepad that allowed Morts to visualize and edit the XML's data in a non-angle bracket sort of way.&lt;/p&gt; &lt;p&gt;The novelty of XML Notepad quickly wore off once the limitations were realized, and I found myself other tools, like &lt;a href="http://xmlwriter.net/" target="_blank"&gt;XMLWriter&lt;/a&gt; and even Notepad,&amp;nbsp;for subsequent XML work.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Just today, I came across a&amp;nbsp;&lt;a href="http://geekswithblogs.net/ram/archive/2006/09/13/91044.aspx" target="_blank"&gt;blog post&lt;/a&gt; announcing that &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=72d6aa49-787d-4118-ba5f-4f30fe913628&amp;amp;displaylang=en" target="_blank"&gt;a new version of XML Notepad&lt;/a&gt; was released by Microsoft.&amp;nbsp; Neat!&lt;/p&gt; &lt;p&gt;I downloaded and installed the program, and then started it up.&amp;nbsp; My first impression was that this is still a Mort tool, just with more functionality.&amp;nbsp; It has a tree view of the XML structure, lots of pretty colors, and supports transformation using arbitrary XSLT files.&amp;nbsp; And, the Find functionality is loaded with advanced features, like Regular Expressions and XPath.&lt;/p&gt; &lt;p&gt;But, what I found missing was a true source view integrated right into the program (right now, when you View Source, it launches Notepad).&amp;nbsp; If they could have added a XML view that offered the text editing capabilities found in Visual Studio (including highlighting and IntelliSense), then this would be a lightweight yet fully capable&amp;nbsp;tool that I would find myself using regularly.&amp;nbsp; Until then, I'm not sure what role it will fill in my life.&lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/XML" rel="tag"&gt;XML&lt;/a&gt;, &lt;a href="http://technorati.com/tag/XML+Notepad" rel="tag"&gt;XML Notepad&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/8832633-115815283631516949?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115815283631516949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115815283631516949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115815283631516949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115815283631516949'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/09/xml-notepad-2006.html' title='XML Notepad 2006'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115807624200504579</id><published>2006-09-12T11:50:00.000-04:00</published><updated>2006-09-12T11:51:14.826-04:00</updated><title type='text'>Can't Wait for Groove</title><content type='html'>&lt;p&gt;I'm a huge fan of FolderShare.&amp;nbsp; It's a great way to automatically share a document library with a group of people, and still have those files available locally when you're offline.&lt;/p&gt; &lt;p&gt;I have yet to install and use &lt;a href="http://www.microsoft.com/office/preview/programs/groove/highlights.mspx" target="_blank"&gt;Groove&lt;/a&gt; (will be part of the next release of Microsoft Office), but&amp;nbsp;it promises the same FolderShare-type functionality for file sharing, but also adds onto that the normal collaboration features that you would use SharePoint for.&amp;nbsp; That is, you will have local copies of discussions, meetings, business forms, and more.&amp;nbsp; When you're back online, everything syncs up so that you get new content, and your new content is pushed to everybody else.&lt;/p&gt; &lt;p&gt;I'm working on a collaborative project right now, and it's a hassle having some things in FolderShare, some things in a SharePoint site, and most discussions in email.&amp;nbsp; I really see Microsoft Office Groove 2007 as being the solution to this headache starting next year.&lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/Groove" rel="tag"&gt;Groove&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Microsoft+Office" rel="tag"&gt;Microsoft Office&lt;/a&gt;, &lt;a href="http://technorati.com/tag/collaboration" rel="tag"&gt;collaboration&lt;/a&gt;, &lt;a href="http://technorati.com/tag/FolderShare" rel="tag"&gt;FolderShare&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/8832633-115807624200504579?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115807624200504579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115807624200504579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115807624200504579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115807624200504579'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/09/cant-wait-for-groove.html' title='Can&apos;t Wait for Groove'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115806966456832295</id><published>2006-09-12T10:01:00.000-04:00</published><updated>2006-09-12T10:06:19.630-04:00</updated><title type='text'>Millahseconds</title><content type='html'>&lt;p&gt;Got 6 minutes and 3 seconds with nothing to do?&amp;nbsp; Why waste your employer's bandwidth and time visiting &lt;a href="http://www.hampsterdance2.com/hampsterdance2.html" target="_blank"&gt;Hamster Dance&lt;/a&gt; when you could instead give that crazy rat bastard named &lt;a href="http://www.doitwith.net/default.aspx" target="_blank"&gt;Mark Miller&lt;/a&gt;&amp;nbsp;a listen-to on his new podcast, &lt;a href="http://www.millahseconds.com/" target="_blank"&gt;Millahseconds&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;In his own words: &lt;a href="http://www.doitwith.net/2006/09/12/TheEndOfMyProfe..."&gt;http://www.doitwith.net/2006/09/12/TheEndOfMyProfe...&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/Mark+Miller" rel="tag"&gt;Mark Miller&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Millahseconds" rel="tag"&gt;Millahseconds&lt;/a&gt;, &lt;a href="http://technorati.com/tag/PWOP" rel="tag"&gt;PWOP&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/8832633-115806966456832295?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115806966456832295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115806966456832295' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115806966456832295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115806966456832295'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/09/millahseconds.html' title='Millahseconds'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115711592364406051</id><published>2006-09-01T09:05:00.000-04:00</published><updated>2006-09-06T22:37:39.360-04:00</updated><title type='text'>When Marketing Plays with Version Numbers</title><content type='html'>&lt;p&gt;What confusion could possibly arise out of&amp;nbsp;allowing a marketing department establish the framework version number?&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?Pos..."&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?Pos...&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The invention of a "vNext" versioning scheme kind of tells me that nobody really knows for sure what's going on with framework version numbers or product release cycles inside of MS.&amp;nbsp; I mean, ADO.NET 3.0 was &lt;em&gt;supposed&lt;/em&gt; to be part of the version 3 .NET Framework (along with LINQ), which is why it had the "3.0" after it.&amp;nbsp; But, now it seems that there will be a whole set of APIs that will have to skip the 3.0 version number in order to catch up with the framework version when (if) marketing ever decides what the next version number should be. &lt;/p&gt; &lt;p&gt;All of this started as an effort to minimize confusion that they thought would arise from having WinFX be a separate library from the .NET Framework.&amp;nbsp; Keep it up, guys!&amp;nbsp; You certainly minimized global confusion with that move.&lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/NetFX" rel="tag"&gt;NetFX&lt;/a&gt;, &lt;a href="http://technorati.com/tag/ADO.NET+for+Entities" rel="tag"&gt;ADO.NET for Entities&lt;/a&gt;, &lt;a href="http://technorati.com/tag/WinFX" rel="tag"&gt;WinFX&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/8832633-115711592364406051?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115711592364406051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115711592364406051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115711592364406051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115711592364406051'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/09/when-marketing-plays-with-version.html' title='When Marketing Plays with Version Numbers'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115684760902802788</id><published>2006-08-29T06:33:00.000-04:00</published><updated>2006-09-06T22:38:40.806-04:00</updated><title type='text'>Hanselman Updates Ultimate Tools List for 2006</title><content type='html'>&lt;p&gt;Wow, the last 3 posts here, including this one,&amp;nbsp;have been inspired by Scott Hanselman.&amp;nbsp; I didn't really intend it that way, but it seems that he's the only one posting things that really pique my interest at the moment.&lt;/p&gt; &lt;p&gt;Anyways, the 2006 Ultimate Tools list has been released!&amp;nbsp; Check it out at:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.hanselman.com/tools" target="_blank"&gt;http://www.hanselman.com/tools&lt;/a&gt;&lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/Hanselman" rel="tag"&gt;Hanselman&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Tools" rel="tag"&gt;Tools&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/8832633-115684760902802788?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115684760902802788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115684760902802788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115684760902802788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115684760902802788'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/hanselman-updates-ultimate-tools-list.html' title='Hanselman Updates Ultimate Tools List for 2006'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115652016274837923</id><published>2006-08-25T11:36:00.000-04:00</published><updated>2006-09-06T22:43:59.390-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Hanselman's Endianess Converter Challenge</title><content type='html'>&lt;p&gt;Scott Hanselman &lt;a href="http://www.hanselman.com/blog/CommentView.aspx?guid=a2f231e5-5eac-4a21-b73b-282f64cae313#commentstart" target="_blank"&gt;asks for the fastest way to flip the bits of a number in order to change the Endianess&lt;/a&gt;.&amp;nbsp; To make it more challenging, he doesn't just want straight conversion of a 64-bit integer to another 64-bit integer.&amp;nbsp; Instead, he wants to specify the size of the number to reverse (i.e., only the lower x number of bits).&lt;/p&gt; &lt;p&gt;Note: It was brought up that it probably isn't accurate to describe this as an Endianess converter, because Endianess really only affects the individual bytes or words in memory, not the total order of those bytes or words.&amp;nbsp; That is, if you have a string of memory containing "1234", then converting Endianess would be more akin to resulting in "2143" than "4321".&amp;nbsp; Scott's challenge is really for the latter example, which is total reversal of the bits.&lt;/p&gt; &lt;p&gt;There were a couple of interesting solutions posted in his comments section.&amp;nbsp; But, remembering back to the same time period &lt;a href="http://jasonf-blog.blogspot.com/2006/08/using-windows-to-drive-high-speed.html" target="_blank"&gt;as my previous post&lt;/a&gt;, I knew that one of&amp;nbsp;the fastest approaches uses a tradeoff of utilizing memory instead of computation.&amp;nbsp; That is, you perform some level of pre-computation, and then your function only has to do lookups from an array and simple addition/bit shifting.&lt;/p&gt; &lt;p&gt;Part of the problem is determining how much memory you can afford to use for this task.&amp;nbsp; I thought that working with 8-bits at a time was a nice starting point, because 8-bits is at the boundary of an intrinsic type (the "byte" type), and because my table (an array)&amp;nbsp;then only needs to be 256 elements in size.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The contents of this table is the flipped byte for each index value.&amp;nbsp; The algorithm then is to loop through the original number, grab the lower 8-bits, look up the flipped byte value from the table, and then left-shift it into the output variable.&amp;nbsp; At the end, right-shift the output variable to make the final number only have the specified number of significant bits.&lt;/p&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] flippedBytes = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] {&lt;br /&gt;    0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, &lt;br /&gt;    0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, &lt;br /&gt;    0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, &lt;br /&gt;    0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, &lt;br /&gt;    0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, &lt;br /&gt;    0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, &lt;br /&gt;    0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, &lt;br /&gt;    0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, &lt;br /&gt;    0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, &lt;br /&gt;    0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,&lt;br /&gt;    0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, &lt;br /&gt;    0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, &lt;br /&gt;    0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, &lt;br /&gt;    0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, &lt;br /&gt;    0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, &lt;br /&gt;    0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, &lt;br /&gt;    0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, &lt;br /&gt;    0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, &lt;br /&gt;    0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, &lt;br /&gt;    0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,&lt;br /&gt;    0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, &lt;br /&gt;    0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, &lt;br /&gt;    0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, &lt;br /&gt;    0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, &lt;br /&gt;    0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, &lt;br /&gt;    0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, &lt;br /&gt;    0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, &lt;br /&gt;    0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, &lt;br /&gt;    0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, &lt;br /&gt;    0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,&lt;br /&gt;    0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, &lt;br /&gt;    0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF};&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;long&lt;/span&gt; Reverse(&lt;span style="color: #0000ff"&gt;long&lt;/span&gt; x, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; bits)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;long&lt;/span&gt; z = 0;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;    &lt;span style="color: #008000"&gt;// reverse the bytes&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 8; i++)&lt;br /&gt;    {&lt;br /&gt;        z = (z &amp;lt;&amp;lt; 8) + flippedBytes[x &amp;amp; 0xff];&lt;br /&gt;        x = x &amp;gt;&amp;gt; 8;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; z &amp;gt;&amp;gt; (64 - bits);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;For a slight performance increase, get rid of the loop and just "manually" iterate the 8 times (this eliminates a comparison and branch operation).:&lt;/p&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;long&lt;/span&gt; Reverse(&lt;span style="color: #0000ff"&gt;long&lt;/span&gt; x, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; bits)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;long&lt;/span&gt; z = 0;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;    z = (z &amp;lt;&amp;lt; 8) | flippedBytes[x &amp;amp; 0xff];&lt;br /&gt;    x = x &amp;gt;&amp;gt; 8;&lt;br /&gt;    z = (z &amp;lt;&amp;lt; 8) | flippedBytes[x &amp;amp; 0xff];&lt;br /&gt;    x = x &amp;gt;&amp;gt; 8;&lt;br /&gt;    z = (z &amp;lt;&amp;lt; 8) | flippedBytes[x &amp;amp; 0xff];&lt;br /&gt;    x = x &amp;gt;&amp;gt; 8;&lt;br /&gt;    z = (z &amp;lt;&amp;lt; 8) | flippedBytes[x &amp;amp; 0xff];&lt;br /&gt;    x = x &amp;gt;&amp;gt; 8;&lt;br /&gt;    z = (z &amp;lt;&amp;lt; 8) | flippedBytes[x &amp;amp; 0xff];&lt;br /&gt;    x = x &amp;gt;&amp;gt; 8;&lt;br /&gt;    z = (z &amp;lt;&amp;lt; 8) | flippedBytes[x &amp;amp; 0xff];&lt;br /&gt;    x = x &amp;gt;&amp;gt; 8;&lt;br /&gt;    z = (z &amp;lt;&amp;lt; 8) | flippedBytes[x &amp;amp; 0xff];&lt;br /&gt;    x = x &amp;gt;&amp;gt; 8;&lt;br /&gt;    z = (z &amp;lt;&amp;lt; 8) | flippedBytes[x &amp;amp; 0xff];&lt;br /&gt;    x = x &amp;gt;&amp;gt; 8;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; z &amp;gt;&amp;gt; (64 - bits);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;The execution time can further be cut in half by storing flippedWords ("ushort" types) instead of flippedBytes ("byte" types).&amp;nbsp; However, this requires&amp;nbsp;512 times the memory for storage (64K elements * 2 bytes a piece = 128KB instead of 256 bytes).&lt;/p&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;ushort&lt;/span&gt;[] flippedWords = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;ushort&lt;/span&gt;[1 &amp;lt;&amp;lt; 16];&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Class1()  &lt;span style="color: #008000"&gt;// Constructor&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #008000"&gt;// Initialize the array&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; flippedWords.Length; i++)&lt;br /&gt;    {&lt;br /&gt;        flippedWords[i] = (&lt;span style="color: #0000ff"&gt;ushort&lt;/span&gt;)((flippedBytes[i &amp;amp; 0xff] &amp;lt;&amp;lt; 8) &lt;br&gt;                                   | flippedBytes[(i &amp;gt;&amp;gt; 8)]);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;long&lt;/span&gt; Reverse(&lt;span style="color: #0000ff"&gt;long&lt;/span&gt; x, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; bits)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;long&lt;/span&gt; z = 0;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;    z = (z &amp;lt;&amp;lt; 16) | flippedWords[x &amp;amp; 0xffff];&lt;br /&gt;    x = x &amp;gt;&amp;gt; 16;&lt;br /&gt;    z = (z &amp;lt;&amp;lt; 16) | flippedWords[x &amp;amp; 0xffff];&lt;br /&gt;    x = x &amp;gt;&amp;gt; 16;&lt;br /&gt;    z = (z &amp;lt;&amp;lt; 16) | flippedWords[x &amp;amp; 0xffff];&lt;br /&gt;    x = x &amp;gt;&amp;gt; 16;&lt;br /&gt;    z = (z &amp;lt;&amp;lt; 16) | flippedWords[x &amp;amp; 0xffff];&lt;br /&gt;    x = x &amp;gt;&amp;gt; 16;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; z &amp;gt;&amp;gt; (64 - bits);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;And, to put this thing to bed, there's one more little thing that can improve execution time: control the iterations based on the number of bits desired.&amp;nbsp; That is, if we only need 12 bits in the output, then there's no reason to execute the other 3 iterations.&amp;nbsp; This method provides better performance only if the bits parameter is less than 48, otherwise the previous method proves faster (because there are no conditions):&lt;/p&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;long&lt;/span&gt; Reverse(&lt;span style="color: #0000ff"&gt;long&lt;/span&gt; x, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; bits)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; iter = (bits &amp;gt;&amp;gt; 4) + 1;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;long&lt;/span&gt; z = 0;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0; i &amp;lt; iter; i++)&lt;br /&gt;    {&lt;br /&gt;        z = (z &amp;lt;&amp;lt; 16) | flippedWords[x &amp;amp; 0xffff];&lt;br /&gt;        x = x &amp;gt;&amp;gt; 16;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; z &amp;gt;&amp;gt; 16 - (bits &amp;amp; 0xf);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;tags:&amp;nbsp;&lt;a href="http://technorati.com/tag/Hanselman" rel="tag"&gt;Hanselman&lt;/a&gt;, &lt;a href="http://technorati.com/tag/" rel="tag"&gt;&lt;/a&gt;&lt;a href="http://technorati.com/tag/C#" rel="tag"&gt;C#&lt;/a&gt;, &lt;a href="http://technorati.com/tag/endian" rel="tag"&gt;endian&lt;/a&gt;, &lt;a href="http://technorati.com/tag/code" rel="tag"&gt;code&lt;/a&gt;, &lt;a href="http://technorati.com/tag/.net" rel="tag"&gt;.net&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/8832633-115652016274837923?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115652016274837923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115652016274837923' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115652016274837923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115652016274837923'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/hanselmans-endianess-converter.html' title='Hanselman&apos;s Endianess Converter Challenge'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115651283155967986</id><published>2006-08-25T09:33:00.000-04:00</published><updated>2006-09-06T22:43:32.896-04:00</updated><title type='text'>Using Windows to Drive High-Speed Digital Logic</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.hanselman.com/blog/CommentView.aspx?guid=58b4439e-fb13-459a-b13d-5420553f9039" target="_blank"&gt;Scott Hanselman is obviously working on another Coding for Fun article&lt;/a&gt;.&amp;nbsp; ;-)&amp;nbsp;  &lt;p&gt;It looks like he's simply trying to drive a high-powered IR transmitter directly from a Windows application to simulate a Sony remote control. However, he's also running into a challenge that anyone who's tried to use Windows for realtime systems has experienced: there are no guarantees surrounding timeslices in user mode.  &lt;p&gt;I once wrote software that had to do something very similar (this was in an era before .NET). In my case, I was flashing an 8-bit Atmel AVR&amp;nbsp;microcontroller using its SPI bus. The AVR was installed in a device that [I believe] used the RTS flag of RS-232 to both clock and set the SPI data, which was interesting to say the least.  &lt;p&gt;As a background, SPI (&lt;a href="http://www.embedded.com/story/OEG20020124S0116" target="_blank"&gt;Serial Peripheral Interface&lt;/a&gt;)&amp;nbsp;is a 3-wire protocol that uses a Master/Slave configuration (in this case, the AVR&amp;nbsp;was always&amp;nbsp;the Slave device).&amp;nbsp; There's a Master-In-Slave-Out line (MISO), a Master-Out-Slave-In line (MOSI) and a Serial Clock line (SCLK) controlled by the master device.&amp;nbsp; While SCLK is low,&amp;nbsp;each device is free to change its respective data line state.&amp;nbsp; The slave reads in the next bit from the MOSI line on the rising edge of SCLK, and the master reads in the next bit from the MISO line on the falling edge of SCLK.&amp;nbsp; Then the cycle repeats.  &lt;p&gt;The In-Circuit Programming circuitry of&amp;nbsp;this particular device used a Resistor-Capacitor (RC) network and an inverter to both delay and invert the SCLK logic and put the results onto the MOSI line.&amp;nbsp; So, by carefully timing the transitions of SCLK, I was able to clock in a bit and then prepare for the next bit.  &lt;p&gt;Example: to set the value of 1011, I might have to do: &lt;pre&gt;                  _______          &lt;br /&gt;SCLK/RTS  _______|       |_______||________|&lt;br /&gt;&lt;/pre&gt;&lt;br&gt;Which, due to delay and inversion, puts the MOSI line into the following state:&lt;pre&gt;          _________         ___________________&lt;br&gt;MOSI               |_______|&lt;br&gt;                 ^       ^       ^         ^&lt;br&gt;Reads            1       0       1         1&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;The delay that I had to work with was set by a combination of the RC values, the inverter's voltage threshold before it would change state, and the inverter's switching time.&amp;nbsp; Roughly put, though, it was a really small value represented in microseconds, much like Scott's requirements for the Sony IR Remote protocol.&amp;nbsp; So, in certain critical areas, I had to make low-high-low SCLK transition that were less than the delay factor, otherwise I would get a wrong value clocked in.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I no longer have the source code to refer to, but I believe that I ended up writing a command-line application in C (no fancy C++ stuff) to call a Win32 API function like Scott is doing.&amp;nbsp; However, like Scott, I was not getting consistent results, regardless of what priority my process was set to.&amp;nbsp; The reason that I came up with: the Windows Kernel could at any time steal timeslices from my process when it had something important to do.&amp;nbsp; My user mode application was always going to be a second class citizen.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now, one member of this project took my prototype and set off to write a Kernel-mode driver (this was too advanced for me at the time, and probably still is today).&amp;nbsp; Even with this approach, he still had timing issues every now and then, depending on what was running on the system.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Instead of trying to get Windows to speed up, I took another approach and made the hardware slow down.&amp;nbsp; By increasing the resistor's value, I was able to increase the delay factor to a point where I could get consistent results from the Windows app.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I wish I still had all of that hardware and source code today.&amp;nbsp; I would love to see if the same issues exist on modern hardware, as opposed to the PIII-500 with 256MB of RAM running Win98SE.&amp;nbsp; But, based on what Scott is experiencing, it looks like the issues are still there.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://technorati.com/tag/spi" rel="tag"&gt;tags: &lt;a href="http://technorati.com/tag/Hanselman" rel="tag"&gt;Hanselman&lt;/a&gt;, &lt;a href="http://technorati.com/tag/electronics" rel="tag"&gt;electronics&lt;/a&gt;, &lt;a href="http://technorati.com/tag/microcontroller" rel="tag"&gt;microcontroller&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Atmel" rel="tag"&gt;Atmel&lt;/a&gt;, &lt;a href="http://technorati.com/tag/digital+logic" rel="tag"&gt;digital logic&lt;/a&gt;&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/8832633-115651283155967986?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115651283155967986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115651283155967986' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115651283155967986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115651283155967986'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/using-windows-to-drive-high-speed.html' title='Using Windows to Drive High-Speed Digital Logic'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115636714667244068</id><published>2006-08-23T17:05:00.000-04:00</published><updated>2006-09-06T22:44:41.876-04:00</updated><title type='text'>Want a Free Trip to TechEd Europe 2006?</title><content type='html'>&lt;p&gt;Microsoft, via &lt;a href="http://www.intellectualhedonism.com/"&gt;Carl Franklin&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.dotnetrocks.com/" target="_blank"&gt;.NET Rocks!&lt;/a&gt;, is giving away a trip to &lt;a href="http://www.mseventseurope.com/TechEd/06/pre/defaultdev.aspx" target="_blank"&gt;TechEd: Developers Europe&lt;/a&gt; this November in Barcelona, Spain.&amp;nbsp; &lt;/p&gt; &lt;p&gt;All that you have to do is listen to the podcast, fill out a small survey on the website, and then provide the answer to a question that comes from that week's episode.&amp;nbsp;&lt;/p&gt; &lt;p&gt;Details can be found at:&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.dotnetrocks.com/barcelona.aspx" target="_blank"&gt;http://www.dotnetrocks.com/barcelona.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;tags: &lt;a href="http://technorati.com/tag/.NET+Rocks" rel="tag"&gt;.NET Rocks&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Carl+Franklin" rel="tag"&gt;Carl Franklin&lt;/a&gt;, &lt;a href="http://technorati.com/tag/TechEd" rel="tag"&gt;TechEd&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115636714667244068?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115636714667244068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115636714667244068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115636714667244068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115636714667244068'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/want-free-trip-to-teched-europe-2006.html' title='Want a Free Trip to TechEd Europe 2006?'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115633833583153066</id><published>2006-08-23T09:05:00.000-04:00</published><updated>2006-09-06T22:45:32.110-04:00</updated><title type='text'>Can You Feel the Tension?</title><content type='html'>&lt;p&gt;Big oil must be upset this week.&amp;nbsp; &lt;/p&gt; &lt;p&gt;There are no hurricanes disrupting upstream operations in the Gulf, the ceasefire in Lebanon is [for now] holding, and terrorist plots are being thwarted.&amp;nbsp; The global outlook is, for the moment,&amp;nbsp;actually positive.&lt;/p&gt; &lt;p&gt;The apparent result: gasoline prices in my area have fallen 12% over the past few weeks.&lt;/p&gt; &lt;p&gt;But, are you like me?&amp;nbsp; Can you feel the tension?&amp;nbsp; Can you feel&amp;nbsp;the twisted desire for some bad news to come from somewhere, just so that the local price at the pump can jump 30 cents overnight?&lt;/p&gt; &lt;p&gt;It's the calm before the storm.&amp;nbsp; &lt;a href="http://en.wikipedia.org/wiki/Gozer_the_Gozerian#Gozer_the_Gozerian" target="_blank"&gt;Gozer the Gozerian&lt;/a&gt; is coming.&amp;nbsp; Fuel prices will rise again.&lt;/p&gt; &lt;p&gt;&amp;nbsp;tags: &lt;a href="http://technorati.com/tag/oil" rel="tag"&gt;oil&lt;/a&gt;, &lt;a href="http://technorati.com/tag/gasoline" rel="tag"&gt;gasoline&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Gozer" rel="tag"&gt;Gozer&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/8832633-115633833583153066?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115633833583153066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115633833583153066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115633833583153066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115633833583153066'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/can-you-feel-tension.html' title='Can You Feel the Tension?'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115624528914383070</id><published>2006-08-22T07:14:00.000-04:00</published><updated>2006-09-06T22:46:16.493-04:00</updated><title type='text'>It's All About Averages</title><content type='html'>&lt;p&gt;If you listened at all to the mainstream media last year, then you would have expected Florida and the Gulf Coast to have been wiped out by now due to a series of severe hurricanes.&amp;nbsp; I mean, they were preaching that global warming is out of control, and that we can expect our oceans to boil off any day now.&lt;/p&gt; &lt;p&gt;Well, it seems that&amp;nbsp;this year's hurricane season is actually&amp;nbsp;on a less-than-average trend:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.weatherstreet.com/hurricane/2006/hurric..."&gt;&lt;a href="http://www.weatherstreet.com/hurricane/2006/hurricane-atlantic-2006-below-normal-season.htm" target="_blank"&gt;http://www.weatherstreet.com/hurricane/2006/hurric...&lt;/a&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The Earth has always changed, even before man was around to observe it.&amp;nbsp; The funny thing about the Earth is that it tends to make its climatic changes over thousands, or hundreds of thousands&amp;nbsp;of years.&amp;nbsp; The funny thing about mankind is that we tend to form our conclusions based only on a small set of most recent data.&amp;nbsp; (As a case in point, I've concluded that this will be a mild hurricane season based on the level of activity thusfar).&lt;/p&gt; &lt;p&gt;We're so convinced that major permanent changes are going to happen in our lifetime, that any time there is a winter with major snowfall, or a summer with a drought, or a hurricane season with 26 tropical storms, we're ready to accept that as the new norm.&amp;nbsp; Fortunately, spikes like these are just noise: the true signal can only be obtained by taking the average over a relatively long period of time (decades or centuries).&lt;/p&gt; &lt;p&gt;Do I think that global warming exists?&amp;nbsp; Sure, to some degree.&amp;nbsp; But, I don't believe it to be as serious as &lt;a href="http://www.climatecrisis.net/" target="_blank"&gt;some people&lt;/a&gt; make it out to be.&amp;nbsp; And I think that it may have happened regardless of whether or not we were here to witness it.&lt;/p&gt; &lt;p&gt;&lt;a href="http://jasonf-blog.blogspot.com/2005/09/katrina-was-not-from-global-warming.html" target="_blank"&gt;But, I've already blogged about this topic before...&lt;/a&gt;&amp;nbsp; &lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/hurricane" rel="tag"&gt;hurricane&lt;/a&gt;, &lt;a href="http://technorati.com/tag/global+warming" rel="tag"&gt;global warming&lt;/a&gt;, &lt;a href="http://technorati.com/tag/trends" rel="tag"&gt;trends&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/8832633-115624528914383070?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115624528914383070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115624528914383070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115624528914383070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115624528914383070'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/its-all-about-averages.html' title='It&apos;s All About Averages'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115620220854744218</id><published>2006-08-21T19:16:00.000-04:00</published><updated>2006-09-06T22:46:59.790-04:00</updated><title type='text'>Restoring a SQL Server Backup from Another Server</title><content type='html'>&lt;p&gt;I'm going to use my blog as a scratchpad for me to remember something that I normally have to Google for each time that I need it.&amp;nbsp; Feel free to find the following useful, if that thought appeals to you.&lt;/p&gt; &lt;p&gt;Scenario: In order to migrate a database from one server to another (i.e., in order to create a development version on your laptop that will allow you to work offline or offsite), you restore a backup created on the original server, overwriting the database on the destination server (intentionally).&amp;nbsp; &lt;/p&gt; &lt;p&gt;Problem: If the database uses SQL Server Logins for security, then the logins specified in the backup will not match up with the logins on your destination server (think ID mismatch).&lt;/p&gt; &lt;p&gt;Solution: sp_change_users_login 'AUTO_FIX', 'theUserName'&lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/SQL+Server" rel="tag"&gt;SQL Server&lt;/a&gt;, &lt;a href="http://technorati.com/tag/login" rel="tag"&gt;login&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/8832633-115620220854744218?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115620220854744218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115620220854744218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115620220854744218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115620220854744218'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/restoring-sql-server-backup-from.html' title='Restoring a SQL Server Backup from Another Server'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115592791319059269</id><published>2006-08-18T15:05:00.000-04:00</published><updated>2006-09-06T22:47:44.693-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Number of Week Days in a Date Range Function</title><content type='html'>&lt;p&gt;I needed a graceful way to count the number of "week days" that existed in a given date range.&amp;nbsp; At least in the United States, a weekday is between Monday and Friday (i.e., Saturday and Sundays are weekends).&lt;/p&gt; &lt;p&gt;I looked through some of the common BCL objects, and Google'd a bit, but didn't find a pre-written solution (but, the way my afternoon is going, it could have been staring me in the face and I just didn't see it).&lt;/p&gt; &lt;p&gt;Here's a function that I whipped together.&amp;nbsp; I tried to make it flexible by using the DayOfWeek enumeration (in case another calendar might have a different set of Days of Week, etc) and allowing the definition of a "weekday" to be specified as any day between "wkStart" and "wkEnd" inclusive.&lt;/p&gt;&lt;pre&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; WeekDaysInDateRange(DateTime start, DateTime end)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; DaysInWeek = Enum.GetValues(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(DayOfWeek)).Length;&lt;br /&gt;&lt;br /&gt;    DayOfWeek wkStart = DayOfWeek.Monday;&lt;br /&gt;    DayOfWeek wkEnd = DayOfWeek.Friday;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000"&gt;// Adjust the start date to the first week day, if needed&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (start.DayOfWeek &amp;lt; wkStart)&lt;br /&gt;    {&lt;br /&gt;        start = start.AddDays((&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)(wkStart - start.DayOfWeek));&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (start.DayOfWeek &amp;gt; wkEnd)&lt;br /&gt;    {&lt;br /&gt;        start = start.AddDays(DaysInWeek - (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)start.DayOfWeek + (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)wkStart);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #008000"&gt;// Adjust the end date to the last week day, if needed&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (end.DayOfWeek &amp;gt; wkEnd)&lt;br /&gt;    {&lt;br /&gt;        end = end.AddDays((&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)(wkEnd - end.DayOfWeek));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    TimeSpan duration = (end - start).Duration(); &lt;span style="color: #008000"&gt;// "Absolute value"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; wks = duration.Days / DaysInWeek;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; days = wks * ((&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)(wkEnd - wkStart) + 1);&lt;br /&gt;    &lt;br /&gt;    days += ((&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)(end.DayOfWeek - start.DayOfWeek) + 1);&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; days;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Anyone have a more graceful method?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;tags: &lt;a href="http://technorati.com/tag/C#" rel="tag"&gt;C#&lt;/a&gt;, &lt;a href="http://technorati.com/tag/.NET" rel="tag"&gt;.NET&lt;/a&gt;, &lt;a href="http://technorati.com/tag/code" rel="tag"&gt;code&lt;/a&gt;, &lt;a href="http://technorati.com/tag/datetime" rel="tag"&gt;datetime&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/8832633-115592791319059269?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115592791319059269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115592791319059269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115592791319059269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115592791319059269'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/number-of-week-days-in-date-range.html' title='Number of Week Days in a Date Range Function'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115565461500902239</id><published>2006-08-15T11:10:00.000-04:00</published><updated>2006-09-06T22:48:16.750-04:00</updated><title type='text'>QuickTimeCheck Scriptable Object</title><content type='html'>&lt;p&gt;Within the past few days, I've noticed that while browsing a variety of websites, from my Blog, to StatCounter.com, to Scott Hanselman's blog, that an Information Bar was popping up in IE7 stating the following:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;This website wants to run the following add-on: 'QuickTimeCheck Scriptable Object' from 'Apple Computer, Inc. (unverified publisher)'. If you trust the website and the add-on and want to allow it to run, click here...&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Now, I'm kind of against installing anything that has "Apple" and "Quicktime" in the same sentence, especially since Quicktime has almost become viral in nature (try installing iTunes by itself), so I just have been ignoring the Infobar.&amp;nbsp; &lt;/p&gt; &lt;p&gt;At first, I thought that maybe StatCounter was at fault.&amp;nbsp; There's a script that tries to collect capabilities about the clients that access my blog, etc (things like what screen resolution they use, what operating system, what processor, whether JavaScript is supported, etc) and I thought that this was just one more of the data points being examined.&lt;/p&gt; &lt;p&gt;As it turns out, it's the "Don't&amp;nbsp;Be Evil" folks [Google] that are trying to install this ActiveX component as part of the AdSense advertisements that I (and the other sites) have displayed on our sites.&lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/AdSense" rel="tag"&gt;AdSense&lt;/a&gt;, &lt;a href="http://technorati.com/tag/QuickTime" rel="tag"&gt;QuickTime&lt;/a&gt;, &lt;a href="http://technorati.com/tag/QuickTimeCheck" rel="tag"&gt;QuickTimeCheck&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/8832633-115565461500902239?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115565461500902239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115565461500902239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115565461500902239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115565461500902239'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/quicktimecheck-scriptable-object.html' title='QuickTimeCheck Scriptable Object'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115564640315046027</id><published>2006-08-15T08:53:00.000-04:00</published><updated>2006-09-06T22:49:04.830-04:00</updated><title type='text'>For Dustin</title><content type='html'>&lt;p&gt;Here you go, &lt;a href="http://www.diditwith.net/"&gt;Dustin&lt;/a&gt;.&amp;nbsp; Hang these on your monitor as you write the next CodeRush feature... ;-)&lt;/p&gt; &lt;p&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/81259708@N00/215931382/"&gt;&lt;img height="174" alt="Jason on the bike 003" src="http://static.flickr.com/66/215931382_472f8a33e2_m.jpg" width="240"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="Photo Sharing" href="http://www.flickr.com/photos/81259708@N00/215931380/"&gt;&lt;img height="180" alt="Jason on the bike 002" src="http://static.flickr.com/93/215931380_7309fc8dcb_m.jpg" width="240"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/Concours" rel="tag"&gt;Concours&lt;/a&gt;, &lt;a href="http://technorati.com/tag/motorcycle" rel="tag"&gt;motorcycle&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/8832633-115564640315046027?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115564640315046027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115564640315046027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115564640315046027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115564640315046027'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/for-dustin.html' title='For Dustin'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115557883358813909</id><published>2006-08-14T14:07:00.000-04:00</published><updated>2006-09-06T22:52:00.443-04:00</updated><title type='text'>Windows Live Writer</title><content type='html'>&lt;p&gt;Oh, the Blogosphere is alive today with the announcement of the beta release of &lt;a href="http://download.microsoft.com/download/f/9/a/f9a19f2d-cec4-4a25-9b0b-eb9655ea7561/Writer.msi" target="_blank"&gt;Windows Live Writer&lt;/a&gt;.&amp;nbsp; This is an offline WYSIWYG blog post editor that was released by Microsoft at a very attractive price: Free.&amp;nbsp; (This is a beta version, but I assume that the final product will also be free).&lt;/p&gt; &lt;p&gt;Like everyone else, I jumped on the bandwagon to try it out.&amp;nbsp; In fact, you're looking at my first "TEST POST" (kind of the "Hello World"-type of&amp;nbsp;post that everyone's been polluting my RSS feeds with).&lt;/p&gt; &lt;p&gt;During setup, it asked me for the URL of my blog, and a username/password to access the blogger interface as.&amp;nbsp; I wasn't really surprised that Blogger.com was one of the supported blogging platforms, but what did surprise me was my first experience of editing a post.&lt;/p&gt; &lt;p&gt;You see, it pulled down my blog template (including embedded stylesheets, etc), and provided a true WYSIWYG experience as I'm editing.&amp;nbsp; For example, here's a screenshot.&amp;nbsp; Notice the blog post title at the top replicated in the same style as my blog's website:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;What's more is that there's a Preview mode that incorporates my full blog template, including other posts:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;And now the real test of its performance: I'm going to paste some code from Visual Studio into the blog post to see what happens:&lt;/p&gt; &lt;hr color="black" size="1"&gt;  &lt;p&gt;double GE = 398600.8; // Earth gravitational constant value&lt;br&gt;double KM_PER_EARTH_RADII = 6378.135; &lt;/p&gt; &lt;p&gt;double KE = Math.Sqrt(3600.0 * GE /&lt;br&gt;(KM_PER_EARTH_RADII * KM_PER_EARTH_RADII * KM_PER_EARTH_RADII));  &lt;p&gt;double NO = tle.RevolutionsPerDay * 2 * Math.PI / 1440.0;  &lt;p&gt;double IO = tle.Inclination * Math.PI / 180.0;&lt;br&gt;double EO = tle.Eccentricity;&lt;br&gt;double WO = tle.ArgumentPerigee * Math.PI / 180.0;&lt;br&gt;double OMEGAO = tle.RightAscension * Math.PI / 180.0;&lt;br&gt;double MO = tle.MeanAnomaly * Math.PI / 180.0;  &lt;hr color="black" size="1"&gt;  &lt;p&gt;Hmm, that was anti-climactic.&amp;nbsp; It just grabbed the plaintext instead of the rich text.&amp;nbsp; (I had to manually put in the &amp;lt;hr&amp;gt; tags that you see rendered as lines above and below the source code...)&amp;nbsp; Oh well.&lt;/p&gt; &lt;p&gt;Now for the things that I don't like:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;It looks like the only option that I have for publishing images from WLW is to use a FTP server somewhere (since Blogger's image hosting service is kind of an add-on to the main blogging interface).&amp;nbsp; I don't have FTP access to an image server, so I'll need to add images after the publish.  &lt;li&gt;The "Insert Map" feature uses Windows Live Local (yeah, duh).&amp;nbsp; However, it also tries to insert a thumbnail image of the map into the blog post, which leads to an error when publishing (see the previous bullet).  &lt;li&gt;Blog posts and drafts are stored locally on your hard drive under My Documents/My Weblog Posts.&amp;nbsp; However, the .wpost file is binary (i.e., uses a Binary Formatter to serialize the post) and cannot be used/modified outside of the scope of WLW.&amp;nbsp; I would have like to seen the ability to Save As html, etc.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;That's it for now.&amp;nbsp; I'm sure that it's only time before we see a lot of cool add-ins, like an Upload to Flickr feature that will solve the problem of image publishing.&amp;nbsp; So far, it seems to be a cool little utility (disclosure: I have not used any other offline editor, like BlogJet, etc, so this is my first experience creating a blog post without using Blogger's web interface).&lt;/p&gt; &lt;p&gt;tags: &lt;a href="http://technorati.com/tag/WLW" rel="tag"&gt;WLW&lt;/a&gt;, &lt;a href="http://technorati.com/tag/Windows+Live+Writer" rel="tag"&gt;Windows Live Writer&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/8832633-115557883358813909?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115557883358813909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115557883358813909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115557883358813909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115557883358813909'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/windows-live-writer.html' title='Windows Live Writer'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115531915207686823</id><published>2006-08-11T11:45:00.000-04:00</published><updated>2006-08-14T09:22:19.443-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>XmlDataSource: XPath Workaround For Default Namespaces</title><content type='html'>Having not worked with the XmlDataSource control in ASP.NET 2.0 until this week, I was surprised to learn that there was no way to force it to use namespace-qualified XPath queries, which are critical for querying XML with a default namespace set (either at the root or for some branch of the tree).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;PRIMER&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;XML is a text-based data format that utilizes the concept of tagging data in order to form a tree structure.  A simple XML document might look like the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;xml&amp;gt;&lt;br /&gt;   &amp;lt;Person name='Jason'&amp;gt;&lt;br /&gt;      &amp;lt;url&amp;gt;http://jasonf-blog.blogspot.com&amp;lt;/url&amp;gt;&lt;br /&gt;   &amp;lt;/Person&amp;gt;&lt;br /&gt;&amp;lt;/xml&amp;gt;&lt;/pre&gt;&lt;i&gt;(Listing 1)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;XPath is a way of specifying which tagged element, or a collection of elements, that you are interested in.  For example, I can query the above XML for the "url" element of the "Person" named "Jason" by using the following:&lt;br /&gt;&lt;br /&gt;/xml/Person[@name='Jason']/url&lt;br /&gt;&lt;br /&gt;Each slash separates the individual elements that are in the path of the nested data.  The square bracket after an element is known as a predicate, and is used to filter the results (i.e., in case there are multiple "Person" elements, this predicate only returns those elements with a "name" attribute containing the value of "Jason").&lt;br /&gt;&lt;br /&gt;As XML became more and more popular, developers started merging data obtained from different XML documents into one.  This led to tag name conflicts, because one XML document might contain a "Person" tag that has a totally different meaning than another XML document's "Person" tag.  The workaround for this situation was to define Namespaces to identify the context of the elements within the XML.  Consider the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;xml&amp;gt;&lt;br /&gt;   &amp;lt;Person name='Jason' xmlns='WebsiteUserNamespace'&amp;gt;&lt;br /&gt;      &amp;lt;url&amp;gt;http://jasonf-blog.blogspot.com&amp;lt;/url&amp;gt;&lt;br /&gt;   &amp;lt;/Person&amp;gt;&lt;br /&gt;   &amp;lt;Person name='Jason' xmlns='UsergroupLeadersNamespace'&amp;gt;&lt;br /&gt;      &amp;lt;url&amp;gt;http://www.nwnug.com&amp;lt;/url&amp;gt;&lt;br /&gt;   &amp;lt;/Person&amp;gt;&lt;br /&gt;&amp;lt;/xml&amp;gt;&lt;/pre&gt;&lt;i&gt;(Listing 2)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;This demonstrates how two nearly identical Person elements can be assigned to different namespaces (implying that they have two different meanings).  The first "Person" element (and all of its child elements) belongs to a namespace called "WebsiteUserNamespace", while the second one belongs to "UsergroupLeadersNamespace".  Another way to write the same data, but make it a little easier to work with, is as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;xml xmlns:a='WebsiteUserNamespace' xmlns:b='UsergroupLeadersNamespace'&amp;gt;&lt;br /&gt;   &amp;lt;a:Person name='Jason'&amp;gt;&lt;br /&gt;      &amp;lt;a:url&amp;gt;http://jasonf-blog.blogspot.com&amp;lt;/a:url&amp;gt;&lt;br /&gt;   &amp;lt;/a:Person&amp;gt;&lt;br /&gt;   &amp;lt;b:Person name='Jason'&amp;gt;&lt;br /&gt;      &amp;lt;b:url&amp;gt;http://www.nwnug.com&amp;lt;/b:url&amp;gt;&lt;br /&gt;   &amp;lt;/b:Person&amp;gt;&lt;br /&gt;&amp;lt;/xml&amp;gt;&lt;/pre&gt;&lt;i&gt;(Listing 3)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Here, we're actually defining aliases that are used as prefixes for the tag names.  In this case, "a" represents the "WebsiteUserNamespace", and "b" represents "UsergroupLeadersNamespace".  Notice that the first "Person" element has all of its tags prefixed with "a" while the second "Person" element is prefixed with "b".  This is what makes Listing 3 equivalent to Listing 2.&lt;br /&gt;&lt;br /&gt;Now, to query for the "url" of the "Person" with a name of "Jason" that belongs to the "UsergroupLeadersNamespace", I would use the following XPath:&lt;br /&gt;&lt;br /&gt;/xml/b:Person[@name='Jason']/b:url&lt;br /&gt;&lt;br /&gt;The reason why I said that using prefixes is easier to work with has to do with the concept of default namespaces.  Notice that the namespace declarations in Listing 2 does not include an alias prefix definition.  This makes every unprefixed element from that branch in the tree a member of that namespace.  It is common for the entire document to have a default namespace set, meaning that every element within the XML belongs to that namespace.&lt;br /&gt;&lt;br /&gt;The problem with unprefixed elements in XML belonging to a namespace is that you cannot construct a XPath query to drill into these elements (because XPath is what requires the prefixes).&lt;br /&gt;&lt;br /&gt;The .NET XML parser solves this problem by allowing you to create a XmlNamespaceManager, and defining a prefix at runtime to represent any particular namespace.  Then, you can evaluate XPath queries using these custom prefixes that do not exist in the XML document so long as you supply the instance of your XmlNamespaceManager object (i.e., as an optional parameter on a SelectSingleNode(), etc).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Back to the Topic&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;Now, what I discovered this week was that the XmlDataSource control in ASP.NET allows you to specify a XML document and an XPath to use in order to return a set of nodes (that can then be bound to a TreeView control, etc).  But, it did not provide any mechanism to allow the developer to pass in a XmlNamespaceManager.  So, if your XML had a default namespace declared, you were pretty much screwed because you could not construct a XPath query.&lt;br /&gt;&lt;br /&gt;Searching the internet found these posts:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.hanselman.com/blog/DoesXmlDataSourceXPathAcceptNamespaceQualifications.aspx" target="_blank"&gt;Hanselman: Does XmlDataSource.XPath accept namespace qualifications?&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.hanselman.com/blog/ASPNET20XmlDataSourcesXPathDoesntSupportNamespaces.aspx" target="_blank"&gt;Hanselman: ASP.NET 2.0 XmlDataSource's XPath doesn't support namespaces&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.geekswithblogs.com/evjen/archive/2005/10/10/56527.aspx" target="_blank"&gt;Evjen: Namespaces and the XmlDataSource Server Control &lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;(I gave up on searching at this point because everything seemed to come to the same conclusion)&lt;br /&gt;&lt;br /&gt;The closest thing to a valid workaround was Bill Evjen (pronounced like the bottled water, Evian) suggesting that you just transform the XML first using XSLT in order to remove the default namespace (XSLT transformation is another feature of the XmlDataSource control).  Then, you can construct a valid XPath query without worrying about prefixes.&lt;br /&gt;&lt;br /&gt;There is an alternative solution that does not require the transform, and allows you to still use namespaces if and when you need to.  It's kind of a head-slapper for those who know XPath.&lt;br /&gt;&lt;br /&gt;Consider the following XPath:&lt;br /&gt;&lt;br /&gt;/xml/*[name()='Person' and namespace-uri()='UsergroupLeadersNamespace' and @name='Jason']/*[name()='url']&lt;br /&gt;&lt;br /&gt;It is a little more complicated, yes, but allows you to work with the original XML as-is.  Here's the magic of how it works (using Listing 2 as a source of data):&lt;br /&gt;&lt;br /&gt;The root "xml" element did not have a default namespace defined, so it can remain in the XPath as is (no prefix).  However, the "Person" element belonging to the "UsergroupLeadersNamespace" needs a prefix in XPath.  Or does it? &lt;br /&gt;&lt;br /&gt;Turns out that if I just use "*" as my second step, then that selects all elements that are children of the root "xml" node.  I can then create a predicate that utilizes the built-in XPath functions of "name()" and "namespace-uri()" in order to match these to the values that I need to use.  &lt;br /&gt;&lt;br /&gt;Finally, because my second step matched the namespace-uri to "UsergroupLeadersNamespace", and I know that in the case of Listing 2, all elements below that point belong to the same namespace, I don't have to continue checking the namespace-uri() value in the predicates of subsequent steps (i.e., I can get away with only checking the name() value).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Bottom line:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/xml/*[name()='Person' and namespace-uri()='UsergroupLeadersNamespace' &lt;br /&gt;and @name='Jason']/*[name()='url' and namespace-uri()='UsergroupLeadersNamespace']&lt;/pre&gt;becomes equivalent to being able to use&lt;br /&gt;&lt;pre&gt;/xml/b:Person[@name='Jason']/b:url&lt;/pre&gt;if you could pass in a XmlNamespaceManager object.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http://jasonf-blog.blogspot.com/2006/08/xmldatasource-xpath-workaround-for.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://jasonf-blog.blogspot.com/2006/08/xmldatasource-xpath-workaround-for.html" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATE 2006-08-14:&lt;/strong&gt; I just wanted to disclose that after Googling a bit more, I found plenty of references to the XPath method described here for querying namespace-qualified XML (just not in the context of the XmlDataSource).  It's still a neat method to keep in mind in case the scenario ever presents itself again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115531915207686823?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115531915207686823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115531915207686823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115531915207686823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115531915207686823'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/xmldatasource-xpath-workaround-for.html' title='XmlDataSource: XPath Workaround For Default Namespaces'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115496585142407118</id><published>2006-08-07T11:50:00.000-04:00</published><updated>2006-08-07T11:50:51.436-04:00</updated><title type='text'>IE7 for Windows Vista: Protected Mode Annoyance</title><content type='html'>I like the fact that IE7 for Windows Vista will have a Protected Mode that it will run in by default for any untrusted security zone.  This is actually very similar to &lt;a href='http://jasonf-blog.blogspot.com/2005/06/sandboxing.html' target='_blank'&gt;something that I blogged about&lt;/a&gt; last year before installing Vista or even IE7.  It just makes sense.&lt;br /&gt;&lt;br /&gt;But, something that doesn't make sense to me at the moment is really hurting the &lt;a href='http://www.acronymfinder.com/acronym.aspx?rec={8E86A388-89E8-11D4-8351-00C04FC2C2BF}' target='_blank'&gt;WAF&lt;/a&gt; of running Vista: it seems that the Protected Mode also affects File Upload capabilities of web sites by limiting what you have access to.&lt;br /&gt;&lt;br /&gt;You see, Tina uses the web-based GMail almost exclusively.  She also does a lot of work in Microsoft Publisher, and often needs to email files to her friends.  These are saved as simple flat files (i.e., TIFF or JPEG).&lt;br /&gt;&lt;br /&gt;But, when she is in GMail, and needs to attach a file, the Open File dialog just shows empty directories.  That is, unless she goes into Internet Options and turns off Protected Mode.&lt;br /&gt;&lt;br /&gt;It very well could be that I just need to change a magic checkbox setting or something.  But, there has to be a balance between running in a protected mode sandbox and allowing access to files for email attachment purposes, etc.&lt;br /&gt;&lt;br /&gt;Has anyone else beta testing Vista come across this same issue?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115496585142407118?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115496585142407118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115496585142407118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115496585142407118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115496585142407118'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/ie7-for-windows-vista-protected-mode.html' title='IE7 for Windows Vista: Protected Mode Annoyance'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115495798274134400</id><published>2006-08-07T08:51:00.000-04:00</published><updated>2006-08-07T09:55:06.196-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>CLR processModel memoryLimit</title><content type='html'>People like &lt;a target='_blank' href='http://codebetter.com/blogs/sam.gentile/default.aspx'&gt;Sam&lt;/a&gt; and &lt;a href='http://www.diditwith.net/' target='_blank'&gt;Dustin&lt;/a&gt; probably like crawling around the CLR Internals and garbage collection (that is, the sewage system that keeps everything clean and running properly).  For me, it's sometimes interesting, but mostly frusterating.  I just want things to work without necessarily knowing why they are working.&lt;br /&gt;&lt;br /&gt;Enter a case that my friend and co-worker (btw, you need a website/blog, Murph) has been trying to research and resolve for a month or two now.&lt;br /&gt;&lt;br /&gt;The client uses Crystal Reports for web-based reporting.  Despite my distaste for CR, this actually isn't the problem, and the reports work just fine for what they need to do.  The problem is more related to the fact that web-based reporting needs to use a postback when paginating through the report.  The reports are based on Datasets, which are retrieved from a web service (for security reasons).  Therefore, in order to prevent querying the database every time the user goes to the next page, the Dataset is cached in the Session.&lt;br /&gt;&lt;br /&gt;Well, some of these reports have huge amounts of data associated with them.  It seems that if too many reports were requested since the last time that the server was bounced, that they would start to get OutOfMemory exceptions.  This, in spite of 3.5GB of RAM on the server.&lt;br /&gt;&lt;br /&gt;My first thought was to move away from In-Proc session management (i.e., try the SQL Server-based model).  That still didn't work.  It was as if garbage collection wasn't doing its job.&lt;br /&gt;&lt;br /&gt;Murph then started messing with the &lt;processModel&gt; setting in machine.config.  By default, there's a memoryLimit="60" setting, which means that when the memory pressure of the ASP.NET worker process reaches a 60% threshhold, that it will start a new process (i.e., recycle itself, which by definition, gets rid of uncollected garbage and frees up physical memory).&lt;br /&gt;&lt;br /&gt;This sounds all well and good.  After all, I like when the system has a failsafe mechanism that cleans up after itself.  But, in this case, there was 3.5GB of RAM:&lt;br /&gt;&lt;br /&gt;3.5GB * 60% = 2.1GB.  If memory usage hits 2.1 GB, then the ASP.NET worker process will recycle itself.&lt;br /&gt;&lt;br /&gt;Only, it seems that by default, .NET only allows 2GB of memory for its processes.  Therefore, before the 2.1GB threshhold was reached, they got the OutOfMemory exception.&lt;br /&gt;&lt;br /&gt;The following was invaluable for helping to resolve the problem:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Source: &lt;a href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenetchapt17.asp'&gt;Improving .NET Application Performance and Scalability - Chapter 17&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Configure the Memory Limit&lt;/strong&gt;&lt;br /&gt;The memory threshold for ASP.NET is determined by the &lt;strong&gt;memoryLimit &lt;/strong&gt;attribute on the &lt;processModel&gt; element in Machine.config. For example:&lt;br /&gt;&lt;br /&gt;&amp;lt;processModel ... memoryLimit="60" .../&amp;gt;&lt;br /&gt;&lt;br /&gt;This value controls the percentage of physical memory that the process is allowed to consume. If the worker process exceeds this value, the worker process is recycled. The default value shown in the code represents 60 percent of the total physical memory installed in your server.&lt;br /&gt;&lt;br /&gt;This setting is critical because it influences the cache scavenging mechanism for ASP.NET and virtual memory paging. For more information, see "Configure the Memory Limit" in Chapter 6, "Improving ASP.NET Performance." The default setting is optimized to minimize paging. If you observe high paging activity (by monitoring the &lt;strong&gt;Memory\Pages/sec &lt;/strong&gt;performance counter) you can increase the default limit, provided that your system has sufficient physical memory.&lt;br /&gt;&lt;br /&gt;The recommended approach for tuning is to measure the total memory consumed by the ASP.NET worker process by measuring the &lt;strong&gt;Process\Private Bytes (aspnet_wp) &lt;/strong&gt;performance counter along with paging activity in System Monitor. If the counter indicates that the memory consumption is nearing the default limit set for the process, it might indicate inefficient cleanup in your application. If you have ensured that the memory is efficiently cleaned but you still need to increase the limit, you should do so only if you have sufficient physical memory.&lt;br /&gt;&lt;br /&gt;This limit is important to adjust when your server has 4 GB or more of RAM. The 60 percent default memory limit means that the worker process is allocated 2.4 GB of RAM, which is larger than the default virtual address space for a process (2 GB). This disparity increases the likelihood of causing an &lt;strong&gt;OutOfMemoryException&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;To avoid this situation on an IIS 5 Web server, you should set the limit to the smaller of 800 MB or 60 percent of physical RAM for .NET Framework 1.0.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;/3GB Switch&lt;/strong&gt;&lt;br /&gt;.NET Framework 1.1 supports a virtual space of 3 GB. If you put a /3GB switch in boot.ini, you can safely use 1,800 MB as an upper bound for the memory limit.&lt;br /&gt;&lt;br /&gt;You should use the /3GB switch with only the following operating systems: &lt;br /&gt;&lt;br /&gt;Microsoft Windows Server™ 2003 &lt;br /&gt;Microsoft Windows 2000 Advanced Server &lt;br /&gt;Microsoft Windows 2000 Datacenter Server &lt;br /&gt;Microsoft Windows NT 4.0 Enterprise Server &lt;br /&gt;You should not use the /3GB switch with the following operating systems: &lt;br /&gt;&lt;br /&gt;Microsoft Windows 2000 Server &lt;br /&gt;Microsoft Windows NT 4.0 Server &lt;br /&gt;Windows 2000 Server and Windows NT 4.0 Server can only allocate 2 GB to user mode programs. If you use the /3GB switch with Windows 2000 Server or Windows NT 4.0 Server, you have 1 GB for kernel and 2 GB for user mode programs, so you lose 1 GB of address space.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;IIS 6&lt;/strong&gt;&lt;br /&gt;For IIS 6 use the &lt;strong&gt;Maximum used memory (in megabytes)&lt;/strong&gt; setting in the Internet Services Manager on the &lt;strong&gt;Recycling &lt;/strong&gt;page to configure the maximum memory that the worker process is allowed to use. As &lt;a href='http://msdn.microsoft.com/library/en-us/dnpag/html/ch17---memory-recycling.gif' target='_blank'&gt;Figure 17.12&lt;/a&gt; shows, the value is in megabytes and is not a percentage of physical RAM.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115495798274134400?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115495798274134400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115495798274134400' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115495798274134400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115495798274134400'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/clr-processmodel-memorylimit.html' title='CLR processModel memoryLimit'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115469163587540794</id><published>2006-08-04T07:40:00.000-04:00</published><updated>2006-08-04T07:40:35.886-04:00</updated><title type='text'>Another NWNUG Blogger</title><content type='html'>I had lunch yesterday with Dustin Campbell from &lt;a href="http://www.devexpress.com/"&gt;Developer Express&lt;/a&gt;, and we talked about the fact that he was perhaps the last technical person in this section of the Milky Way Galaxy to have a blog. Heck, even &lt;a href="http://susanf-blog.blogspot.com/"&gt;my mother has a blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;His boss, &lt;a href="http://doitwith.net/"&gt;Mark Miller&lt;/a&gt;, owns a pretty clever domain name:  Do It With .NET (doitwith.net).  I mentioned to Dustin how funny it would be if "Did It With .NET" was also available.  Well, turns out that it was!&lt;br /&gt;&lt;br /&gt;Immediately after lunch, Dustin jumped at the opportunity and purchased the domain name.  Then he signed up for ASP.NET hosting with &lt;a href="http://www.webstrikesolutions.com/"&gt;Webstrike Solutions&lt;/a&gt;, who we use for &lt;a href="http://www.nwnug.com"&gt;www.nwnug.com&lt;/a&gt; chiefly because the first 12 months of hosting is free.  After a few glitches with their server, I was able to install the latest build of DasBlog (1.9.x), and now he's off and running:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.diditwith.net/"&gt;http://www.diditwith.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dustin is always working at really low levels in the CLR.  I hope that he will start to report little things that he finds, like when Microsoft changes the meaning of certain HRESULT values in their APIs, etc.  He had a good idea for a little behind-the-scenes series on LINQ, too, that he could write about.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115469163587540794?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115469163587540794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115469163587540794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115469163587540794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115469163587540794'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/another-nwnug-blogger.html' title='Another NWNUG Blogger'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115452611755735533</id><published>2006-08-02T09:17:00.000-04:00</published><updated>2006-08-02T09:41:57.660-04:00</updated><title type='text'>Should Companies Pay More For Legacy Development?</title><content type='html'>This week, I scoped out a statement of work for some legacy development: enhancements to a Visual Basic 6.0 application.&lt;br /&gt;&lt;br /&gt;It sounds really weird to call VB6 a legacy platform. But since ~2000, the whole Microsoft Platform paradaigm has shifted away from COM-based development to managed code (.NET). With that, so did the skillset of the developer community as a whole.&lt;br /&gt;&lt;br /&gt;When everyone was regularly doing VB6 development, myself included, it was called a commodity skillset, and therefore, brought in relatively low billrates for consultants (when compared to more cutting edge languages, like Java).  This was just classic supply-and-demand economics.&lt;br /&gt;&lt;br /&gt;That mindset still exists today in my customers. They think, "VB6 is old and, therefore, it should be very simple to work with." With that, there is also an expectation of low billrates to perform the work.  But, is this necessarily true? &lt;br /&gt;&lt;br /&gt;There's now a reverse learning curve involved for me to perform this work: I have to unlearn some .NET syntax in order to write VB6 code, and that directly cuts into my productivity.  Not to mention that I primarily work in C# now.  (But, for disclosure, I still do A LOT of VBScript development since I have to work on classic ASP/ADO web applications for this same customer).&lt;br /&gt;&lt;br /&gt;And that brings me to the title question: Should companies expect to pay more for legacy development, even if the legacy system is less than a decade old?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115452611755735533?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115452611755735533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115452611755735533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115452611755735533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115452611755735533'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/08/should-companies-pay-more-for-legacy.html' title='Should Companies Pay More For Legacy Development?'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115412069203994644</id><published>2006-07-28T16:54:00.000-04:00</published><updated>2006-07-28T17:04:52.146-04:00</updated><title type='text'>20,000 Hits</title><content type='html'>I just checked my stats, and realized that I crossed the 20,000 pageload mark earlier today.  Sure, people like &lt;a href="http://scobleizer.wordpress.com/"&gt;Scoble&lt;/a&gt;, &lt;a href="http://www.hanselman.com/blog/"&gt;Scott&lt;/a&gt;, or &lt;a href="http://frazzleddad.blogspot.com/"&gt;Jim Holmes&lt;/a&gt; probably get this many hits in any one day, but at least my readership is growing!  These website hits are primarily from Google searches.&lt;br /&gt;&lt;br /&gt;Just for fun, the stats about that milestone hit:&lt;br /&gt;&lt;br /&gt;Date/Time: July 28, 2006 3:20:48 AM&lt;br /&gt;&lt;br /&gt;URL: &lt;a href="http://jasonf-blog.blogspot.com/2005/01/gb-pvr-plugin-tutorial-released.html"&gt;http://jasonf-blog.blogspot.com/2005/01/gb-pvr-plugin-tutorial-released.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Referrer:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/search?q=gbpvr" btng="'Search&amp;hs=" hl="en&amp;lr=" client="firefox-a&amp;rls="&gt;http://www.google.com/search?q=gbpvr plugins&amp;amp;btnG=Search&amp;hs=03L&amp;amp;hl=en&amp;lr=&amp;amp;client=firefox-a&amp;rls=org.mozilla%3Aen-US%3Aofficial&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Client: A Penteledata Inc. - Cable user in Lititz, PA (USA) using Firefox 1.5 on Windows XP and a screen resolution of 1280 x 1024.&lt;br /&gt;&lt;br /&gt;(Stats provided by &lt;a href="http://www.statcounter.com/"&gt;StatCounter&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115412069203994644?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115412069203994644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115412069203994644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115412069203994644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115412069203994644'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/07/20000-hits.html' title='20,000 Hits'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115345205270411192</id><published>2006-07-20T23:04:00.000-04:00</published><updated>2006-07-21T09:21:58.306-04:00</updated><title type='text'>Guitar Tabs Are Now Illegal?</title><content type='html'>So I went to one of my favorite &lt;a href="http://www.guitartabs.cc/"&gt;guitar tablature repositories [GuitarTabs.cc]&lt;/a&gt; tonight hoping to continue practicing a song that I've been working on, and discovered that the Fair Use nature of the site is currently in dispute. Now, as a background, the majority of these tabs have been created by people who "reverse engineer" songs and then transcribed their results for public consumption. Some tabs have even been on Usenet since the early 1990's (you can use Google Groups to prove that).&lt;br /&gt;&lt;br /&gt;The search by Song Title and/or Author still works, but individual tabs have been removed from the site (replaced with a 'Download of this file has been disabled' image).&lt;br /&gt;&lt;br /&gt;The note on the &lt;a href="http://www.guitartabs.cc/"&gt;homepage&lt;/a&gt; reads:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;July 17, 2006&lt;br /&gt;&lt;br /&gt;To all "Guitar Tab Universe" visitors:&lt;br /&gt;&lt;br /&gt;The company which owns this website has been indirectly threatened (via our&lt;br /&gt;ISP) with legal action by the National Music Publishers' Association (NMPA) as&lt;br /&gt;well as the Music Publishers' Association (MPA) on the basis that sharing&lt;br /&gt;tablature constitutes copyright infringement. At what point does describing how&lt;br /&gt;one plays a song on guitar become an issue of copyright infringment? This&lt;br /&gt;website, among other things, helps users teach eachother how they play guitar&lt;br /&gt;parts for many different songs. This is the way music teachers have behaved&lt;br /&gt;since the first music was ever created. The difference here is that the&lt;br /&gt;information is shared by way of a new technology: the Internet.&lt;br /&gt;&lt;br /&gt;When you are jamming with a friend and you show him/her the chords for a&lt;br /&gt;song you heard on the radio, is that copyright infringement? What about if you&lt;br /&gt;helped him/her remember the chord progression or riff by writing it down on,&lt;br /&gt;say, a napkin... infringement? If he/she calls you later that night on the phone&lt;br /&gt;or e-mails you and you respond via one of those methods, are you infringing? I&lt;br /&gt;don't know... but I would really like to know. If anyone has information on&lt;br /&gt;this, please email &lt;a href="mailto:support@guitartabs.cc"&gt;support@guitartabs.cc&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Apparently, the NMPA/MPA believes that the Internet may be on the foul side&lt;br /&gt;of the legality line they would like to draw here. For me, I see no difference.&lt;br /&gt;It's teachers educating students and covered as a 'fair use' of the tablature.&lt;br /&gt;The teachers here don't even get paid nor do the students have to pay this&lt;br /&gt;website to access the lessons.&lt;br /&gt;&lt;br /&gt;An attack on this website is really an attack on every one of you who have&lt;br /&gt;told someone (in person, or via the written word, telephone, or e-mail) how you&lt;br /&gt;play a song on guitar. And who, especially among small websites, has the deep&lt;br /&gt;pockets to fight the NMPA/MPA? They use scare tactics while there is, in fact,&lt;br /&gt;no legal precedent on this matter (to the best of our knowledge). If you are&lt;br /&gt;interested in expressing your opinion to the NMPA/MPA, contact them via their&lt;br /&gt;respective websites. Please do not resort to vulgar language or insults.&lt;br /&gt;&lt;br /&gt;Millions of people use the Internet to learn guitar, in one form or&lt;br /&gt;another. It appears the NMPA/MPA and their members do not want to support us and&lt;br /&gt;help us further our education. To you visitors from outside the USA or UK, can&lt;br /&gt;you find your favorite artists' "official sheet music" at your local music&lt;br /&gt;store? Even in the United States and United Kingdom, we often can not. The&lt;br /&gt;NMPA/MPA have a choice to make: either they support us as aspiring guitarists,&lt;br /&gt;or they choose to alienate their customer base. To date, not one sheet music&lt;br /&gt;publisher has contacted this website to either inquire as to our activities or&lt;br /&gt;to express interest in any type of dialogue or collaboration whatsoever. All we&lt;br /&gt;deserve is a cold, indirect, impersonal threat without any explanation? They&lt;br /&gt;should embrace new technologies or else become relics of the old economy.&lt;br /&gt;&lt;br /&gt;Since I'm now 'worried' about working around tabs at all, I'm in a tough&lt;br /&gt;situation! Luckily, I'm fairly confident that if I alone listen to a song and&lt;br /&gt;then figure out how to play it by ear, I will then be able to enjoy using that&lt;br /&gt;knowledge to practice and improve my guitar playing skills. Is that what is&lt;br /&gt;necessary for everyone to do? Work these things out alone? What a sad situation.&lt;br /&gt;&lt;br /&gt;Sincerely,&lt;br /&gt;&lt;br /&gt;Rob Balch&lt;br /&gt;Manager of "Guitar Tab Universe"&lt;br /&gt;&lt;br /&gt;If you would like to help out and join the effort to fight for our freedom&lt;br /&gt;to tab and share, please check out &lt;a href="http://www.guitarzone.com/musato/"&gt;MuSATO&lt;/a&gt;. You can comment on this&lt;br /&gt;statement and/or situation &lt;a href="http://www.guitarzone.com/forum/index.php?showtopic=163367"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115345205270411192?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115345205270411192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115345205270411192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115345205270411192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115345205270411192'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/07/guitar-tabs-are-now-illegal.html' title='Guitar Tabs Are Now Illegal?'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115331352615267218</id><published>2006-07-19T08:42:00.000-04:00</published><updated>2006-07-19T08:54:21.106-04:00</updated><title type='text'>New Air Filter Does Wonders</title><content type='html'>Of everything that I replaced on the motorcycle, I let the air filter go.  It's not a part that you can just pick up at the local auto parts store, so it has to be mail ordered, and I just never got around to it.  Besides, the one that came with the bike looked clean enough to me!&lt;br /&gt;&lt;br /&gt;Well, on Friday, I decided to finally clean the filter (which uses a reusable foam element).  As soon as I applied any pressure to the foam with my fingers, it just crumbled!  Uh, oh!&lt;br /&gt;&lt;br /&gt;That motivated me to order a new one (cheap replacement, nothing fancy), which arrived last night.  I oiled it and installed it this morning, and then rode into work.  &lt;br /&gt;&lt;br /&gt;WOW! What a difference that made.  I could instantly tell that the engine sounded different, I got even more horsepower (which there was already more than I was ever used to), and the idle smoothed out.  The new filter even fixed a flat spot/stutter in the revs between 2000 and 3500 RPMs!  It's like I have a totally different bike, just by installing a $20 part.&lt;br /&gt;&lt;br /&gt;Now the only remaining defect is something that developed about 200 miles ago: leaky fork oil seals.  I guess I didn't polish up the forks well enough, and the light rust/pitting that was present was enough to roughen the seal.  They're leaky now, but due to how involved the repair is, I will likely wait until after the riding season.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115331352615267218?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115331352615267218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115331352615267218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115331352615267218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115331352615267218'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/07/new-air-filter-does-wonders.html' title='New Air Filter Does Wonders'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115320127987050793</id><published>2006-07-18T01:29:00.000-04:00</published><updated>2006-07-18T01:41:19.983-04:00</updated><title type='text'>My IM</title><content type='html'>I regularly use a half-dozen different email addresses, so it's not obvious to people which ones are tied to some form of instant messaging.  Well, do not fret any longer: if you need to IM me (or if you just want me in your contact list), here's what you can try:&lt;br /&gt;&lt;br /&gt;Windows Live Messenger (MSN): firstname nospace lastname at hotmail dot com&lt;br /&gt;Yahoo: firstinitial nospace lastname &lt;br /&gt;&lt;br /&gt;BTW: With the new Windows Live Messenger client, there's a new XBOX tab that will show your XBox Friends (if you're using the same "passport" for IM that you use for your XBox ID).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115320127987050793?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115320127987050793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115320127987050793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115320127987050793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115320127987050793'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/07/my-im.html' title='My IM'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115318632414275330</id><published>2006-07-17T20:56:00.000-04:00</published><updated>2006-07-18T01:27:18.406-04:00</updated><title type='text'>Don't Forget Those Domain Accounts</title><content type='html'>I got a call today stating that one of the reporting servers at my client's location was down (SQL Server 2000 Reporting Services).  We haven't touched anything on that machine for a few days, so I was pretty sure that it wasn't anything with the server itself.&lt;br /&gt;&lt;br /&gt;When I finally arrived onsite, I opened a web browser to the URL: http://server/reports&lt;br /&gt;&lt;br /&gt;The response was simply a generic "Server Application Unavailable" message.  Ok, time to troubleshoot.&lt;br /&gt;&lt;br /&gt;I first looked at the Application Event Log.  There was a message logged, but didn't tell me anything special:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;aspnet_wp.exe could not be started. The error code for the failure is 80004005. This error can be caused when the worker process account has insufficient rights to read the .NET Framework files. Please ensure that the .NET Framework is correctly installed and that the ACLs on the installation directory allow access to the configured account. &lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Ok, so it did tell me that the problem likely involved the worker account.  Now, normally, the ASP.NET worker account is the ASPNET user on Windows XP and the NETWORK SERVICE account on Windows 2003.  However, just to make sure, I took a peek at the Machine.config file, and discovered that in this case, my client changed the ASP.NET worker account to a domain account instead.  It was a good thing that I double checked: there's nothing worse than spinning your wheels trying to fix a problem using the wrong user ID.&lt;br /&gt;&lt;br /&gt;Out of curiosity, I also took a peek at the Security Event Log since the client has auditing enabled on all of their servers.  I found some failures logged:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Logon Failure:&lt;br /&gt;  Reason:  Account currently disabled&lt;br /&gt;  User Name: someuser&lt;br /&gt;  Domain:  somedomain&lt;br /&gt;  Logon Type: 8&lt;br /&gt;  Logon Process: Advapi  &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Wouldn't you know it: the same domain account that was specified as the ASP.NET worker account (SOMEDOMAIN\SomeUser in this case) was disabled, per this Login Failure event message.  Well, that would explain why the ASP.NET process could not start!&lt;br /&gt;&lt;br /&gt;In this enterprise, domain accounts are set to automatically disable after a set time period.  This is done in order to help prevent an unused account from remaining active, and potentially becoming a security exploit.  There is normally a process to renew an account before it becomes inactive, but sometimes, one will slip through the process, as happened this time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115318632414275330?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115318632414275330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115318632414275330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115318632414275330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115318632414275330'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/07/dont-forget-those-domain-accounts.html' title='Don&apos;t Forget Those Domain Accounts'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115261670127120152</id><published>2006-07-11T07:10:00.000-04:00</published><updated>2006-08-02T11:42:04.330-04:00</updated><title type='text'>Upcoming Book: Windows Developer Power Tools</title><content type='html'>&lt;a href="http://frazzleddad.blogspot.com"&gt;Jim Holmes&lt;/a&gt; just announced the project that he and &lt;a href="http://dotavery.com/blog/"&gt;James Avery&lt;/a&gt; have been collaborating on. It's going to be one monster of a &lt;strike&gt;boat anchor&lt;/strike&gt; book (1100 pages) all about tools that Windows Developers can use to make their work easier (think something along the lines of &lt;a href="http://www.hanselman.com/blog/ScottHanselmans2005UltimateDeveloperAndPowerUsersToolList.aspx"&gt;Scott Hanselman's Ultimate Tools list&lt;/a&gt;, but with a detailed article about each tool).&lt;br /&gt;&lt;br /&gt;Check out Jim's announcement:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://frazzleddad.blogspot.com/2006/07/announcing-our-book-windows-developer.html"&gt;http://frazzleddad.blogspot.com/2006/07/announcing-our-book-windows-developer.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Disclosure: As a Tech Reviewer, I've gotten to see early drafts of the chapters that they have completed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATE 2006-08-02: &lt;/strong&gt;I see that Amazon is taking pre-orders.  Reserve your copy today! (link below)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/redirect.html?link_code=ur2&amp;tag=aviewinsidmyh-20&amp;camp=1789&amp;creative=9325&amp;location=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F0596527543%2Fsr%3D8-16%2Fqid%3D1154532821%2Fref%3Dsr_1_16%3Fie%3DUTF8"&gt;Windows Developer Power Tools: Turbocharge Windows Development with More Than 140 Free and Open Source Tools (Paperback) &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115261670127120152?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://frazzleddad.blogspot.com/2006/07/announcing-our-book-windows-developer.html' title='Upcoming Book: Windows Developer Power Tools'/><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115261670127120152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115261670127120152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115261670127120152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115261670127120152'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/07/upcoming-book-windows-developer-power.html' title='Upcoming Book: Windows Developer Power Tools'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8832633.post-115230438504936469</id><published>2006-07-07T16:18:00.000-04:00</published><updated>2006-07-07T16:51:18.276-04:00</updated><title type='text'>Defining Web 2.0 to a Layman</title><content type='html'>Somebody asked me the other day what the term "Web 2.0" meant.  This is a topic that has been debated to death on the blogosphere, since there is no standard or official definition.  (Think of this post as being my contribution to that old debate).&lt;br /&gt;&lt;br /&gt;Some people will say "It's the next generation of the World Wide Web", but that doesn't tell me anything.  I mean, how do you distinguish Web 1.0 content currently on the web from Web 2.0 stuff?  For instance, I would consider Google Maps as a Web 2.0 application, while Mapquest is a Web 1.0 site.  The distinguishing factor to me: the level of interactivity within the user interface that does not require a complete postback.&lt;br /&gt;&lt;br /&gt;Wikipedia has an entry discussing Web 2.0 here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Web_2.0" target="_blank"&gt;http://en.wikipedia.org/wiki/Web_2.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After thinking for a while, I simply told this person that Web 2.0 refers to thick-client functionality that is built using thin-client technologies.  IOW, it's a Winforms-level of application running within a web browser.&lt;br /&gt;&lt;br /&gt;This isn't a perfect definition, but it did get the point across in this case.  Are there any better/more concise definitions available?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8832633-115230438504936469?l=jasonf-blog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jasonf-blog.blogspot.com/feeds/115230438504936469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8832633&amp;postID=115230438504936469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115230438504936469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8832633/posts/default/115230438504936469'/><link rel='alternate' type='text/html' href='http://jasonf-blog.blogspot.com/2006/07/defining-web-20-to-layman.html' title='Defining Web 2.0 to a Layman'/><author><name>Jason Follas</name><uri>http://www.blogger.com/profile/13563117620977192046</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
