<?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-7376583486556225332</id><updated>2011-10-03T12:24:02.635+01:00</updated><category term='.net'/><title type='text'>Beardy Box</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-8995179420918187836</id><published>2011-10-03T12:24:00.001+01:00</published><updated>2011-10-03T12:24:02.704+01:00</updated><title type='text'>Functional Fun with Python</title><content type='html'>Built in currying:&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; from functools import  partial &lt;/div&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; binary = partial (int, base=2)&lt;/div&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; binary(&amp;#39;000001&amp;#39;)&lt;/div&gt;&lt;div&gt;1&lt;/div&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; binary(&amp;#39;000011&amp;#39;)&lt;/div&gt; &lt;div&gt;3&lt;/div&gt;&lt;div&gt;&amp;gt;&amp;gt;&amp;gt; binary(&amp;#39;001011&amp;#39;)&lt;/div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&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/7376583486556225332-8995179420918187836?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/8995179420918187836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=8995179420918187836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/8995179420918187836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/8995179420918187836'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2011/10/functional-fun-with-python.html' title='Functional Fun with Python'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-4367547894271478029</id><published>2010-06-02T18:35:00.006+01:00</published><updated>2010-06-02T18:51:57.420+01:00</updated><title type='text'>The state information is invalid for this page and might be corrupted</title><content type='html'>&lt;div&gt;This is a nice gotcha for load balanced ASP.NET sites:&lt;/div&gt;&lt;div&gt;If you have a dynamically compiled ASP.NET website, and you put objects from a dynamic part into the ViewState, you'll be in for a NASTY surprise when you move to a load-balanced scenario.&lt;/div&gt;&lt;div&gt;Basically, you'll occasionally  get exceptions with the message "The state information is invalid for this page and might be corrupted" as the compiled types on the different servers are different.&lt;/div&gt;&lt;div&gt;Either:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Move the types you put into ViewState into a compiled assembly (dll for old-schoolers ), or, &lt;/li&gt;&lt;li&gt;Only use primitive types (int, byte, string, char, etc) in the ViewState. Enums do not count as primitive types.&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/7376583486556225332-4367547894271478029?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/4367547894271478029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=4367547894271478029' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/4367547894271478029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/4367547894271478029'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2010/06/nice-gotcha-for-load-balanced-aspnet.html' title='The state information is invalid for this page and might be corrupted'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-4745690353242356377</id><published>2010-01-15T12:13:00.001Z</published><updated>2010-01-15T12:16:21.040Z</updated><title type='text'>Another reason to use log4net rather than rolling your own logging framework</title><content type='html'>&lt;span class="Apple-style-span"   style="font-family:monospace;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap; "&gt;&lt;log4net.error&gt;Exception during StringFormat: Index (zero based) must be greater than or equal to zero and less than the size of the argument list. &lt;format&gt;Served {0} coupons out of {1} for {3}&lt;/format&gt;&lt;args&gt;{296366, 100, Campaign{id#891e4cb2-da21-456b-bb5e-38cfbf9a90db}}&lt;/args&gt;&lt;/log4net.error&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-4745690353242356377?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/4745690353242356377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=4745690353242356377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/4745690353242356377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/4745690353242356377'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2010/01/another-reason-to-use-log4net-rather.html' title='Another reason to use log4net rather than rolling your own logging framework'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-5799221512114972368</id><published>2009-12-16T14:26:00.002Z</published><updated>2009-12-16T14:29:05.093Z</updated><title type='text'>Google Visualisations API</title><content type='html'>&lt;div&gt;I set up an example of using the Google Visualisations API at&lt;/div&gt;&lt;a href="http://swampstaging.co.uk/uk_singles_chart.html"&gt;http://swampstaging.co.uk/uk_singles_chart.html&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The process for generating this was:&lt;/div&gt;&lt;div&gt;Scrape code from website (ruby+hpricot)&lt;/div&gt;&lt;div&gt;Process code for google's datatable (ruby)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It was a neat way to learn stuff about ruby. programming without a modern IDE is a PITA. i'd forgotten how great resharper+visual studio is. mostly resharper.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-5799221512114972368?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/5799221512114972368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=5799221512114972368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/5799221512114972368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/5799221512114972368'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2009/12/google-visualisations-api.html' title='Google Visualisations API'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-9067817952839196654</id><published>2009-10-05T10:04:00.001+01:00</published><updated>2009-10-05T10:06:06.660+01:00</updated><title type='text'>jQuery code to cycle background colors</title><content type='html'>&lt;pre name="code" language="javascript"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&gt;&lt;br /&gt;        //&amp;lt;![CDATA[&lt;br /&gt;        $(function() {&lt;br /&gt;            $body = $(document.body);&lt;br /&gt;            var colours = ["#007777", "#777700", "#777777", "#770077"];&lt;br /&gt;            var currentColour = 0;&lt;br /&gt;            var fade = function() {&lt;br /&gt;                $body.animate({ backgroundColor: colours[currentColour % colours.length]}, 127000, fade);&lt;br /&gt;                currentColour++;&lt;br /&gt;            };&lt;br /&gt;            fade();&lt;br /&gt;        });&lt;br /&gt;    //]]&gt;&lt;br /&gt;&amp;lt;script&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-9067817952839196654?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/9067817952839196654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=9067817952839196654' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/9067817952839196654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/9067817952839196654'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2009/10/jquery-code-to-cycle-background-colors.html' title='jQuery code to cycle background colors'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-3767747044996445041</id><published>2009-01-15T15:42:00.003Z</published><updated>2009-01-15T15:56:35.159Z</updated><title type='text'>ViewModel - the missing link?</title><content type='html'>With ASP.NET MVC getting all the press now-a-days (well, in my tiny part of the web anyway), it's difficult to (a) not feel jealous if you're still stuck on .Net 2.0, and (b) wonder who's employer let's them used stuff that's still in beta for live websites.&lt;br /&gt;&lt;br /&gt;However, whilst ASP.NET MVC/FubuMVC/MyMumsMVC provides a framework, and gives you more opportunity to get things right, there's still a missing piece of the puzzle that makes it all fit together.&lt;br /&gt;&lt;br /&gt;Consider the lilly of the field.&lt;br /&gt;&lt;br /&gt;If you modelled this, it would probably have a Field property.&lt;br /&gt;Your view can probably handle a FieldId, but it shouldn't really know about a Field property. (Having the View access lilly.Field.Id breaks the &lt;a href="http://en.wikipedia.org/wiki/Law_of_Demeter"&gt;Law Of Demeter&lt;/a&gt; (or, "Two Dots And You're Out"), and your whole SOLID Principals may as well be thrown out with the trash).&lt;br /&gt;&lt;br /&gt;In one project we did, we got around this problem by having our Domain Model classes expose this kind of thing. It get messy really quickly, and really quickly pollutes your Domain Model classes with lots of methods and properties that are only ever used for display. Then they start getting used for business decisions, and pretty soon the project is one big code smell.&lt;br /&gt;&lt;br /&gt;So, how else might we go about this?&lt;br /&gt;&lt;br /&gt;Two patterns that might give us clues are the Facade Pattern and the Adapter Pattern. Go look 'em up. And, whilst you're at it, go look up the Data Transfer Object in your copy of Patterns of Enterprise Application Architecture. (Yeah, get it out from propping up your monitor, wipe off the dust off (a damp cloth is ok on the coated cover) DTO ison &lt;a href="http://martinfowler.com/eaaCatalog/dataTransferObject.html"&gt;page 401&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;So, you get the grasp of taking a bunch of objects (it's called an Object Graph if you're Martin Fowler) and converting it into something else for another purpose. When it's used in the context of aiding and abetting the communications between the Controller and the View (The C and the V in MVC), it's called a ViewModel (people how come up with these clever names are too busy to type a space it seems).&lt;br /&gt;&lt;br /&gt;And it's great. Your ViewModel may include a LillyDescription class, which has properties like FieldId and FieldName, but, and here's the important thing, it doesn't have any non-primitive members (i.e. you're limited to strings, numbers and dates). Also, keep any logic out of them. If it wouldn't be universally frown upon, I'd say just use plain old Fields on the ViewModel classes (but that's heresy, so forget I ever said that) .&lt;br /&gt;&lt;br /&gt;So now, you've got your controller converting between your Domain Model (used by your Business Logic) and your View Model (used my your view). STOP. Your controllers are not meant to do this. Your controllers are meant to control, not convert. Your SOLID Principals are under attack - your "too cool for school" badge will be ripped off your programmer's blazer, and you'll be asked to hand in your gun and your badge. The ALT.NET gang will ex-communicate you, and you'll loose all your profile points on StackOverflow.com.&lt;br /&gt;&lt;br /&gt;So we need something else to assemble the ViewModel objects from the Domain Model objects. Go create another class (or even a Service!) to do this. Unit test the hell out of it - it's a purely programmatical problem, so Unit Testing is easy. Ensure that the ViewModel object has the right set of stuff from the Domain Model, and that it doesn't/does break stuff.&lt;br /&gt;&lt;br /&gt;There - wire up your IoC container with the IViewModelLillyConverterService and it's implementation, and you're good to go. (i.e. expect the Yellow Screen of Death a few times).&lt;br /&gt;&lt;br /&gt;There's a lot of stuff here. I'm still not entirely sure where the line is between all the parts. Although it seems like it'll create an explosion of classes, it really does simplify things. More code is normally worse, but I'd argue that this is more of a Refactoring (yeah, dubious I know).&lt;br /&gt;&lt;br /&gt;Go and play with this idea. See if you can make your view utterly independant of your Domain Model. Go on. Go completely over the top. Then, maybe, you'll get a feel for it.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fbeardybox.blogspot.com%2f2009%2f01%2fviewmodel-missing-link.html"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fbeardybox.blogspot.com%2f2009%2f01%2fviewmodel-missing-link.html&amp;fgcolor=000000&amp;bgcolor=FFFF00" border="0" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-3767747044996445041?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/3767747044996445041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=3767747044996445041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/3767747044996445041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/3767747044996445041'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2009/01/viewmodel-missing-link.html' title='ViewModel - the missing link?'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-8680543282492560526</id><published>2008-12-16T13:54:00.001Z</published><updated>2008-12-16T13:54:58.844Z</updated><title type='text'>Branches and Tags and All That</title><content type='html'>Today, my diligence in creating branches, and then tags, for releases finally paid off. And bit me back.&lt;br&gt;&lt;br&gt;A product, live at version 28.1, and currently at version 29.2 in User acceptance testing, had a critical bug reported in Build 28.&lt;br&gt; &lt;br&gt;No problem - I created a branch from the Build 28 tag, checked this out, fixed the bug (one line), and deployed that to the customer. Hooray - happy customer.&lt;br&gt;&lt;br&gt;However, after creating a new build 28.2 tag, I then had to merge this change back into both the current 29 branch and the trunk, and commit both separately.&lt;br&gt; &lt;br&gt;I know I would not have been able to support this change without the rigorous tagging/branching, but it still grates when you have to do the same merge more than once.&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-8680543282492560526?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/8680543282492560526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=8680543282492560526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/8680543282492560526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/8680543282492560526'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2008/12/branches-and-tags-and-all-that.html' title='Branches and Tags and All That'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-8796405653143204955</id><published>2008-09-25T17:07:00.001+01:00</published><updated>2008-09-25T17:07:23.305+01:00</updated><title type='text'>It was worth writing those unit tests...</title><content type='html'>&lt;div dir="ltr"&gt;Simple specification:&lt;br&gt;&lt;br&gt;If the user is not in the &amp;quot;Admin&amp;quot; role, then buttons x, y, and z are hidden.&lt;br&gt;&lt;br&gt;You&amp;#39;d have thought that unit tested the presenter/controller for this would be pointless, but it highlighted the fact that I&amp;#39;d hard-coded false for the visibility of one of the buttons.&lt;br&gt; &lt;br&gt;I think that was worth the five minutes it took to put the tests together.&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/7376583486556225332-8796405653143204955?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/8796405653143204955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=8796405653143204955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/8796405653143204955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/8796405653143204955'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2008/09/it-was-worth-writing-those-unit-tests.html' title='It was worth writing those unit tests...'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-5595565393312043679</id><published>2008-06-17T15:00:00.005+01:00</published><updated>2008-06-17T15:04:46.135+01:00</updated><title type='text'>SyntaxHighlighter</title><content type='html'>As you can see, I've used &lt;a href="http://code.google.com/p/syntaxhighlighter"&gt;SyntaxHighlighter&lt;/a&gt; to smarted up the posted code.&lt;br /&gt;&lt;br /&gt;One thing I found was that Blogger likes to put "&amp;lt;br&gt;" elements in any "&amp;lt;pre&gt;" code, so I wrote a little javascript to replace them with newlines:&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;(function(){var pres = document.getElementsByTagName('pre');&lt;br /&gt;for ( var i = 0; i &amp;lt; pres.length; ++i ) { &lt;br /&gt;  for ( var br = pres[i].childNodes.length; br &gt; 0; --br ) {&lt;br /&gt;    if ( pres[i].childNodes[br-1].nodeName == 'BR' ) {&lt;br /&gt;       pres[i].replaceChild(document.createTextNode('\n'), pres[i].childNodes[br-1] );&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}})();&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-5595565393312043679?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/5595565393312043679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=5595565393312043679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/5595565393312043679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/5595565393312043679'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2008/06/syntaxhighlighter.html' title='SyntaxHighlighter'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-2979691681286819642</id><published>2007-11-16T17:05:00.000Z</published><updated>2007-11-16T17:15:48.966Z</updated><title type='text'>1 UI Control, 73 Unit Tests</title><content type='html'>When you start introducing dependencies into things, they get complicated pretty quick.&lt;br /&gt;This is doubly true with validation: if one value relies on another, then you need to validate both inputs when either of them change.&lt;br /&gt;If A and B depend on each other, and B and C depend on each other, then you get into really deep water.&lt;br /&gt;The way I've dealt with this is by using a "propagate" flag in the validation functions, which determines whether something should call validation on its dependents.&lt;br /&gt;It seems to work pretty well, but I can see this getting grizzly when theres more than one thing going on. It does help isolate each validation function to be able to validate one thing at a time.&lt;br /&gt;Also, doing it test driven has helped - towards the end, the cycle was only hindered by the speed of compilation.&lt;br /&gt;I'm now confident that it's a robust control that I can build other parts of the UI around.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;I think using some kind &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/11/13/170047.aspx"&gt;microcontroller&lt;/a&gt; may have helped break it up a bit mind, but that's a refactoring for another day.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-2979691681286819642?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/2979691681286819642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=2979691681286819642' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/2979691681286819642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/2979691681286819642'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2007/11/1-ui-control-73-unit-tests.html' title='1 UI Control, 73 Unit Tests'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-8756590881726479328</id><published>2007-10-12T10:24:00.004+01:00</published><updated>2010-05-20T14:08:35.224+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Shuffling a List in C#</title><content type='html'>Fixed &lt;a href="http://beardadventures.blogspot.com/2007/06/shuffling-list-in-c.html"&gt;this post&lt;/a&gt;:&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;public static readonly Random random = new Random();&lt;br /&gt;public static IList&amp;lt;T&gt; Shuffle&amp;lt;T&gt;(IList&amp;lt;T&gt; toShuffle)&lt;br /&gt;{&lt;br /&gt;List&amp;lt;T&gt; deck = new List&amp;lt;T&gt; ( toShuffle );&lt;br /&gt;int N = deck.Count;&lt;br /&gt;&lt;br /&gt;for (int i = 0; i &amp;lt; N; ++i )&lt;br /&gt;{&lt;br /&gt;   int r = i + (int)(random.Next(N - i));&lt;br /&gt;   T t = deck[r];&lt;br /&gt;   deck[r] = deck[i];&lt;br /&gt;   deck[i] = t;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return deck;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-8756590881726479328?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/8756590881726479328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=8756590881726479328' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/8756590881726479328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/8756590881726479328'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2007/10/adventures-with-my-beard-shuffling-list.html' title='Shuffling a List in C#'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-2816891604460975688</id><published>2007-10-12T09:42:00.002+01:00</published><updated>2008-06-17T14:54:13.972+01:00</updated><title type='text'>Generics Array Helper</title><content type='html'>Rather than&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;ObjectWithReallyLongName [] array = new ObjectWithReallyLongName [] { new ObjectWithReallyLongName(...), ... }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We can use generics to create a function:&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;public T[] Array&amp;lt;T&amp;gt; ( params T[] array )&lt;br /&gt;{&lt;br /&gt;    return array;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;used &lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;ObjectWithReallyLongName [] array = Array(new ObjectWithReallyLongName(...), ...);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Seems to read better too.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-2816891604460975688?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/2816891604460975688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=2816891604460975688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/2816891604460975688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/2816891604460975688'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2007/10/generics-array-helper.html' title='Generics Array Helper'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-2480958128966533683</id><published>2007-09-26T14:43:00.001+01:00</published><updated>2007-09-26T14:43:31.934+01:00</updated><title type='text'>Installing Infragistics NetAdvantage on Vista</title><content type='html'>Note to self: To do this successfully, you need to turn off UAC. If you don&amp;#39;t it won&amp;#39;t install properly.&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-2480958128966533683?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/2480958128966533683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=2480958128966533683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/2480958128966533683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/2480958128966533683'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2007/09/installing-infragistics-netadvantage-on.html' title='Installing Infragistics NetAdvantage on Vista'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-7840534160833674850</id><published>2007-09-17T13:17:00.000+01:00</published><updated>2007-09-17T13:23:28.086+01:00</updated><title type='text'>Take a bath...</title><content type='html'>&lt;p&gt;From &lt;a href="http://www.imdb.com/title/tt0138704/"&gt;Pi&lt;/a&gt;:&lt;/p&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td dtid="281474976710662"&gt;&lt;b dtid="281474976710663"&gt;SOL &lt;/b&gt;&lt;/td&gt;&lt;td dtid="281474976710664"&gt;Remember Archimedes of Syracuse? The King asks  Archimedes to determine if a present he's received was actually solid gold.  Unsolved problem at the time. It tortures the great Greek mathematician for  weeks. Insomnia haunts him and he twists and turns on his bed for nights on end.  Finally, his equally exhausted wife, she's forced to share a bed with this  genius, convinces him to take a bath, to relax. While stepping into the tub he  observes the bathwater rise as he enters. Displacement. A way to determine  volume. And thus, a way to determine density, weight over volume. And thus,  Archimedes solves the problem. He screams "Eureka!"—Greek for "I found it!"—and  is so overwhelmed he runs dripping naked through the streets to the King's  castle to report his discovery. Now, what's the moral of the story.  &lt;/td&gt;&lt;/tr&gt;&lt;tr dtid="281474976710665"&gt;&lt;td dtid="281474976710666"&gt;&lt;b dtid="281474976710667"&gt;MAX&lt;/b&gt;&lt;/td&gt;&lt;td dtid="281474976710668"&gt;That a breakthrough will come... &lt;/td&gt;&lt;/tr&gt;&lt;tr dtid="281474976710669"&gt;&lt;td dtid="281474976710670"&gt;&lt;b dtid="281474976710671"&gt;SOL &lt;/b&gt;&lt;/td&gt;&lt;td dtid="281474976710672"&gt;Wrong. The point of the story is the wife.  Listen to your wife, she will give you perspective. Meaning, you need a break,  Max, you have to take a bath, otherwise you'll get nowhere. There will be no  order, only chaos. Go home and take a bath.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I had an Archimedes moment over the weekend. I'd been struggling to work out the problem all last week. Came in this morning and got it nailed in a few hours.&lt;br /&gt;&lt;br /&gt;Take a bath ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-7840534160833674850?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/7840534160833674850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=7840534160833674850' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/7840534160833674850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/7840534160833674850'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2007/09/take-bath.html' title='Take a bath...'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-9019279342048712429</id><published>2007-09-17T11:37:00.001+01:00</published><updated>2008-06-17T14:59:33.610+01:00</updated><title type='text'>Enum</title><content type='html'>&lt;span style="font-family:verdana;"&gt;inspired by &lt;a href="http://devlicious.com/blogs/christopher_bennage/archive/2007/09/13/my-new-little-friend-enum-lt-t-gt.aspx"&gt;Enum&lt;t&gt;&lt;/t&gt;&lt;/a&gt;, here's my version... it still needs to work with resources, but works otherwise.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;public static class Enum &amp;lt;T&gt;&lt;br /&gt;{&lt;br /&gt;          &lt;br /&gt; public static T Parse ( string name )&lt;br /&gt; {&lt;br /&gt;  return ( T ) Enum.Parse ( typeof ( T ), name );&lt;br /&gt; }&lt;br /&gt;                      &lt;br /&gt; public static IEnumerable &amp;lt; T &gt; GetValues ( )&lt;br /&gt; {&lt;br /&gt;  foreach ( T value in Enum.GetValues ( typeof ( T ) ) )&lt;br /&gt;  {&lt;br /&gt;   yield return value;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;        &lt;br /&gt;&lt;br /&gt; public static IEnumerable&amp;lt;AttributeType&gt; GetAttributes &amp;lt;AttributeType&gt; ( T value ) where AttributeType : Attribute&lt;br /&gt; {&lt;br /&gt;  FieldInfo fieldInfo = typeof ( T ).GetField ( value.ToString ( ) );&lt;br /&gt;                        &lt;br /&gt;&lt;br /&gt;  if (fieldInfo != null)&lt;br /&gt;  {&lt;br /&gt;   foreach ( object customAttribute in fieldInfo.GetCustomAttributes ( typeof ( AttributeType ), false )  )&lt;br /&gt;   {&lt;br /&gt;    yield return customAttribute as AttributeType;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;              &lt;br /&gt; public static IList&amp;lt;AttributeType&gt; GetAttributeList &amp;lt;AttributeType&gt; ( T value ) where AttributeType : Attribute&lt;br /&gt; {&lt;br /&gt;  return new List&amp;lt;AttributeType&gt; ( GetAttributes&amp;lt;AttributeType&gt; ( value ) );&lt;br /&gt; }&lt;br /&gt;    &lt;br /&gt; public static string GetDescription( T value )&lt;br /&gt; {&lt;br /&gt;  IList&amp;lt; DescriptionAttribute &gt; attributeList = GetAttributeList&amp;lt;DescriptionAttribute&gt; ( value );&lt;br /&gt;        &lt;br /&gt;  if (attributeList.Count &amp;lt; 1)&lt;br /&gt;   return value.ToString();&lt;br /&gt;          &lt;br /&gt;  return attributeList[ 0 ].Description;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-9019279342048712429?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/9019279342048712429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=9019279342048712429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/9019279342048712429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/9019279342048712429'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2007/09/enum.html' title='Enum&lt;T&gt;'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-7028424982399804175</id><published>2007-09-09T15:37:00.000+01:00</published><updated>2007-09-09T15:49:21.119+01:00</updated><title type='text'>Tools</title><content type='html'>Programmers love tools - just to write a program, you need at least three: text editor; compiler; and, a linker - and that's excluding the computer and the operating system!&lt;br /&gt;However, as with any other craft, there are certain rules you need to follow when using tools:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Use the right tool for the job&lt;/span&gt;&lt;br /&gt;Obviously, you wouldn't try to edit your text with a linker, but even-so...&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Know how to use your tools&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;The same way you can take your fingers using a circular saw incorrectly, you can run your project into a lot of trouble by abusing your tools.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Use the best tools you can get your hands on&lt;br /&gt;&lt;/span&gt;It's not just about cost - you can get good and cheap tools, but you can also get expensive shit.&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Look after your tools&lt;br /&gt;&lt;/span&gt;You main tool as a programmer is your computer. Keep it clean and sharp and it'll be a lot easier to use.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&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/7376583486556225332-7028424982399804175?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/7028424982399804175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=7028424982399804175' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/7028424982399804175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/7028424982399804175'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2007/09/tools.html' title='Tools'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-350176238312558200</id><published>2007-07-04T11:48:00.000+01:00</published><updated>2007-07-04T11:53:23.717+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>.Net Testing And Assemblies Signed with Strong Names</title><content type='html'>&lt;a href="http://beardadventures.blogspot.com/2006/12/net-testing-and-assemblies-signed-with.html"&gt;.Net Testing And Assemblies Signed with Strong Names&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;An old post about clearing the GAC  download cache when unit testing signed assemblies: &lt;code&gt;gacutil /cdl&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-350176238312558200?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/350176238312558200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=350176238312558200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/350176238312558200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/350176238312558200'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2007/07/net-testing-and-assemblies-signed-with.html' title='.Net Testing And Assemblies Signed with Strong Names'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7376583486556225332.post-6824078349489869218</id><published>2007-06-29T12:30:00.000+01:00</published><updated>2007-06-29T12:38:28.029+01:00</updated><title type='text'>Welcome To Beardy Box</title><content type='html'>This blog is my "programmers notes" blog; somewhere I can put all programming and development stuff I think about and not bore my non-technical friends with.&lt;br /&gt;At the moment, as you can see, it's blank, but hopefully it will become a mine of useful information*.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;*some chance!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7376583486556225332-6824078349489869218?l=beardybox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beardybox.blogspot.com/feeds/6824078349489869218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7376583486556225332&amp;postID=6824078349489869218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/6824078349489869218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7376583486556225332/posts/default/6824078349489869218'/><link rel='alternate' type='text/html' href='http://beardybox.blogspot.com/2007/06/welcome-to-beardy-box.html' title='Welcome To Beardy Box'/><author><name>David Kemp</name><uri>http://www.blogger.com/profile/03848249444223250254</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
