<?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-10438017</id><updated>2012-01-03T10:13:17.870-06:00</updated><category term='logging'/><category term='log4net'/><category term='CLFS'/><category term='Imaginet'/><category term='IOC'/><category term='System.IO.Log'/><category term='.NET'/><category term='WebCasts'/><title type='text'>Miscellaneous Jibberish</title><subtitle type='html'>Talking about anything and everything that I find interesting and worth commenting on.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>59</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10438017.post-3398396051195472361</id><published>2011-08-04T19:13:00.000-05:00</published><updated>2011-08-04T19:13:32.862-05:00</updated><title type='text'>Moving</title><content type='html'>I've decided to move my blog over to WordPress.&lt;br /&gt;&lt;br /&gt;You can now find all my old posts plus any future posts here: &lt;a href="http://jeremywiebe.wordpress.com/"&gt;http://jeremywiebe.wordpress.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-3398396051195472361?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://jeremywiebe.wordpress.com' title='Moving'/><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/3398396051195472361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=3398396051195472361' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/3398396051195472361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/3398396051195472361'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2011/08/moving.html' title='Moving'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-1381024291924578079</id><published>2011-06-16T20:31:00.003-05:00</published><updated>2011-06-16T21:13:25.347-05:00</updated><title type='text'>Knockout.js - cleaning up the client-side</title><content type='html'>I've started a new project with a client and it's quite a shift for me.  Coming off a heavy client (WinForms), 3-year project I'm now working in ASP.NET MVC and javascript.  One of my goals with regards to the architecture was to keep a handle on the javascript.  The project is integrating with the &lt;a href="http://help.arcgis.com/en/webapi/javascript/arcgis/index.html"&gt;ESRI ArcGIS Javascript API&lt;/a&gt; and so there will be lots of client-side javascript and it will be important to keep it organized and maintainable. &lt;br /&gt;&lt;br /&gt;In looking around for javascript libraries to help with this I found &lt;a href="http://knockoutjs.com"&gt;Knockout.js&lt;/a&gt;.  This is a library for building larger-scale web applications that use javascript more heavily.&lt;br /&gt;&lt;br /&gt;Knockout works by extending the properties of your javascript models (basically a POJO... Plain Old Javascript Object).  You can then bind your model to the view (HTML elements) by marking up the HTML elements using "knockout bindings" (there are quite a few to choose from and they're listed here).  Basically a knockout binding is a way to bind a property on your model to a specific attribute of an HTML element.  There are quite a few that come built into Knockout (including things like text, visible, css, click, etc).&lt;br /&gt;&lt;br /&gt;Once you've got the view marked up you simply call &lt;pre&gt;ko.applyBindings(model);&lt;/pre&gt;and Knockout takes it the rest of the way.  &lt;br /&gt;&lt;br /&gt;Let's walk through a simple example as that'll make things more clear (I'm going to use the same Login UI example as Derick Bailey used for his first &lt;a href="http://lostechies.com/derickbailey/2011/06/14/intro-to-backbone-js-how-a-winforms-developer-is-at-home-in-javascript/"&gt;Backbone.js post&lt;/a&gt; so it's a bit easier to compare apples-to-apples... hopefully). &lt;br /&gt;&lt;br /&gt;The layout is very similar to a Backbone view except that in a Knockout view you add extra 'data-bind' attributes.  &lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1030646.js?file=3-SimpleLoginForm.html"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Notice the 'data-bind' attributes in the markup.  These dictate how knockout will bind the model we provide to the UI.  Let's move on to the model now.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1030646.js?file=4-LoginView.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;This is very close to being a simple javascript object.  The only trick is that any property that we want to bind to the UI should be initialized via the ko.observable() method.  The value we pass to the ko.observable() will become the property's underlying value.  &lt;br /&gt;&lt;br /&gt;Once we've instantiated a model object we simply call ko.applyBindings() and Knockout does the rest.  (Note that the second parameter is the HTML element that should be the root of the binding.  It is optional if you are only binding one object to your page, but I think in almost any application you'll get to a point where you want to bind multiple objects so this shows how to do that.)&lt;br /&gt;&lt;br /&gt;At this point Knockout will keep the UI and model in sync as we manipulate it.  This is full 2-way binding for the text elements.  So if the user types in the username field, the model's username property is updated.  If we update the model's username property the UI will be updated as well.  &lt;br /&gt;&lt;br /&gt;Derick noted in his blog post the mixing of jQuery and Backbone.js.  I'm doing some of that here, but I think Knockout.js doesn't need jQuery as much because of how the binding is declared (on the HTML elements themselves).  &lt;br /&gt;&lt;br /&gt;I'm going to try to follow Derick's excellent series of posts on Backbone.js and comment on how the subjects he discusses compare and contrast with Knockout.js.  &lt;br /&gt;&lt;br /&gt;In the end I think both are very capable libraries even if they come at the problem from slightly different angles.  In the end it's all about better organization of javascript and better assignment of responsibilities in the javascript you write.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-1381024291924578079?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/1381024291924578079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=1381024291924578079' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1381024291924578079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1381024291924578079'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2011/06/knockoutjs-cleaning-up-client-side.html' title='Knockout.js - cleaning up the client-side'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-5446110596289908159</id><published>2011-04-21T22:50:00.002-05:00</published><updated>2011-04-22T08:22:11.648-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Getting Started with AutoTest.Net</title><content type='html'>&lt;p&gt;I recently came across a new tool called &lt;a href="https://github.com/acken/AutoTest.Net"&gt;AutoTest.Net&lt;/a&gt;.&amp;nbsp; This is a great tool if you are a TDD/BDD practitioner.&amp;nbsp; Basically AutoTest.Net can sit in the background and watch your source tree.&amp;nbsp; Whenever you make changes to a file and save it, AutoTest will build your solution and run all unit tests that it finds.&amp;nbsp; When it has run the tests it will display the failed tests in the AutoTest window (there is also a console runner if you are a hardcore console user).&amp;nbsp; &lt;/p&gt;&lt;p&gt;This takes away some of the friction that comes with unit testing because now you don’t have to do the step of build and run tests during development.&amp;nbsp; Simply write a test and save.&amp;nbsp; AutoTest runs your tests and you see a failed test.&amp;nbsp; Now implement the code that should make the test and save again.&amp;nbsp; AutoTest again detects the change and does a build and test run.&amp;nbsp; This cycle becomes automatic quite quickly and I’m finding I really like not having to explicitly build and run tests.&amp;nbsp; &lt;/p&gt;&lt;h1&gt;Features&lt;/h1&gt;&lt;p&gt;AutoTest.Net sports a nice set of features.&amp;nbsp; You can see the full list of features on the &lt;a href="https://github.com/acken/AutoTest.Net"&gt;main GitHub repo page&lt;/a&gt; (scroll down) but here’s a few.&amp;nbsp; It supports multiple test frameworks including MSTest, NUnit, MSpec, and XUnit.net (I believe other frameworks can be supported by writing a plugin).&amp;nbsp; It can also monitor your project in two different ways.&amp;nbsp; One is by watching for changes to all files in your project (ie. watching the source files).&amp;nbsp; The other is by watching only assemblies.&amp;nbsp; Using this second method it would only run tests when you recompile your code manually.&amp;nbsp; I’m not sure where this would be preferred but I might find a use for it yet. &lt;/p&gt;&lt;p&gt;&lt;em&gt;Edit: Svein (the author of AutoTest.Net) commented that one other compelling feature is Growl/Snarl support.  If you have either one installed you can get test pass/fail notifications through Growl/Snarl, which means you don't have to flip back to the AutoTest window to check that status of your code.  Nice!&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;This leads me to one other feature that I missed and that is that AutoTest.Net is cross-platform.  It currently supports both the Microsoft .NET framework as well as Mono.  This means you can develop on OS X or Linux.&lt;/em&gt;&lt;/p&gt;&lt;h1&gt;Getting AutoTest.Net&lt;/h1&gt;&lt;p&gt;So, to get started, download AutoTest.Net from GitHub.&amp;nbsp; The easiest way is to click the “Downloads” link on the main AutoTest.Net project page and click one of the AutoTest zipfile links (at this time AutoTest.Net-v1.1.zip is the latest).&amp;nbsp; &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_sQkTLzlM-aE/TbD7GznmgiI/AAAAAAAAAOM/uWNBKfhcbG4/s1600-h/AutoTest.Net%20Download%5B4%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="AutoTest.Net Download" border="0" alt="AutoTest.Net Download" src="http://lh6.ggpht.com/_sQkTLzlM-aE/TbD7HUX4oZI/AAAAAAAAAOQ/aCHHDIYsNOY/AutoTest.Net%20Download_thumb%5B2%5D.png?imgmax=800" width="466" height="175"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Once downloaded, unzip to a directory that you’ll run it from.&amp;nbsp; I’ve put it in my “utilities” directory.&amp;nbsp; At this point you can start using AutoTest.Net by running &lt;em&gt;AutoTest.WinForms.exe&lt;/em&gt; or &lt;em&gt;AutoTest.Console.exe&lt;/em&gt;.&amp;nbsp; If you run the WinForms version, AutoTest will start by asking you what directory you’d like to monitor for changes.&amp;nbsp; Typically you would select the root directory of your .Net solution (where your .sln file resides).&amp;nbsp; Once you’ve selected a directory and clicked OK, you’re ready to start development.&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_sQkTLzlM-aE/TbD7HrkocZI/AAAAAAAAAOU/0E53Kg2imsg/s1600-h/image%5B5%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_sQkTLzlM-aE/TbD7H2O9aLI/AAAAAAAAAOY/PYfIoMuwI1M/image_thumb%5B1%5D.png?imgmax=800" width="244" height="90"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The screenshot above is the main AutoTest.Net window.&amp;nbsp; You can see that it ran 1 build and executed a total of 13 unit tests.&amp;nbsp; The neat thing is that now as I continue to work, all I need to do to cause AutoTest.Net to recompile and re-run all tests is to make a code change and save the file.&amp;nbsp; This sounds like a small change in the regular flow of code, save, build, run tests.&amp;nbsp; However, once I worked with AutoTest.Net for a while it started to feel very natural and going back to the old flow will feel like adding friction.&lt;/p&gt;&lt;h1&gt;Configuration&lt;/h1&gt;&lt;p&gt;Alright, so we have AutoTest.Net running and that’s good.&amp;nbsp; As with most tools, it comes with a config file, &lt;em&gt;AutoTest.config&lt;/em&gt; (which is shared between the WinForms and Console apps).&amp;nbsp; This config file is well-documented so for the most part you can just open it up and figure out what knobs you can adjust.&lt;/p&gt;&lt;h3&gt;Overriding Options&lt;/h3&gt;&lt;p&gt;One nice feature that AutoTest.Net has is that you can have a base configuration in the directory where the AutoTest binaries reside but then override it by dropping an AutoTest.config file in the root directory that you are monitoring.&amp;nbsp; This allows you to keep a sensible base config in your AutoTest application directory and then override per-project as needed.&amp;nbsp; Typically I’ve been setting the “watch” directory as the directory that my .sln file is in and so you’d drop the AutoTest.config file in the same directory as the .sln file.&amp;nbsp; &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_sQkTLzlM-aE/TbD7IJBQ16I/AAAAAAAAAOc/jeVDEiERjKA/s1600-h/image%5B8%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_sQkTLzlM-aE/TbD7Ii7JwWI/AAAAAAAAAOg/YFqc23Nv6Aw/image_thumb%5B2%5D.png?imgmax=800"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;In the above screenshot I have the AutoTest.config file which overrides a few settings, one of which is the ignore file: &lt;em&gt;_ignorefile.txt&lt;/em&gt;.&amp;nbsp; &lt;/p&gt;&lt;h3&gt;IgnoreFile Option&lt;/h3&gt;&lt;p&gt;One option that is useful is called the &lt;em&gt;IgnoreFile&lt;/em&gt;.&amp;nbsp; This is well-documented in the config file but it didn’t click with me initially.&amp;nbsp; The &lt;em&gt;IgnoreFile&lt;/em&gt; option specifies a file that contains a list of files and folders that AutoTest.Net should ignore when monitoring the configured directories for changes.&amp;nbsp; The config file mentions the .gitignore file as an similar example so if you are familiar with git, it should make sense.&amp;nbsp; The one piece that took me a while to figure out was &lt;u&gt;where&lt;/u&gt; this ignore file should go.&amp;nbsp; I finally figured out that if you put it in the root of the monitored directory (ie. beside your .sln file), it will pick it up (see above screenshot).&amp;nbsp; &lt;/p&gt;&lt;h1&gt;Wrapping up&lt;/h1&gt;&lt;p&gt;AutoTest.Net is a great tool to help with the Red, Green, Refactor flow.&amp;nbsp; It removes some of the friction in my day-to-day work by eliminating the need to manually invoke a compile and test run.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Lastly, the observant readers will have noticed that I said it builds and runs all tests any time it notices a file change.&amp;nbsp; Greg Young is working on a tool called Mighty Moose that builds on top of AutoTest.Net as an add-in to Visual Studio (I think there’s a standalone version too).&amp;nbsp; Mighty Moose ups the ante by figuring out what code changed and what tests would be affected by that change.&amp;nbsp; It then only runs the affected tests, significantly cutting down the test run time.&amp;nbsp; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-5446110596289908159?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/5446110596289908159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=5446110596289908159' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/5446110596289908159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/5446110596289908159'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2011/04/getting-started-with-autotestnet.html' title='Getting Started with AutoTest.Net'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_sQkTLzlM-aE/TbD7HUX4oZI/AAAAAAAAAOQ/aCHHDIYsNOY/s72-c/AutoTest.Net%20Download_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-711138998585539599</id><published>2011-01-04T18:56:00.001-06:00</published><updated>2011-01-04T18:56:39.646-06:00</updated><title type='text'>Querying XML Columns in SQL Server 2008</title><content type='html'>&lt;p&gt;We make use of XML columns in a few places on our current project.&amp;#160; XML columns are great for storing “blobs” of data when you want to be able to change the schema of the stored data without having to make database changes (it also provides flexibility in what you store in that column).&lt;/p&gt;  &lt;p&gt;Occasionally, we need to query based on parts of the XML in these columns.&amp;#160; Now because these are XML columns it’s not quite as easy to query on parts of the column as an int or nvarchar column.&amp;#160; This is further complicated when the XML being stored uses namespaces.&amp;#160; &lt;/p&gt;  &lt;p&gt;Let’s start with the following table:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_sQkTLzlM-aE/TSPBxDNBhqI/AAAAAAAAANk/xGdmopb-dR4/s1600-h/customer_table%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="customer_table" border="0" alt="customer_table" src="http://lh3.ggpht.com/_sQkTLzlM-aE/TSPBxlmFATI/AAAAAAAAANo/l0-XNNfnJS0/customer_table_thumb%5B1%5D.png?imgmax=800" width="358" height="181" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And here’s a sample of the XML stored in the column:&lt;/p&gt;  &lt;pre class="brush: xml;"&gt;&amp;lt;CustomerInfo xmlns=http://schemas.datacontract.org/2004/07/Sample.Dto&lt;br /&gt;              xmlns:i=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;              xmlns:d=&amp;quot;http://custom.domain.example.org/Addresses&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;FirstName&amp;gt;Jeremy&amp;lt;/FirstName&amp;gt;&lt;br /&gt;    &amp;lt;LastName&amp;gt;Wiebe&amp;lt;/LastName&amp;gt;&lt;br /&gt;    &amp;lt;d:Address&amp;gt;&lt;br /&gt;        &amp;lt;d:AddressId&amp;gt;82FC06FA-46A9-47CA-81AA-A0B968BCEE49&amp;lt;/d:AddressId&amp;gt;&lt;br /&gt;        &amp;lt;d:Line1&amp;gt;123 Main Street&amp;lt;/d:Line1&amp;gt;&lt;br /&gt;        &amp;lt;d:City&amp;gt;Toronto&amp;lt;/d:City&amp;gt;&lt;br /&gt;    &amp;lt;/d:Address&amp;gt;&lt;br /&gt;&amp;lt;/CustomerInfo&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now we could query for this row in the table by first name using the following query:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml;"&gt;WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema-instance' as i, &lt;br /&gt;                    'http://schemas.datacontract.org/2004/07/Sample.Dto' as s,&lt;br /&gt;                    'http://custom.domain.example.org/Addresses' as d)&lt;br /&gt;select CustomerInfo.value('(/s:CustomerInfo/s:FirstName)[1]', 'nvarchar(max)') as FirstName,&lt;br /&gt;       CustomerInfo.value('(/s:CustomerInfo/s:LastName)[1]', 'nvarchar(max)') as LastName,&lt;br /&gt;       CustomerInfo.value('(/s:CustomerInfo/d:Address/d:City)[1]', 'nvarchar(max)') as City,&lt;br /&gt;from Customer&lt;br /&gt;where &lt;br /&gt;    MessageXml.value('(/s:CustomerInfo/d:Address/d:AddressId)[1]', 'nvarchar(max)') = '82FC06FA-46A9-47CA-81AA-A0B968BCEE49'&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This would list out the FirstName, LastName, and City for any row where the AddressId was ‘82FC06FA-46A9-47CA-81AA-A0B968BCEE49’. There are a two things to note:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Namespaces&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Any time you query XML (in any language/platform) that include XML your query must take that into account.&amp;#160; In T-SQL, you define namespaces and their prefixes using the WITH XMLNAMESPACES statement.&amp;#160; This statement defines the namespace prefix and associated namespace URI.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Once you’ve defined them, you can use the namespace prefix in your XPath queries so that you can properly identify the XML elements you want.&amp;#160; One final note about namespaces here is that we have to define a namespace prefix for the namespace that was the default namespace in the XML sample.&amp;#160; As far as I know there’s no way to define a default XML namespace using the WITH XMLNAMESPACES statement.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;XPath Query results&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Notice that the XPath queries (the CustomerInfo.value() calls) always index into the results to get the first item in the result.&amp;#160; The .value() function always returns an array of matching XML nodes, so if you only want the first (which is often the case, you need to index into the results.&amp;#160; Also note that with these XPath queries, the results are a 1-based array, not 0-based.&amp;#160; So in this example we’re always taking the first element in the result set.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;There are other functions you can use to query XML columns in T-SQL and you can find out more about this in the Books Online or via MSDN.&amp;#160;&amp;#160; This page is a good starting point for querying XML columns: &lt;a href="http://msdn.microsoft.com/en-us/library/ms189075.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms189075.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/10438017-711138998585539599?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/711138998585539599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=711138998585539599' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/711138998585539599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/711138998585539599'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2011/01/querying-xml-columns-in-sql-server-2008.html' title='Querying XML Columns in SQL Server 2008'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_sQkTLzlM-aE/TSPBxlmFATI/AAAAAAAAANo/l0-XNNfnJS0/s72-c/customer_table_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-680422090986989465</id><published>2009-09-03T08:22:00.001-05:00</published><updated>2009-09-03T08:24:58.054-05:00</updated><title type='text'>Uncovering intermittent test failures using VS Load Tests</title><content type='html'>&lt;p&gt;Our team build has been flaky lately with several unit tests that fail intermittently (and most often only on the build server).&amp;#160; I was getting fed up with a build that was broken most of the time so I decided to see if I could figure out why the tests fail.&lt;/p&gt;  &lt;p&gt;Working on the premise that the intermittent failure was either multiple tests stepping on each other’s toes or timing related.&amp;#160; I decided the easier one to figure out would be the timing issue.&amp;#160; &lt;/p&gt;  &lt;p&gt;To create a new load test:&lt;/p&gt;  &lt;p&gt;1) Select “Test –&amp;gt; New Test” and select “Load Test” from the “Add New Test” dialog&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_sQkTLzlM-aE/Sp_C0nIQscI/AAAAAAAAAI0/S2eTsdEmdIE/s1600-h/AddNewTest2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Add New Test" border="0" alt="Add New Test" src="http://lh4.ggpht.com/_sQkTLzlM-aE/Sp_C1A00TrI/AAAAAAAAAI4/-p0ZrzdnUZQ/AddNewTest_thumb.png?imgmax=800" width="244" height="203" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;2) You will be presented with a Wizard that will help you build a load test.&amp;#160; I don’t know what each setting means, but for the most part I left the settings at their defaults.&amp;#160; I’ve noted the exceptions below.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#cceedd"&gt;a) Welcome&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_sQkTLzlM-aE/Sp_C2SXWtxI/AAAAAAAAAI8/Mob_FHKZchg/s1600-h/NewLoadTestWizardWelcome5.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="New Load Test Wizard - Welcome" border="0" alt="New Load Test Wizard - Welcome" src="http://lh3.ggpht.com/_sQkTLzlM-aE/Sp_C2-lIM1I/AAAAAAAAAJA/57Vrrd_ix_Y/NewLoadTestWizardWelcome_thumb1.png?imgmax=800" width="244" height="148" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;font color="#cceedd"&gt;b) Scenario&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_sQkTLzlM-aE/Sp_C3zyIG8I/AAAAAAAAAJE/xscoD-Uwx6o/s1600-h/NewLoadTestWizardScenario2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="New Load Test Wizard - Scenario" border="0" alt="New Load Test Wizard - Scenario" src="http://lh5.ggpht.com/_sQkTLzlM-aE/Sp_C4fpQh7I/AAAAAAAAAJI/yzUW5RV_StY/NewLoadTestWizardScenario_thumb.png?imgmax=800" width="244" height="148" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;font color="#cceedd"&gt;c) Load Pattern&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_sQkTLzlM-aE/Sp_C5fWz27I/AAAAAAAAAJM/y-5xfw310Ls/s1600-h/NewLoadTestWizardScenarioLoadPattern%5B1%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="New Load Test Wizard - Scenario - Load Pattern" border="0" alt="New Load Test Wizard - Scenario - Load Pattern" src="http://lh4.ggpht.com/_sQkTLzlM-aE/Sp_C5z7lSFI/AAAAAAAAAJQ/VE5mJ0Xh3oI/NewLoadTestWizardScenarioLoadPattern.png?imgmax=800" width="244" height="148" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;font color="#cceedd"&gt;d) Test Mix Model&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_sQkTLzlM-aE/Sp_C7T_07jI/AAAAAAAAAJU/t0ag69qVmbM/s1600-h/NewLoadTestWizardScenarioTestMixMode%5B2%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="New Load Test Wizard - Scenario - Test Mix Model" border="0" alt="New Load Test Wizard - Scenario - Test Mix Model" src="http://lh4.ggpht.com/_sQkTLzlM-aE/Sp_C72rxM8I/AAAAAAAAAJY/Kcf_utxvYEY/NewLoadTestWizardScenarioTestMixMode%5B1%5D.png?imgmax=800" width="244" height="148" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;font color="#cceedd"&gt;e) Test Mix&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#cceedd"&gt;The Test Mix step allows you to select which tests should be included in the load test.&amp;#160; For my purposes, I selected the single test that was failing intermittently.&amp;#160; If you select multiple tests this step allows you to manage the distribution of each test within the load.&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_sQkTLzlM-aE/Sp_C8hiOvpI/AAAAAAAAAJc/g_ShQT-mWBg/s1600-h/NewLoadTestWizardScenarioTestMix2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="New Load Test Wizard - Scenario - Test Mix" border="0" alt="New Load Test Wizard - Scenario - Test Mix" src="http://lh3.ggpht.com/_sQkTLzlM-aE/Sp_C9KTPA-I/AAAAAAAAAJg/ytNVE4KQ55c/NewLoadTestWizardScenarioTestMix_thu.png?imgmax=800" width="244" height="148" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;font color="#cceedd"&gt;f) Counter Sets&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_sQkTLzlM-aE/Sp_C-N42FNI/AAAAAAAAAJk/9H-EcVyZKSo/s1600-h/NewLoadTestWizardCounterSets2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="New Load Test Wizard - Counter Sets" border="0" alt="New Load Test Wizard - Counter Sets" src="http://lh5.ggpht.com/_sQkTLzlM-aE/Sp_C-vcbFHI/AAAAAAAAAJo/Z9--Ei3VxAg/NewLoadTestWizardCounterSets_thumb.png?imgmax=800" width="244" height="148" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;font color="#cceedd"&gt;g) Run Settings&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#cceedd"&gt;Finally, you are able to manage the Warm up duration and Run duration.&amp;#160; Warm up duration is used to “warm up” the environment.&amp;#160; During this time the load test controller simply runs the tests but does not include their results in the load test.&amp;#160; The Run duration represents how long the load test controller will run the mix of tests selected in the “Test Mix” step.&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_sQkTLzlM-aE/Sp_C_lOMfOI/AAAAAAAAAJs/Xi1JT9OnVPs/s1600-h/NewLoadTestWizardRunSettings2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="New Load Test Wizard - Run Settings" border="0" alt="New Load Test Wizard - Run Settings" src="http://lh4.ggpht.com/_sQkTLzlM-aE/Sp_C_9jpv4I/AAAAAAAAAJw/44WnGx3f6-4/NewLoadTestWizardRunSettings_thumb.png?imgmax=800" width="244" height="148" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Once you click Finish, you will be presented with a view of the load test you’ve just created.&amp;#160; You can now click on the “Run test” button to execute the load test.&amp;#160; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Gotcha: The first time I tried to do a load test it complained that it couldn’t connect to the database.&amp;#160; You can resolve this by running the following SQL script and then going into Visual Studio and selecting &lt;u&gt;T&lt;/u&gt;est –&amp;gt; Administer Test Controllers…&amp;#160; This will bring up the following dialog.&amp;#160; &lt;/p&gt;   &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_sQkTLzlM-aE/Sp_DAmWrqgI/AAAAAAAAAJ0/0cYtDOvq600/s1600-h/Administer%20Test%20Controllers%5B2%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Administer Test Controllers" border="0" alt="Administer Test Controllers" src="http://lh6.ggpht.com/_sQkTLzlM-aE/Sp_DBMMCyjI/AAAAAAAAAJ4/Hc_HBEPin4E/Administer%20Test%20Controllers_thumb.png?imgmax=800" width="244" height="188" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;   &lt;p&gt;The only thing you need to configure in this dialog is the database connection (the script will create a database called “LoadTest”) so in my case the connection string looked like this:&lt;/p&gt;    &lt;pre&gt;Data Source=(local);Initial Catalog=LoadTest;Integrated Security=True&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now that you have the load test created, you are ready to run it.&amp;#160; Click the “Run test” button on the load test window (shown below).&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_sQkTLzlM-aE/Sp_DBoAPOsI/AAAAAAAAAJ8/Z7_Tf_iMxVQ/s1600-h/Load%20Test%20-%20Ready%20to%20Run%5B7%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Load Test - Ready to Run" border="0" alt="Load Test - Ready to Run" src="http://lh3.ggpht.com/_sQkTLzlM-aE/Sp_DCFqnT4I/AAAAAAAAAKA/rKvi1_2NUPU/Load%20Test%20-%20Ready%20to%20Run_thumb%5B7%5D.png?imgmax=800" width="244" height="178" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;While the load test is running, Visual Studio will show you 4 graphs that give you information about the current test run.&amp;#160; You can play with the option checkboxes to show/hide different metrics.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In my case, as the load test ran the unit test I’d selected started to fail.&amp;#160; This at least showed me that I could reproduce the failure on my local machine now.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Next I added a bit of code to the unit test prior to the assertion that was failing.&amp;#160; Instead of doing the assertion I added code to check for the failure condition and called Debugger.Break().&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I ran the test again, but this time as I hit the Debugger.Break calls I could step through the code very well because the load test was running 25 simultaneous threads (simulating 25 users).&amp;#160; I dug around a bit and found that you can change the number of simultaneous users.&amp;#160; You can adjust the setting by selecting the “Constant Load Pattern” node and adjusting the “Constant User Count” in the Properties window.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I ran the test again and this time I was able to debug the test and figure out what was wrong.&amp;#160; &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Overall using the load test tool in Visual Studio was quite easy to set up and get going.&amp;#160; Other than the requirement of a database (which is used to store the load test results) it was very easy to set up.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-680422090986989465?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/680422090986989465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=680422090986989465' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/680422090986989465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/680422090986989465'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2009/09/uncovering-intermittent-test-failures.html' title='Uncovering intermittent test failures using VS Load Tests'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_sQkTLzlM-aE/Sp_C1A00TrI/AAAAAAAAAI4/-p0ZrzdnUZQ/s72-c/AddNewTest_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-5272179107824984890</id><published>2009-08-26T16:39:00.004-05:00</published><updated>2009-11-30T16:20:49.506-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='IOC'/><title type='text'>Lessons learned using an IoC Container</title><content type='html'>&lt;p&gt;I am working on my first project that’s using an IoC container heavily.&amp;#160; Overall it’s been a very positive experience.&amp;#160; However, we have learned some things have caused us pain in testing, bug fixing, and general code maintenance.&lt;/p&gt;&lt;h2&gt;Separate component registration from application start-up&lt;/h2&gt;&lt;p&gt;This is a constant source of problem on our project.&amp;#160; If you don’t separate component registration from your component start-up path you often run into a chicken-and-egg problem.&amp;#160; You may be resolving a component that depends on other components that haven’t yet been registered.&amp;#160; This makes for a very brittle start-up path that is prone to breakage as you add dependencies to your components.&amp;#160; Now the container that is supposed to decouple things is causing you to micromanage your component registration and start-up.&amp;#160;&lt;/p&gt;&lt;p&gt;The solution is to split registration from component start-up.&amp;#160; This makes perfect sense to me now, but wasn’t so obvious when we started the project.&amp;#160; Lesson learned!&lt;/p&gt;&lt;h2&gt;Be careful with a global service locator&lt;/h2&gt;&lt;p&gt;We went quite a while without using a global service locator (essentially a singleton instance of the container) but eventually found that we needed it.&amp;#160; This might have been avoided with better design-fu but we couldn’t think of a better alternative at the time.&amp;#160; &lt;/p&gt;&lt;p&gt;What we found was that the global container made things difficult to test.&amp;#160; This became especially painful when we needed to push mock objects into our container and than manually clean up the registrations to replace them with the production components that other tests might expect.&amp;#160; I’d be interested in hearing if you have a way to solve this problem, and if so, how.&lt;/p&gt;&lt;h2&gt;Use a Full-Featured Container&lt;/h2&gt;&lt;p&gt;When we started the project we had intended to use Enterprise Library for some features.&amp;#160; EntLib has Unity integration so we settled on using Unity as our IoC container by default.&amp;#160; The container itself has served us extremely well.&amp;#160; What we’ve found lacking in the container though is it’s supporting infrastructure features.&amp;#160; A container like StructureMap comes with alot of nice features that aren’t core IoC features.&amp;#160; For example, it reduces the “ceremony” (as &lt;a href="http://codebetter.com/blogs/jeremy.miller/"&gt;Jeremy D. Miller&lt;/a&gt; would say) of registering components by providing convention-based component registration.&amp;#160; StructureMap also provides detailed diagnostics that help you figure out what’s wrong with your component registrations if things don’t work.&lt;/p&gt;&lt;p&gt;That summarizes the biggest points that we’ve learned so far.&amp;#160; I’d be interested to hear some “gotchas” that you’ve learned from using an IoC container “in anger”.&amp;#160; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-5272179107824984890?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/5272179107824984890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=5272179107824984890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/5272179107824984890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/5272179107824984890'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2009/08/lessons-learned-using-ioc-container.html' title='Lessons learned using an IoC Container'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-3762288566582208068</id><published>2009-08-10T21:40:00.000-05:00</published><updated>2009-08-15T13:14:28.251-05:00</updated><title type='text'>An Introduction to StructureMap</title><content type='html'>&lt;p&gt;Over the next several months I will be presenting a walkthrough of &lt;a href="http://structuremap.sourceforge.net/Default.htm"&gt;StructureMap&lt;/a&gt;.&amp;#160; I will be starting with the basics of how to construct objects using StructureMap and then move on to more advanced topics.&amp;#160; &lt;/p&gt;  &lt;p&gt;I know there is lots of great &lt;a href="http://www.dimecasts.net/Casts/ByTag/StructureMap"&gt;information&lt;/a&gt; out there around how to use &lt;a href="http://structuremap.sourceforge.net/Default.htm"&gt;StructureMap&lt;/a&gt;.&amp;#160; My intention for writing this series is mostly selfish.&amp;#160; I want to learn StructureMap, and as I learn it I'll be blogging the features I'm learning as I go.&amp;#160; &lt;/p&gt;  &lt;p&gt;I’m currently working on a project that uses the Unity dependency injection container.&amp;#160; This container has worked very well for us, but as I’ve read various blogs and articles I’ve come to realize that a good DI container provides more than just DI.&amp;#160; It’s my intention to learn the basic usage of StructureMap, but also dig into the more advanced usages as well as much of it’s support infrastructure that helps you keep your dependency injection code to a minimum (thinking of auto-wiring, convention-based registration, etc).&lt;/p&gt;  &lt;p&gt;I’ll also be updating this post as I write each new article so that this post can remain as a table of contents for the whole series.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Manual component registration and resolution&lt;/li&gt;    &lt;li&gt;Auto-wiring components&lt;/li&gt;    &lt;li&gt;Convention-based registration&lt;/li&gt;    &lt;li&gt;Component lifetime management&lt;/li&gt; &lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-3762288566582208068?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/3762288566582208068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=3762288566582208068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/3762288566582208068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/3762288566582208068'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2009/08/introduction-to-structuremap.html' title='An Introduction to StructureMap'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-184525858129504392</id><published>2009-08-03T21:32:00.001-05:00</published><updated>2009-08-03T21:32:57.418-05:00</updated><title type='text'>Beware Calculations in Unit Tests</title><content type='html'>&lt;p&gt;Today our project’s continuous integration build failed.&amp;#160; I traced it down to a unit test that was exercising a scheduling class.&amp;#160; The class takes a schedule and figures out the next time it should run based on the current date.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now in our project we’ve provided a way to stub the current date or current time by having a SystemClock class that has a static Instance property.&amp;#160; If we need to we can push a stubbed instance into that property in a unit test to control what the current date/time is.&lt;/p&gt;  &lt;p&gt;The problem in the unit test was that it was relying on DateTime.Now and then figuring out what the expected next scheduled time should be right in the unit test.&amp;#160; The calculations were wrong in the unit test and caused the unit test to fail.&lt;/p&gt;  &lt;p&gt;Almost every time I see calculations in unit tests to figure out what the expected value should be (especially date-based calculations) I cringe because I see those as unit tests waiting to fail.&amp;#160; If you’ve copied your calculations from the class under test, who says you got the calculations right in the production class?&amp;#160; If you did the calculations differently, your unit test’s calculations could be wrong.&amp;#160; Wherever possible I prefer to keep the moving parts to a minimum and have constant dates as my expected values in date-based unit tests.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-184525858129504392?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/184525858129504392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=184525858129504392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/184525858129504392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/184525858129504392'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2009/08/beware-calculations-in-unit-tests.html' title='Beware Calculations in Unit Tests'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-3902939698107236981</id><published>2009-05-22T16:02:00.001-05:00</published><updated>2009-05-22T16:02:28.365-05:00</updated><title type='text'>ReSharper 4.5 - Tip #2 - Generate Members</title><content type='html'>One of the other developers on the team I'm on pointed out a very handy feature in R# yesterday.  It is the "Generate Members" feature and can be accessed using Ctrl+Ins.  This handy tool is like a central point to accessing the generation features in R#.  The nice thing is that the generated members are placed at the current location and you can generate as many members as you like in one shot.  This makes doing things like wrapping a bunch of private fields really easy.  So, the next time you are using Alt+Enter (Quick Fix) to generate some code using R#, consider using Alt+Ins and see what it can do.  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-3902939698107236981?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/3902939698107236981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=3902939698107236981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/3902939698107236981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/3902939698107236981'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2009/05/resharper-45-tip-2-generate-members.html' title='ReSharper 4.5 - Tip #2 - Generate Members'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-1134313913083115145</id><published>2009-05-06T11:21:00.002-05:00</published><updated>2009-05-06T11:23:10.376-05:00</updated><title type='text'>ReSharper 4.5 - Tip #1 - Wildcards in Go To Type shortcut</title><content type='html'>&lt;p&gt;I tend to use the Go To Type shortcut in R# alot (&lt;strong&gt;ctrl+N&lt;/strong&gt; for you keyboard junkies).  It was only recently that I found out that you can use simple wildcards when using the shortcut.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sQkTLzlM-aE/SgG5Rv7nabI/AAAAAAAAAIo/i3GLcOFZmNI/s1600-h/ReSharper+-+Go+To+Type+Wildcards.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 141px;" src="http://1.bp.blogspot.com/_sQkTLzlM-aE/SgG5Rv7nabI/AAAAAAAAAIo/i3GLcOFZmNI/s400/ReSharper+-+Go+To+Type+Wildcards.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5332747148358805938" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In the above screenshot you can see that I'm looking for all classes that start with "Pet" and end with "View".  I don't use this feature every time I want to jump to a type, but often I can't remember the exact name of a class but I'll know pieces of the name and this helps in those cases (it's especially helpful when I just know how the class name ends, eg. "*Presenter").&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-1134313913083115145?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/1134313913083115145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=1134313913083115145' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1134313913083115145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1134313913083115145'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2009/05/resharper-45-tip-1-wildcards-in-go-to.html' title='ReSharper 4.5 - Tip #1 - Wildcards in Go To Type shortcut'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sQkTLzlM-aE/SgG5Rv7nabI/AAAAAAAAAIo/i3GLcOFZmNI/s72-c/ReSharper+-+Go+To+Type+Wildcards.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-2513020471851700139</id><published>2009-04-15T10:59:00.001-05:00</published><updated>2009-04-15T10:59:20.033-05:00</updated><title type='text'>Build steps in Team Build</title><content type='html'>This is mostly for my own sake, but here's a link to the list of targets that are run during a Team Build on TFS 2008.    &lt;a href="http://msdn.microsoft.com/en-us/library/aa337604.aspx"&gt;Customizable Team Foundation Build Targets&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-2513020471851700139?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/2513020471851700139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=2513020471851700139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/2513020471851700139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/2513020471851700139'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2009/04/build-steps-in-team-build.html' title='Build steps in Team Build'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-4708605117983769548</id><published>2009-02-03T08:47:00.002-06:00</published><updated>2009-02-03T08:51:05.398-06:00</updated><title type='text'>Visual Studio Team System - The option that I've been missing all these years (Filter by Solution)</title><content type='html'>&lt;p&gt;I've been using Team System for a number of years, and one thing that was frustrating was that the Pending Changes window showed all files in the current workspace.  This becomes unmanageable when you have several projects sharing a workspace (whether that's "best practice" is irrelevant).&lt;/P&gt; &lt;p&gt;Today I happened upon the option that I've been thinking should exist but could never find: Filter by Solution.&lt;/p&gt;  &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sQkTLzlM-aE/SYhZwEQ_pNI/AAAAAAAAAIg/3OZpklpq_kg/s1600-h/FilterBySolution.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 70px;" src="http://2.bp.blogspot.com/_sQkTLzlM-aE/SYhZwEQ_pNI/AAAAAAAAAIg/3OZpklpq_kg/s400/FilterBySolution.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5298583643915003090" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-4708605117983769548?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/4708605117983769548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=4708605117983769548' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/4708605117983769548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/4708605117983769548'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2009/02/visual-studio-team-system-option-that-i.html' title='Visual Studio Team System - The option that I&amp;#39;ve been missing all these years (Filter by Solution)'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sQkTLzlM-aE/SYhZwEQ_pNI/AAAAAAAAAIg/3OZpklpq_kg/s72-c/FilterBySolution.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-5466086199322260431</id><published>2009-01-23T09:39:00.001-06:00</published><updated>2009-01-23T09:39:27.547-06:00</updated><title type='text'>Consistency in APIs</title><content type='html'>&lt;p&gt;One thing that I feel is very important when building APIs is consistency in how method parameters are ordered. Abrams and Cwalina's Framework Design Guidelines talks about this as well.&lt;/p&gt; &lt;p&gt;I came across one instance of inconsistency that is a good example, I think. We're using MSTest for unit testing on our current project and so we make extensive use of it's &amp;quot;Assert&amp;quot; class. For most of the assertions that do a comparison between and expected and actual object, you pass the expected object first. For example: &lt;/p&gt;&lt;pre&gt;Assert.AreEqual(Of T)(expected as T, actual as T)&lt;/pre&gt; or &lt;pre&gt;Assert.AreSame(expected as Object, actual as Object)&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;And now we come to the exception.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;Assert.IsInstanceOfType(value as Object, expectedType as System.Type)&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;When using the assertion for IsInstanceOfType, suddenly it takes the actual object in the first position.  This becomes annoying because now I have to remember if I put the actual or expected object first every time I use an assertion method.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Additionally, they've also named the expected object parameter "value" instead of "expected".&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So, when building APIs even if you are not planning on publishing them for devs outside of your project, remember to be consistent with parameter ordering and naming.  It helps with discovery and adoption of the API.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-5466086199322260431?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/5466086199322260431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=5466086199322260431' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/5466086199322260431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/5466086199322260431'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2009/01/consistency-in-apis.html' title='Consistency in APIs'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-3125030351476393885</id><published>2009-01-05T12:56:00.001-06:00</published><updated>2009-01-05T12:56:55.559-06:00</updated><title type='text'>Splitting PDFs</title><content type='html'>&lt;p&gt;Today I needed to split up a PDF and went looking for a tool that would do that for me.&amp;#160; I came across the project named PDF Toolkit (&lt;a title="http://www.accesspdf.com/pdftk/" href="http://www.accesspdf.com/pdftk/"&gt;http://www.accesspdf.com/pdftk/&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;Using this tool I executed the following command and, voila, I had one PDF document for each page in my input document:&lt;/p&gt;  &lt;pre&gt;pdftk.exe input_file.pdf burst&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Check the included .txt file for the full set of command-line parameters.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-3125030351476393885?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/3125030351476393885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=3125030351476393885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/3125030351476393885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/3125030351476393885'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2009/01/splitting-pdfs.html' title='Splitting PDFs'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-4314746440270388003</id><published>2008-11-14T21:28:00.001-06:00</published><updated>2008-11-15T09:07:10.205-06:00</updated><title type='text'>WCF service blocking when self-hosting (or How The ServiceBehavior's UseSynchronizationContext parameter saved me)</title><content type='html'>&lt;style type="text/css"&gt;&lt;br /&gt;&lt;br /&gt;  .code { border: 1px solid #ccc; list-style-type: decimal-leading-zero; padding: 2px; margin: 0; }&lt;br /&gt;  .code code { display: block; padding: 2px; margin-bottom: 0; }&lt;br /&gt;  .code li { margin: 0 0 2px 2.2em; }&lt;/style&gt; &lt;p&gt;Today I was working on a feature in our application that uses WCF.&amp;#160; We wanted to make it possible to run the service piece in-process or as a service with minimal changes.&amp;#160; This is quite easy with WCF using the ServiceModelEx library from the iDesign crew.&amp;#160; Simply reference the ServiceModelEx.dll and wherever you'd normally create your WCF client proxy, just use the following code instead:&lt;/p&gt;  &lt;ol class="code"&gt;   &lt;li&gt;&lt;code&gt;Dim channel = InProcFactory.CreateInstance(Of TServiceImpl, TServiceInterface)()&lt;/code&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;However, when I ran this code the first call on the client proxy hung and timed out.&amp;#160; I started digging into why it was timing out.&amp;#160; Eventually I remembered reading about WCF's ability to use a SynchronizationContext with the ServiceBehaviorAttribute.&amp;#160; Essentially WCF will use a SynchronizationContext to manage some of the threading issues that arise from writing a WCF service and/or client.&amp;#160; (See more &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.usesynchronizationcontext.aspx"&gt;here&lt;/a&gt;).&amp;#160; It gets even better when you are hosting a WCF service within a Windows Forms application.&amp;#160; In that case the WCF service will grab the WinForm SynchronizationContext that manages threading of the UI thread.&lt;/p&gt;  &lt;p&gt;It turns out that was exactly my problem.&amp;#160; Using the InProcFactory (which uses the Named Pipe binding to host the service implementation in the same process as the client) my service was being hosted in my WinForms application.&amp;#160; This caused the default WCF behaviour of attaching to the UI thread's SynchronizationContext to occur.&amp;#160; When I called my WCF service, the service blocked because the WCF client proxy was invoked from the UI.&amp;#160; When the timeout occurred and the client-side had finished with the UI thread, the service happily proceeded to execute (which was far too late at this point).&lt;/p&gt;  &lt;h2&gt;The Solution&lt;/h2&gt;  &lt;p&gt;The solution turns out to be extremely easy.&amp;#160; The ServiceBehaviorAttribute can be applied to your WCF service implementation.&amp;#160; One of the parameters to that is &amp;quot;UseSynchronizationContext&amp;quot;.&amp;#160; Set that to false on your service and the service will create it's own SynchronizationContext and your client will no longer block when hosting the service in process.&lt;/p&gt;  &lt;ol class="code"&gt;   &lt;li&gt;&lt;code&gt;ServiceBehavior(ConcurrencyMode:=ConcurrencyMode.Reentrant, UseSynchronizationContext:=False)&amp;gt; _ &lt;/code&gt;&lt;/li&gt;    &lt;li&gt;&lt;code&gt;Public Class MyService&lt;/code&gt; &lt;/li&gt;    &lt;li&gt;&lt;code&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Implements IMyService &lt;/code&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-4314746440270388003?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/4314746440270388003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=4314746440270388003' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/4314746440270388003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/4314746440270388003'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/11/wcf-service-blocking-when-self-hosting.html' title='WCF service blocking when self-hosting (or How The ServiceBehavior&amp;#39;s UseSynchronizationContext parameter saved me)'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-1630876555242733410</id><published>2008-09-19T10:22:00.001-05:00</published><updated>2008-09-19T10:22:50.833-05:00</updated><title type='text'>VB.NET and default values</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;A reminder for myself more than anything.&lt;br/&gt;&lt;br/&gt;In VB.NET 'Nothing' can be used as the default value for &lt;u&gt;any&lt;/u&gt; type.  This is the equivalent to 'default(T)' in C#.  &lt;br/&gt;&lt;br/&gt;This is especially handy when creating generic methods where you want to return the default value for the generic type.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-1630876555242733410?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/1630876555242733410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=1630876555242733410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1630876555242733410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1630876555242733410'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/09/vbnet-and-default-values.html' title='VB.NET and default values'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-5449023702517343065</id><published>2008-08-22T09:15:00.002-05:00</published><updated>2008-08-22T09:19:24.337-05:00</updated><title type='text'>UI Design - What am I moving?</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Here's a UI design snafu that I came across today in Vista.&lt;br/&gt;&lt;br/&gt;&lt;img src='http://lh4.ggpht.com/jeremy.wiebe/SK7KiJeRhvI/AAAAAAAAAHs/6sqHQadD9Dg/%5BUNSET%5D.jpg' alt='Vista &amp;quot;Move&amp;quot; dialog'/&gt;&lt;br/&gt;&lt;br/&gt;Can you tell me what the name of the folder I'm moving is?  This isn't a big deal for a single move, but when you have a couple of these windows open and you are wanting to cancel one, how do you know which one to cancel.   It would have been nice if the title bar or banner said "Preparing to move 'SomeFolder'".   &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-5449023702517343065?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/5449023702517343065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=5449023702517343065' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/5449023702517343065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/5449023702517343065'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/08/ui-design-what-am-i-moving.html' title='UI Design - What am I moving?'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/jeremy.wiebe/SK7KiJeRhvI/AAAAAAAAAHs/6sqHQadD9Dg/s72-c/%5BUNSET%5D.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-5944817383815774474</id><published>2008-08-01T14:11:00.001-05:00</published><updated>2008-08-01T14:11:53.888-05:00</updated><title type='text'>Informative Podcasts</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Over the past 6 months I've started listening to podcasts during my commute to and from work.  I've included a list of podcasts that I listen to.  If you have others that you find useful/interesting, feel free to post them in the comments.  I'll update this list as time goes by as I find new ones of if somebody points one out in a comment.&lt;br/&gt;&lt;br/&gt;&lt;ul&gt;&lt;li&gt;&lt;a href='http://www.dotnetrocks.com/'&gt;.NET Rocks&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.hanselminutes.com'&gt;Hanselminutes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.pragprog.com/podcasts'&gt;Pragmatic Podcast&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://altnetpodcast.com/'&gt;ALT.NET Podcast&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://twit.tv/FLOSS'&gt;FLOSS Weekly&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.se-radio.net/'&gt;Software Engineering Radio&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-5944817383815774474?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/5944817383815774474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=5944817383815774474' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/5944817383815774474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/5944817383815774474'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/08/informative-podcasts.html' title='Informative Podcasts'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-4435391160813675684</id><published>2008-06-18T12:30:00.001-05:00</published><updated>2008-06-25T12:30:19.953-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Imaginet'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Imaginet Webcast - Dependency Injection with StructureMap</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I did a webcast today on StructureMap and Dependency Injection.  Overall it went ok (except that I forgot to turn on the audio part of LiveMeeting for the first few minutes and had to restart).  I've clipped that from the video so you won't have to watch me walk through slides without audio.&lt;br/&gt;&lt;br/&gt;You can grab the content using the following links:&lt;br/&gt;&lt;br/&gt;&lt;em&gt;Edit (June 25, 2008) - I've uploaded the presentation finally.  Note that for the first few minutes I didn't have my audio on.  I restarted once I figured that out.  It's a bit raw, but after several attempts to re-encode the presentation I decided to give up and just publish it.  &lt;/em&gt;&lt;br/&gt;&lt;ul&gt;&lt;li&gt;&lt;a href='http://cid-bee4e799a20afc34.skydrive.live.com/self.aspx/Public/Dependency%20Injection%20with%20StructureMap.pptx'&gt;Slide deck&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://cid-bee4e799a20afc34.skydrive.live.com/self.aspx/Public/Dependency%20Injection%20with%20StructureMap.Code.zip'&gt;Sample Code&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://cid-bee4e799a20afc34.skydrive.live.com/self.aspx/Public/Dependancy%20Injection%20with%20StructureMap.Presentation.zip'&gt;Webcast Video&lt;/a&gt; &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;If you have any questions feel free to post them in a comment to this post.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-4435391160813675684?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/4435391160813675684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=4435391160813675684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/4435391160813675684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/4435391160813675684'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/06/imaginet-webcast-dependency-injection.html' title='Imaginet Webcast - Dependency Injection with StructureMap'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-118783234955533988</id><published>2008-05-15T09:23:00.001-05:00</published><updated>2008-05-15T09:23:03.497-05:00</updated><title type='text'>IE7Pro - Don't run IE without it.</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;If you are an avid Internet Explorer user, one add-in that I'd highly recommend is &lt;a href='http://www.ie7pro.com/'&gt;IE7Pro&lt;/a&gt;!&lt;br/&gt;&lt;br/&gt;This add-in brings a number of great features to the table including:&lt;br/&gt;    - Ad blocking&lt;br/&gt;    - Spell checking&lt;br/&gt;    - Inline search (This is the same search implementation as FireFox has and after using this the popup search will seem so annying!)&lt;br/&gt;    - A whole bunch more!&lt;br/&gt;&lt;br/&gt;Do yourself a favour and check it out.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-118783234955533988?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/118783234955533988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=118783234955533988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/118783234955533988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/118783234955533988'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/05/ie7pro-don-run-ie-without-it.html' title='IE7Pro - Don&amp;#39;t run IE without it.'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-8674166553818944737</id><published>2008-05-12T21:24:00.001-05:00</published><updated>2008-05-12T21:24:10.551-05:00</updated><title type='text'>Imaginet Webcast Series (part II)</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Joel has just &lt;a href='http://weblogs.asp.net/jsemeniuk/archive/2008/05/12/free-webcast-on-process-template-customization-and-more.aspx'&gt;posted&lt;/a&gt; all the details about &lt;a href='http://www.imaginets.com'&gt;Imaginet's&lt;/a&gt; free webcast series.&lt;br/&gt;&lt;br/&gt;There's lots of great content in this series so feel free to take in whatever interests you.&lt;br/&gt;&lt;br/&gt;We'll be recording these webcasts and making them available for you to watch whenever you want.  As we finish each webcast we'll post the archived URL and "show notes".  &lt;br/&gt;&lt;br/&gt;Stay tuned for more info.  &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-8674166553818944737?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/8674166553818944737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=8674166553818944737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/8674166553818944737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/8674166553818944737'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/05/imaginet-webcast-series-part-ii.html' title='Imaginet Webcast Series (part II)'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-9133208644700158859</id><published>2008-05-08T08:44:00.001-05:00</published><updated>2008-05-08T08:44:48.567-05:00</updated><title type='text'>XUnit.Net's [Fact] and [Theory] attributes</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Following a &lt;a href='http://codebaboon.blogspot.com/2008/05/fact-vs-test.html'&gt;debate&lt;/a&gt; with &lt;a href='http://codebaboon.blogspot.com/'&gt;Dave&lt;/a&gt; yesterday I got to thinking (it's a rare event, and I like to revel in it when it happens).  There may be technical reasons why you have to use [Fact] for a "regular" unit test (oh, I know it's not a unit test, it's a specification, humour me) and [Theory] for "data driven" tests.  But from a usage point of view, why should I care if it's data driven or not?   Wouldn't it be nice if the test runner would be able to identify a parameterless method and say "hey, this must be a regular unit test".  Also,if the method has parameters it could be smart enough to say "hmm... this must be a data driven test.  Do I have any data available?".  If the developer hasn't provided any data, then the test, I mean spec, fails.  &lt;br/&gt;&lt;br/&gt;I think I fall on Dave's side of the argument that this feels like changing somewhat standardized terminology just for the sake of being different (or maybe it's trendy to keep up with the Ruby folks?).  &lt;br/&gt;&lt;br/&gt;What do you think, dear reader?&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-9133208644700158859?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/9133208644700158859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=9133208644700158859' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/9133208644700158859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/9133208644700158859'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/05/xunitnet-fact-and-theory-attributes.html' title='XUnit.Net&amp;#39;s [Fact] and [Theory] attributes'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-4755618071371927247</id><published>2008-05-06T12:42:00.001-05:00</published><updated>2008-05-06T12:42:33.532-05:00</updated><title type='text'>Resetting the Administrator password on Windows Server 2003</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;At my &lt;a href='http://www.imaginets.com'&gt;work&lt;/a&gt; we use Microsoft Virtual PC quite extensively.  One of the "fun" things about this is that you end up collecting alot of passwords.  Normally I just have a text file in the same directory as my virtual images that reminds me what the Administrator password is. &lt;br/&gt;&lt;br/&gt;Today I booted an image and could not remember the password.  I started Googling and found a few solutions.  I finally found one that was able to blank out the Administrator password.  The project is called &lt;a href='http://trinityhome.org'&gt;Trinity Rescue Kit&lt;/a&gt;.  It is a bootable Linux ISO image.  Once it boots you simply execute "winpass" and follow the prompts.  It gave me some scary warnings saying that the filesystem was in use (because I wasn't able to shut down the image cleanly because I couldn't log in) and because something called SYSKEY was enabled.  I forced a mount of the filesystem and that turned out fine.  I also choose the default option for the SYSKEY question (which left it enabled) and that in the end I can now log into the VPC.  &lt;br/&gt;&lt;br/&gt;Hurray for Trinity Rescue Kit!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-4755618071371927247?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/4755618071371927247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=4755618071371927247' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/4755618071371927247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/4755618071371927247'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/05/resetting-administrator-password-on.html' title='Resetting the Administrator password on Windows Server 2003'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-2434595241706303000</id><published>2008-05-02T16:26:00.002-05:00</published><updated>2008-05-03T17:09:11.529-05:00</updated><title type='text'>Setting sort order in Windows Live Messenger History</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I use &lt;a href='http://messenger.live.com'&gt;Windows Live Messenger&lt;/a&gt; quite a bit (for personal and work use actually).  I find that it's annoying that when I view the message history for a contact that it's sorted with the oldest messages at the top.  Most often I'm interested in the newest messages when I go to view message history.  Today I decided to change that.&lt;br/&gt;&lt;br/&gt;First some background.  Windows Live Messenger stores each contact's message history as an XML file in "My Documents" (or "Documents" if you are on Vista) within a folder named "My Received Files\[msnid]00000\History"  (where [msnid] is your Live Messenger id and the 0's are some number that changes).  Within this folder there is also a file named MessageLog.xsl.  This file is used when viewing the message history to format the XML files in a nice format (using an XSL transform).&lt;br/&gt;&lt;br/&gt;It turns out that it's very easy to change the ordering of the message history.  Within MessageLog.xsl there are several parameters (at the top of the file) that control the layout of the history view.  Simply edit the &amp;lt;xsl:variable&amp;gt; named "MostRecentSessionFirst" and set it's value to 1 your messages will now sort in descending chronological order.  &lt;br/&gt;&lt;br/&gt;&lt;span style='font-family: Courier New;'&gt;&amp;lt;&lt;span style='color: rgb(0, 0, 153);'&gt;xsl&lt;/span&gt;:&lt;span style='color: rgb(102, 51, 51);'&gt;&lt;span style='font-weight: bold;'&gt;variable&lt;/span&gt; &lt;/span&gt;name=&lt;span style='color: rgb(204, 51, 204);'&gt;'MostRecentSessionFirst'&lt;/span&gt;&amp;gt;1&amp;lt;/&lt;span style='color: rgb(0, 0, 153);'&gt;xsl&lt;/span&gt;:&lt;span style='color: rgb(102, 51, 51); font-weight: bold;'&gt;variable&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;There's several other &amp;lt;xsl:variable&amp;gt;'s at the top that you can play with.  I'd recommend making a backup before starting to play with this file though.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-2434595241706303000?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/2434595241706303000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=2434595241706303000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/2434595241706303000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/2434595241706303000'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/05/setting-sort-order-in-windows-live.html' title='Setting sort order in Windows Live Messenger History'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-3389310261773739708</id><published>2008-04-30T10:13:00.001-05:00</published><updated>2008-05-14T15:55:44.633-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebCasts'/><category scheme='http://www.blogger.com/atom/ns#' term='Imaginet'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Imaginet Webcast Series</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Several of my colleagues from &lt;a href='http://www.imaginets.com'&gt;Imaginet&lt;/a&gt; and I will be presenting a series of webcasts starting on May 14th.  This series will be pretty broad in what is covered, but in most cases will be very technical (ie. low on Powerpoint, high on code).  These webcasts will all start at 11:15 am EST and will be about 1/2 hour each.  &lt;br/&gt;&lt;br/&gt;If you're looking through this schedule and you have other ideas on what you'd like to see, feel free to leave a comment and we'll try to cover that topic in the future.&lt;br/&gt;&lt;br/&gt;Here's the schedule.&lt;br/&gt;&lt;br/&gt;&lt;table cellspacing='0' cellpadding='3' border='1'&gt;&lt;tbody&gt;&lt;tr style='border-bottom: 1px solid gray;'&gt;&lt;td&gt;&lt;strong&gt;Topic&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Presenter&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Customizing Team System Process Templates&lt;/td&gt;&lt;td&gt;&lt;a title='Ta. Steve Porter' href='http://homepage.mac.com/stevevrporter/blog/Ta.html'&gt;Steve Porter&lt;/a&gt;&lt;/td&gt;&lt;td&gt;14-May-08&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Introduction to Software Factories&lt;/td&gt;&lt;td&gt;Robert Regnier&lt;/td&gt;&lt;td&gt;21-May-08&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Windows Communication Service Gateways&lt;br/&gt; with C # 3.0 and&lt;br/&gt;  Linq-To-SQL&lt;/td&gt;&lt;td&gt;&lt;a title='Code Baboon' href='http://codebaboon.blogspot.com/'&gt;Dave Harris&lt;/a&gt;&lt;/td&gt;&lt;td&gt;28-May-08&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Testing out the MVC: Routing&lt;/td&gt;&lt;td&gt;Ryan Weppler&lt;/td&gt;&lt;td&gt;04-Jun-08&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Customizing Software Factories &lt;/td&gt;&lt;td&gt;Robert Regnier&lt;/td&gt;&lt;td&gt;11-Jun-08&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Dependency Injection with StructureMap&lt;/td&gt;&lt;td&gt;&lt;a title='Miscellaneous Jibberish' href='http://miscjibberish.blogspot.com/'&gt;Jeremy Wiebe&lt;/a&gt;&lt;/td&gt;&lt;td&gt;18-Jun-08&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Nhibernate: An Entry-Level Primer&lt;/td&gt;&lt;td&gt;&lt;a title='Code Baboon' href='http://codebaboon.blogspot.com/'&gt;Dave Harris&lt;/a&gt;&lt;/td&gt;&lt;td&gt;25-Jun-08&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Creating Real world applications with CSLA 3.5&lt;/td&gt;&lt;td&gt;David Maynard&lt;/td&gt;&lt;td&gt;02-Jul-08&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MVC vs MVP smackdown&lt;/td&gt;&lt;td&gt;Robert Regnier&lt;/td&gt;&lt;td&gt;09-Jul-08&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-3389310261773739708?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/3389310261773739708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=3389310261773739708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/3389310261773739708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/3389310261773739708'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/04/imaginet-webcast-series.html' title='Imaginet Webcast Series'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-3591128065286271788</id><published>2008-04-22T09:02:00.001-05:00</published><updated>2008-04-22T09:02:11.070-05:00</updated><title type='text'>Random numbers in SQL Server</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I'm putting this here for my future reference.  &lt;br/&gt;&lt;br/&gt;I sometimes need to generate random numbers (especially when creating test data in a table).  Here's a method to generate random values that will work even when used in a set-based action (ie. inserting records into table B using table A as the source).&lt;br/&gt;&lt;br/&gt;&lt;code&gt;select RAND(CHECKSUM(NEWID())) * [upper limit]&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;where [upper limit] is the maximum number you want in your random set.&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-3591128065286271788?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/3591128065286271788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=3591128065286271788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/3591128065286271788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/3591128065286271788'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/04/random-numbers-in-sql-server.html' title='Random numbers in SQL Server'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-237726289371041403</id><published>2008-03-25T12:52:00.002-05:00</published><updated>2008-04-22T09:07:23.823-05:00</updated><title type='text'>Unlocking a User Account from Command Line</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Today I fat-fingered a password many times while trying to log into one of our project servers.  Our domain accounts have been put into the Administrators group on that server but through Group Policy (or some other mechanism) we cannot load any MMC snap-ins.  To get around that we've been given a single local administrator account.  That's the account I locked up.  I sent off a request to get the account unlocked but being impatient I started looking for a way to unlock a user account through the command line.  Here's how (replace &amp;lt;username&amp;gt; with the actual username):&lt;br/&gt;&lt;br/&gt;&lt;code style='padding: 3px; background-color: black; color: LightGreen;'&gt;C:&amp;gt; &lt;strong&gt;net user /Active:YES &amp;lt;username&amp;gt;&lt;/strong&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-237726289371041403?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/237726289371041403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=237726289371041403' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/237726289371041403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/237726289371041403'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/03/unlocking-user-account-from-command.html' title='Unlocking a User Account from Command Line'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-1829818144469584925</id><published>2008-03-06T08:50:00.001-06:00</published><updated>2008-03-06T08:50:22.059-06:00</updated><title type='text'>Locating Silverlight 2.0 Assemblies</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Yesterday I started playing with the &lt;a href='http://www.microsoft.com/silverlight/resources/installationFiles.aspx?v=2.0'&gt;Silverlight 2.0 Beta 1&lt;/a&gt; bits.  I started working through &lt;a href='http://weblogs.asp.net/scottgu/archive/2008/02/22/first-look-at-silverlight-2.aspx'&gt;Scott Guthrie's series&lt;/a&gt; on working with Silverlight 2.  When I got to the point where Scott starts working with Linq-to-Xml I got stumped.  I couldn't find the assemblies containing XDocument and XElement.  After some browsing around for about an hour I gave up.  I looked in &lt;font face='Courier New'&gt;%Program Files%\Silverlight\2.0.30226.2\&lt;/font&gt;.  &lt;br/&gt;&lt;br/&gt;This morning I re-installed Silverlight 2.0 and hunted around a bit.  I finally found the System.Xml.Linq.dll (the dll containing XDocument) in &lt;font face='Courier New'&gt;C:\Program Files (x86)\Microsoft SDKs\Silverlight\v2.0\Libraries\Client&lt;/font&gt;.  (I'm running Windows Server 2008 x64).&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-1829818144469584925?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/1829818144469584925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=1829818144469584925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1829818144469584925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1829818144469584925'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/03/locating-silverlight-20-assemblies.html' title='Locating Silverlight 2.0 Assemblies'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-1706743126983770623</id><published>2008-01-10T10:34:00.001-06:00</published><updated>2008-01-10T10:34:30.304-06:00</updated><title type='text'>The 3 stages of a password change</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I had a realization today with how I "react" to a password change.  At my &lt;a href='http://www.imaginets.com'&gt;work&lt;/a&gt; we have to change our passwords periodically (I haven't taken note of exactly how often that is!).  I find that after a password change I go through 3 stages.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Stage 1: Wrong password.  &lt;/b&gt;&lt;br/&gt;&lt;br/&gt;I find that during the initial few days I type my old password on the first try pretty much every time when trying to log into my workstation or unlock my computer.  This is annoying, but it rarely is so bad that I do it enough to lock my account.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Stage 2: Catching myself.  &lt;/b&gt;&lt;br/&gt;&lt;br/&gt;During the second stage I start typing my old password but before pressing &amp;amp;lt;Enter&amp;amp;gt; to log in/unlock my computer I catch myself, delete the characters and type in the new password.  This stage again lasts for a few days.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Stage 3: Bliss!  &lt;/b&gt;&lt;br/&gt;&lt;br/&gt;During the last stage I have fully committed my new password to muscle memory and logins/unlocks are smooth and quick!&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Overall this isn't too inconvenient but I can't imagine how frustrating it would be if I had to change my password weekly or worse, daily!   I might have to look into actually using the &lt;a href='http://www.hp.com/sbso/solutions/pc_expertise/professional_innovations/single_signon.html'&gt;HP Biometric Fingerprint Sensor&lt;/a&gt; on my laptop for logging in instead of typing in my password.  (The downside to that is my coworker uses it and it looks like its even slower than mistyping my password once before getting it right).&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p class='poweredbyperformancing'&gt;Powered by &lt;a href='http://scribefire.com/'&gt;ScribeFire&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-1706743126983770623?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/1706743126983770623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=1706743126983770623' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1706743126983770623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1706743126983770623'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2008/01/3-stages-of-password-change.html' title='The 3 stages of a password change'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-1653656029747198299</id><published>2007-09-27T08:45:00.001-05:00</published><updated>2007-09-27T08:45:03.619-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='logging'/><category scheme='http://www.blogger.com/atom/ns#' term='CLFS'/><category scheme='http://www.blogger.com/atom/ns#' term='System.IO.Log'/><category scheme='http://www.blogger.com/atom/ns#' term='log4net'/><title type='text'>Common Log File System and System.IO.Log</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I was poking around the MSDN documentation looking for some Trace information and I stumbled upon the System.IO.Log namespace.  I haven't had a chance to work with it yet (and at this point I'm not sure how usable it would be for general application development as it's only available on Vista and Windows Server 2003 R2) but it looks intriguing.&lt;br/&gt;&lt;br/&gt;DevX.Com has a nice introduction to it &lt;a href='http://www.devx.com/VistaSpecialReport/Article/33848'&gt;here&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;I'm not sure that this will displace my &lt;a href='http://logging.apache.org/log4net/'&gt;favourite logging&lt;/a&gt; tool but competition is never a bad thing (although I have strong feelings about fragmentation, especially in the open source world, just for the sake of "having my own project" but that's content for a different blog post).&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p class='poweredbyperformancing'&gt;Powered by &lt;a href='http://scribefire.com/'&gt;ScribeFire&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-1653656029747198299?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/1653656029747198299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=1653656029747198299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1653656029747198299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1653656029747198299'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2007/09/common-log-file-system-and-systemiolog.html' title='Common Log File System and System.IO.Log'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-5892415724240171414</id><published>2007-08-22T11:48:00.001-05:00</published><updated>2007-08-22T15:15:41.038-05:00</updated><title type='text'>Antialiasing Gone Bad</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/jeropa/1203495847/" title="photo sharing"&gt;&lt;img src="http://farm2.static.flickr.com/1316/1203495847_4aac0118b9_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt; &lt;br /&gt; &lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;  &lt;a href="http://www.flickr.com/photos/jeropa/1203495847/"&gt;Antialiasing Gone Bad&lt;/a&gt;  &lt;br /&gt;  Originally uploaded by &lt;a href="http://www.flickr.com/people/jeropa/"&gt;jeropa&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;I've changed my VS2005 color scheme to a funky black-background scheme that I found on the net (and then tweaked a bit).  I hadn't noticed this before, but today while in the HTML editor the text on the currently selected line looked absolutely horrible.  I suspect that it's the antialiasing that is assuming things about my color scheme.  Whatever it is (could also be ReSharper but I can't tell) it's extremely annoying and may cause me to switch my colors again.&lt;br clear="all" /&gt;&lt;br /&gt;&lt;br /&gt;Update: Turns out the issue _was_ ReSharper.  It has a feature called "Highlight current line".  I turned that off and problems go away!  I've filed a bug with JetBrains.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-5892415724240171414?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/5892415724240171414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=5892415724240171414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/5892415724240171414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/5892415724240171414'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2007/08/antialiasing-gone-bad.html' title='Antialiasing Gone Bad'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm2.static.flickr.com/1316/1203495847_4aac0118b9_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-6495570366812807946</id><published>2007-08-01T10:04:00.001-05:00</published><updated>2007-08-01T10:04:55.036-05:00</updated><title type='text'>Humane Interfaces and Primitive Obsession</title><content type='html'>&lt;p&gt;I just finished reading a blog post from Martin Fowler on &lt;a href="http://www.martinfowler.com/bliki/HumaneInterface.html"&gt;Humane Interfaces&lt;/a&gt;.&amp;nbsp; Summed up the term simply means that an API is designed to be useful to a developer instead of being minimal and "legalistic" about what it&amp;nbsp;should include (this is how _I_ understood the post).&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;I also read Chris Wheeler's "&lt;a href="http://chriswheeler.blogspot.com/2005/05/my-favourite-smells.html"&gt;My Favorite Smells&lt;/a&gt;" Primitive Obsession blog post yesterday and the while reading Martin's post I had a small epiphany.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Based on Chris's example of array indexes and the confusion over 1 or 0-based arrays, I thought, this would be a place where a Humane Interface could have solved the Primitive Obsession problem in a slightly different way.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Take a bunch of arrays that use a mixture of 0 and 1-based indexes.&amp;nbsp; Chris's solution was to have a ZeroBasedInt and OneBasedInt that were used to index into the array.&amp;nbsp; My idea is that the array's themselves could have simply had a First and Last property (or method).&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;The code would then simply be:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;for&lt;/strong&gt; (int i=myarray.First; i&amp;lt;=myarray.Last; i++) &lt;/p&gt; &lt;p&gt;{ // do something }&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-6495570366812807946?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/6495570366812807946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=6495570366812807946' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/6495570366812807946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/6495570366812807946'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2007/08/humane-interfaces-and-primitive.html' title='Humane Interfaces and Primitive Obsession'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-6226571006712986834</id><published>2007-07-22T12:13:00.001-05:00</published><updated>2007-07-24T09:10:52.491-05:00</updated><title type='text'>Neat Vista Feature - Copy As Path</title><content type='html'>I was trying to get an Explorer context menu set up today for .dll files in Vista so that I could simply right-click on a DLL and select "Register" and have regsvr32.exe register the DLL (as well as a companion "Unregister" menu item).&lt;br /&gt;&lt;br /&gt;While trying to figure out how to do this (I'll post a solution when I get there... I've done it in XP but cannot remember exactly how and the way I "remember" it is not working) I came across a neat feature in Vista.&lt;br /&gt;&lt;br /&gt;When viewing a folder in Vista's Explorer you can hold down the Shift key and right-click on a file.  This brings up a slightly modified context menu from the standard one you get if you don't hold Shift down.  Nestled in the menu is a nice little menu item labeled "Copy as Path".  When you select this item it will copy the full path of the file (including the file name) into the Clipboard for you.&lt;br /&gt;&lt;br /&gt;Handy stuff, I say!  &lt;br /&gt;&lt;br /&gt;By the way, I stumbled across this while reading Tim Sneath's "Command Prompt Here" blog post... http://blogs.msdn.com/tims/archive/2006/09/18/windows-vista-secret-1-open-command-prompt-here.aspx)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-6226571006712986834?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.msdn.com/tims/archive/2006/09/18/windows-vista-secret-1-open-command-prompt-here.aspx' title='Neat Vista Feature - Copy As Path'/><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/6226571006712986834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=6226571006712986834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/6226571006712986834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/6226571006712986834'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2007/07/neat-vista-feature-copy-as-path.html' title='Neat Vista Feature - Copy As Path'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-514418834055957095</id><published>2007-06-26T11:35:00.000-05:00</published><updated>2007-06-26T11:52:00.079-05:00</updated><title type='text'>C# ManagementEventWatcher using Win32_LocalTime and DayOfWeek masks (WMI)</title><content type='html'>We are using WMI notification events for scheduling activities on our current project.  This makes scheduling events on a periodic basis very easy as you don't have to set up timers, calculate intervals to the next event, reset the timer, etc.  With WMI events you can simply set up a mask on the local time (or UTC if you prefer) and then whenever that mask matches the system clock you get an event. &lt;br /&gt;&lt;br /&gt;We are using Win32_LocalTime for our schedules and we came across a bug in using WMI notification events and the DayOfWeek property on Win32_LocalTime.  Turns out that you cannot specify a single DayOfWeek (they number from 0 to 6 where 0=Sunday) on a schedule.  WMI simply will not raise an event even when the mask matches. &lt;br /&gt;&lt;br /&gt;So, for example, the following query will cause an event to be raised every Tuesday and Wednesday at 3:00 PM (WMI events have a granularity to the second, so no subsecond event notifications):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;SELECT * &lt;br /&gt;FROM __InstanceModificationEvent &lt;br /&gt;WHERE TargetInstance ISA 'Win32_LocalTime' &lt;br /&gt;AND &lt;br /&gt;(&lt;br /&gt;    TargetInstance.DayOfWeek = 2 &lt;br /&gt;    OR TargetInstance.DayOfWeek = 3&lt;br /&gt;) &lt;br /&gt;AND &lt;br /&gt;(&lt;br /&gt;    TargetInstance.Hour = 15 &lt;br /&gt;    AND TargetInstance.Minute = 0 &lt;br /&gt;    AND TargetInstance.Second = 0&lt;br /&gt;)&lt;/pre&gt;&lt;br /&gt;However, if you just want events on Tuesday WMI seems to simply ignore the registration:&lt;br /&gt;&lt;pre&gt;SELECT * &lt;br /&gt;FROM __InstanceModificationEvent &lt;br /&gt;WHERE TargetInstance ISA 'Win32_LocalTime' &lt;br /&gt;AND &lt;br /&gt;(&lt;br /&gt;    TargetInstance.DayOfWeek = 2&lt;br /&gt;) &lt;br /&gt;AND &lt;br /&gt;(&lt;br /&gt;    TargetInstance.Hour = 15 &lt;br /&gt;    AND TargetInstance.Minute = 0 &lt;br /&gt;    AND TargetInstance.Second = 0&lt;br /&gt;)&lt;/pre&gt;&lt;br /&gt;Our solution is to register for every day of the week and then when the event is raised, simply filter it out if we don't really want an event on that day. &lt;br /&gt;&lt;br /&gt;The interesting thing is that masking on the day of the month (Day property) for a single day works just fine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-514418834055957095?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/514418834055957095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=514418834055957095' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/514418834055957095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/514418834055957095'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2007/06/c-managementeventwatcher-using.html' title='C# ManagementEventWatcher using Win32_LocalTime and DayOfWeek masks (WMI)'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-1065784840537422292</id><published>2007-06-21T10:36:00.000-05:00</published><updated>2007-06-21T10:46:07.055-05:00</updated><title type='text'>When Dispose() isn't enough</title><content type='html'>A while back I had a discussion with another developer on my current project about Dispose() and the need to call an object's Close()/Stop()/etc methods before calling Dispose().  I was of the opinion that classes implementing IDisposable would be smart enough to do whatever cleanup was necessary without the caller needing to also call Close() or Stop() or whatever other method "disables" that object's functionality.  He argued that you may not always be able to rely on Dispose() being implemented properly.  I came back with the System.Data.SqlClient.SqlConnection object and showed in Reflector that it does indeed call Close() during Dispose(bool).  See, I'm right!&lt;br /&gt;&lt;br /&gt;Well, today I had to eat my words and agree with him (You were right Dave! :-) ).  We use WMI even notifications to raise scheduled events by subscribing to changes on Win32_LocalTime.  While trying to diagnose why we sometimes get a "Quota Violation" exception when subscribing I opened up Reflector to look at the ManagementEventWatcher class.  The ManagementEventWatcher has a Stop() method which disables event notifications.   The bad part is that it inherits from System.Component.ComponentModel (which implements IDisposable) but does not override Dispose(bool).  This results in leaking event subscriptions when a Start()'d ManagementEventWatcher is Disposed without first calling Stop().&lt;br /&gt;&lt;br /&gt;So, lesson learned... unless you know for sure (ie. you've checked using Reflector), always call the "disabling" method (Stop(), Close(), whatever) before Disposing your IDisposable objects.  In a perfect world any object implementing IDisposable would correctly clean up after itself, but in the real world that's not the case!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-1065784840537422292?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/1065784840537422292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=1065784840537422292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1065784840537422292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1065784840537422292'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2007/06/when-dispose-isnt-enough.html' title='When Dispose() isn&apos;t enough'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-908279677741643003</id><published>2007-05-31T09:44:00.000-05:00</published><updated>2007-05-31T10:07:20.294-05:00</updated><title type='text'>SQL Server version of 'whoami'</title><content type='html'>This is related to my previous post about connecting to SQL Server using integrated security.   I needed to find out what identity I was connected as when accessing SQL Server.  A quick Google search yielded this SQL statement:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;SELECT suser_sname();&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-908279677741643003?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/908279677741643003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=908279677741643003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/908279677741643003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/908279677741643003'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2007/05/sql-server-version-of-whoami.html' title='SQL Server version of &apos;whoami&apos;'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-1719471006542303430</id><published>2007-05-31T09:26:00.000-05:00</published><updated>2007-05-31T09:43:34.559-05:00</updated><title type='text'>Connecting to SQL Server using Windows Integrated Security across domain boundaries</title><content type='html'>In the project I'm currently working on we had a requirement to use Windows Integrated Security to connect to a SQL Server 2000 database.  The "gotcha" was that the database is on a Windows 2003 Server and a member of a domain.  The web server that needs database connectivity is &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; a member of any domain. &lt;br /&gt;&lt;br /&gt;It turns out that it &lt;span style="font-style: italic;"&gt;is&lt;/span&gt; possible to use integrated security in this scenario if you configure things correctly.  You'll need to create &lt;span style="font-weight: bold; font-style: italic;"&gt;local &lt;/span&gt;machine accounts on both machines and those two accounts must have identical usernames and passwords.  &lt;br /&gt;&lt;br /&gt;So, for example we have a SQL Server running on 'mysqlbox' in the 'DEMO' domain and a web server named 'mywebbox' which is not a member of any domain. &lt;br /&gt;&lt;br /&gt;1) Create a local user account on 'mysqlbox' named 'testuser' with a password of 'password'.&lt;br /&gt;2) Create a local user account on 'mywebbox' named 'testuser' with a password of 'password'.&lt;br /&gt;3) Configure your application on 'mywebbox' to run under the identity of the account created in step 2 (so mywebbox\testuser).  In our case we had a web application so the App Pool that the web app runs under was configured to be 'mywebbox\testuser'.&lt;br /&gt;4) Grant access privileges in SQL Server to mysqlbox\testuser (note that you do &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;not&lt;/span&gt;&lt;/span&gt; grant access in SQL Server to mywebbox\testuser at any point... that user is not know to the mysqlbox server).&lt;br /&gt;5) Set the connection string for your application to:&lt;br /&gt;           Server=mysqlbox;Database=MyDB;Integrated Security=SSPI&lt;br /&gt;&lt;br /&gt;At this point your should be able to run your application and connect to the database using integrated security.  In the database you will be connected as mysqlbox\testuser even though your application is running on mywebbox as mywebbox\testuser.&lt;br /&gt;&lt;br /&gt;Good times.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-1719471006542303430?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/1719471006542303430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=1719471006542303430' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1719471006542303430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/1719471006542303430'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2007/05/connecting-to-sql-server-using-windows.html' title='Connecting to SQL Server using Windows Integrated Security across domain boundaries'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-4095542151479378384</id><published>2007-03-09T15:36:00.000-06:00</published><updated>2007-03-09T15:43:23.989-06:00</updated><title type='text'>Parameterized Unit Tests via Pex</title><content type='html'>I came across this Microsoft Research via &lt;a href="http://blog.dotnetwiki.org/"&gt;Peli's Farm&lt;/a&gt;.  This looks like a cool idea at first glance but as I think about it I'm not sure it's a good thing.  It definitely helps for parameter validation but I'm wondering if a tool like this may just give developers a false sense of security.&lt;br /&gt;&lt;br /&gt;I should qualify that I'm nowhere near a TDD guru (although I _am_ working at it).  But how would a tool like this actually be able to verify the desired functionality when the developer doesn't really know what values the method will be called with when the test runs?  On the other hand I do know that bugs come out when a method encounters values not anticipated by the developer.  Maybe this tool has it's place as a "catch-all" for when the developer has written a bunch of unit tests to cover all the cases that they can think of.  They can then "add on" Pex to get that extra bit of coverage and ensure that their code is being exercised fully.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-4095542151479378384?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://research.microsoft.com/pex/' title='Parameterized Unit Tests via Pex'/><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/4095542151479378384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=4095542151479378384' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/4095542151479378384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/4095542151479378384'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2007/03/parameterized-unit-tests-via-pex.html' title='Parameterized Unit Tests via Pex'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-117008197699971223</id><published>2007-01-29T08:38:00.000-06:00</published><updated>2007-01-29T08:46:17.010-06:00</updated><title type='text'>HP nx9420 and Hardware Virtualization</title><content type='html'>Over the past month I've been trying to figure out why Microsoft's Virtual PC 2007 RC1 won't allow me to enable Hardware Enabled Virtualization.  The Beta of VPC 2007 used to check the "Enable Hardware Virtualization" option checkbox but it was greyed out and beneath the option it said that hardware virtualization was not available on my computer (talk about conflicting...).&lt;br /&gt;&lt;br /&gt;I started to do some research.  The nx9420 I have comes with an Intel T7400 Core 2 Duo Mobile CPU.  So off I go to Intel's site to find that indeed the T7400 supports Intel's VT technology (their version of hardware virtualization).  I contacted HP and their tech support stated that the nx9420 DIDN'T support hardware virtualization so I was stumped.  I sent the Intel link I'd found to the HP tech support and he still maintained that there was no VT support.&lt;br /&gt;&lt;br /&gt;So today I decided to give it one last try.  I went to HP's support site looking for driver updates and low and behold there's a BIOS update available for my laptop.  I looked at the release notes and to my sheer joy I see that the BIOS upgrade adds support for hardware virtualization.  &lt;br /&gt;&lt;br /&gt;I downloaded the update (F.19) and installed it using HP's snazzy Windows-based BIOS update utility (which gave me a bit of the shivers thinking I was doing a BIOS update in Windows) and rebooted.  At the POST menu I went into the BIOS settings and there's the option!  I enabled Hardware Virtualization in the BIOS, booted into Windows Vista, started up VPC 2007, and now I have hardware virtualization enabled in VPC!&lt;br /&gt;&lt;br /&gt;Life is good once more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-117008197699971223?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.intel.com/cd/channel/reseller/asmo-na/eng/products/mobile/processors/core2duo_m/feature/index.htm' title='HP nx9420 and Hardware Virtualization'/><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/117008197699971223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=117008197699971223' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/117008197699971223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/117008197699971223'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2007/01/hp-nx9420-and-hardware-virtualization.html' title='HP nx9420 and Hardware Virtualization'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-115877472777690157</id><published>2006-09-20T12:43:00.000-05:00</published><updated>2006-09-20T12:52:07.896-05:00</updated><title type='text'>System.Diagnostics.Process and asychronous output</title><content type='html'>The project I'm working on requires interaction with a command-line executable.  We have essentially created an ADO.NET data provider on top of this command-line application that retrieves data for us from a proprietary source.&lt;br /&gt;&lt;br /&gt;This ends up working quite well except for one problem.  The command-line app sometimes pops up a dialog when it encounters an error.  On a desktop environment that's not a problem as the user can just hit the "Ok" button on the dialog.  However, in a server environment this is disastrous (especially when we're talking about a Windows Service that cannot interact with the desktop).  &lt;br /&gt;&lt;br /&gt;Our solution was to use the System.Diagnostic.Process objects asynchronous facilities (subscribing to the OutputDataReceived event and then calling BeginOutputReadLine()) to collect output asynchronously and then have a timer that could kill the request if the command-line app didn't return within a specified interval.  &lt;br /&gt;&lt;br /&gt;Again, this seemed to work well....until we found out that when we blocked on the WaitForExit() call we could return before all output had been received in our event handler. &lt;br /&gt;&lt;br /&gt;To work around this you need to pay attention to the OutputDataReceived event's argument object.  The DataReceivedEventArgs object has a Data property that contains the data being delivered for the current event.  When that property is null (Nothing in VB.NET) the process has finished. &lt;br /&gt;&lt;br /&gt;In our class we simply blocked on a boolean flag until the Data property was null at which point we flipped the flag to true and we knew we could return the data we'd collected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-115877472777690157?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/115877472777690157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=115877472777690157' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/115877472777690157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/115877472777690157'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2006/09/systemdiagnosticsprocess-and.html' title='System.Diagnostics.Process and asychronous output'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-115746339652861142</id><published>2006-09-05T08:28:00.000-05:00</published><updated>2006-09-05T08:36:36.536-05:00</updated><title type='text'>Agile Blog Links</title><content type='html'>After not having posted for well over a year, I figured it was time to fire up the blog again.  I'm hoping to keep up with this a bit better from now on.&lt;br /&gt;&lt;br /&gt;To start off, I've collected a bunch of links to some of the Agile software development blogs (and specific postings) that I've found really good over the last little while. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2006/08/07/Best-of-the-Shade-Tree-Developer-_2800_with-actual-links_21002900_.aspx"&gt;Jeremy Miller's "Best of" post&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://codebetter.com/blogs/jeffrey.palermo/default.aspx"&gt;Jeffrey Palermo's Blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.agileprogrammer.com/oneagilecoder/"&gt;Brian Button's Blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jamesshore.com/"&gt;James Shore's Blog&lt;/a&gt; (Excellent agile blog IMHO!)&lt;br /&gt;&lt;br /&gt;There's lots of good stuff out there.  This is just a few that I've found that I really like.  Feel free to post your "best of" in the comments.  I'll update this post as I find new interesting blogs/posts in the comments.  :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-115746339652861142?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/115746339652861142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=115746339652861142' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/115746339652861142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/115746339652861142'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2006/09/agile-blog-links.html' title='Agile Blog Links'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-112990309019677621</id><published>2005-10-21T08:55:00.000-05:00</published><updated>2005-10-21T08:58:10.210-05:00</updated><title type='text'>Checkin' out Flock </title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I've just downloaded the first Developer Preview of the new Flock browser.&lt;br/&gt;&lt;/p&gt;&lt;p&gt;This new browser integrates some nice features for blogging and using sites like del.icio.us... in fact, this post is being created right in Flock! &lt;br/&gt;&lt;/p&gt;&lt;p&gt;I've only used it for about 5 minutes, but I'll try to use it more throughout the day and I'll post my take on it if I have time. So far it is neat to use.&lt;br/&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-112990309019677621?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/112990309019677621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=112990309019677621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/112990309019677621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/112990309019677621'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/10/checkin-out-flock.html' title='Checkin&apos; out Flock '/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-112689375135084906</id><published>2005-09-16T13:02:00.000-05:00</published><updated>2005-09-16T13:04:44.196-05:00</updated><title type='text'>Tess of the D'Urbervilles (sp?)</title><content type='html'>I sent my &lt;a href="http://blog.mennos.org"&gt;buddy&lt;/a&gt; Greg a link to the audio book from Project Guttenberg for a good laugh.   &lt;br /&gt;&lt;br /&gt;As he says &lt;a href="http://blog.mennos.org/nucleus3.2/index.php?itemid=122"&gt;here&lt;/a&gt; we were in the same English class in Grade 12 and, to use his term, "studied" the book.  I'll agree with him that it's a slooooooow book.   I think it would appeal to the same crowd that finds "art" in abstract painting... something like the paintings our Canadian government would pay $1,000,000 for but could be painted by a three-year old.&lt;br /&gt;&lt;br /&gt;P.S. In case there's some eager reader actually &lt;span style='font-weight:bold'&gt;wanting&lt;/span&gt; to find this book.   Its &lt;a href="http://www.gutenberg.org/etext/9433"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-112689375135084906?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/112689375135084906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=112689375135084906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/112689375135084906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/112689375135084906'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/09/tess-of-durbervilles-sp.html' title='Tess of the D&apos;Urbervilles (sp?)'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-111953882456658875</id><published>2005-06-23T10:00:00.000-05:00</published><updated>2005-06-23T12:34:23.136-05:00</updated><title type='text'>I got a fever... and the only prescription is more cowbell!</title><content type='html'>[&lt;b&gt;Edit&lt;/b&gt;: As might be obvious, I don't blog often and when I do they suck!   I've updated this post to make more sense.  :-)] Ok, so I just watched a clip from &lt;a href="http://www.nbc.com/Saturday_Night_Live/" title="Saturday Night Live"&gt;SNL&lt;/a&gt; with Christopher Walkin and  Will Farrell.  It features Farrell as a member of the Blue Oyster Cult as they are recording their single "Don't Fear the Reaper" playing the cowbell.  Christopher Walkin plays Bruce Dickinson and "can't get enough of the cowbell".  What a funny skit.  &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Some choice quotes&lt;/b&gt;:&lt;br /&gt;"Easy guys, I put my pants on just like the rest of you... one leg at a time.  Except, once my pants are on, I make gold records."&lt;br /&gt;&lt;br /&gt;"I gotta have more cowbell!"&lt;br /&gt;&lt;br /&gt;"Guess what?  I got a fever...and the only prescription is more cowbell!"&lt;br /&gt;&lt;br /&gt;I haven't seen SNL in a long time, but the last few times I did watch it it wasn't as funny as when I first started watching it.  The good ole' days with Chris Farley and crew.   Some memorable skits include "Livin' in a van down by the river" and "Celebrity Jeopardy".  I also really liked some of their pardody commercials.  &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-111953882456658875?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/111953882456658875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=111953882456658875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111953882456658875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111953882456658875'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/06/i-got-fever-and-only-prescription-is.html' title='I got a fever... and the only prescription is more cowbell!'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-111461079921997942</id><published>2005-04-27T09:06:00.000-05:00</published><updated>2005-04-27T09:06:39.220-05:00</updated><title type='text'>Direct Manipulation Using JavaScript and CSS</title><content type='html'>Tim Taylor has released an updated version of his excellent (and rapidly improving) DHTML library for implementing drag-and-drop features in web applications.  I'm currently using the release before this one, but I'm tempted to upgrade just because this release is much more organized now.&lt;br /&gt;&lt;br /&gt;Go look: &lt;a href="http://tool-man.org/examples/"&gt;Tim Taylor's Direct Manipulation Using JavaScript and CSS&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-111461079921997942?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/111461079921997942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=111461079921997942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111461079921997942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111461079921997942'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/04/direct-manipulation-using-javascript_27.html' title='Direct Manipulation Using JavaScript and CSS'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-111387072188867188</id><published>2005-04-18T19:32:00.000-05:00</published><updated>2005-04-18T19:32:01.886-05:00</updated><title type='text'>Javascript, DHTML, Drag-and-Drop</title><content type='html'>I've been doing lots of javascript and DHTML stuff lately.  I'm working on a project that is really neat ... it's an query builder that allows the user to build a query using drag-and-drop.&lt;br /&gt;&lt;br /&gt;While searching for help with javascript and related subjects I've come across several extremely useful javascript libraries, examples:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;li&gt;&lt;a href="http://sarissa.sourceforge.net" title="Sarissa -  An ECMAScript library acting as a cross-browser wrapper for native XML APIs."&gt;Sarissa (cross browser XML library)&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;li&gt;&lt;a href="http://blog.tool-man.org/" title="Author of the drag-and-drop library rewrite."&gt;Javascript drag-and-drop library&lt;/a&gt;  (Based on a lib by &lt;a href="http://www.youngpup.net" title="Youngpup"&gt;Youngpup&lt;/a&gt;)&lt;/li&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;li&gt;&lt;a href="http://neb.net/playground/dragdrop/"&gt;And an adaptation of that library&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-111387072188867188?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/111387072188867188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=111387072188867188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111387072188867188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111387072188867188'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/04/javascript-dhtml-drag-and-drop.html' title='Javascript, DHTML, Drag-and-Drop'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-111361918369607094</id><published>2005-04-15T21:31:00.000-05:00</published><updated>2005-04-15T21:39:43.696-05:00</updated><title type='text'>Ubuntu, MSN Spaces Logos</title><content type='html'>I was browsing around the net tonight and was reading a blog posting that mentioned MSN Spaces (Microsoft's blogging site). I thought I'd check it out and to my surprise I encountered a logo that looked &lt;span style="font-style: italic;"&gt;very&lt;/span&gt; familiar.&lt;br /&gt;&lt;br /&gt;What do you think?&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;Ubuntu Linux Logo &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ubuntulinux.org/"&gt;&lt;img src="http://www.ubuntu.com/include/header-image4.png" title="Ubuntu Logo" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;vs&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;MSN Spaces Logo &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://spaces.msn.com/"&gt;&lt;img src="http://spaces.msn.com/mmm2005-03-24_15.25/editorial/default/images/Spaces_icon.gif" title="MSN Spaces Logo" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-111361918369607094?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/111361918369607094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=111361918369607094' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111361918369607094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111361918369607094'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/04/ubuntu-msn-spaces-logos.html' title='Ubuntu, MSN Spaces Logos'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-111098637537791749</id><published>2005-03-16T09:19:00.001-06:00</published><updated>2008-07-18T20:15:53.857-05:00</updated><title type='text'>ASP.NET's RegisterHiddenField and document.getElementById</title><content type='html'>I was doing some testing today to find out why one of our ASP.NET web apps wasn't working in Firefox.  It boiled down to the fact that ASP.NET's Page.RegisterHiddenField() method doesn't set the 'id' attribute of the element it creates, only the 'name' attribute.  This in turn breaks Firefox's getElementById because in Firefox (and all other Mozilla-based browsers, as I understand) the id and name namespaces are not merged (as they are in IE).  So getElementById() in Firefox will never find a hidden element created by using RegisterHiddenField().&lt;br /&gt;&lt;br /&gt;The simple workaround is to use a HTML Hidden Input element as follows in the ASPX page:&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#804040"&gt;input&lt;/font&gt; &lt;font color="#FF0000"&gt;type&lt;/font&gt;&lt;font color="#0000FF"&gt;="hidden" &lt;/font&gt;&lt;font color="#FF0000"&gt;id&lt;/font&gt;&lt;font color="#0000FF"&gt;="&lt;b&gt;myHiddenElement&lt;/b&gt;"&lt;/font&gt; &lt;font color="#FF0000"&gt;runat&lt;/font&gt;&lt;font color="#0000FF"&gt;="server"&lt;/font&gt; &lt;font color="#FF0000"&gt;value&lt;/font&gt;&lt;font color="#0000FF"&gt;="myvalue"&lt;/font&gt; /&amp;gt;&lt;br /&gt;&lt;br /&gt;Then in the .cs codebehind you can declare your hidden element as follows:&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000FF"&gt;protected&lt;/font&gt; System.Web.UI.HtmlControls.HtmlInputHidden &lt;b&gt;myHiddenElement&lt;/b&gt;;&lt;br /&gt;&lt;br /&gt;and you can manipulate the control in the codebehind as follows:&lt;br /&gt;&lt;br /&gt;this.&lt;b&gt;myHiddenElement&lt;/b&gt;.Value = "some value";&lt;br /&gt;&lt;br /&gt;I would consider this a bug in the RegisterHiddenField() but if someone can explain why it isn't, I'd LOVE to hear why.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-111098637537791749?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/111098637537791749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=111098637537791749' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111098637537791749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111098637537791749'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/03/aspnets-registerhiddenfield-and.html' title='ASP.NET&apos;s RegisterHiddenField and document.getElementById'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-110994565316726014</id><published>2005-03-04T08:14:00.000-06:00</published><updated>2005-03-04T08:14:13.166-06:00</updated><title type='text'>February CTP Builds of VS 2005</title><content type='html'>Microsoft has released the February CTP builds of Visual Studio.&lt;br /&gt;&lt;br /&gt;More info &lt;a href="http://blogs.msdn.com/ksharkey/archive/2005/03/03/384343.aspx" title="February CTP Available"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I haven't had much time to play around with Visual Studio 2005 yet, but the time I have spent using it was very pleasant.  The productivity improvements in the IDE are so nice (refactoring, Intellisense EVERYWHERE, etc).  I'm also very excited about the two-way databinding for ASP.NET and the ClickOnce deployment for windows forms.&lt;br /&gt;&lt;br /&gt;Giddyup!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-110994565316726014?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/110994565316726014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=110994565316726014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110994565316726014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110994565316726014'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/03/february-ctp-builds-of-vs-2005.html' title='February CTP Builds of VS 2005'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-110977770946787184</id><published>2005-03-02T09:35:00.000-06:00</published><updated>2005-03-02T09:35:09.466-06:00</updated><title type='text'>Inspecting ViewState...</title><content type='html'>I recently stumbled across this handy tool on the 'net.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.wilsondotnet.com/Demos/ViewState.aspx" title="Parses the __VIEWSTATE field from any aspx page"&gt;Page ViewState Parser&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It allows you to get a full object graph of whats in the __VIEWSTATE hidden field.  It's suprising what's all stored in there.  It makes it alot more apparent why most folks recommend disabling ViewState on controls unless you really need it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-110977770946787184?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/110977770946787184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=110977770946787184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110977770946787184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110977770946787184'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/03/inspecting-viewstate.html' title='Inspecting ViewState...'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-110916858739365349</id><published>2005-02-23T08:23:00.000-06:00</published><updated>2005-02-23T08:23:07.393-06:00</updated><title type='text'>Joke: Aerial Photographer</title><content type='html'>A photographer from a well know national magazine was assigned to cover the fires at Yellowstone National Park. The magazine wanted to show some of the heroic work of the fire fighters as they battled the blaze.  &lt;br /&gt;&lt;br /&gt;When the photographer arrived, he realized that the smoke was so thick that it would seriously impede or make it impossible for him to photograph anything from ground level.  He requested permission to rent a plane and take photos from the air.  His request was approved and arrangements were made.  He was told to report to a nearby airport where a plane would be waiting for him.&lt;br /&gt;&lt;br /&gt;He arrived at the airport and saw a plane warming up near the gate.  He jumped in with his bag and shouted, "Let's go!"  &lt;br /&gt;&lt;br /&gt;The pilot swung the little plane into the wind, and within minutes they were in the air.  The photographer said, "Fly over the park and make two or three low passes so I can take some pictures." &lt;br /&gt;&lt;br /&gt;"Why?" asked the pilot. &lt;br /&gt;&lt;br /&gt;"Because I am a photographer," he responded, "and photographers take photographs."&lt;br /&gt;&lt;br /&gt;The pilot was silent for a moment; finally he stammered, "You mean you're not the flight instructor?"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-110916858739365349?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/110916858739365349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=110916858739365349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110916858739365349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110916858739365349'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/02/joke-aerial-photographer.html' title='Joke: Aerial Photographer'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-110901625135488848</id><published>2005-02-21T14:04:00.000-06:00</published><updated>2005-02-21T14:04:11.356-06:00</updated><title type='text'>MCSD: Off and running</title><content type='html'>I just wrote my first of 5 MSCD exams (070-316: WinForms C#).  I passed and so now I'm going to tackle the ASP.NET C# exam.  If anyone has suggestions for books/training kits that are good for exam preperation, leave comments.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hoowah&lt;/b&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-110901625135488848?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/110901625135488848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=110901625135488848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110901625135488848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110901625135488848'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/02/mcsd-off-and-running.html' title='MCSD: Off and running'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-110774221547173276</id><published>2005-02-06T20:05:00.000-06:00</published><updated>2005-04-27T09:06:27.280-05:00</updated><title type='text'>Building Distributed Objects in .NET</title><content type='html'>I just got through the VSLive! preconference workshop for Building Distributed Objects in .NET.  Rocky Lhotka is an excellent speaker and it was great to hear his real-world, pragmatic views on business objects, DataSets/DataTables, etc.  The short story is that business objects are good. &lt;br /&gt;&lt;br /&gt;One point that he made that seems obvious in retrospect but seems to be confused by many folks is that even though you &lt;strong&gt;organize&lt;/strong&gt; your code in an n-tier fashion, that doesn't mean that you have to be on many different machines.  He even went as far as to suggest that in many cases the classic 2-tier architecture may be fine.  *&lt;em&gt;gasp&lt;/em&gt;* ;-)  I'd tend to agree with that.&lt;br /&gt;&lt;br /&gt;Well, that's it for today.  I'm really looking forward to the rest of this week and am hoping the rest is as good as today.&lt;br /&gt;&lt;br /&gt;Oh yeah... off to watch whatever's left of the SuperBowl!  (No, I am not cheering for a specific team.)&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-110774221547173276?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/110774221547173276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=110774221547173276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110774221547173276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110774221547173276'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/02/building-distributed-objects-in-net.html' title='Building Distributed Objects in .NET'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-110770655299971315</id><published>2005-02-06T10:12:00.000-06:00</published><updated>2005-02-06T10:15:53.000-06:00</updated><title type='text'>VSLive!</title><content type='html'>Well, it's the first day of VSLive!  I got here early as I'm still on Central time and was up at 6:00 am.  There's a neat tablet "hands-on" area as well as wireless internet access.  Having never used a tablet before I find them pretty neat.  The handwriting recognition on them is unbelievable. &lt;br /&gt;&lt;br /&gt;I'll try to post more about the presentations as I attend them.  I'm looking forward to learning a ton of stuff about upcoming features in .NET 2.0 as well as learning more about architecture of .NET applications in general.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-110770655299971315?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.vslive.com' title='VSLive!'/><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/110770655299971315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=110770655299971315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110770655299971315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110770655299971315'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/02/vslive.html' title='VSLive!'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-110684124290004571</id><published>2005-01-27T09:50:00.000-06:00</published><updated>2005-01-27T09:54:02.900-06:00</updated><title type='text'>New to Blogger.com</title><content type='html'>I've decided to move my blog to Blogger.com instead of hosting Wordpress on my own "server".  I figure it's much easier to maintain a blog if I don't have to worry about security, updates, etc. in addition to posting somewhat regularly. &lt;br /&gt;&lt;br /&gt;The good news is I can continue using the excellent &lt;a href="http://www.wbloggar.com/"&gt;w.bloggar&lt;/a&gt; for posting. &lt;br /&gt;&lt;br /&gt;Note: This has &lt;span style="font-weight: bold;"&gt;nothing&lt;/span&gt; to do with any problems with &lt;a href="http://wordpress.org/"&gt;Wordpress&lt;/a&gt;!  I found it very easy to install and use.  I just don't feel like maintaining something that I can get for free with much less maintenance.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-110684124290004571?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/110684124290004571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=110684124290004571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110684124290004571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/110684124290004571'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/01/new-to-bloggercom.html' title='New to Blogger.com'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-111540934254626456</id><published>2005-01-21T14:54:00.000-06:00</published><updated>2005-05-06T14:56:01.150-05:00</updated><title type='text'>‘which’ for Windows</title><content type='html'>&lt;div class="entry"&gt;&lt;p&gt;Saw this post on &lt;a href="http://blogs.msdn.com/oldnewthing/Rss.aspx"&gt;Raymond Chen’s blog&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/oldnewthing/archive/2005/01/20/357225.aspx" title="A 90-byte 'whereis' program"&gt;A 90-byte batch file to find a program in your current PATH&lt;/a&gt; &lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-111540934254626456?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/111540934254626456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=111540934254626456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111540934254626456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111540934254626456'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/01/which-for-windows.html' title='‘which’ for Windows'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-111540921574799290</id><published>2005-01-16T08:53:00.000-06:00</published><updated>2005-05-06T14:54:07.126-05:00</updated><title type='text'>Good ole Winnipeg, MB, Canada</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt; &lt;a href="http://www.flickr.com/photos/jeropa/12676350/" title="photo sharing"&gt;&lt;img src="http://photos10.flickr.com/12676350_bacfc47cba_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="margin-top: 0px;font-size:0;" &gt;  &lt;a href="http://www.flickr.com/photos/jeropa/12676350/"&gt;Minus40&lt;/a&gt; &lt;br /&gt; Originally uploaded by &lt;a href="http://www.flickr.com/people/jeropa/"&gt;jeropa&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;Waking up this morning it felt a little chilly in the house. It wasnât until I looked at the thermometer that I realized why.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-111540921574799290?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/111540921574799290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=111540921574799290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111540921574799290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111540921574799290'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/01/good-ole-winnipeg-mb-canada.html' title='Good ole Winnipeg, MB, Canada'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-111540887563504914</id><published>2005-01-03T14:47:00.000-06:00</published><updated>2005-05-06T15:01:40.573-05:00</updated><title type='text'>Dissecting a C# Application: Inside SharpDevelop</title><content type='html'>&lt;div class="entry"&gt;       &lt;p&gt;I saw this on &lt;a href="http://weblogs.asp.net/ericgu/archive/2005/01/03/346058.aspx" title="Dissecting a C# Application: Inside SharpDevelop"&gt;Eric Gunnerson’s C# blog&lt;/a&gt;.  The book is a dissection of SharpDevelop by the guys who wrote the code.&lt;/p&gt;  &lt;p&gt;Go &lt;a href="http://www.apress.com/free/index.html"&gt;here&lt;/a&gt; to grab it. &lt;/p&gt;     &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-111540887563504914?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://miscjibberish.blogspot.com/feeds/111540887563504914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10438017&amp;postID=111540887563504914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111540887563504914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111540887563504914'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2005/01/dissecting-c-application-inside.html' title='Dissecting a C# Application: Inside SharpDevelop'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10438017.post-111540872245924415</id><published>2004-12-24T13:00:00.000-06:00</published><updated>2005-05-06T14:45:22.466-05:00</updated><title type='text'>First Post</title><content type='html'>&lt;div class="entry"&gt;       &lt;p&gt;I’ve finally gotten WordPress [Edit: I moved to blogger after string out into the blogging world as I really didn't want to bother with comment spam, etc. on my own host. ] installed. Sure has a nice interface.&lt;/p&gt;  &lt;p&gt;Anyways, down to business. I’ve been batting around the idea of blogging for quite some time now. Now’s the time when I jump in. (A few days short of a New Years Resolution no less.) &lt;/p&gt;  &lt;p&gt;As to the content, I’ll be posting (hopefully) lots of stuff about Visual Studio .NET, the .NET Framework (v 1.1 and 2.0 mainly), C# language stuff, and other things developer/hacker related. It may/may not be useful. &lt;/p&gt;     &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10438017-111540872245924415?l=miscjibberish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111540872245924415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10438017/posts/default/111540872245924415'/><link rel='alternate' type='text/html' href='http://miscjibberish.blogspot.com/2004/12/first-post.html' title='First Post'/><author><name>Jeremy Wiebe</name><uri>http://www.blogger.com/profile/13405039983105435523</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://3.bp.blogspot.com/_sQkTLzlM-aE/Syuf80eGKSI/AAAAAAAAALU/MOz6P8TiU_4/S220/Jeremy+-+Profile+Picture.png'/></author></entry></feed>
