<?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-6825852</id><updated>2011-09-05T15:56:17.079Z</updated><title type='text'>Learning VB.NET</title><subtitle type='html'>Benjimawoo - One man. No tagline.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default?start-index=101&amp;max-results=100'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>228</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6825852.post-114356798112730014</id><published>2006-03-28T16:53:00.000Z</published><updated>2006-03-28T17:46:21.186Z</updated><title type='text'>Yay me, and a question...</title><content type='html'>Firstly, yay me!&lt;br /&gt;&lt;br /&gt;I don't care what you might think about the pros and cons of &lt;a href="http://www.microsoft.com/learning/mcp/default.asp"&gt;microsoft certifications&lt;/a&gt;. You may think they're pointless. You may think they're not worth the paper they're printed on.&lt;br /&gt;&lt;br /&gt;Either way, I passed my first exam today. Woo and yay! &lt;a href="http://www.microsoft.com/learning/exams/70-315.asp"&gt;70-315&lt;/a&gt; - I have a certificate that says I can "Develop and Implement Web Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET". Woo!&lt;br /&gt;&lt;br /&gt;The second thing was a question that someone actually asked me this morning that piqued my interest.&lt;br /&gt;&lt;br /&gt;What this guy was trying to achieve was filtering on a Date field in a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.data.dataview.aspx"&gt;Dataview&lt;/a&gt;, but rather than filtering on a continuous date range, he was trying to filter on a series of date ranges.&lt;br /&gt;&lt;br /&gt;Put simply, he wanted to pull out all the records that had a date somewhere in March (for instance). I don't know the exact context he was coming from, but it would be useful if, for example, you had sales data spanning a few years and wanted to see how things were looking on a month-by-month basis.&lt;br /&gt;&lt;br /&gt;Well.&lt;br /&gt;&lt;br /&gt;I discovered it doesn't seem to be as easy as all that to do.  I started out by creating a Dataset in &lt;a href="http://msdn.microsoft.com/vstudio/express/default.aspx"&gt;Visual C# Express&lt;/a&gt;, just by dragging the Employees table from the AdventureWorks database on my toolbar (Ah, the company name may change, but the samples stay the same!).&lt;br /&gt;&lt;br /&gt;My goal was to pull out Employees as a DataTable in my dataset, create a DataView from it and filter the view to just contain everyone that has a birthday in March.&lt;br /&gt;&lt;br /&gt;To start, I thought I'd create a new column populated with an &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatadatacolumnclassexpressiontopic.asp"&gt;expression&lt;/a&gt;, something along the lines of BirthDate.Month (or something similar). However, it looks like you can't do that. Although you can take DataColumns and do simple stuff to them, adding values, subtracting values etc, you can't do anything (it would seem) that's specific to a slightly more complex datatype, like a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.datetime.aspx"&gt;DateTime&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The next thing I though of was to try a do some quick filtering with a &lt;em&gt;LIKE&lt;/em&gt; clause in the dataview's &lt;a href="http://msdn2.microsoft.com/en-us/library/system.data.dataview.rowfilter.aspx"&gt;RowFilter&lt;/a&gt; property, so it looked something like 'view.RowFilter = "BirthDate LIKE '03/%'"' think I could pull out all the March birthdays that way. (n.b. I didn't have to worry about the formatting of the Date because of the &lt;a href="http://benthevbdeveloper.blogspot.com/2005/07/couple-of-things-that-i-noticed-today.html"&gt;culture insensitivity of the expression used to filter DateTime columns&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;Apparently not, though. Apparently you can't apply 'LIKE' and wildcards to DateTime fields. Which, I must admit, makes sense. I was pretty much clutching at straws when I went down that route.&lt;br /&gt;&lt;br /&gt;So, to recap, I wanted to filter on a set of dates. These happened to be all the dates in March for a number of years, but that's by the by.&lt;br /&gt;&lt;br /&gt;In then end, this was how I managed to do it. When I started out, I though it looked a bit hokey, and a bit of a fudge, but as I looked into it more, I'm actually quite impressed with it. It may not be &lt;em&gt;that&lt;/em&gt; elegant a solution, but hey, it does tha job, and at the end of the day, if it works then that's cool.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;TestAdventureWorks.dsTest data = new dsTest();&lt;br /&gt;TestAdventureWorks.dsTestTableAdapters.EmployeeTableAdapter da = &lt;br /&gt;    new TestAdventureWorks.dsTestTableAdapters.EmployeeTableAdapter();&lt;br /&gt;da.Fill(data.Employee);&lt;br /&gt;DataView view = data.Employee.DefaultView;&lt;br /&gt;&lt;br /&gt;StringBuilder s = new StringBuilder();&lt;br /&gt;int StartYear = 1945;&lt;br /&gt;int Month = 4;&lt;br /&gt;for (int i = StartYear; i &lt; 2000; i++)&lt;br /&gt;{&lt;br /&gt;    if (i != StartYear) s.Append(" OR ");&lt;br /&gt;    s.AppendFormat("BirthDate &gt;= #{0}/01/{1}# AND BirthDate &lt; #{2}/01/{1}#", Month, i, Month + 1);&lt;br /&gt;}&lt;br /&gt;view.RowFilter = s.ToString();&lt;br /&gt;Console.WriteLine(string.Format("Rows: {0}", view.Count));&lt;br /&gt;Console.WriteLine(string.Format("Total: {0}", data.Employee.Rows.Count));&lt;br /&gt;Console.ReadLine();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I don't know what the performance is like on it, though. In this case, going through 55 years on a set of 290 rows took around 70ms to complete. Not too shabby, I thought. Considering the length of the RowFilter string that went into it!&lt;br /&gt;&lt;br /&gt;However, my question is this (and if you've read this far, perhaps you know the answer!) Is there a better way of doing it? &lt;br /&gt;&lt;br /&gt;I thought of 1, which is to pull out the month component of the date in the original select statement, so your SELECT would look something along the lines of 'SELECT *, Month(BirthDate) FROM Employees'. It acheives the same thing as my first plan, and would allow you to just set the RowFilter to be 'BirthDateMonth=3'. But that's cheating!&lt;br /&gt;&lt;br /&gt;Anyway, just wanted to share.&lt;br /&gt;&lt;br /&gt;Yay me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-114356798112730014?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/114356798112730014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=114356798112730014' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/114356798112730014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/114356798112730014'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2006/03/yay-me-and-question.html' title='Yay me, and a question...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-114059379166256842</id><published>2006-02-22T07:01:00.000Z</published><updated>2006-02-22T07:36:31.710Z</updated><title type='text'>This is what happens when developers aren't network guys...</title><content type='html'>In a &lt;a href="http://benthevbdeveloper.blogspot.com/2006/02/scheduling-builds-using-team-build.html"&gt;previous post&lt;/a&gt;, I was confused over which user account TfsBuild.exe executes under. I kept on getting various file exceptions and whatnot.&lt;br /&gt;&lt;br /&gt;Well now I know. It runs using the account you specified for all your Team Foundation Server Services to run under (In the installation guides, it's the one called &lt;em&gt;domain&lt;/em&gt;/TFSSERVICE). I can't remember if I specified this account at install-time or not. But there you go.&lt;br /&gt;&lt;br /&gt;Which brings me to the next thing that was causing trouble recently. I wanted to create a new build type that, as well as compiling my application, published it to our test server as well. Very quickly, it was just a matter of creating a new target in the .proj file called "AfterCompile" (overriding the one in the default .targets file), and adding an &lt;a href="http://msdn2.microsoft.com/en-us/library/ms164291.aspx"&gt;AspNetCompiler&lt;/a&gt; task to it for each website I wanted pushed up there.&lt;br /&gt;&lt;br /&gt;Problem was, the TFS Service account couldn't see the folder I was deploying to. No problem. Browse to that folder in explorer, fire up the properties, grant TFS write access and bob's yer uncle. Right? Wrong. &lt;br /&gt;&lt;br /&gt;After a couple of us pored over it for a while my boss' boss casually asked "Have you enabled write access to the share itself?" DOH! Although according to NTFS, the TFS account had write access to that directory, the initial fileshare (about 3 levels up) only had read access enabled. So I could browse to the directory I wanted to in explorer, but writing to it was being blocked by the share permissions.&lt;br /&gt;&lt;br /&gt;I didn't know it worked like that. I figured NTFS alone governed the access level to that directory.&lt;br /&gt;&lt;br /&gt;And that is what happens when developers aren't network guys.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-114059379166256842?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/114059379166256842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=114059379166256842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/114059379166256842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/114059379166256842'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2006/02/this-is-what-happens-when-developers.html' title='This is what happens when developers aren&apos;t network guys...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-114012751630495891</id><published>2006-02-16T21:47:00.000Z</published><updated>2006-02-16T22:05:16.353Z</updated><title type='text'>Something I really could do with finding out...</title><content type='html'>... But I don't know how.&lt;br /&gt;&lt;br /&gt;Here are a couple of things I know:&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemtimerstimerclasstopic.asp"&gt;Timers&lt;/a&gt; aren't thread-safe&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx"&gt;BackgroundWorkers&lt;/a&gt; are thread-safe&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;It's a shady proposition setting a timer running on a form, and doing a straight method call to update the form's display. It works sometimes, but because the timer runs (or at least &lt;em&gt;can run&lt;/em&gt; ) on another thread to the rest of the form, it sometimes falls over.&lt;br /&gt;&lt;br /&gt;There are a few nice elegant ways of sorting this all out and getting everything running properly in .NET 1.x, but .NET 2.0 brings with it the BackgroundWorker class.&lt;br /&gt;&lt;br /&gt;Which is a nice thing, particularly if you want to do some long running processes and update your UI as they go.&lt;br /&gt;&lt;br /&gt;This I know.&lt;br /&gt;&lt;br /&gt;But what I don't know is: what does the timer do when it's not elapsing? Obviously it's ticking away, just... well... being a timer, but is that it?&lt;br /&gt;&lt;br /&gt;What I'm getting at (albeit in a roundabout and thoroughly confused way) is this:&lt;br /&gt;&lt;br /&gt;I have a countdown timer that updates the form every second. I can't just use a timer to do it and handle its Elapsed event, but what if I fired up a BackgroundWorker, and then just called System.Threading.Thread.Sleep(1000) in a loop, raising the ReportProgress at each cycle through the loop?&lt;br /&gt;&lt;br /&gt;Is that a good idea? It seems to me to be the easiest, certainly the quickest way to achieve it, but is it really good practice? Thread.Sleep() always strikes me as being a bit of a hack, but it works.&lt;br /&gt;&lt;br /&gt;I'm sure I'll work something out eventually. Who knows. Could be I'm doing it a good way. Doubt it, though.&lt;br /&gt;&lt;br /&gt;Just wanted to share my bafflement. Of course, if anyone knows the answer, then let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-114012751630495891?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/114012751630495891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=114012751630495891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/114012751630495891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/114012751630495891'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2006/02/something-i-really-could-do-with.html' title='Something I really could do with finding out...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113926324828795874</id><published>2006-02-06T21:17:00.000Z</published><updated>2006-02-06T22:01:05.526Z</updated><title type='text'>Scheduling builds using Team Build</title><content type='html'>Today I've been having big fun trying to get an automatic build schedule together for the project I'm working on at the moment.&lt;br /&gt;&lt;br /&gt;Yes, that's right. Trying. Nearly there, and there are several things I've learnt along the way about Team Build. Here are the important ones (in no particular order):&lt;br /&gt;&lt;br /&gt;1) &lt;strong&gt;There's no inbuilt scheduler. &lt;/strong&gt;&lt;br /&gt;No real biggie, but before you spend half the morning looking for it, know that it's not there to be found. You'll just have to schedule it to run via Windows' task scheduler.&lt;br /&gt;&lt;br /&gt;2) &lt;Strong&gt;The command line tool TfsBuild.exe rules&lt;/strong&gt;&lt;br /&gt;See 1. Actually, I must say, the command line tool is really useful. It lives at:&lt;br /&gt;&lt;em&gt;&amp;lt;TeamBuildInstallDir&amp;gt;\Common7\IDE\TFSBuild.exe&lt;/em&gt; and is surprisingly good.&lt;br /&gt;It can be called using: &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;TfsBuild.exe start &amp;lt;TeamFoundationServer&amp;gt; &amp;lt;ProjectName&amp;gt; &amp;lt;BuildType&amp;gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As you might have guessed, it'll go to your TFS Server, find the build type you've specified, download the configuration from source control (the current checked in version) and build based on that. Which I think is really neat.&lt;br /&gt;&lt;br /&gt;It's not without its quirks, though. I spent ages feeding it different renditions of our server name (http://server, http://server:8080, etc...) and it kept on saying it couldn't find the server I was pointing it at. I found &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=197258&amp;SiteID=1"&gt;this post from someone who was having exactly the same problem&lt;/a&gt;, though, and the solution at the bottom worked for me. Go into the registry and find &lt;em&gt;HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\TeamFoundation\Servers&lt;/em&gt; and add your server in there. Admittedly, I mimicked exactly what Joey Bradshaw did and put the friendly name of our server in as the key, and the full server name as the value. I don't know if the key is significant, but by this time I was getting hungry and wanted to go to lunch. Worked, though, which is the important thing.&lt;br /&gt;&lt;br /&gt;3) &lt;strong&gt;Any kludges you've put together for getting your project to compile - better fix them properly&lt;/strong&gt;&lt;br /&gt;Yes, I know, this is pretty much the whole point of an automated build. But still. I came a cropper a couple of times with dll references.&lt;br /&gt;&lt;br /&gt;We have a bunch of 3rd party and legacy dll's that we reference from our current project, which is fine. We keep them on a shared drive, the dll paths in the reference and the .refresh files in websites are pointing to that share, everything's happy. Until...&lt;br /&gt;&lt;br /&gt;4) &lt;strong&gt;I'm buggered if I can work out what user account TfsBuild.exe runs under.&lt;/strong&gt;&lt;br /&gt;I kept on getting reports that the drive out shared dll's live on didn't exist. And fair enough, the standard shared drive mapping that all the developers use wasn't there. No biggie. Just log in under the account the Team Build service runs under, map the drive, and Bob's your uncle, yeah? No. Kept on getting the same errors reported that the drive didn't exist. &lt;br /&gt;&lt;br /&gt;So I changed all the references in the source code to full network paths. Sorted, eh?  No. Changed the permissions on the network share to allow the Team Build Service account read access, and it all worked fine. Go figure. It wouldn't pick up the drive I mapped under its account, but it's definitely the account that goes fishing about on the network to find those pesky dll's. &lt;br /&gt;&lt;br /&gt;Oh well. It's done now.&lt;br /&gt;&lt;br /&gt;So (at last!) I've got a successful build going on. Yeah?&lt;br /&gt;&lt;br /&gt;Almost...&lt;br /&gt;&lt;br /&gt;5) &lt;strong&gt;Your project may well compile, but your Unit Tests might not...&lt;/strong&gt;&lt;br /&gt;Once I got my main project to build, I shifted my Test project from the old server to the new. Yeah yeah, I should have done all that when I first moved the rest of the project, but hey, this is me. It was Friday and I just wanted to get everything working and go home.&lt;br /&gt;&lt;br /&gt;So I moved my Unit tests over, changed all the external references (as I had discovered already. Built fine. Go to run it? Nope. Unit Tests don't run at all. Compile fine, but won't run. You'll need to give the dll's in the shared folder elevated elevated privileges to get them to run (elevated from the normal Intranet code group, anyway).&lt;br /&gt;&lt;br /&gt;6) &lt;strong&gt;There's nothing better on this earth than that little green tick!&lt;/strong&gt;&lt;br /&gt;No matter what people tell you. When you see that green tick, there's nothing better!&lt;br /&gt;&lt;br /&gt;7) &lt;strong&gt;Once it all works, it Team Build really does rule!&lt;/strong&gt;&lt;br /&gt;The reports Team Build produces are so cool. They're so comprehensive, and the integration with the rest of Team Foundation Server is fantastic. Once your project builds, it'll go back and See what changes have been checked in since the last successful build. It'll find all the work items associated with those changesets, indicate on them all that those changes have made it into a build, and give you some friendly statistics and scary numbers to tell your boss.&lt;br /&gt;&lt;br /&gt;It'll even create a new work item if it fails that links to the failed build report and tells you to fix it!&lt;br /&gt;&lt;br /&gt;All in all. It's been a bit of work today, and it's not &lt;em&gt;quite&lt;/em&gt; over yet. But we're now running automated nightly builds and loving every second of it!&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113926324828795874?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113926324828795874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113926324828795874' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113926324828795874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113926324828795874'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2006/02/scheduling-builds-using-team-build.html' title='Scheduling builds using Team Build'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113900841268165605</id><published>2006-02-03T22:58:00.000Z</published><updated>2006-02-03T23:25:41.320Z</updated><title type='text'>The Midas Touch</title><content type='html'>There are some people that just have the touch of gold for some things.&lt;br /&gt;&lt;br /&gt;Carl Franklin is one of them.&lt;br /&gt;&lt;br /&gt;I've been listening to &lt;a href="http://www.dotnetrocks.com"&gt;DotNetRocks&lt;/a&gt; for a couple of years now, and it's always been fantastic. In fact, when I'm not talking to my boss, I crdeit my entire career to DNR. Obviously, I tell my boss it's all down to me being fantastic!&lt;br /&gt;&lt;br /&gt;But now he's come out with &lt;a href="http://www.dnrtv.com"&gt;DnrTV&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;It does rule. I've seen much love in the blogosphere (although I hate that word!) to prove it.&lt;br /&gt;&lt;br /&gt;The only thing I have trouble with is remembering everything. Not only do I have to seclude myself from the missus for an hour, but it is also like a total vulcan mind-meld taking it all in!&lt;br /&gt;&lt;br /&gt;BUT. It does rule. It's right there on the top of my list of things to do when Mrs Mawoo is out.&lt;br /&gt;&lt;br /&gt;PS - Nobody can ever beat &lt;a href="http://www.franklins.net/ceasers.jpg"&gt;Geoff's hair&lt;/a&gt; (nb Geoff is second from the right, the one up from the... well ... you'll spot him from  his hair! It's the greatest, I have dreams where my hair is as cool as Geoff's!)&lt;br /&gt;&lt;br /&gt;PPS - If anyone wants an MSN 8.0 Beta invite, just &lt;a href="mailto:cider_demon@yahoo.com"&gt;email me&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PPPS - Did I say right? I Geoff's in fron the left! In fron the right is &lt;a href="http://www.infusionblogs.com/blogs/activenick/"&gt;ActiveNick&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113900841268165605?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113900841268165605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113900841268165605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113900841268165605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113900841268165605'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2006/02/midas-touch.html' title='The Midas Touch'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113834271692032386</id><published>2006-01-27T06:10:00.000Z</published><updated>2006-01-29T20:52:19.323Z</updated><title type='text'>Have these always been here? Or am I being stupid?</title><content type='html'>In the code editor in VS 2005 (any edition I guess, but I've been using VS Team Edition for Software Developers):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Right Click.&lt;/li&gt;&lt;li&gt;Expand the 'Breakpoint' menu item.&lt;/li&gt;&lt;li&gt;&lt;em&gt;Click 'Insert Tracepoint'&lt;/em&gt;&lt;/li&gt;&lt;li&gt;Enter a message&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;You'll now have whatever message you want printed out in the output window. It can print the calling method, stack trace and a whole raft of other stuff.&lt;br /&gt;&lt;br /&gt;Although I'm quite inclined to use Trace.Write() in a web app (I figure if it's something you want to know when you're writing it initially, it'll be useful to know when it's actually in use), there are times when it's a bit of overkill putting a permanent trace in for some of the stuff you're debugging.&lt;br /&gt;&lt;br /&gt;Neat eh? I've just discovered that it's there is Visual Studio but not the Express Editions.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113834271692032386?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113834271692032386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113834271692032386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113834271692032386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113834271692032386'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2006/01/have-these-always-been-here-or-am-i.html' title='Have these always been here? Or am I being stupid?'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113834196058692427</id><published>2006-01-27T06:04:00.000Z</published><updated>2006-01-27T06:06:00.596Z</updated><title type='text'>I mean Really....</title><content type='html'>Honestly, though.&lt;br /&gt;&lt;br /&gt;Who checks in breaking changes 10 minutes before going-home time, eh? &lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113834196058692427?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113834196058692427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113834196058692427' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113834196058692427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113834196058692427'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2006/01/i-mean-really.html' title='I mean Really....'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113713258928588619</id><published>2006-01-13T06:05:00.000Z</published><updated>2006-01-13T06:09:49.296Z</updated><title type='text'>In the midnight hour...</title><content type='html'>She may well have cried 'More, More, More', but that's beside the point.&lt;br /&gt;&lt;br /&gt;The point is I have more Live Messenger Beta invitations to give away.&lt;br /&gt;&lt;br /&gt;As &lt;a href="http://benthevbdeveloper.blogspot.com/2006/01/anyone-for-windows-live-messenger-80.html"&gt;before&lt;/a&gt;, mail me &lt;a href="mailto:cider_demon@yahoo.com"&gt;here&lt;/a&gt; if you want one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113713258928588619?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113713258928588619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113713258928588619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113713258928588619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113713258928588619'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2006/01/in-midnight-hour.html' title='In the midnight hour...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113666314980130656</id><published>2006-01-07T19:42:00.000Z</published><updated>2006-01-07T19:45:49.810Z</updated><title type='text'>Quickly...</title><content type='html'>Just in case anyone actually visits this blog 'in person' (rather than subscribing to the feed) the comments seem to be on the blink at the moment.&lt;br /&gt;&lt;br /&gt;If they're not sorted out shortly, I think I might move back to Blogger's native commenting system. It's been made much better since I first moved aaway from it all those many moons ago...&lt;br /&gt;&lt;br /&gt;If you don't visit the blog itself (You're not missing much. I really need to have a sit down and redesign it) then ignore this post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113666314980130656?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113666314980130656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113666314980130656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113666314980130656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113666314980130656'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2006/01/quickly.html' title='Quickly...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113661969258356380</id><published>2006-01-07T07:38:00.000Z</published><updated>2006-01-07T07:41:32.593Z</updated><title type='text'>Anyone for Windows Live Messenger 8.0?</title><content type='html'>I have a some invitations to the &lt;a href="http://ideas.live.com/programpage.aspx?versionId=0eccd94b-eb48-497c-8e60-c6313f7ebb73"&gt;Windows Live Messenger 8.0 Beta&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;mail me &lt;a href="mailto:cider_demon@yahoo.com"&gt;here&lt;/a&gt; if you're interested.&lt;br /&gt;&lt;br /&gt;Just want to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113661969258356380?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113661969258356380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113661969258356380' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113661969258356380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113661969258356380'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2006/01/anyone-for-windows-live-messenger-80.html' title='Anyone for Windows Live Messenger 8.0?'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113649932063072355</id><published>2006-01-05T22:04:00.000Z</published><updated>2006-01-05T22:15:20.643Z</updated><title type='text'>Quick thought before bed</title><content type='html'>I've heard it said that the biggest security hole in any system is the one between the keyboard and the chair. People (or at least a lot of people) need to be kinda protected from themselves. Particularly when it comes to 'all that technical stuff' like computers. Which is a shame, considering how ubiquitous they've become.&lt;br /&gt;&lt;br /&gt;Here's a really tiny thought, but one that only occurred to me today.&lt;br /&gt;&lt;br /&gt;Would it really be that hard to have a header or a flag or something on a web page that told the browser that under no circumstances should they cache, autocomplete, or in any way retain on the computer and values put into a form?&lt;br /&gt;&lt;br /&gt;Just occurred to me today when Firefox autocompleted my bank details and password when I was paying some bills online.&lt;br /&gt;&lt;br /&gt;Don't get me wrong, most of the websites I go to that need authentication have their username and passwords autocompleted. I love it. I'm even right down with Firefox's domain-level password remembering stuff (so if your site of choice puts its session ID in the URL, it'll still complete your details). But there are just some places that I really don't want to be &lt;em&gt;able&lt;/em&gt; to do it, event if I wanted to!&lt;br /&gt;&lt;br /&gt;PS - Yes, it's fixed now. I was in a rush one time to see my bank statement for various reasons, working on a brand new machine that I hadn't configured yet, so that's why all the details were there. But very few people I know even know &lt;em&gt;how&lt;/em&gt; to clear their saved passwords.&lt;br /&gt;&lt;br /&gt;Just wanted to share. I'm off to bed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113649932063072355?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113649932063072355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113649932063072355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113649932063072355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113649932063072355'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2006/01/quick-thought-before-bed.html' title='Quick thought before bed'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113622638229612124</id><published>2006-01-02T18:14:00.000Z</published><updated>2006-01-02T18:32:23.103Z</updated><title type='text'>Well whaddya know?</title><content type='html'>If you type something into the address bar in Internet Explorer and hit ctrl+enter, it forms a complete .com URL from that word, so enter 'microsoft' and hit ctrl+enter and it'll complete it to 'http://www.microsoft.com'.&lt;br /&gt;&lt;br /&gt;This is not new. It's been there for donkey's years, and it even got through to Firefox.&lt;br /&gt;&lt;br /&gt;However, Firefox took it one step further.&lt;br /&gt;&lt;br /&gt;FF completes the addresses with the following top-level-domain extensions:&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;th style="border-bottom:black 1px solid;border-right:black 1px solid"&gt;Key combo&lt;/th&gt;&lt;th style="border-bottom:black 1px solid"&gt;Suffix&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1px solid"&gt;CTRL+ENTER&lt;/td&gt;&lt;td&gt;.com&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1px solid"&gt;SHIFT+ENTER&lt;/td&gt;&lt;td&gt;.net&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-right:black 1px solid"&gt;CTRL+SHIFT+ENTER&lt;/td&gt;&lt;td&gt;.org&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Who knows - there may even be more. I just haven't found them yet, though.&lt;br /&gt;&lt;br /&gt;Discovered it on the last day I was at work before christmas. Been running round like a madman since then, though. I'll be glad to get back into the office for a break!&lt;br /&gt;&lt;br /&gt;Anyway, hope y'all had a good one. &lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113622638229612124?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113622638229612124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113622638229612124' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113622638229612124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113622638229612124'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2006/01/well-whaddya-know.html' title='Well whaddya know?'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113364172452700883</id><published>2005-12-03T20:04:00.000Z</published><updated>2005-12-03T21:07:30.496Z</updated><title type='text'>Quick SQL Reporting tip</title><content type='html'>I usually have to customize the data that's presented in a report in SQL Reporting services based on the currently logged in user. I'm guessing I'm not the only one.&lt;br /&gt;&lt;br /&gt;The good news? It's really &lt;em&gt;really&lt;/em&gt; easy!&lt;br /&gt;&lt;br /&gt;What you can do is simply create a new String parameter (called something imaginative like 'CurrentUser' or something). When you create the parameter in the report designer, it'll give you a bunch of configuration options for the parameter. The main one you're interested in is the Default value.&lt;br /&gt;&lt;br /&gt;Select 'Non-Queried' from the radio button list on the left, and then in the text-box that's enabled, enter the following function:&lt;br /&gt;&lt;code&gt;=Right(User!UserID, len(User!UserID)-instr(User!UserID, "\"))&lt;/code&gt;&lt;br /&gt;Looks ugly, yeah? But it's quite logical, if you break it down a bit:&lt;br /&gt;&lt;code&gt;Right(&lt;em&gt;string, length&lt;/em&gt;)&lt;/code&gt; gives you the right &lt;em&gt;n&lt;/em&gt; characters of &lt;em&gt;string&lt;/em&gt;. So if you entered &lt;code&gt;Right("Monkey", 3)&lt;/code&gt; the resulting string would be 'key', the right 3 characters of the work 'Monkey'.&lt;br /&gt;&lt;br /&gt;In this context, the string we're initial string is &lt;code&gt;User!UserID&lt;/code&gt;. This is a report function that gets the login of the user viewing the report. The value is in the form DOMAIN/USER, which might be fine as is for your reporting. However, when I was using it, I just wanted the name part of the login, rather than both the domain and name. &lt;code&gt;instr&lt;/code&gt; and &lt;code&gt;len&lt;/code&gt; both combine to give me the user portion of the UserName. &lt;code&gt;len(User!UserID)&lt;/code&gt; returns the length of the UserID string in its entirety. So for 'MARVIN\Ben' (my current login) it would return  10.&lt;br /&gt;&lt;code&gt;instr(&lt;em&gt;String, StringToFind&lt;/em&gt;)&lt;/code&gt; returns the index of StringToFind within String. So taking my current login as an example, &lt;code&gt;instr("MARVIN\Ben", "\")&lt;/code&gt; returns 7.&lt;br /&gt;If you evaluate those 2 expressions, the outer expression then reads &lt;code&gt;=Right(User!UserID, (10-3))&lt;/code&gt;, which is why the expression returns 'Ben' in my report.&lt;br /&gt;&lt;br /&gt;That's not the clever bit, though.&lt;br /&gt;&lt;br /&gt;The clever bit lies in the rest of the parameters.&lt;br /&gt;&lt;br /&gt;If you have a datasource that requires parameters, say you're pulling results from a stored procedure, the report designer automatically adds those parameters to the parameters collection off the report. Since all the report parameters are evaluated in the order they appear in the list (Or are displayed in the order they are evaluated, if you like) you can out your CurrentUser parameter at the top of the list, and then if any of your query parameters need the current username, rather than repeat the function, you ca just refer to the CurrentUser parameter using &lt;code&gt;Parameters!CurrentUser.Value&lt;/code&gt;. Just hide those parameters (more on that in a minute), set their defaults to the CurentUser parameter's value, and you're away!&lt;br /&gt;&lt;br /&gt;The final stage is to hide the current user parameter. This differs depending on which version of SSRS you're using, but the 2 I know about are:&lt;ol&gt;&lt;li&gt;the SSRS 2005 parameter dialog box has a 'Hide Parameter' check box. Just tick that and you're done&lt;/li&gt;&lt;li&gt;In SSRS 2000 (which is what I'm using at home) if you clear the 'Prompt' value in the dialog, it'll automatically hide the parameter for you&lt;/li&gt;&lt;/ol&gt;But wait, there's more! Something that I was absolutely overjoyed to find out!&lt;br /&gt;&lt;br /&gt;You set the default value of the CurrentUser parameter when the report fires up. Now normally, if the parameter is hidden, that value will never change. However if you un-hide that parameter, you can edit it and re-run the report using that value. This makes it an absolute doddle to debug and test. If you want to test the report output using several different users, you can just do it right there and then. And if you've set all the rest of the report parameters' defaults to refer to CurrentUser, then they'll all pick up the value you enter.&lt;br /&gt;&lt;br /&gt;When you're done testing and are happy with the results that are being produced for your users, then you can just re-hide the parameter in the designer and publish the report. Once that's done, your report will produce custom output for each user, with no user intervention required or, in fact, allowed.&lt;br /&gt;&lt;br /&gt;Clever eh? I love SQL Server Reporting Services. They're my friend.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113364172452700883?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113364172452700883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113364172452700883' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113364172452700883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113364172452700883'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/12/quick-sql-reporting-tip.html' title='Quick SQL Reporting tip'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113277623294926980</id><published>2005-11-23T19:53:00.000Z</published><updated>2005-11-23T20:03:52.960Z</updated><title type='text'>So much stuff, so little time...</title><content type='html'>Gah! So busy of late! Been writing lots of C#, and here are my cool features, in no particular order, and with no (at the time of writing) links (Sorry).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Refactoring Support&lt;/li&gt;&lt;li&gt;Windows Forms designer guide lines&lt;/li&gt;&lt;li&gt;Generics - say no more&lt;/li&gt;&lt;li&gt;Partial classes&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;There are so many more as well. I just love it. The joy is back.&lt;br /&gt;&lt;br /&gt;Been working on some other cool stuff as well:&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/sql/bi/reporting/"&gt;SQL Reporting Services&lt;/a&gt; - Just check it out. They rule!&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/sql/"&gt;SQL Server 2005 in general&lt;/a&gt; - Okay, I'm cheating. I'm on a SQL Server 2005 course this week.&lt;br /&gt;&lt;br /&gt;Yes. I'm afraid there's nothing new to report. I'm just a jobbing developer, after all.  Although I must admit, that amid the furore over the minor bugs that still inevitably remain in VS2005, &lt;a href="http://searchvb.techtarget.com/originalContent/0,289142,sid8_gci1146746,00.html"&gt;Mike Gunderloy has some words of sanity&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Not a lot to share, but I have anyway. So there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113277623294926980?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113277623294926980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113277623294926980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113277623294926980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113277623294926980'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/11/so-much-stuff-so-little-time.html' title='So much stuff, so little time...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113213293562804478</id><published>2005-11-16T09:19:00.000Z</published><updated>2005-11-16T09:22:15.636Z</updated><title type='text'>It's only a real little thing...</title><content type='html'>... But am I the only person who thinks that it would be a good idea fo a text editor to not only use punctuation and spacing to skip from word to word when you ctrl+crsr, but to include CapitalLetters in how it delimits word boundaries?&lt;br /&gt;&lt;br /&gt;It's just been plaguing me over the past few days. I guess the alternative is to learn how to type properly...&lt;br /&gt;&lt;br /&gt;Just asking the question...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113213293562804478?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113213293562804478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113213293562804478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113213293562804478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113213293562804478'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/11/its-only-real-little-thing.html' title='It&apos;s only a real little thing...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113060224368861159</id><published>2005-10-29T16:04:00.000Z</published><updated>2005-10-29T16:18:38.100Z</updated><title type='text'>Great articles about Generics</title><content type='html'>Like most people, I daresay, the only way I've really been using generics over the past couple of months is for creating strongly types collections with System.Collections.Generics.List&lt;T&gt;'s, but I know in my heart of hearts that that's only half the story. Not even half of it. It's more like the first paragraph in the novel of Generics.&lt;br /&gt;&lt;br /&gt;There are some great articles about generics and their use up on MSDN (Gratuitously nicked from the excellent &lt;a href="http://vbfeeds.com/Default.aspx"&gt;VBFeeds.com&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/netframework/default.aspx?pull=/library/en-us/dndotnet/html/Fundamentals.asp"&gt;Generics FAQ: Fundamentals&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/netframework/default.aspx?pull=/library/en-us/dndotnet/html/NetFramework.asp"&gt;Generics FAQ: .NET Framework&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/netframework/default.aspx?pull=/library/en-us/dndotnet/html/BestPractices.asp"&gt;Generics FAQ: Best Practices&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/netframework/default.aspx?pull=/library/en-us/dndotnet/html/ToolSupport.asp"&gt;Generics FAQ: Tool Support&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not just sharing, I wanted to remember them as well...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113060224368861159?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113060224368861159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113060224368861159' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113060224368861159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113060224368861159'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/10/great-articles-about-generics.html' title='Great articles about Generics'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-113027247137986769</id><published>2005-10-25T20:17:00.000Z</published><updated>2005-10-25T20:34:31.410Z</updated><title type='text'>A grand day out. And a Grand night in!</title><content type='html'>So I spent my Saturday in the company of a whole bunch of UK nerds this weekend. And oh my, what a cool day! I've never really been to any real developer events, certainly not one that was so fiercely community driven as &lt;a href="http://www.developerday.co.uk/ddd/default.asp"&gt;DeveloperDeveloperDeveloper &lt;/a&gt;on Saturday. And oh my what a day it was.&lt;br /&gt;&lt;br /&gt;In keeping with my general philosophy of trying to learn new stuff that I wouldn't really have an excuse to get to know about otherwise (i.e. pretty much avoiding anything that I'm likely to encounter in work) I saw some really great people enthusing about some really cool things.&lt;br /&gt;&lt;br /&gt;My personal highlights included:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://idunno.org/"&gt;Barry Dorrans&lt;/a&gt; being very excited about MsBuild.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.geekswithblogs.net/twickers"&gt;Liam Westley&lt;/a&gt; being very quick and cool about SubVersion (Despite the organisers' best efforts to kleep him off the agenda ;-))&lt;/li&gt;&lt;li&gt;Ben Lamb bubbling over with the funky new stuff headed up for C# 3.0&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Those are just the ones that leap readiliy to mind. I also saw some cool stuff around the CLR in SQL Server 2005, new stuff in the System.XML namespace and many many more.&lt;br /&gt;&lt;br /&gt;It was also just really cool to see so many people there, all of whom sort of share a bit of an interest. I've discovered through my travels in the world of the fledgling developer that it's something of a solitary path to tread. Thanls to all the organisers and attendees who made it such a fun day out. No doubt I'll be at the next one.&lt;br /&gt;&lt;br /&gt;And then, to cap it all, got home from Reading only to find that Mrs Mawoo had organised a surprise birthday party for me, so there was much beer, merriment and general fun afterwards as well (although I'm ashamed to say I was the first to leave the party. Sat down for 5 minutes, and all of a sudden all of my friends had gone and Mrs Mawoo was waking me up to put my PJ's on. That's what you get for going out all day then trying to party after!)&lt;br /&gt;&lt;br /&gt;And last but not least, a big thanks to John who let me scrounge a ride from my house to Reading. And back. Eventually!&lt;br /&gt;&lt;br /&gt;That's it for now. No doubt there'll be more coming. I've got a bunch of tech stuff in my head just dying to come out, but so little time to actually write it! Damned commute! Gah!&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-113027247137986769?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/113027247137986769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=113027247137986769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113027247137986769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/113027247137986769'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/10/grand-day-out-and-grand-night-in.html' title='A grand day out. And a Grand night in!'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112821288571545712</id><published>2005-10-02T00:20:00.000Z</published><updated>2005-10-02T00:28:05.720Z</updated><title type='text'>Non Smokers look away now...</title><content type='html'>I know it's a particularly anti-social habit, as well as being about the least politically correct thing one can do, but I am a smoker.&lt;br /&gt;&lt;br /&gt;Even worse, I don't even have the decency to be a victime of smoking. I dont't smoke 'Because I Can't Help It' or 'Because I need to' or any ligitimate reason like that.&lt;br /&gt;&lt;br /&gt;I smoke because, bad as it is, and an unpopular an opinion as it is, I actually enjoy it. Every cigarette is as good as the last, and so on and so forth.&lt;br /&gt;&lt;br /&gt;I smoke for the same reason some people eat chocolate. It's nice. It makes me feel good and I like it.&lt;br /&gt;&lt;br /&gt;So I've just got one thing to say in this post. If you're a smoker, try a shisha pipe. I brought one back from my holiday in Egypt, and it's a really nice smoke. Bought back 4 flavours of tobacco, Cappucino, Pistachio, Apple and Cola (just to see what it was like). I'm working my way through my Cappucino at the minute, and it's really quite nice. Doesn't taste much like coffee, but it certainly has something about it that's coffee-esque.&lt;br /&gt;&lt;br /&gt;Really quite nice. And smoing a shisha's very nice as well. I heartily recommend it.&lt;br /&gt;&lt;br /&gt;Apologies for irrelevance, political incorrectness and bad-for-your-healthness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112821288571545712?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112821288571545712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112821288571545712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112821288571545712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112821288571545712'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/10/non-smokers-look-away-now.html' title='Non Smokers look away now...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112757664836353521</id><published>2005-09-24T17:15:00.000Z</published><updated>2005-09-24T16:12:42.086Z</updated><title type='text'>Debugging and testing serviced components</title><content type='html'>I've been working over the past couple of weeks on a new data access component at work. For many and varied reasons I decided to implement it as a serviced component. I wanted to take advantage of COM+'s ability to pool and maintain objects, as well as its tried and tested transaction management capabilities for slinging stuff in and out of a SQL Server database. &lt;br /&gt;&lt;br /&gt;Since we're using VS 2005 to develop this new project, I wanted to take advantage of the integrated Unit Testing tools that come with it straight out of the box to make sure my component was working as expected. It was here that I encountered one or two things that I'm noting here so I can remember them:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;You'll never get good code coverage stats&lt;/strong&gt;&lt;br /&gt;One of the things that needs to be configured when you enable Code Coverage in VS 2005 is exactly which DLL's it's going to create code coverage stats for.&lt;br /&gt;&lt;br /&gt;Unfortnately there are 2 things that prevent VS from allowing it for DLL's that contain serviced components.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;COM+ only looks in the GAC&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;If you want COM+ to recognise your component and run it as a server component (as opposed to a library component - more in that in a minute) you must install it in the GAC. This is no biggie. You just open up you WINDOWS/Assembly folder and drag/drop your DLL into it. Job done (thanks to the Fusion shell extension). You can also use GACUTIL.exe, but isn't dragging and dropping so much easier?&lt;br /&gt;&lt;br /&gt;So you've got you component installed in the GAC, you then need to register it as a serviced component. Easy. Just use REGSVC.exe and bob's your uncle. One serviced component, configurable through the Component Services management utility. Cool.&lt;br /&gt;&lt;br /&gt;The problem arises, however, when you try to set up code coverage to get stats on your component. You can only reference DLL files directly, and by default the 'Select Artifacts to Instrument' dialog only incldes those DLL's in your solution.&lt;br /&gt;&lt;br /&gt;You &lt;em&gt;can&lt;/em&gt; add other DLL's to the list, but try to navigate to the GAC and add them from there, and no dice. It somply won't allow you. This is either an intentional feature, or a side-effect of Fusion. Although in real life, the GAC is organised as a bunch of folders with subfolders and DLL files within them, when viewed in Explorer (as in, for instance, the Open File dialog) the assemblies appear as assembly objects. Since these aren't actual DLL files, the dialog won't allow you to add them.&lt;br /&gt;&lt;br /&gt;Oh well. I'll have a play about and see if I can't work out a way around it. I've got a couple of ideas, but they all generally revolve around changing the way the component is referenced, and as such, change the overall context in which the abject will be used. Change the test environment too much from how it's actually going to be deployed, and you've negated your tests - they're no longer valid. &lt;em&gt;Some&lt;/em&gt; (and I really do mean a very small amount) things can be changed for the purposes of testing and debugging, but not too much.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Serviced Components don't run in the normal application context&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Actually, this isn't strictly true. Serviced components &lt;em&gt;can&lt;/em&gt; be run inside the context of the calling application. And it's really simple to do, too. On the property sheet for the COM+ Application you've created, under the 'Activation' tab, select 'Library Application'. This will create the objects created by COM+ in the context of the calling application. &lt;br /&gt;&lt;br /&gt;This can even be demonstrated really easily - just step through some code that calls a serviced component you've made in the debugger. If the application's running as a Server application (i.e. objects are actually created and run in dllhost.exe, rather than in the calling app) the debugger will just step over that code. Press F11 all you like, it won't do any good. Because the object isn't in the same process as the app being debugged, it won't step into it. However if you change the configuration to a Library application, you will be able to debug to your heart's content.&lt;br /&gt;&lt;br /&gt;So what's that got to do with Code Coverage? Well, (I think) VS only produces results for code running in the TestHost process, or the ASP.NET equivalent, if you configure it that way. So, even if I did manage to add the GAC'ed DLL, my code coverage stats would be poor. UNLESS, for the purposes of testing I configured the app as a LIbrary Application.&lt;br /&gt;&lt;br /&gt;I guess you'd only need to do it the once, though. Once you know your unit tests cover x% of your component's code, you can configure it how it'd be in production and leave it - if you're using Team System you'll be able to publish the results and keep a record of the coverage stats to take away. Nice!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Ignore the error messages&lt;/strong&gt;&lt;br /&gt;Okay. Don't ignore the error messages, just don't drill down to fixing the exact problem in the message. Because when you're working with Serviced components, you're working with (at least!) 2 sets of technology, the COM+ stuff and the .NET framework. As a result, the errors that get caught and passed between the 2 can lose a little in the translation. I had several errors crop up with null references and invalid security priviledges. They were invariably caused by either not installing the DLL in the GAC, or forgetting to register the component in the first place. Doh! Still, it took a bit of investigating, and I spent a while looking through the code trying to work out what was wrong. Guess I learnt a bit of a lesson - &lt;em&gt;It's not always just about the code you've written.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Remember which actual file's being loaded&lt;/strong&gt;&lt;br /&gt;I spent a while building, rebuilding and generally buggering about with the code the first couple of times I made significant changes to how the component worked. Either I spotted a mistake and corrected it, or I got rid of a method, or I added a method and tried to call it. Some of the corrections got me all confused since I'd made various changes to the behaviour, but the results weren't changing.&lt;br /&gt;&lt;br /&gt;Or, I'd add a method, write some code to call it, and then get a Mising Method exception. &lt;br /&gt;&lt;br /&gt;What was going on? It's obvious now that I've spotted it, and it's even more obvious after what you've just read about Unit Testing, but the wierdness was being caused by the DLL not being re-installed in the GAC. I'd rebuild, and then when the test app called that assembly, it wasn't the fresh up-to-date assembly being called. It was the assembly that I'd already identitfied as being wrong that was running.&lt;br /&gt;&lt;br /&gt;Doh!&lt;br /&gt;&lt;br /&gt;All in all, though, everything seems to be working nicely now, though. I just wanted to get some stuff to remember written down to help me remember it. &lt;br /&gt;&lt;br /&gt;Jurt a quick plea for help, I wrote this pretty much off the top of my head. If anyone spots anything that's very incorrect, please drop a comment and let me know. Just to re-iterate, I certainly wouldn't take this post as gospel. They're just some things I wanted to make a note of, and generally thought I'd share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112757664836353521?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112757664836353521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112757664836353521' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112757664836353521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112757664836353521'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/09/debugging-and-testing-serviced.html' title='Debugging and testing serviced components'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112706119847852125</id><published>2005-09-18T16:16:00.000Z</published><updated>2005-09-18T16:39:42.363Z</updated><title type='text'>And... Breathe...</title><content type='html'>So I've been a bit busy over the past couple of weeks.&lt;br /&gt;&lt;br /&gt;What have I been up to?&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.flickr.com/photos/BenAndLisasEgyptianAdventure"&gt;Spent 2 weeks in Egypt&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Spent a week at work&lt;/li&gt;&lt;li&gt;Went book shopping&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Actually, that doesn't sound too busy at all. How come I feel like I haven't had 2 seeconds to sit and do anything? Oh well.&lt;br /&gt;&lt;br /&gt;Doing some interesting stuff at the moment with &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystementerpriseservices.asp"&gt;System.EnterpriseServices&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/hawkremoting.asp"&gt;.NET remoting&lt;/a&gt; in C# 2.0. It's big fun, and if it all works, should make my life at work a bit easier. Nothing huge, but I'm currently replacing a web service with a remotable serviced component. The web service works fine, but because of the job it does, it needs to be as quick as possible. WebServices are great for a whole host of reasons, but for out purposes it could be better. It's a logging component for our intranet, which can be called across sites, but always to and from applications we've written.&lt;br /&gt;&lt;br /&gt;There's no need for it to be interoparable over multiple environments (one of the biggest advantages of WebServices). As a result, one of the first advantages remoting has over WebServices is being able to send messages over TCP, and serialized using .NET's &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemruntimeserializationformattersbinarybinaryformatterclasstopic.asp"&gt;BinaryFormatter&lt;/a&gt;. This makes the messages going backwards and forwards much smaller. I haven't get any data on actual message size, but it took approximately 8 times as long to pull a dataset out through the webservice than it did to pull the same data out as business objects through a remoted component.&lt;br /&gt;&lt;br /&gt;Add to that the nice things that COM+ brings to the table like &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cossdk/html/47b23cae-d5fc-4788-ab1c-93d6d8ee3f01.asp"&gt;JIT Activation&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msmq/msmq_about_transactions_8w37.asp"&gt;transaction management&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cossdk/html/954cf9ee-e76c-4faf-99aa-3648a7bb8a59.asp"&gt;object pooling&lt;/a&gt; and it should be a nice replacement. &lt;br /&gt;&lt;br /&gt;And I get to play with C# and VS 2005.&lt;br /&gt;&lt;br /&gt;What more could a boy want?&lt;br /&gt;&lt;br /&gt;I'm sure I'll be writing more about my adventures in C# 2.0 shortly, but for now, I've got a couple of new books to read (&lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/078214327X/qid%3D1127061439/026-0042537-9296431"&gt;this&lt;/a&gt;, &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/1590594231/qid=1127061494/sr=1-1/ref=sr_1_2_1/026-0042537-9296431"&gt;this&lt;/a&gt; and &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0672326116/qid=1127061556/sr=1-1/ref=sr_1_2_1/026-0042537-9296431"&gt;this&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112706119847852125?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112706119847852125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112706119847852125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112706119847852125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112706119847852125'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/09/and-breathe.html' title='And... Breathe...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112575463857957544</id><published>2005-09-03T13:30:00.000Z</published><updated>2005-09-03T13:37:18.583Z</updated><title type='text'>Very Very Quick...</title><content type='html'>...Before Mrs Mawoo finds me...&lt;br /&gt;&lt;br /&gt;I'm currently blogging from a hotel lobby in Luxor, just about half way down the east coast of Egypt. I'll write more when I get back in a week or so, but here's a summary:&lt;ul&gt;&lt;li&gt;Egypt rocks.&lt;/li&gt;&lt;li&gt;Luxor rocks.&lt;/li&gt;&lt;li&gt;Aswan rocks&lt;/li&gt;&lt;li&gt;Pyramids rule.&lt;/li&gt;&lt;li&gt;Temples kick arse&lt;/li&gt;&lt;li&gt;The desert's ace&lt;/li&gt;&lt;li&gt;You can have too much of a train trip&lt;/li&gt;&lt;li&gt;Cairo doesn't rock.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I'll elaborate further when I've re-learnt how to type (funny how you can get out of practice with these things ;-)) But for now, I'm in Egypt. And that's cool.&lt;br /&gt;&lt;br /&gt;Just wanted to share. I'm sure one day  I'll get onto some .net stuff again one day...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112575463857957544?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112575463857957544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112575463857957544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112575463857957544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112575463857957544'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/09/very-very-quick.html' title='Very Very Quick...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112458398542444962</id><published>2005-08-21T00:11:00.000Z</published><updated>2005-08-21T00:26:25.430Z</updated><title type='text'>The perils of stubbing out methods</title><content type='html'>I only have a single-thread brain. Sad, but true. I can only really concentrate on one thing at a time.&lt;br /&gt;&lt;br /&gt;For example, when I'm writing, I like to stub out sections of code so I can some back and flesh them out when I've finished something else. Take thei example of some code in process:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Public Function GetString(AllTheString as Boolean) as String&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If AllTheString Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return "You asked for all the string"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Add the 'Not-All-The-String' in  a minute.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Why not make a coffee?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;You get the point. I can deal with the other path the code can take at some point in time. Perhaps after a coffee. However, this approach doesn't work in SQL Server 2000. I'm sure it's well documented and whatnot, but it really did give me some grief earlier today. Take this example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;CREATE PROCEDURE ThisIsATest&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(@TestValue int)&lt;br /&gt;AS&lt;br /&gt;&lt;br /&gt;IF EXISTS(SELECT TheKey FROM TheTable WHERE TheKey = @TestValue&lt;br /&gt;BEGIN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INSERT INTO AuditTable(Event, Time)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUES ('This value was found: ' + @TestValue, GETDATE())&lt;br /&gt;END&lt;br /&gt;ELSE&lt;br /&gt;BEGIN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*I'll worry about this part in a minute&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I quite feel like a coffee roundabout now...*/&lt;br /&gt;END&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Hit the 'Validate SQL' button, and it'll return an error. A nice error? A helpful error? An error that might vaguely suggest that you might have a code path that doesn't actually so anything? No. What does it come back with?&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Incorrect syntax near the keyword 'END'&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Pointing at the last line of the script.&lt;br /&gt;&lt;br /&gt;Took me ages of sifting through a long SPROC before I realised that was what it was trying to tell me. Bugger. All I was trying to dso was vlidate the SQL I &lt;em&gt;had&lt;/em&gt; writen so I could move on to the other part. &lt;br /&gt;&lt;br /&gt;Just wanted to share. Apologies for irrelevance and brevity, but it's late. All because of this very thing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112458398542444962?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112458398542444962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112458398542444962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112458398542444962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112458398542444962'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/08/perils-of-stubbing-out-methods.html' title='The perils of stubbing out methods'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112391867721447349</id><published>2005-08-13T07:21:00.000Z</published><updated>2005-08-13T07:39:13.083Z</updated><title type='text'>Firsts, firsts and more firsts...</title><content type='html'>We're just starting a new project at work for the next few months. It's a fairly standard data mangling app, retreiving deatails about people, updating them stashing them back in a database. Nothing really out of the ordinary.&lt;br /&gt;&lt;br /&gt;Well, it would seem that my team doesn't like to do the same thing over and over again (fair enough, neither do I!) so we're going to be doing a whole bunch of stuff that none of us have ever really done before. Our next project will be:&lt;ul&gt;&lt;li&gt;Written in C#&lt;/li&gt;&lt;li&gt;v2.0&lt;/li&gt;&lt;li&gt;in VS 05 beta&lt;/li&gt;&lt;li&gt;All developed on virtual PCs&lt;/li&gt;&lt;li&gt;Managed by Team System (Also running on a virtual server)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;It's times like this that I really like not being chrged for by the hour. We had a meeting yesterday where we kind of figured that we can get the data-mangling parts written relatively quickly, so we could spend a bit more time doing nice twiddly bits for the UI. Nice. So there's going to be a few AJAX-easqe bits (I'm not even going to pretend that it's a new thing, but I'd never found a library quite as nice as &lt;a href="http://weblogs.asp.net/mschwarz/"&gt;Michael Schwarz' AJAX.NET&lt;/a&gt; for making it happen). IN real life, I;m sure we could knock something very dull rogether in a few weeks, but that would be it. It would be a very boring bit of kit. Just another in a long line of data mangling applications, And if I was being charged for by the hour, I'm sure that would suffice ('I don't care how boring it is, just do it as quick and cheap as possible!'). &lt;br /&gt;&lt;br /&gt;But I'm not. And that's cool. We get to learn new stuff (none of us have written in C# before) use new things (all betas, which is why we're doing it all on VPC's) and have some real fun (if you're into that sort of thing) with it.&lt;br /&gt;&lt;br /&gt;Nice!&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112391867721447349?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112391867721447349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112391867721447349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112391867721447349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112391867721447349'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/08/firsts-firsts-and-more-firsts.html' title='Firsts, firsts and more firsts...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112332005013865786</id><published>2005-08-06T09:12:00.000Z</published><updated>2005-08-06T09:20:52.340Z</updated><title type='text'>Disaster at Benjimawoo Towers!</title><content type='html'>Of all the keys that had to stop working after my &lt;a href="http://benthevbdeveloper.blogspot.com/2005/07/unbundle-your-products-dammit.html"&gt;little bit of clumsiness a couple of weeks ago&lt;/a&gt; why did it have to be F11!&lt;br /&gt;&lt;br /&gt;Yes, I know I can change the default key bindings, but i'm too lazy to change them from the VS defaults and reconfigure every time I rebuild.&lt;br /&gt;&lt;br /&gt;Grr! Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112332005013865786?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112332005013865786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112332005013865786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112332005013865786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112332005013865786'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/08/disaster-at-benjimawoo-towers.html' title='Disaster at Benjimawoo Towers!'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112327979412605325</id><published>2005-08-05T21:47:00.000Z</published><updated>2005-08-05T22:09:54.133Z</updated><title type='text'>Short-circuiting comparisons</title><content type='html'>This was one of those things that I read about and though 'Huh. When am I ever going to use &lt;em&gt;that&lt;/em&gt;?' Turns out it's pretty useful at times.&lt;br /&gt;&lt;br /&gt;VB.NET can short circuit comparisons using the AndAlso an OrElse keywords. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What's short-circuiting?&lt;/strong&gt;&lt;br /&gt;Short circuiting occurs when you have multiple comparisons on a line and the outcome is known before you get to the end of the line. Take the following line of code:&lt;br /&gt;&lt;code&gt;If 1=2 And 3=3 Then&lt;br /&gt;    'Do some stuff&lt;br /&gt;End If&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You know after the first part (1=2) that the comparison is going to return false, but the second part is still evaluated (i.e. the machine still checks to see if 3 does in fact equal 3). However, if you were to use this:&lt;br /&gt;&lt;code&gt;If 1=2 AndAlso 3=3 Then&lt;br /&gt;    'Do some stuff&lt;br /&gt;End If&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The machine skips the 3=3 part of the comparison. Just ignores it. It knows that since 1!=2 the result is going to be false, so it just skips over the second part.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;So?&lt;/strong&gt;&lt;br /&gt;That contrived example doesn't look too useful. However, if we look at a real world example, all becomes clear:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Dim ds as Dataset = GetMyDataset()&lt;br /&gt;Dim dr as DataRow = GetMyDataSet.Tables(0).Rows(0)&lt;br /&gt;If Not IsDbNull(dr("FieldName")) And dr("FieldName") &gt; 0 Then&lt;br /&gt;    'Do some stuff&lt;br /&gt;End If&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Because we're using the normal 'And', if the value in the row specified is null, the method will throw an exception because a value of type DBNull can't be cast to an integer. Although 'Not IsDbNull(dr("FieldName"))' returns false (because it &lt;em&gt;is&lt;/em&gt; null) the second section is still evaluated. And because it's a null value, an exception is thrown.&lt;br /&gt;&lt;br /&gt;However, if we use AndAlso, the comparison is short-circuited and it doesn't throw an exception:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Dim ds as Dataset = GetMyDataset()&lt;br /&gt;Dim dr as DataRow = GetMyDataSet.Tables(0).Rows(0)&lt;br /&gt;If Not IsDbNull(dr("FieldName")) AndAlso dr("FieldName") &gt; 0 Then&lt;br /&gt;    'Do some stuff&lt;br /&gt;End If&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Because the first part of the comparison return false, the framework &lt;em&gt;knows&lt;/em&gt; that the overall expression is going to return false, so it doesn't bother trying to evaluate the second part, and it doesn't throw an exception.&lt;br /&gt;&lt;br /&gt;Needless to say, OrElse works in exactly the same way, but for Or's rather than And's.&lt;br /&gt;&lt;br /&gt;It's come in handy for me a couple of times recently, anyway.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112327979412605325?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112327979412605325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112327979412605325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112327979412605325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112327979412605325'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/08/short-circuiting-comparisons.html' title='Short-circuiting comparisons'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112293307255863605</id><published>2005-08-01T21:16:00.000Z</published><updated>2005-08-04T05:09:03.893Z</updated><title type='text'>Weeping update...</title><content type='html'>Although the title sounds like something you'd take to the doctor, I thought I'd offer something of an update to the last post I wrote about &lt;a href="http://benthevbdeveloper.blogspot.com/2005/07/i-am-weeping-as-i-write-this.html"&gt;cleaning out my dad's computer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As &lt;a href="http://spaces.msn.com/members/jasilva/"&gt;one kind commenter&lt;/a&gt; wrote, "it is far more productive to think of possible solutions"&lt;br /&gt;&lt;br /&gt;Now I'm not proposing that I'm going to put a stop to all the various different flavours of intrusive marketing out there (blog comment spam, IM spam and the great granddaddy of them all, email spam), but I can at least make a note of what I did to try an alleviate the problem somewhat for my dad.&lt;br /&gt;&lt;br /&gt;First, let me set the scene.&lt;br /&gt;&lt;br /&gt;I have a teenage stepsister, and my teenage stepsister is a great one for IM, file sharing (although, as far as I know, it's all legal now) and generally caning the net for all its socially worth. She is also, at the end of the day, a teenager. Bit impetuous, bit naive, and a little too  quick to believe popups that claim that her computer could be running quicker if she installed widget &lt;em&gt;x&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;I also have a father. He, like a lot of fathers, just wants his computer for invoicing, perhaps the odd bit of emailing, banking, and that's about it. He also once uttered the immortal line "Why couldn't they just leave it at Windows 3.01? Didn't it already do everything everyone wanted?". Hmmm. Although the gist of it was more about how computers have been getting more complicated than he wants. &lt;br /&gt;&lt;br /&gt;So, to summarize:&lt;br /&gt;&lt;br /&gt;1 teenage daughter who wants to use her computer to keep up with her mates, but isn't too aware that there are bad people out there who want to user her computer for slightly more nefarious deeds.&lt;br /&gt;&lt;br /&gt;1 mature guy who needs his computer for work, but really doesn't want to have to deal with any more stuff to learn just to get his books done, which he's been doing in the same way since Office 97. Oh yes, and he hasn't really got time (who has, really, in the real world) to supervise her every online move.&lt;br /&gt;&lt;br /&gt;I see a problem. How to secure his machine without adding the need for any more management. In fact, how to secure his machine network-wise without any apparent change in behaviour (of the machine, not him).&lt;br /&gt;&lt;br /&gt;Well, the most thorough (and my preferred method) would be to start from scratch, stash all the documents and data away somewhere and spend a good few hours installing and configuring the machine to be nice and safe from (at least some of the nastier) nasties. Lock everything down, disable all the non-essential services, do some admin-type bits like shift his data onto a different partition from his system bits, stuff like that, and have everyone running on a non-admin account. However, although most of that would cause no noticeable change in the machine's behaviour, bits and pieces would require management, or to put it another way 'More bloody work'.&lt;br /&gt;&lt;br /&gt;I would (and did), however, rightly or wrongly, hold short of installing a second firewall. My thinking is that with all the ports and services disabled that aren't needed, Windows firewall will be sufficient. It sits nicely in the background and slots in nicely with the rest of Windows Security Center. It doesn't have the learning overhead of a separate application. &lt;br /&gt;&lt;br /&gt;I also whacked on MS Anti-Spyware for exactly the same reason. Although it's just a lightly re-branded version of Giant's Anti Spyware, it does at least integrate nicely with Windows and doesn't seem like too disparate of an app to learn. It's still quite consistent with (particularly the newer parts) the rest of Windows XP. I think I said before, it's perhaps not the swankiest, but it does at least do a reasonable job.&lt;br /&gt;&lt;br /&gt;Those were the easy parts. Now came the hard part.&lt;br /&gt;&lt;br /&gt;I started with turning the computer off.&lt;br /&gt;&lt;br /&gt;I heard someone say once that the biggest security hole in any system lies between the keyboard and the chair. Any system (yes, &lt;strong&gt;ANY&lt;/strong&gt;) can be compromised when you've got a real person pushing buttons at the business end.&lt;br /&gt;&lt;br /&gt;So the most difficult part was getting my stepsister to take a bit of responsibility for what runs on her computer. I told her about checking for mysterious processes running in the background, what to do if she found one, how to check if something malicious was running and how to get rid of it. I told her about the perils of hitting 'yes' when asked "&lt;em&gt;Do you want to enhance your browsing experience?&lt;/em&gt;". I went explained at great length (you ever tried to talk to a 13 year old girl about 'nerd stuff' for more than 10 minutes?) about how firewalls work, and what they do, and generally tried to make her a bit more aware of what's out there trying to get in.&lt;br /&gt;&lt;br /&gt;The last part is the make-or-break factor. Everything before it is almost incidental. I can have an iron-clad OS, be running behind a rock solid firewall and have every scanner known to man running checking everything's OK. However, just like vampires, if I invite nasty things onto my machine, they (potentially) get a free rein over &lt;em&gt;my&lt;/em&gt; computer. And that's the bit I really need to work on.&lt;br /&gt;&lt;br /&gt;Oh to have longer than a short and hectic weekend to do it all in!&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112293307255863605?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112293307255863605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112293307255863605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112293307255863605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112293307255863605'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/08/weeping-update.html' title='Weeping update...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112256540528580361</id><published>2005-07-28T15:13:00.000Z</published><updated>2005-07-28T15:53:28.556Z</updated><title type='text'>I am weeping as I write this</title><content type='html'>So I'm down in Plymouth for a few days. My sister's getting married tomorrow.&lt;br /&gt;&lt;br /&gt;With a couple of hours to spare, I thought I'd borrow my dad's computer and check up on a couple of things (news, bank balance, that sort of thing).&lt;br /&gt;&lt;br /&gt;I think I've discovered why people get so het up, annoyed and paranoid about their computers and the internet.&lt;br /&gt;&lt;br /&gt;Dad's on AOL. Which I can almost forgive. No, I wouldn't go near them with a ten metre cattle prod, but each to their own. And it does automatically configure your web browser and mail client for you if you can stand their proprietary clients for each. Which I can't.) That's not too nasty a problem, I just hate AOL.&lt;br /&gt;&lt;br /&gt;However, sadly I haven't got time at the moment to fix all the other stuff that's wrong with  this machine. I'm writing this blog entry at what's left of the bottom of the IE browser window, because there's some sort of weird toolbar blocking the rest of the screen, that doesn't even appear in the toolbars menu soI've got no easy way of disabling it. So far I've hidden:&lt;br /&gt;&lt;br /&gt;The Google toolbar&lt;br /&gt;The MSN toolbar&lt;br /&gt;The Yahoo toolbar&lt;br /&gt;Some sort of explorer bar-esque toolbar that appears at the bottom of the browser. Goodness knows what &lt;em&gt;that's&lt;/em&gt; for.&lt;br /&gt;&lt;br /&gt;I'm writing in 3 word bursts, because every few seconds there's yet another popup telling me about today's greatest deals, or asking me whether or not I want to buy some game (it didn't stay open long enough for me to have a look at what it was, I can tell you!).&lt;br /&gt;&lt;br /&gt;The only reason I can manage to get 3 words typed in a row at all is because I've turned the Messenger service off, killing the millions of net sends a second I was getting. I've disabled it for good measure, just in case...&lt;br /&gt;&lt;br /&gt;It's running SP1 at the moment, and I'm guessing that the only reason it hasn't got SP2 installed is that the constant alerts that Windows Update flashes up saying that there are (still) new updates downloaded and ready to install on this computer are being left unheeded. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATE: &lt;/strong&gt; I have just this seond learnt that '&lt;a href="http://www.liutilities.com/products/wintaskspro/processlibrary/bargains/"&gt;Bargains.exe&lt;/a&gt;' has been forced to close down due to an error. That was a little irrelevant aside, but it's really annoying when spyware interrupts your day crashing.&lt;br /&gt;&lt;br /&gt;I don't use the phrase Syphilitic Whore of Intarweb Beelzebub lightly, and it truly does take some doing to get me to even think it. But this machine really is a Syphilitic Whore of Intarweb Beelzebub.&lt;br /&gt;&lt;br /&gt;Looks like my job for the weekend's been decided...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Uninstall obvious spyware crap (Honestly, who &lt;em&gt;doesn't&lt;/em&gt; smell a rat when there's an entry in Add/Remove programs called 'Internet Optimizer' or 'Select Cashback'&lt;/li&gt;&lt;li&gt;Install ALL updates, SP2, and everything since AND MS Anti-Spyware (Yes, I know it's not the greatest out there, but it's easy to use and better than nothing)&lt;/li&gt;&lt;li&gt;Sort out Startup apps (I'm sure there are some if not nefarious, certainly dubious apps starting automatically)&lt;/li&gt;&lt;li&gt;Wash, rinse, repeat&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;With a bit of luck, not only will dad's computer run a little swifter, but it'll make it a darned site easier for me to blog from his house!&lt;br /&gt;&lt;br /&gt;That's enough for now. I'm gonna shutdown before I see yet another popup and have to throw ths computer out the window. And then I think I'll have a little lie down. And a stiff drink. There is much work to do...&lt;br /&gt;&lt;br /&gt;But do you know what the realy depressing thing is? I doubt anyone'll notice. Popups and toolbars taking up two thirds of the screen seem to be &lt;em&gt;de rigeur&lt;/em&gt; these days. People accept them in the same way they don't notice people pushing to the front of the queue or how they don't notice when shop staff don't say thank-you or smile (come on, it's not that hard!).&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112256540528580361?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112256540528580361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112256540528580361' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112256540528580361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112256540528580361'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/07/i-am-weeping-as-i-write-this.html' title='I am weeping as I write this'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112222588401979139</id><published>2005-07-24T17:07:00.000Z</published><updated>2005-08-04T19:08:21.936Z</updated><title type='text'>Two more reasons to own a camera phone...</title><content type='html'>&lt;img src="http://freespace.virgin.net/ben.savage/BlogFiles/nicemelons.jpg" alt="Nice Melons!"/&gt;&lt;br /&gt;&lt;strong&gt;Nice melons Mrs Mawoo!&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112222588401979139?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112222588401979139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112222588401979139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112222588401979139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112222588401979139'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/07/two-more-reasons-to-own-camera-phone.html' title='Two more reasons to own a camera phone...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112209962053705936</id><published>2005-07-23T06:17:00.000Z</published><updated>2005-07-23T06:20:20.543Z</updated><title type='text'>Cool marketing.</title><content type='html'>&lt;a href="http://www.WatchMeChange.com"&gt;This site&lt;/a&gt; for &lt;a href="http://www.gap.com"&gt;GAP&lt;/a&gt; is right up there with &lt;a href="http://www.subservientchicken.com/"&gt;Subservient Chicken&lt;/a&gt; for plain coolness.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112209962053705936?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112209962053705936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112209962053705936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112209962053705936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112209962053705936'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/07/cool-marketing.html' title='Cool marketing.'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112197334056677190</id><published>2005-07-21T19:34:00.000Z</published><updated>2005-07-21T19:33:30.490Z</updated><title type='text'>Couple of things that I noticed today</title><content type='html'>2 quick things.&lt;br /&gt;&lt;br /&gt;The first is something that's caught me out a couple of times, so I'm committing it to writing so I'll finally remember:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Using a DateTime field in the RowFilter of a Dataset&lt;/strong&gt;&lt;br /&gt;Since the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatadataviewclassrowfiltertopic.asp"&gt;RowFilter&lt;/a&gt; property is a string, it doesn't lend itself terribly well to filtering with DateTime values. Or at least the default &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatetimeclasstostringtopic1.asp"&gt;DateTime.ToString&lt;/a&gt; format doesn't lend itself to being put in a RowFilter property. Picture the scene. You want to filter the DataView for your datagrid on today's date. You'd thing you could do it with:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;theView.RowFilter = String.Format("DateField = #{0}#", DateTime.Today&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;But you'd be wrong. You might even think you'd be able to do it with the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatetimeclasstoshortdatestringtopic.asp"&gt;ToShortDateString&lt;/a&gt; method:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;theView.RowFilter = String.Format("DateField = #{0}#", DateTime.Today.ToShortDateString()&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And (and here's the rub) in some parts of the world, you'd be right. The ToShortDateString method is sensitive to the culture of the box it's running on. The RowFilter property, however, isn't. So, if you're in 'Merica, your ToShortDateString method produces this string for 23rd October 2004: "10/23/2005". If you're on t'other side of the pond (or anywhere else that formats its short dates properly) ToShortDateString produces: "23/10/2004".&lt;br /&gt;&lt;br /&gt;Now because the RowFilter property isn't sensitive to the regional settings of the OS, it slings out the second string as an invalid date. The way to filter on dates, if you're in one of the enlightened countries that formats dates as they were meant to be formatted is thus:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;theView.RowFilter = String.Format("DateField = #{0}#", DateTime.Today("MM/dd/yyyy")&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The second thing is just something that I wrote today that made me feel good.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Possibly the most elegant peice of code I've ever seen&lt;/strong&gt;&lt;br /&gt;I like elegant code. I especially like it when elegant code is also (I think) efficient code. It's down the the DataView's RowFilter property again, and it uses my favourite &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemstringclassformattopic1.asp"&gt;String.Format&lt;/a&gt; function. It just looks truly beautiful, though:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;theView.RowFilter = String.Format("Name in ('{0}')", String.Join(, "', '", StringArrayOfNames))&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I just think it looks really neat. Of course, the String.Format method returns "Name in ('Tom', 'Dick', 'Harry')", but it's the simplicity and elegance of the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemstringclassjointopic.asp"&gt;String.Join &lt;/a&gt;function and putting the placeholder inthe format string ({0}) in quotes that just makes me think that everything's alright in the world.&lt;br /&gt;&lt;br /&gt;You may have noticed I've had a good day. Just wanted to share some of the joy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112197334056677190?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112197334056677190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112197334056677190' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112197334056677190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112197334056677190'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/07/couple-of-things-that-i-noticed-today.html' title='Couple of things that I noticed today'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112184684233354523</id><published>2005-07-20T08:06:00.000Z</published><updated>2005-07-20T08:07:22.336Z</updated><title type='text'>Couldn't resist...</title><content type='html'>&lt;a href="http://moon.google.com/"&gt;This&lt;/a&gt; is just too cool!&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112184684233354523?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112184684233354523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112184684233354523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112184684233354523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112184684233354523'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/07/couldnt-resist.html' title='Couldn&apos;t resist...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112110962818699174</id><published>2005-07-11T19:04:00.000Z</published><updated>2005-07-11T19:20:28.193Z</updated><title type='text'>Day 1. Sweet. and Sour</title><content type='html'>So it was my first day at work today.&lt;br /&gt;&lt;br /&gt;I have to say, the place I'm working is absolutely fantastic!&lt;br /&gt;&lt;br /&gt;Get in, first thing I see is not 1 but &lt;strong&gt;2&lt;/strong&gt; TFT monitors, both at 1280x1024. Aaaahhhhh! All your pixels are belong to us!&lt;br /&gt;&lt;br /&gt;Follow that with a look through some actually well written and architected code, doing some really interesting things, and I was a happy happy boy!&lt;br /&gt;&lt;br /&gt;The place is cool. I think I might just stay there.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;But...&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The journey's almost exactly 2 1/2 hours each way. Mmm nice. Leave at 6.30, get home roundabout 8. Gah! Looks like I'm going to have to get myself some more books...&lt;br /&gt;&lt;br /&gt;Just wanted to share the joy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112110962818699174?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112110962818699174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112110962818699174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112110962818699174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112110962818699174'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/07/day-1-sweet-and-sour.html' title='Day 1. Sweet. and Sour'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112092087470596422</id><published>2005-07-09T14:43:00.000Z</published><updated>2005-07-09T14:54:36.993Z</updated><title type='text'>Unbundle your products, dammit!</title><content type='html'>Bundled products are nice, especialy when you can get it cheaper buying the bundle.&lt;br /&gt;&lt;br /&gt;However, I wish Logitech would unbundle their keyboards and mice.&lt;br /&gt;&lt;br /&gt;I got one of the ealier Logitech cordless desktops a couple of years ago, and after a while the mouse packed up. No wories, I got a nice new &lt;a href="http://www.logitech.com//index.cfm/products/details/GB/EN,CRID=3,CONTENTID=9043"&gt;MX100 laser mouse&lt;/a&gt;. Sweet!&lt;br /&gt;&lt;br /&gt;However, it looks like my keyboard might be on its way out as well. Stupid thing - I spilt coffee on it yesterday, and having a look at it this morning, the printed circuity bit under the keys themselves is beginning to corrode. Should last a little longer, but I think I'll be looking at a new keyboard some time soonish.&lt;br /&gt;&lt;br /&gt;What I really fancy is the nice &lt;a href="http://www.dabs.com/uk/channels/hardware/keyboardsmicejoystickswheelsandtablets/productView.htm?quicklinx=3p46"&gt;Logitech MX 3100&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But...&lt;br /&gt;&lt;br /&gt;I already have the mouse, so I just want the MX3000 keyboard on its own. And can I get one? Can I buggery! I can ge the mouse on its own, not problem. But keyboard without the mouse? Hmmph!&lt;br /&gt;&lt;br /&gt;Just wanted to rant. Grrr!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112092087470596422?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112092087470596422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112092087470596422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112092087470596422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112092087470596422'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/07/unbundle-your-products-dammit.html' title='Unbundle your products, dammit!'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112082706073180684</id><published>2005-07-08T12:49:00.000Z</published><updated>2005-07-08T13:06:20.773Z</updated><title type='text'>Visiting dignitary</title><content type='html'>Woah, wouldn't you know it? We've got a &lt;a href="http://neopoleon.com/blog/posts/15177.aspx"&gt;real life rock star&lt;/a&gt; coming to our little hamlet.&lt;br /&gt;&lt;br /&gt;How cool's that?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; Bugger. I'm gonna miss it. Why did my brother-in-law-to-be have to choose next weekend for his stag night?!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112082706073180684?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112082706073180684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112082706073180684' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112082706073180684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112082706073180684'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/07/visiting-dignitary.html' title='Visiting dignitary'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112072284997730864</id><published>2005-07-07T07:31:00.000Z</published><updated>2005-07-07T07:54:10.036Z</updated><title type='text'>Quick bit of Woo-age!</title><content type='html'>I know many of you have been following &lt;a href="http://freespace.virgin.net/ben.savage/BlogFiles/CV/CV.xml" target="_blank"&gt;my glittering career&lt;/a&gt; with interest, awaiting every new development from the rollercoaster ride of one man trying to get someone to give him cash for code.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://benthevbdeveloper.blogspot.com/2005/06/oh-whoriness-of-it.html" target="_blank"&gt;last exciting installment&lt;/a&gt; saw me feeling like a cheap, washed up lady of the night, flaunting myself with that air of desparation common to jobseekers and ladies 'of a certain age' in night clubs.&lt;br /&gt;&lt;br /&gt;Well as with all these things, it's paid off. I've found gainful employment with another company.&lt;br /&gt;&lt;br /&gt;I'm actually quite chuffed with that. I think all told it took me 3 weeks between being told the old company were going to have to let me go, and finding some other &lt;strike&gt;sucker&lt;/strike&gt; company to give me money for writing code.&lt;br /&gt;&lt;br /&gt;I'm really stoked with them too. The interview made me think 'Hey, this is somewhere I really want to work'. There's some interesting stuff on the horizon, they're already looking at and training up on &lt;a href="http://msdn.microsoft.com/sql/" target="_blank"&gt;SQL Server 2005&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/vstudio/" target="_blank"&gt;VS 2005&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/netframework/" target="_blank"&gt;.NET 2.0&lt;/a&gt; and all that good stuff, which is a real rarity in the UK (I've discovered...).&lt;br /&gt;&lt;br /&gt;Anyway. Just wanted to share some of my joy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112072284997730864?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112072284997730864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112072284997730864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112072284997730864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112072284997730864'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/07/quick-bit-of-woo-age.html' title='Quick bit of Woo-age!'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-112007327375080205</id><published>2005-06-29T19:18:00.000Z</published><updated>2005-06-30T05:55:34.153Z</updated><title type='text'>Nothing new, but just to remind myself...</title><content type='html'>Just watched &lt;a href="http://www.computerzen.com" target="_blank"&gt;Scott Hanselman's&lt;/a&gt; "Ten Tools in Ten Minutes" &lt;a href="http://groktalk.net" target="_blank"&gt;GrokTalk&lt;/a&gt;, and oh my what gems there are out there.&lt;br /&gt;&lt;br /&gt;Some I know about, some I've used (like &lt;a href="http://www.aisto.com/roeder/dotnet/" target="_blank"&gt;Reflector&lt;/a&gt; and the &lt;a href="http://www.testdriven.net/Default.aspx?ReferrerId=1978" target="_blank"&gt;TestDriven Add-in&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Others are new to me, and one particular I love!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bayden.com/SlickRun/" target="_blank"&gt;SlickRun&lt;/a&gt; is, in a word, the most useful thing I've seen in ages. Okay, not &lt;em&gt;a&lt;/em&gt; word, but you get the point.&lt;br /&gt;&lt;br /&gt;It's wicked. Just filling it up with 'magic words' at the minute.&lt;br /&gt;&lt;br /&gt;My biggest joy with it is in being able to open up Firefox with a bunch of tabs open already, so I can just type in pr0n, and open all the best ones just open up! It's amost a shame the R is so far away from the 0...&lt;br /&gt;&lt;br /&gt;Just wated to share the joy...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-112007327375080205?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/112007327375080205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=112007327375080205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112007327375080205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/112007327375080205'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/06/nothing-new-but-just-to-remind-myself.html' title='Nothing new, but just to remind myself...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111998373473289408</id><published>2005-06-28T18:30:00.000Z</published><updated>2005-06-29T15:35:55.280Z</updated><title type='text'>A useful bit of code I wrote...</title><content type='html'>The other day I had something to do that left me thinking 'Hey, y'know I can really use that again!'&lt;br /&gt;&lt;br /&gt;So I thought I'd share it.&lt;br /&gt;&lt;br /&gt;What I had was a web page with a bunch of complex(ish) formatting and (rightly or wrongly) some maths tied up in the repeater that produced the table. My boss then said to me 'Hey, you know what would be really cool is if we could export that data into Excel.&lt;br /&gt;&lt;br /&gt;Hmm. I thought. There are 3 things I can do here.&lt;br /&gt;&lt;br /&gt;I &lt;em&gt;could&lt;/em&gt; re-write all my data-access and manipulation bits so that the underlying dataset had the values I wanted, and then spin that out into a text-file or something.&lt;br /&gt;&lt;br /&gt;I &lt;em&gt;could&lt;/em&gt; just export the whole page into Excel and have that monkey about translating this nice table (and all the other form elements) into an ugly, ill thought out spreadsheet.&lt;br /&gt;&lt;br /&gt;Or I could simply take my page output, take out just the table (with no drop-downs, viewstate, or anything I didn't need) and sling that into Excel, taking advantage of Excel's fairly good support for HTML tables.&lt;br /&gt;&lt;br /&gt;This last option seemed best to me, since apart from not having to re-write code, I could maintain all the color-coding from the HTML table and keep this report looking quite nice.&lt;br /&gt;&lt;br /&gt;So, how could I do that? I tried playing about with some code making every element on the page invisible, except for the repeater (well, actually it was a set of repeaters) that produced the table, but I found out something weird:&lt;br /&gt;&lt;br /&gt;Excel tries to render the hidden viewstate element as an image, and flashes an ugly redex when it can't decipher it, before turning it into just a blank cell at the top of the page. Not nice. Livable, but not nice. So I figured I'd have to parse the page output right down manually to create an export-type mode (as opposed to a display mode) for the page. Once I'd solved that problem in the short-term, that was when I figured I could make this a bit more useful by creating a page that naturally supported moded output. So this is how I did it:&lt;br /&gt;&lt;br /&gt;I started by creating a supporting class to represent my mode. I wanted to be able to specify the markers that were going to live in the HTML that would delimit the sections that would be rendered. To keep things neat, I decided I'd do that by putting them in comment tags.&lt;br /&gt;&lt;br /&gt;So this was my 'Mode' class:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Lucida Console; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"&gt;&lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt; PageMode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; FModeName &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; FMarker &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; FContentType &lt;span style="color: blue;"&gt;As&lt;/span&gt; PageModeContentType&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; StartFormatString &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt; = &lt;span style="color: fuchsia;"&gt;"&amp;lt;!--{0}--&amp;gt;"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; EndFormatString &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt; = &lt;span style="color: fuchsia;"&gt;"&amp;lt;!--/{0}--&amp;gt;"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;#&lt;span style="color: blue;"&gt;Region&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;" Properties "&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; ModeName() &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; FModeName&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; Value &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FModeName = Value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; Marker() &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If&lt;/span&gt; FMarker = &lt;span style="color: fuchsia;"&gt;""&lt;/span&gt; &lt;span style="color: blue;"&gt;Then&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;.Format(StartFormatString, FModeName)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;.Format(StartFormatString, FMarker)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;If&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; Value &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FMarker = Value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;ReadOnly&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; EndMarker() &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;.Format(EndFormatString, FMarker)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; ContentType() &lt;span style="color: blue;"&gt;As&lt;/span&gt; PageModeContentType&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; FContentType&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; Value &lt;span style="color: blue;"&gt;As&lt;/span&gt; PageModeContentType)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FContentType = Value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt;&lt;br /&gt;#&lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Region&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;#&lt;span style="color: blue;"&gt;Region&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;" Constructors "&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;MyBase&lt;/span&gt;.New()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; ModeName &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; MarkerText &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; ContentType &lt;span style="color: blue;"&gt;As&lt;/span&gt; PageModeContentType)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FModeName = ModeName&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FMarker = MarkerText&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FContentType = ContentType&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; ModeName &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;MyClass&lt;/span&gt;.New(ModeName, ModeName, PageModeContentType.web)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; ModeName &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; MarkerText &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;MyClass&lt;/span&gt;.New(ModeName, MarkerText, PageModeContentType.web)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; ModeName &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; ContentType &lt;span style="color: blue;"&gt;As&lt;/span&gt; PageModeContentType)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;MyClass&lt;/span&gt;.New(ModeName, ModeName, ContentType)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;&lt;br /&gt;#&lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Region&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;As you can see, it's got an unusual type in there for ContentType. This was just an enumeration I added so I didn't have to worry about playing with strings and stuff - And I love the intellisense support for Enums!&lt;br /&gt;&lt;br /&gt;The rest of it's pretty standard. I've got some properties in there that let you define your own marker text. If, for instance, you had 3 or 4 different ways in which you wanted to show your page, you can just give them different marker values. Easy.&lt;br /&gt;&lt;br /&gt;So once I'd put together the Mode class, it was time to actually do something with it.&lt;br /&gt;&lt;br /&gt;To make some use of this, all I did was create a new class that inherited from Page and overrode its Render method to parse the page output and only include the sections marked out. Here's the full code:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Lucida Console; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"&gt;&lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt; SectionablePage&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Inherits&lt;/span&gt; Page&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; FPageMode &lt;span style="color: blue;"&gt;As&lt;/span&gt; PageMode&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Protected&lt;/span&gt; &lt;span style="color: blue;"&gt;Overrides&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; render(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; writer &lt;span style="color: blue;"&gt;As&lt;/span&gt; HtmlTextWriter)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If&lt;/span&gt; FPageMode &lt;span style="color: blue;"&gt;Is&lt;/span&gt; &lt;span style="color: blue;"&gt;Nothing&lt;/span&gt; &lt;span style="color: blue;"&gt;Then&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;'If there aren't any modes created, then render as normal&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;MyBase&lt;/span&gt;.Render(writer)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Select&lt;/span&gt; &lt;span style="color: blue;"&gt;Case&lt;/span&gt; FPageMode.ContentType&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Case&lt;/span&gt; PageModeContentType.web&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.ContentType = &lt;span style="color: fuchsia;"&gt;"text/html"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Case&lt;/span&gt; PageModeContentType.excel&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.ContentType = &lt;span style="color: fuchsia;"&gt;"application/vnd.microsoft-excel"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.AddHeader(&lt;span style="color: fuchsia;"&gt;"content-disposition"&lt;/span&gt;, &lt;span style="color: fuchsia;"&gt;"attachment; filename="""&lt;/span&gt; &amp;amp; FPageMode.ModeName &amp;amp; &lt;span style="color: fuchsia;"&gt;".xls"""&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Case&lt;/span&gt; PageModeContentType.word&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.ContentType = &lt;span style="color: fuchsia;"&gt;"application/vnd.microsoft-word"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.AddHeader(&lt;span style="color: fuchsia;"&gt;"content-disposition"&lt;/span&gt;, &lt;span style="color: fuchsia;"&gt;"attachment; filename=Page.doc"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Select&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; sw &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; StringWriter&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; hw &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; HtmlTextWriter(sw)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;MyBase&lt;/span&gt;.Render(hw)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; EntirePage &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt; = sw.ToString&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; Marker &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt; = FPageMode.Marker&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; EndMarker &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt; = FPageMode.EndMarker&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; CurrentPoint &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt; = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; SectionStart &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; SectionEnd &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; Section(1) &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; AllSections &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; ArrayList&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Do&lt;/span&gt; &lt;span style="color: blue;"&gt;While&lt;/span&gt; EntirePage.IndexOf(Marker, CurrentPoint) &amp;gt; -1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Section = Section.CreateInstance(&lt;span style="color: blue;"&gt;GetType&lt;/span&gt;(&lt;span style="color: blue;"&gt;Integer&lt;/span&gt;), 2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Section(0) = EntirePage.IndexOf(Marker, CurrentPoint)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Section(1) = EntirePage.IndexOf(EndMarker, Section(0)) + EndMarker.Length&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If&lt;/span&gt; Section(1) = -1 &lt;span style="color: blue;"&gt;Then&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;'Check that there is a matching end tag to go with the start tag&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Throw&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; SectionablePageException(&lt;span style="color: fuchsia;"&gt;"Section is missing an end tag"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Exit&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;If&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AllSections.Add(Section)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; CurrentPoint = Section(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Loop&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; writer.WriteFullBeginTag(&lt;span style="color: fuchsia;"&gt;"html"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;For&lt;/span&gt; &lt;span style="color: blue;"&gt;Each&lt;/span&gt; arSection &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt;() &lt;span style="color: blue;"&gt;In&lt;/span&gt; AllSections&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; writer.Write(EntirePage.Substring(arSection(0), arSection(1) - arSection(0)))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Next&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; writer.WriteEndTag(&lt;span style="color: fuchsia;"&gt;"html"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;If&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; Mode() &lt;span style="color: blue;"&gt;As&lt;/span&gt; PageMode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; FPageMode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; Value &lt;span style="color: blue;"&gt;As&lt;/span&gt; PageMode)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FPageMode = Value&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;As you can see, I have a PageMode property, which just Gets and Sets the FPageMode variable (I could have just declared it as a public field, but I didn't want to. No good reason, I just didn't want to.)&lt;br /&gt;&lt;br /&gt;In the render method, I start by checking that the page has had a mode set, and if it doesn't, then the page just renders as usual. If the page &lt;em&gt;does&lt;/em&gt; have a mode set, then it decides what to do with it.&lt;br /&gt;&lt;br /&gt;Firstly,  it decides what flavour of content it's going to say it is. This is where MS Office's HTML support really comes in handy. Again, there's that ContentType enumeration. If I had more time, patience, or any real need, I would have made a slightly smarter way of doing that. As it is, though, I just use Select Case to determine the ContentType header for the page response. If it's a file, I also want to change the add the Content-Disposition header, mainly so I can change the filename.&lt;br /&gt;&lt;br /&gt;After it's decided what it's doing, the real magic begins.&lt;br /&gt;&lt;br /&gt;It calls the render method so that it spins the page content out into a great big string.&lt;br /&gt;&lt;br /&gt;It then steps through the great big string looking for pairs of start and end tags for the PageMode, putting these pairs of values into an ArrayList.&lt;br /&gt;&lt;br /&gt;Once it's got to the end of the string (i.e. the end of the page), it takes the pairs of start and end tags and outputs just those sections, all wrapped in HTML tags.&lt;br /&gt;&lt;br /&gt;It's far from perfect. I think one of these days I'll make the ContentType a bit smarter, and maybe handle the errors a bit nicer, but at the end of the day, it's all there.&lt;br /&gt;&lt;br /&gt;In use, it looks something like this:&lt;br /&gt;&lt;br /&gt;ASPX:&lt;br /&gt;&lt;div style="font-family: Lucida Console; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"&gt;&lt;span style="background: yellow;"&gt;&amp;lt;%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebSectionsTester.WebForm1"%&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: maroon;"&gt;DOCTYPE&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;HTML&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;PUBLIC&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;"-//W3C//DTD HTML 4.0 Transitional//EN"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;HTML&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;HEAD&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;WebForm1&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;meta&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="GENERATOR"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;content&lt;/span&gt;&lt;span style="color: blue;"&gt;="Microsoft Visual Studio .NET 7.1"&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;meta&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="CODE_LANGUAGE"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;content&lt;/span&gt;&lt;span style="color: blue;"&gt;="Visual Basic .NET 7.1"&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;meta&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="vs_defaultClientScript"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;content&lt;/span&gt;&lt;span style="color: blue;"&gt;="JavaScript"&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;meta&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="vs_targetSchema"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;content&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://schemas.microsoft.com/intellisense/ie5"&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;HEAD&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="Form1"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;method&lt;/span&gt;&lt;span style="color: blue;"&gt;="post"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: green;"&gt;--Para12--&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Pick section:&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: green;"&gt;--/Para12--&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp:LinkButton&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="AllContent"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;text&lt;/span&gt;&lt;span style="color: blue;"&gt;="All Content"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp:LinkButton&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Para1"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Para 1"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp:LinkButton&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Para12"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Para 12"&lt;/span&gt;&lt;span style="color: fuchsia;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: green;"&gt;--AllContent--&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;h1&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;This is the Title&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;h1&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: green;"&gt;--Para1--&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: green;"&gt;--Para12--&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;This is paragraph 1&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: green;"&gt;--/Para1--&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;This is paragraph 2&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: green;"&gt;--/Para12--&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: green;"&gt;--/AllContent--&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;HTML&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Code-Behind:&lt;br /&gt;&lt;div style="font-family: Lucida Console; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; Page_Load(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue;"&gt;As&lt;/span&gt; System.Object, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue;"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color: blue;"&gt;Handles&lt;/span&gt; &lt;span style="color: blue;"&gt;MyBase&lt;/span&gt;.Load&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;'Put user code to initialize the page here&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; ProduceContent(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue;"&gt;As&lt;/span&gt; EventArgs) &lt;span style="color: blue;"&gt;Handles&lt;/span&gt; AllContent.Click, Para1.Click, Para12.Click&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; ModeString &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt; = &lt;span style="color: blue;"&gt;CType&lt;/span&gt;(sender, LinkButton).ID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; theMode &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; PageMode(&lt;span style="color: fuchsia;"&gt;"Download"&lt;/span&gt;, ModeString, PageModeContentType.web)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Me&lt;/span&gt;.Mode = theMode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;As you can see, you can create overlapping parts, you can have sections that are split into several parts. I think it's quite good (even if i do say so myself).&lt;br /&gt;&lt;br /&gt;Sure, it's not perfect. I think it might be lighter on the server to parse it using Regular Expressions, rather than String.IndexOf(), and one of these days I'm going to get rid of that ContentType Enum and the Select Case in Render. But that's another thing for another day.&lt;br /&gt;&lt;br /&gt;Just wanted to share. I promised something vaguely .NET related, didn't I.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111998373473289408?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111998373473289408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111998373473289408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111998373473289408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111998373473289408'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/06/useful-bit-of-code-i-wrote.html' title='A useful bit of code I wrote...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111977245655988316</id><published>2005-06-26T07:50:00.000Z</published><updated>2005-06-26T07:54:17.606Z</updated><title type='text'>This from the BBC website...</title><content type='html'>Looks like they answered their own question there, doesn't it?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://freespace.virgin.net/ben.savage/BlogFiles/Pics/OwnQuestion.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111977245655988316?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111977245655988316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111977245655988316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111977245655988316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111977245655988316'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/06/this-from-bbc-website.html' title='This from the BBC website...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111947629115009072</id><published>2005-06-22T21:24:00.000Z</published><updated>2005-06-22T21:38:11.160Z</updated><title type='text'>Aimless rambling through blogs</title><content type='html'>Sometimes it's nice to ramble aimlessly through blogs. Find one you like, find an entertaining bit of commentary, follow the link. Start over.&lt;br /&gt;&lt;br /&gt;It's kind of like a country walk for my head. A wander thourgh a crazy forest of other people's thoughts. But I guess everyone gets that.&lt;br /&gt;&lt;br /&gt;So imagine my surprise when I stumbled upon this &lt;a href="http://www.ssw.com.au/SSW/Standards/Rules/RulesToBetterEmail.aspx" target="_blank"&gt;metaphorical fairy-circle-with-real-life-hermit-and-complete-henge&lt;/a&gt; in my blog wander.&lt;br /&gt;&lt;br /&gt;Just had to share. I particularly like rule 19:&lt;strong&gt;"Do you minimize your Outlook Distractions?"&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I like the Outlook envelope in my taskbar. I tried for a time managing email by setting aside a specific time for checking and dealing with email, using it to plan my work for the next couple of hours and suchlike. Didn't work, though. I think because email was &lt;em&gt;so&lt;/em&gt; abused at my old office, I'd get an email, not read it for sometimes as long as a 30 whole minutes, and have someone run over to my desk to ask me why I hadn't done whatever they'd asked me about in the mail.&lt;br /&gt;&lt;br /&gt;Maybe I was just managing the people wrong, rather than the email. Who knows. It's all in the past. Anyway, I thought it was a right cracking little nugget. Definitely one to share with colleagues.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111947629115009072?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111947629115009072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111947629115009072' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111947629115009072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111947629115009072'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/06/aimless-rambling-through-blogs.html' title='Aimless rambling through blogs'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111908512434943517</id><published>2005-06-18T08:50:00.000Z</published><updated>2005-06-18T21:05:14.706Z</updated><title type='text'>Well here it is...</title><content type='html'>I'm spent. It's been a long a stressful week this week, what with trying to find gainful employment, keep doing my regular job and such.&lt;br /&gt;&lt;br /&gt;However, &lt;a href="http://freespace.virgin.net/ben.savage/BlogFiles/CV/CV.xml" target="_blank"&gt;here's my CV &lt;/a&gt; (or Resume for those readers who don't speak Latin. Or live in the UK). Even leveraged some weird things into it. HTML CV? Nah. That's far too boring! I know (I thought one evening aftera little too much ale) I'll do an XML CV. Then transform ti with a spot of XSL, and then just for the kicker, I'll throw in a bit o' fine CSS magic to make it look sensible.&lt;br /&gt;&lt;br /&gt;It doesn't look too pretty at the moment. Improvements will, inevitably be coming.&lt;br /&gt;&lt;br /&gt;Just wanted to share...&lt;br /&gt;&lt;br /&gt;Oh yeah, and if anyone can let me know how I can get the indentation to look right on the  school and employment history in Firefox, then please do. It's been driving me insane all week.&lt;br /&gt;&lt;br /&gt;&lt;Strong&gt;Update:&lt;/strong&gt; The link has been changed, so it should work fine in IE now. Apologies for any inconvenience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111908512434943517?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111908512434943517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111908512434943517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111908512434943517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111908512434943517'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/06/well-here-it-is.html' title='Well here it is...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111895321788314060</id><published>2005-06-16T20:10:00.000Z</published><updated>2005-06-16T20:20:17.890Z</updated><title type='text'>Oh the whoriness of it...</title><content type='html'>So my employer let me know on Monday that I was being made redundant. I've got a few more weeks until I'm out of the door, but in the meantime I've been applying for lots of jobs. &lt;br /&gt;&lt;br /&gt;And my word don't I feel cheap and dirty!&lt;br /&gt;&lt;br /&gt;I've been scouring job sites and applying for everything under the sun that I think I can do. Now the thing about job sites is that all the agencies go through them. So, now my spam mailbox is loaded 24/7 with mail from a whole load of agencies. Loads of them. I've even got my mail folders organised by agency. I can tell you I've 'registered' (a rather spurious term, if ever I saw one) with some 24 different agencies.&lt;br /&gt;&lt;br /&gt;That doesn't make me feel like a whore, though.&lt;br /&gt;&lt;br /&gt;The thing that really makes me feel cheap and dirty, and makes me feel like I need a shower, is having to actually &lt;em&gt;read&lt;/em&gt; every mail, and (even worse) &lt;em&gt;reply to them&lt;/em&gt;. Normally spam is given short shrift in Benjimawoo towers. Almost no-one has my real email address, and the very few newsletters and things I subscribe to go to my spam account. Product registrations (an even more insidious route to getting spam) goes to a separate webmail account.&lt;br /&gt;&lt;br /&gt;I digress, though. Answering unsolicited (or at best semi-solicited) mail really grates.&lt;br /&gt;&lt;br /&gt;But hopefully it'll keep me in a job. Which will be nice. I've had a few calls from various companies, and I'm being put forward for a few positions, so hopefully, I'll have some more news shortly.&lt;br /&gt;&lt;br /&gt;It's all good fun, though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111895321788314060?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111895321788314060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111895321788314060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111895321788314060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111895321788314060'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/06/oh-whoriness-of-it.html' title='Oh the whoriness of it...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111873834292347675</id><published>2005-06-14T09:29:00.000Z</published><updated>2005-06-14T08:39:02.983Z</updated><title type='text'>Finally discovered for the charlatan I am!</title><content type='html'>Well I knew the dream couldn't last forever, and I just discovered that the client I've been working for isn't going to be needing any further development on the applications I look after.&lt;br /&gt;&lt;br /&gt;As a result, I've been made redundant.&lt;br /&gt;&lt;br /&gt;Bugger.&lt;br /&gt;&lt;br /&gt;So if anyone's looking for a VB.NET developer in the London UK area, drop me a comment. Hell, if you just want to jeer and boo, then drop me a comment. In the spirit of unfailing optimism I'll be posting a CV at some point. In the meantime I've got sites to scour and people to cajole into employing me.&lt;br /&gt;&lt;br /&gt;Apologies for irrelevance, begginess, and miscellaneous other stuff. There will be some technical bits coming soon. Promise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111873834292347675?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111873834292347675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111873834292347675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111873834292347675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111873834292347675'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/06/finally-discovered-for-charlatan-i-am.html' title='Finally discovered for the charlatan I am!'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111790248684961841</id><published>2005-06-04T16:20:00.000Z</published><updated>2005-06-04T16:28:06.853Z</updated><title type='text'>Oh so NOW I get it...</title><content type='html'>I've always been a bit mystified by the whole keyboard mappings thing. I know people really do get quite het up about keyboard mappings, and I know VS has a quite frankly bewildering keyboard mapping configuration properties thing. &lt;br /&gt;&lt;br /&gt;I never really used it before, though.&lt;br /&gt;&lt;br /&gt;However, I have just recently been feeling a little cheated because no software at all seems to support my very flash mouse. What I really wanted to be able to do was do some nice document navigation through my mouse. The buttons are nicely customisable, I can even assign key combinations to them (as opposed to standard operations or single keys). I was a bit miffed, though, because I can't assign keystroke chords to them (as used a lot in VS). However, through the gift of the keyboard mappings setup, I've got now got multiple keyboard combinations set up for my bookmark stuff (e.g. Next Bookmark is Ctrl+K, Ctrl+N &lt;em&gt;as well as&lt;/em&gt; Ctrl+;). Once those are set up, I can assign the Ctrl+; combination to the 'next' button on my mouse (which I never really use anyway) and skip merrily through my code just using my mouse.&lt;br /&gt;&lt;br /&gt;Pretty neat. I know it's nothing new at all, but it is to me. I'm impressed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111790248684961841?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111790248684961841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111790248684961841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111790248684961841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111790248684961841'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/06/oh-so-now-i-get-it.html' title='Oh so NOW I get it...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111790051418864098</id><published>2005-06-04T15:51:00.000Z</published><updated>2005-06-04T15:55:14.193Z</updated><title type='text'>It's what camera phones were invented for...</title><content type='html'>The one visual gag that never EVER &lt;strong&gt;EVER&lt;/strong&gt; dies!!!&lt;br /&gt;&lt;br /&gt;&lt;img src="http://freespace.virgin.net/ben.savage/BlogFiles/Pics/NiceJugs.jpg" /&gt;&lt;br /&gt;&lt;em&gt;Nice jugs Mrs Mawoo!!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111790051418864098?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111790051418864098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111790051418864098' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111790051418864098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111790051418864098'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/06/its-what-camera-phones-were-invented.html' title='It&apos;s what camera phones were invented for...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111652464579684962</id><published>2005-05-19T17:42:00.000Z</published><updated>2005-05-19T17:44:05.800Z</updated><title type='text'>PS</title><content type='html'>Oh yes.&lt;br /&gt;&lt;br /&gt;And I'm eternally indebted to the fine folks at &lt;a href="http://www.Virgin.net" target="blank"&gt;Virgin&lt;/a&gt; for upgrading my broadband connection from 512Kbps to 1Mbps. Good work fella!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111652464579684962?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111652464579684962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111652464579684962' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111652464579684962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111652464579684962'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/05/ps.html' title='PS'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111652437705776668</id><published>2005-05-19T17:28:00.000Z</published><updated>2005-05-19T17:45:24.183Z</updated><title type='text'>Ssshhhh!</title><content type='html'>I've been very quiet of late. I know this.&lt;br /&gt;&lt;br /&gt;I've been doing something even more fun than simply writing code. Writing code for money!&lt;br /&gt;&lt;br /&gt;Yes. I've been in my job for a couple of months, now, and it's really good fun. Okay, sometimes it's not, but then most of the time it is.&lt;br /&gt;&lt;br /&gt;I sadi a while ago that it was really useful having a second person in the background telling you where your application sucks, or at the very ;east not where it sucks, but what would make it even cooler.&lt;br /&gt;&lt;br /&gt;Well now I have a whole squad of them. The upshot of it is that although I'm not reading so much, I am teaching myself lots of quite cool things. There are a couple of reasons why I haven't been frantically blogging about them:&lt;ol&gt;&lt;li&gt;It's nothing &lt;em&gt;particularly&lt;/em&gt; new&lt;/li&gt;&lt;li&gt;It's not neccessarily .NET focused (I've been doing a bit of JavaScript, bit of network type stuff and so on...)&lt;/li&gt;&lt;li&gt;It's not that interesting (I mean, who &lt;em&gt;really&lt;/em&gt; wants to know about freezing table headings &lt;em&gt;a la&lt;/em&gt; Excel?&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;So I've been quiet. There are stil a whole bunch of things I'm planning on doing in th enot too distant future, though:&lt;ol&gt;&lt;li&gt;Get a wireless Router&lt;/li&gt;&lt;li&gt;Get a New suit&lt;/li&gt;&lt;li&gt;Start writing my software Magnum Opus&lt;/li&gt;&lt;li&gt;lPut together a code library to help me write stuff &lt;em&gt;after&lt;/em&gt; my software Magnum Opus&lt;/li&gt;&lt;li&gt;Get a proper host&lt;/li&gt;Register my very own domain name&lt;/li&gt;&lt;li&gt;Some other crap, I'm sure.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;But what I've noticed is that now I write code for a living, rather than wanting to do less for fun, I actually want to do &lt;Strong&gt;more&lt;/Strong&gt; for fun.&lt;br /&gt;&lt;br /&gt;So that's where I've been. I've got a whole host of not-quite-so-new ASP.NET stuff to write about, couple of false starts, and an entire code demo in the making, which'll be along shortly.&lt;br /&gt;&lt;br /&gt;Anyway. Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111652437705776668?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111652437705776668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111652437705776668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111652437705776668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111652437705776668'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/05/ssshhhh.html' title='Ssshhhh!'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111602280541931548</id><published>2005-05-13T22:17:00.000Z</published><updated>2005-05-13T22:20:05.423Z</updated><title type='text'>Yes yes yes</title><content type='html'>Yes quiet. Yes more soon. Yes yes yes.&lt;br /&gt;&lt;br /&gt;I don't care, though. &lt;a href="http://www.davidhasselhoff.com/" target="blank"&gt;The Hoff&lt;/a&gt; is on telly tonight.&lt;br /&gt;&lt;br /&gt;If I was going to turn, I'd turn for him.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111602280541931548?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111602280541931548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111602280541931548' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111602280541931548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111602280541931548'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/05/yes-yes-yes.html' title='Yes yes yes'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111410474949190396</id><published>2005-04-21T17:27:00.000Z</published><updated>2005-04-21T17:32:29.493Z</updated><title type='text'>A really handy tip...</title><content type='html'>I can't remember where I heard or read it, but I remembered a handy tip for when you're having trouble working with datasets.&lt;br /&gt;&lt;br /&gt;I was having a mare with a dataset earlier on today, and I thought that something was up with my columns, but I remembered this single method call (luckily!) just before I embarked on a woeful quest of 'for each c as DataColumn in MyDataSet.Tables(0)' and stuff like that.&lt;br /&gt;&lt;br /&gt;Here it is:&lt;br /&gt;&lt;code&gt;MyDataset.WriteXML(Response.OutputStream)&lt;/code&gt;&lt;br /&gt;Very handy.&lt;br /&gt;&lt;br /&gt;Still didn't sort out the prblem, though. The dataset was exactly as I expected. It was just one of the assemblies I was working with that was playing up. Still, we live and learn, do we not?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111410474949190396?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111410474949190396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111410474949190396' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111410474949190396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111410474949190396'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/04/really-handy-tip.html' title='A really handy tip...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111380528110228294</id><published>2005-04-18T06:17:00.000Z</published><updated>2005-04-18T06:21:21.103Z</updated><title type='text'>It's like they reached into my head...</title><content type='html'>... And put what they found in there on the web.&lt;br /&gt;&lt;br /&gt;MSDN's &lt;a href="http://msdn.microsoft.com/coding4fun/default.aspx" target="_blank"&gt;Coding4Fun&lt;/a&gt; sitelet (Is that even a real word??) does rock! A whole bunch of great brains doing nothng productive? I'm right on down wit' dat!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111380528110228294?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111380528110228294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111380528110228294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111380528110228294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111380528110228294'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/04/its-like-they-reached-into-my-head.html' title='It&apos;s like they reached into my head...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111345937198453908</id><published>2005-04-14T06:15:00.000Z</published><updated>2005-04-14T06:16:11.986Z</updated><title type='text'>Summer must be coming...</title><content type='html'>... I've just swatted my first wasp.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111345937198453908?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111345937198453908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111345937198453908' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111345937198453908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111345937198453908'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/04/summer-must-be-coming.html' title='Summer must be coming...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111337196422165831</id><published>2005-04-13T05:57:00.000Z</published><updated>2005-04-13T05:59:24.223Z</updated><title type='text'>There are some things in life that I don't need to see...</title><content type='html'>And one of them is at the end of &lt;a href="http://www.hanselman.com/blog/TechEdVideo4ItsAllAboutCommunityAndIceCreamAndBabyCarrots.aspx" target="_blank"&gt;Scott and Rory's 4th tech-ed video&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The hopeful look on Rory's face. The little half-smile. That'll be haunting me for weeks...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111337196422165831?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111337196422165831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111337196422165831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111337196422165831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111337196422165831'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/04/there-are-some-things-in-life-that-i.html' title='There are some things in life that I don&apos;t need to see...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111333071806869323</id><published>2005-04-12T18:24:00.000Z</published><updated>2005-04-12T18:31:58.070Z</updated><title type='text'>Great little Add-in</title><content type='html'>I've been meaning to give the &lt;a href="http://www.jtleigh.com/people/colin/software/CopySourceAsHtml/" target="_blank"&gt;Copy Source as HTML&lt;/a&gt; a go fro ages. I reckon it would make my life much easier when it comes to code samples. And of course it would. Half the reason I don't put too many code samples on my blog is that I don't have the patience to read plain black text, nor do I have the patience to go through and manually highlight big blocks of code.&lt;br /&gt;&lt;br /&gt;Lucky, then, that I now have this neat little VS add-in to let me put in things like this:&lt;br /&gt;&lt;div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Protected&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt; GetSubordinates(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; EID &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt;) &lt;span style="color: blue;"&gt;As&lt;/span&gt; DataView&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GetSubordinates = &lt;span style="color: blue;"&gt;New&lt;/span&gt; DataView(GetEmployees.Tables(0))&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; GetSubordinates.RowFilter = &lt;span style="color: fuchsia;"&gt;"ReportsTo = "&lt;/span&gt; &amp;amp; EID&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; GetSubordinates&lt;/pre&gt;&lt;br /&gt;&lt;pre style="margin: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Useless bit of junk code, but hey neato! Just copied and pasted strainght in.&lt;br /&gt;&lt;br /&gt;Nice.&lt;br /&gt;&lt;br /&gt;Apologies for only just getting on the bandwagon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111333071806869323?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111333071806869323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111333071806869323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111333071806869323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111333071806869323'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/04/great-little-add-in.html' title='Great little Add-in'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111332825548383815</id><published>2005-04-12T17:47:00.000Z</published><updated>2005-04-12T17:50:55.483Z</updated><title type='text'>It's the little things...</title><content type='html'>Now and again I'll have a really productive day. Everything'll fall into place,  compile first time and just run.&lt;br /&gt;&lt;br /&gt;Sometimes, though, I just think of a really small thing and think to myself 'gee. Y'know, it really would be nicer if it did &lt;em&gt;that&lt;/em&gt;.'&lt;br /&gt;&lt;br /&gt;Like today. I'll expand on it later, when I've actually finishedit, but suffice to say it involves ASP.NET, Repeaters, home-grown viewstate persistence and a whole load of kludges that I never thought I'd have to go near.&lt;br /&gt;&lt;br /&gt;Grrr. The devil is, indeed, very much in the detail!&lt;br /&gt;&lt;br /&gt;Apologies for teasiness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111332825548383815?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111332825548383815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111332825548383815' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111332825548383815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111332825548383815'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/04/its-little-things.html' title='It&apos;s the little things...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111332804615367455</id><published>2005-04-12T17:40:00.000Z</published><updated>2005-04-12T17:47:26.156Z</updated><title type='text'>Cheap. Nasty. Dirty.</title><content type='html'>Just a quick one to tell both my readers that if they don't already, listen to &lt;a href="http://mondays.pwop.com" target="_blank"&gt;Mondays&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is what it's not:&lt;ul&gt;&lt;li&gt;Safe for work&lt;/li&gt;&lt;li&gt;Intellectually Challenging&lt;/li&gt;&lt;li&gt;Mature&lt;/li&gt;&lt;li&gt;Educational&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Here is what it is:&lt;ul&gt;&lt;li&gt;Funny&lt;/li&gt;&lt;li&gt;Crass. But in a good way.&lt;/li&gt;&lt;li&gt;&lt;em&gt;Alternatively&lt;/em&gt; Educational&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Well it's good clean fun, anyway. So listen to it. Both of you!&lt;br /&gt;&lt;br /&gt;Do I get a Mondays mug now?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111332804615367455?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111332804615367455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111332804615367455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111332804615367455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111332804615367455'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/04/cheap-nasty-dirty.html' title='Cheap. Nasty. Dirty.'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111273922537340959</id><published>2005-04-06T13:20:00.000Z</published><updated>2005-04-06T12:20:04.816Z</updated><title type='text'>Blogging on Demand #6</title><content type='html'>I saw this in my referral whatsit just this evening, in fact, so in the interests of rapid response, here's a little bit about...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.google.com/search?hl=en&amp;lr=&amp;amp;q=%22accessing%20protected%20methods%22%20vb&amp;amp;btnG=Search" target="_blank"&gt;"accessing protected methods" vb&lt;/a&gt; (via &lt;a href="http://www.google.com" target="_blank"&gt;Google&lt;/a&gt;)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Any methods in your class can (and usually will) be given a level of access, normally one of four: &lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/en-us/vblr7/html/vakeyPublic.asp?frame=true" target="_blank"&gt;Public&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/en-us/vblr7/html/vakeyPrivate.asp?frame=true" target="_blank"&gt;Private&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/en-us/vblr7/html/vakeyFriend.asp?frame=true" target="_blank"&gt;Friend&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/en-us/vblr7/html/vakeyProtected.asp?frame=true" target="_blank"&gt;Protected&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;There are a couple more as well which are used quite a bit, Shared and Virtual. I won't be going into them right now, since the reasoning behind them is a little different to the other four.&lt;br /&gt;The different levels of access denote which code can 'see' the method, and call it. Briefly, the levels of access look like this:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Public&lt;/strong&gt;&lt;br /&gt;Public methods (same with public variables) can be seen and called from any code that references it. If you add a reference to your project, and declare an instance of the class, you can call all the methods declared in that class as public.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Private&lt;/strong&gt;&lt;br /&gt;Private methods and variables are declared within your class and can only be callled from within that class. If you create an instance of your class that has private methods within it, you will ot be able to call those methods. I often use private methods for quick functions that are needed all over the place within that class. They can, in fact, cover a multitude of evils (just between you and me). You'll notice that when you're working in VS, intellisense doesn't list private methods either. It's clever like that. As far as the code calling your class goes, private methods may as well not exist. I think you get the point.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Friend&lt;/strong&gt;&lt;br /&gt;Methods and variables declared as friend can be called only by code from within its assembly. This is quite handy if you've got some code that's used extensively throughout your application, but has some secret logic in it (for instance). OK, there are ways and means of finding it, through ILDASM and stuff, but for normal developers doing normal things, it's pretty much invisible. It's also something to look out for if you're writing an app that has multiple assemblies. As far as I know, the scope of friend methods is only the individual assembly, rather than the whole application.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Protected&lt;/strong&gt;&lt;br /&gt;Finally. Protected methods. What this whole post was meant to be about. Protected methods really come into play when you're talking about inheritance. And why? Because protected methods can only be called directly by an inherited class.&lt;br /&gt;&lt;br /&gt;Take, for example, the Windows Forms Control class. All Windows Forms controls have a protected sub called &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformscontrolclassonpainttopic.asp" target="_blank"&gt;OnPaint&lt;/a&gt;. As the name suggests, it paints the control. You may want to, however, do some custom action while the control is painting. Because the OnPaint method is declared as protected, you can't call it from the surrounding code. It can only be called from within itself. So how can you do something whizzy and flash with your control's OnPaint method? Well, you can inherit from it.&lt;br /&gt;&lt;br /&gt;Create yourself a new class, that inherits from Control, and within that class you can change the way your control is painted. I did this recently with &lt;a href="http://benthevbdeveloper.blogspot.com/2005/01/i-did-have-huge-long-post-written-for.html"&gt;a dial control I was working on&lt;/a&gt;. In my case, I used OnPaint to specify where the hand on my dial was going and to draw it in, by declaring this method:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Private Overrides Sub&lt;/span&gt; OnPaint(sender &lt;span style="color:blue;"&gt;as&lt;/span&gt; object, e &lt;span style="color:blue;"&gt;as&lt;/span&gt; PaintEventargs)&lt;br /&gt;&lt;span style="color:green;"&gt;' Call the original base class' OnPaint, so you don't have to draw the whole thing from scratch&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;MyBase&lt;/span&gt;.OnPaint&lt;br /&gt;&lt;span style="color:green;"&gt;'Do some drawing stuff here&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The important thing to note, however, is that the original MyBase.OnPaint method was available, because it was declared in the base class as Protected.&lt;br /&gt;&lt;br /&gt;And that's how you access protected methods.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111273922537340959?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111273922537340959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111273922537340959' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111273922537340959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111273922537340959'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/04/blogging-on-demand-6.html' title='Blogging on Demand #6'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111273091251153152</id><published>2005-04-05T19:52:00.000Z</published><updated>2005-04-05T19:55:12.513Z</updated><title type='text'>Want to put a Windows Control in your web app?</title><content type='html'>&lt;a href="http://mkenyon2.blogspot.com" target="_blank"&gt;Mark's&lt;/a&gt; written &lt;a href="http://www.developerfusion.co.uk/show/4683/3/" target="_blank"&gt;this quick tutorial&lt;/a&gt; about how to do it.&lt;br /&gt;&lt;br /&gt;Good work fella. I didn't even know this could be done until the other day - I think I might have to have a play about with this shortly...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111273091251153152?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111273091251153152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111273091251153152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111273091251153152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111273091251153152'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/04/want-to-put-windows-control-in-your.html' title='Want to put a Windows Control in your web app?'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111264634935639146</id><published>2005-04-04T20:12:00.000Z</published><updated>2005-04-04T20:25:49.356Z</updated><title type='text'>Isn't life grand?</title><content type='html'>I've been having one of those weeks when I just wander about rediscovering really cool things. You know what it's like. There's a whole world of cool stuff out there, but we all just breeze past it and don't see just how great everything is.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Washing machines&lt;/strong&gt;&lt;br /&gt;Washing machines really are cool. They are, I find, essential if you want to keep your friends. I hear there's nothing worse than having a really smelly friend. I just love the way you can load up your manky shirts and they come out clean again. Briliant.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Secure working environments&lt;/strong&gt;&lt;br /&gt;There's nothing I love more than going in to work and knowing, yes, &lt;em&gt;knowing&lt;/em&gt; that I'm safe and secure at my desk. I can sit there and rest easy (except when I get up and get a &lt;a href="http://benthevbdeveloper.blogspot.com/2005/03/its-little-things.html"&gt;coffee&lt;/a&gt;) safe in the knowledge that I'm unlikely to get assaulted or blown up by anyone. Top notch. I love it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Self-Documenting databases&lt;/strong&gt;&lt;br /&gt;One of the pleasant side-effects of relational database design, apart from the obvious benefits of performance, size, and all tha good stuff, if the ability of the data structure to give you a good idea of how things are related in real life. If my database sys there's a zero-or-one-to-many relationship between houses and people, then that suggests, quite logically, that a house can have zero, one, or more people living in it. Fantastic! I get information about how real life works from the structure of a database. Something almost completely unrelated to houses and families. How cool's that? I love that.&lt;br /&gt;&lt;br /&gt;The more perceptive of you may have guessed that this week my washing machine packed up, I forgot my building pass and spent a frustrating afternoon trying to work out some database stuff.&lt;br /&gt;&lt;br /&gt;Apologies for excess sarcasm.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111264634935639146?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111264634935639146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111264634935639146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111264634935639146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111264634935639146'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/04/isnt-life-grand.html' title='Isn&apos;t life grand?'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111211132844671995</id><published>2005-03-29T15:36:00.000Z</published><updated>2005-03-29T15:48:48.446Z</updated><title type='text'>Disgruntled of London</title><content type='html'>Just been reading the new &lt;a href="http://searchvb.techtarget.com/originalContent/0,289142,sid8_gci1071622,00.html" target="_blank"&gt;pricing structure for Visual Studio&lt;/a&gt;. OKay. That's not strictly true. I read about it a few days ago, just didn't have a chance to write anything about it.&lt;br /&gt;&lt;br /&gt;I'm a bit upset at how the new pricing's worked out. I currently use Visual Basic 2003 Standard Edition. It's got most (as far as I can gather) of the functionality of Visual Studio, with just a couple of things chopped out, like native support for Library projects, support for SQL Server (Only talks in the designer to MSDE) and a few other things that are all easily workable.&lt;br /&gt;&lt;br /&gt;The reason I started using VBSE was that, although it's a little limited, it did, at the every least, give me a very VS-like experience - having used VS Pro it gave me few or no surprises.&lt;br /&gt;&lt;br /&gt;Unfortunately, if I want to do that this time round, I have to fork out $300 (Not sure what it'll be in GBP) for the same thing. Yes, I know it's not the same thing. It's got more functionality than VBSE (Compact Framework support, native Library support etc.) but still...&lt;br /&gt;&lt;br /&gt;The only way (as far as I can tell) to get a similar (although not complete) level of functionality is to get both the VS-Express editions (VB and Web) and work with them. Sadly, from what I can gather, it's just not the same.&lt;br /&gt;&lt;br /&gt;Grrr. As long as VS 2006 doesn't come out at the beginning of 2006, I daresay I'll end up buying VS 2005 Standard Edition anyway. guess I'm just a sucker...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111211132844671995?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111211132844671995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111211132844671995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111211132844671995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111211132844671995'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/03/disgruntled-of-london.html' title='Disgruntled of London'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111209798635405097</id><published>2005-03-29T00:57:00.000Z</published><updated>2005-03-29T12:06:26.356Z</updated><title type='text'>Keeping up with the pace...</title><content type='html'>I've noticed a few strange things since I started my new job a few weeks ago. One of those things is the strange effect of learning a fairly new technology without having used the old one.&lt;br /&gt;&lt;br /&gt;The application I'm maintaining is written in ASP 3.0. Which is fine. I can hack through it and work out what's going on fairly easily. It's just not something I've really used before. And my is this application big! I don't know if it's big in the wider schme of things, I doubt it very much, but it's way bigger than anything I've really played with before.&lt;br /&gt;&lt;br /&gt;I can talk fairly knowledgably about a whole host of .NET stuff, and I can talk my way through OOP, SQL and a few other things fairly comfortably. The only thing is, I've only ever written anything with maybe 2 or 3 webforms, and perhaps (if I'm feeling adventurous) a couple of UserControls. I've never really dealt with anything this big.&lt;br /&gt;&lt;br /&gt;Not that it's a problem. I know that at the end of the day, any app is just a whole series of smaller parts. One it's broken down into smaller parts, everything's easy. Getting to that stage is a bit daunting, though.&lt;br /&gt;&lt;br /&gt;That aside, it also uses a whole load of JavaScript, which is something I thought (rather naively and hopefully, I might add) i could get away with not knowing too much about.&lt;br /&gt;&lt;br /&gt;How wrong I was.&lt;br /&gt;&lt;br /&gt;Oh well. Looks like I'll be reading and reading some more over the next few weeks. And writing and writing some more.&lt;br /&gt;&lt;br /&gt;Apologies for pointlessness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111209798635405097?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111209798635405097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111209798635405097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111209798635405097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111209798635405097'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/03/keeping-up-with-pace.html' title='Keeping up with the pace...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111134425731985797</id><published>2005-03-20T18:41:00.000Z</published><updated>2005-03-20T18:45:41.500Z</updated><title type='text'>Party Time!</title><content type='html'>We've celebrated a couple of birthdays over the past couple of weeks. 2 of my friends, Clare and Mark turned 30.&lt;br /&gt;&lt;br /&gt;Mark's birthday was really good fun, went out for a meal and a couple of drinks and stuff. All good.&lt;br /&gt;&lt;br /&gt;Clare had herself a house party last night. Which was also really cool. There's nothing lifts the spirits like an undead themed party.&lt;br /&gt;&lt;br /&gt;The pictures of the 2 evenings are &lt;a href="http://freespace.virgin.net/ben.savage/undead" target="_blank"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111134425731985797?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111134425731985797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111134425731985797' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111134425731985797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111134425731985797'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/03/party-time.html' title='Party Time!'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111109325563388184</id><published>2005-03-17T20:24:00.000Z</published><updated>2005-03-17T21:01:41.780Z</updated><title type='text'>Scuppered by the parser...</title><content type='html'>I had an idea yesterday. I was going to write a simple databound ASP control.&lt;br /&gt;&lt;br /&gt;The plan &lt;em&gt;was&lt;/em&gt; to have a generic bound control, with a database connection, table name, field name and control type specified. The control, on databinding, would create a new database connection, read the values in and put them into the control of your choice (to start with it was just a choice of DropDownList or ListBox).&lt;br /&gt;&lt;br /&gt;My thinking behind it was to make something very quick and dirty to drop onto a page, but keep the page design fairly clean. Assuming there was already a database connection being used somewhere on the page already (as there is bound to be), it would look something like this:&lt;br /&gt;&lt;br /&gt;&lt;code style="Color:black;"&gt;&amp;lt;MyControls:BoundControl runat="server" ID="BoundControl1" Connection="NorthwindConnection" Table="Categories" Field="CategoryName" /&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Neat, I thought. It's slightly easier to use that a normal ASP:DropDownList, and still fairly efficient since it makes use of the existing connection that the page has created.&lt;br /&gt;&lt;br /&gt;Put it together, and it compiles nicely. Drop it on a page and it looks fine. Feed it the properties it needs. Visual Studio even gives you a nice dropdown in the properties grid of all the database connections already on the page in the designer. All hunky dory, I thought.&lt;br /&gt;&lt;br /&gt;Hit F5, compiles nicely (as I would expect, this is &lt;em&gt;my&lt;/em&gt; code after all (fnar fnar!!))&lt;br /&gt;&lt;br /&gt;But no. I'm just about to sit smugly back and have a post codal cigarette, when:&lt;br /&gt;&lt;span style="font-family:'Verdana';font-weight:normal;font-size:14pt;color:maroon"&gt;&lt;br /&gt;&lt;i&gt;Unable to generate code for a value of type 'System.Data.SqlClient.SqlConnection'. This error occurred while trying to generate the property value for Connection.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It turns out that the &lt;em&gt;parser&lt;/em&gt; can't give that property to that object. If, however, you set that property at runtime, then you're fine.&lt;br /&gt;&lt;br /&gt;Ideally I was looking to have everything do-able in the designer (designtime support was the next thing on my list of things to look at) but if I can't set the connection at design time, then it doesn't work so good. You end up with some properties being set-able in the designer, and some only available in the codebehind, and I can't say I'm too much of a fan of doing that.&lt;br /&gt;&lt;br /&gt;Failing that, I'm left with 2 options:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Make the connection string a property of the control, and have the control itself create a database connection (not ideal - imagine if you had a form with 15 fields, and each of those fields was trying to create and open a new database connection)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Pass some other sort of data-object into the control. A Dataset for instance.&lt;/li&gt;&lt;/ol&gt;As you can see, neither of those choices really works. One sucks up unnecessary resources, while the other one doesn't save me any work at all. If I'm going to be creating page-level datasets and stuff like that, then I might as well just use the built-in ListBox and DropDownList controls.&lt;br /&gt;&lt;br /&gt;And all because the page parser was "Unable to generate code for a value of type 'System.Data.SqlClient.SqlConnection'".&lt;br /&gt;&lt;br /&gt;I'm going to have to find something else to do with the next couple of evenings, now. &lt;br /&gt;&lt;br /&gt;Maybe I'll speak to some real people. I've been told that's what normal people do...&lt;br /&gt;&lt;br /&gt;Apologies for pointless rambling.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111109325563388184?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111109325563388184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111109325563388184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111109325563388184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111109325563388184'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/03/scuppered-by-parser.html' title='Scuppered by the parser...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111106545334835956</id><published>2005-03-17T13:09:00.000Z</published><updated>2005-03-17T13:17:33.350Z</updated><title type='text'>It's the little things...</title><content type='html'>So I started my new job on Monday, and I must say I'm having a really good week. I've done some code stuff, done some data stuff. It's all been good.&lt;br /&gt;&lt;br /&gt;Except for one thing.&lt;br /&gt;&lt;br /&gt;Vending Machine Coffee.&lt;br /&gt;&lt;br /&gt;I say again:&lt;br /&gt;&lt;br /&gt;Vending Machine Coffee.&lt;br /&gt;&lt;br /&gt;There are very few things on this earth that are more disappointing than hitting the button for filter coffee and getting out the stalest nastiest oldest cup of coffee in the world. I can deal with artificial whitener. I can deal with the plastic cup that burns your fingers on the way back to your desk. I can even deal with the fact that it's only a small cup, rather than the gargagntuan 'special' mug I'm used to at home (I think it was sold originally as a novelty item, rather than a usable mug). But the thing that really grates, the one thing that takes a little bit of joy out of my day is a cup of really bad, old, stale coffee.&lt;br /&gt;&lt;br /&gt;The cruel irony of it, though, is that I drink more coffee during the day here than I used to in my old job. At the risk of lowering the tone, I now spend about an hour and a half on the tube commuting, rather than the hour I'm used to, so I can only have one cup before I leave the house, otherwise I'll rupture somethnig.&lt;br /&gt;&lt;br /&gt;Oh well. The rest of the day way makes up for the occasional bad coffee.&lt;br /&gt;&lt;br /&gt;Apologies for irrelevance. I'm sure I said I was going to blog some code stuff. I will eventually...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111106545334835956?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111106545334835956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111106545334835956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111106545334835956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111106545334835956'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/03/its-little-things.html' title='It&apos;s the little things...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111082617366808563</id><published>2005-03-14T18:26:00.000Z</published><updated>2005-03-14T18:54:39.753Z</updated><title type='text'>Close, but no Cigar.</title><content type='html'>There's a war on.&lt;br /&gt;&lt;br /&gt;It's a quiet war. An underground war. Most mortals don't even know about it. It doesn't expose itself to the outside world.&lt;br /&gt;&lt;br /&gt;But it's there. There are casualties. There are skirmishes, but mostly the war just rages and wears on. Out of site. Almost out of mind.&lt;br /&gt;&lt;br /&gt;It's the battle of the barnets.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/cfranklin/archive/2005/03/14/394534.aspx" target="_blank"&gt;Carl&lt;/a&gt; put forward a contender the on &lt;a href="http://www.dotnetrocks.com" target="_blank"&gt;DotNetRocks&lt;/a&gt;. He reckons that &lt;a href="http://www.pdsa.com/" target="_blank"&gt;Paul Sheriff&lt;/a&gt;'s hair is almost as good, if not better that &lt;a href="http://www.overand.com" target="_blank"&gt;Geoff&lt;/a&gt;'s.&lt;br /&gt;&lt;br /&gt;I am, as some people may have noticed, a big fan of Geoff's hair. &lt;a href="http://benthevbdeveloper.blogspot.com/2004/11/screaming-fan.html" target="_blank"&gt;I think it rocks&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;I think Paul Sheriff, although he does have a fine fine head of hair, and equally fine beard, doesn't quite cut the mustard. Only because while Geoff's hair has that air on nonchalant elegance about it, Paul's looks a bit more finely tuned. &lt;br /&gt;&lt;br /&gt;It's like this:&lt;br /&gt;&lt;br /&gt;Joanna Lumley can be sat in her slippers and dressing gown, watching daytime TV and reading the paper and still look beautiful. She just has that air of elegance and charm that transcends what she's actually doing. She doesn't have to be doing anything in particular, she just always exudes the same air of elegance.&lt;br /&gt;&lt;br /&gt;Like Geoff's hair.&lt;br /&gt;&lt;br /&gt;Catherine Zeta Jones is equally foxy. She turns up to events and everything looking absolutely stunning, wherever she goes. She is absolutely jaw-droppingly attractive. However, you just &lt;em&gt;know&lt;/em&gt; that behind every swoop of her dress, every flick of her hair lies a trail of broken people. Thousands of textile engineers, makeup artists, masseurs are now sitting somewhere having the stiffest and most well-earned drink of their lives. She looks gorgeous, but at you're always aware that there was a shedload of technical expertise went into it.&lt;br /&gt;&lt;br /&gt;Like Paul's hair.&lt;br /&gt;&lt;br /&gt;Don't get me wrong. It's a fine head of hair, and the hair/beard combo is among the best I've seen, but sorry. Geoff has the edge.&lt;br /&gt;&lt;br /&gt;Go Geoff's hair!!&lt;br /&gt;&lt;br /&gt;Apologies for creepiness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111082617366808563?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111082617366808563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111082617366808563' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111082617366808563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111082617366808563'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/03/close-but-no-cigar.html' title='Close, but no Cigar.'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111078509509152626</id><published>2005-03-14T07:21:00.000Z</published><updated>2005-03-14T07:24:55.093Z</updated><title type='text'>Pleasant Insanity</title><content type='html'>I like gently insane things. Not &lt;a href="http://thingsmygirlfriendandihavearguedabout.com" target="_blank"&gt;dangerously insane&lt;/a&gt;, but just quietly insane.&lt;br /&gt;&lt;br /&gt;It's no surprise, then, that I like &lt;a href="http://www.amazon.com/gp/cdp/member-reviews/AAK2GIHGFW1BT/ref=cm_cr_auth/102-5940261-5824106" target="_blank"&gt;this collection of Amazon reviews&lt;/a&gt; from hmm, of Seattle.&lt;br /&gt;&lt;br /&gt;Just wanted to share. Off to new job now...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111078509509152626?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111078509509152626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111078509509152626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111078509509152626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111078509509152626'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/03/pleasant-insanity.html' title='Pleasant Insanity'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-111036718719490370</id><published>2005-03-09T11:15:00.000Z</published><updated>2005-03-09T11:19:47.196Z</updated><title type='text'>The end of an Era</title><content type='html'>That's it. I no longer work for a charity. My last day at &lt;a href="http://www.johngrooms.org.uk" target="_blank"&gt;John Grooms&lt;/a&gt; was yesterday, and I've got the rest of the week to do with what I wish.&lt;br /&gt;&lt;br /&gt;Went out last night for leaving drinks - which was very nice. Had a few beers and a couple of Tequilas and all that. All in all a good sendoff, I reckon. &lt;br /&gt;&lt;br /&gt;Just need to teach myself how to do all the things I told my new employer I could do in my interview now!&lt;br /&gt;&lt;br /&gt;Oh well. Expect more ASP.NET things over the next few days.&lt;br /&gt;&lt;br /&gt;Apologies for wishy-washiness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-111036718719490370?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/111036718719490370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=111036718719490370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111036718719490370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/111036718719490370'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/03/end-of-era.html' title='The end of an Era'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110988736364396236</id><published>2005-03-03T21:59:00.000Z</published><updated>2005-03-03T22:07:26.216Z</updated><title type='text'>Woo and Yay to Steve Fossett!!!</title><content type='html'>Steve Fossett has just in the past couple of hours completed the fastest non-stop, non-refuelling flight in the world.&lt;br /&gt;&lt;br /&gt;Read about it all &lt;a href="http://www.virginatlanticglobalflyer.com" target="_blank"&gt;here&lt;/a&gt;. And there's a video &lt;a href="http://news.bbc.co.uk/1/hi/sci/tech/4316599.stm" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I love things like that. You just &lt;em&gt;know&lt;/em&gt; that it's just a bunch of playboys (Richard Branson being one of them) larking about having fun. Fantastic!&lt;br /&gt;&lt;br /&gt;Apologies for fanlove!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110988736364396236?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110988736364396236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110988736364396236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110988736364396236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110988736364396236'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/03/woo-and-yay-to-steve-fossett.html' title='Woo and Yay to Steve Fossett!!!'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110987000929800887</id><published>2005-03-03T17:06:00.000Z</published><updated>2005-03-03T19:15:45.116Z</updated><title type='text'>Very quick Aide Memoir</title><content type='html'>Found &lt;a href="http://www.wellstyled.com/tools/colorscheme2/index-en.html" target="_blank"&gt;this colour (or 'color') picker&lt;/a&gt; over at &lt;a href="http://weblogs.asp.net/scottdockendorf/archive/2005/03/03/384336.aspx" target="_blank"&gt;Scooter's Blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Should come in handy. Color schemes are the one thing that I really really suck at - you can tell a benjimawoo site. It's all black Arial on White, with no imagery. Oops...&lt;br /&gt;&lt;br /&gt;So anyway, just posting this so I remember where it is.&lt;br /&gt;&lt;br /&gt;Apologies for cheapness...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110987000929800887?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110987000929800887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110987000929800887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110987000929800887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110987000929800887'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/03/very-quick-aide-memoir.html' title='Very quick Aide Memoir'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110984217053537224</id><published>2005-03-03T09:13:00.000Z</published><updated>2005-03-03T09:44:02.990Z</updated><title type='text'>The difference between patience and waiting</title><content type='html'>I'm currently counting down the minutes until I leave my current job. My last day is next Tuesday. As a result, I'm twitchy, fidgety and can't really concentrate on anything. Not good.&lt;br /&gt;&lt;br /&gt;The reason for this is that I'm really not very good at waiting for stuff to happen. I'm the guy who pays extra for next day delivery when it normally gets there next day anyway (I find &lt;a href="http://www.amazon.co.uk" target="_blank"&gt;Amazon&lt;/a&gt; really good this way). Waiting or things to happen just isn't for me.&lt;br /&gt;&lt;br /&gt;Mrs Mawoo an I were talking about this last night, and she was genuinely surprised about it. "But you're the most patient person I know" she said. "You take your time over everything" she said. She even cited learning programming as an example of my patience.&lt;br /&gt;&lt;br /&gt;And I think this is the biggest difference. Whenever I'm talking to someone, or I'm trying to explain something, or I'm thinking through something, I'm &lt;em&gt;doing&lt;/em&gt; something. Although I'm taking a fairly passive role in whatever I'm doing (explaining stuff to someone is still a passive role - you're just speaking. It's the person on the receiving end that has to do the work, understanding what you're on about), I'm still doing something. I'm mentally fidgeting. I'm listening to what people are saying. If I'm trying to swing someone round to my way of thinking I'm building arguments in my head. While I'm standing nodding patiently while someone tells me for the 9th time they're right and I'm wrong, I'm actually listing the reasons why I'm right and they're wrong etc.&lt;br /&gt;&lt;br /&gt;That's what makes me patient (so Mrs Mawoo says). Being able to sit back and let things happen around me. Or rather, collating and re-evaluating information as things happen whilst not appearing to do anything.&lt;br /&gt;&lt;br /&gt;Patience is nothing to do with waiting. There are a whole bunch if people who lack patience (and tend to be grumpy too) who can happily wait forever for things to happen. &lt;br /&gt;&lt;br /&gt;I'm not one of them. I am (apparently) very patient. I hate waiting for things to happen.&lt;br /&gt;&lt;br /&gt;35 working hours to go.&lt;br /&gt;&lt;br /&gt;Apologies for rambling.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; I just remembered where Mrs Mawoo got this whole patience thing started. One thing I don't have an issue is waiting my turn. If the line's long, then fair enough. If you were here before me, then it's your turn. Even then, though, I'm not idly standing by. I'm thinking. Watching and working out how I can make things happen faster. Thinking about what's holding the person up in front of me and how I can avoid it for the person behind me. Dull, I know, but hey, it saves me from getting bored. And it keeps me from waiting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110984217053537224?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110984217053537224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110984217053537224' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110984217053537224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110984217053537224'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/03/difference-between-patience-and.html' title='The difference between patience and waiting'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110931618925598406</id><published>2005-02-27T18:30:00.000Z</published><updated>2005-02-27T18:36:17.870Z</updated><title type='text'>Doing a couple of cool things...</title><content type='html'>This is just a quick one about a couple of cool things I discovered not so long ago. They're nothing really new or anything, I just thought they were kinda fun and useful to know.&lt;br /&gt;&lt;br /&gt;1) &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWindowsFormsControlPaintClassDrawReversibleLineTopic.asp" target="_blank"&gt;ControlPaint.DrawReversibleLine&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;If you're a &lt;a href="http://dotnetrocks.com" target="_blank"&gt;DNR&lt;/a&gt; listener you'll have heard Carl and Mark Miller talking about this method. It does a very simple, but profoundly groovly little thing - it draws one of those lines where the colours are the  negatives of whatever's on screen beneath it (are they called XOR lines?). It's a very cool thing. I've never used it in any proper application (well, as proper as mine get, anyway!).&lt;br /&gt;&lt;br /&gt;2) &lt;strong&gt;&lt;a href="http://www.microsoft.com/uk/msdn/events/nuggets.aspx" target="_blank"&gt;Embedding Windows Forms Controls in HTML&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;I was vaguely aware that this could be done. But only vaguely, and never really seen it. However, thanks to the fine fine chaps at MSDN UK, I have. I even get what's going on, as well. Weird. The only bit that's a bugger to remember (although I'm sure it'll come in time) is the sntax for embedding an object. It looks like this:&lt;br /&gt;&amp;lt;Object ID="myobject" classid="http:FullPathToAssembly/FileName.dll#FullyQualified.ClassName" /&amp;gt;&lt;br /&gt;&lt;br /&gt;And that's it. All done. I just never saw it before. I think I'm going to have a bit of a play with this and see what I can get done putting various controls in web form apps. I think it's got potential to be quite cool. Well, I know it's got potential to be very cool, but it's something I'm going to have to have a bit of a play with.&lt;br /&gt;&lt;br /&gt;Oh yeah, and it looks like Firefox doesn't support it.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110931618925598406?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110931618925598406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110931618925598406' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110931618925598406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110931618925598406'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/doing-couple-of-cool-things.html' title='Doing a couple of cool things...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110908231135991649</id><published>2005-02-22T14:22:00.000Z</published><updated>2005-02-22T14:25:11.360Z</updated><title type='text'>I really must stop doing these stupid quizzes!</title><content type='html'>&lt;a href="http://www.liquidgeneration.com/quiz/villain_quiz.asp" target="_blank"&gt;Apparently I'm Hannibal Lecter.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.liquidgeneration.com" target="_blank"&gt;&lt;img src="http://www.liquidgeneration.com/quiz/images/villain_hannibal.jpg" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not that I'm complaining. There are worse villains to be.&lt;br /&gt;&lt;br /&gt;Mumbles from Dick Tracy, for instance.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110908231135991649?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110908231135991649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110908231135991649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110908231135991649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110908231135991649'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/i-really-must-stop-doing-these-stupid.html' title='I really must stop doing these stupid quizzes!'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110858377703226875</id><published>2005-02-16T19:46:00.000Z</published><updated>2005-02-16T19:56:17.033Z</updated><title type='text'>Chris Sells has seen it...</title><content type='html'>Just read on &lt;a href="http://sellsbrothers.com" target="_blank"&gt;Chris Sells'&lt;/a&gt; blog that he's seen the &lt;a href="http://www.amazon.com/exec/obidos/subst/home/home.html/102-0197669-0702567" target="_blank"&gt;Hitch Hiker's Guide to the Galaxy trailer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now I have too.&lt;br /&gt;&lt;br /&gt;I must admit, it does fill me with a certain amount of dread. Being a big fan of the books. And the Radio series. And the TV series. It kind of gives me the same feeling as when I went to see Star Wars Episode 1. Hopefully I won't feel afterwards how I did when I went to see The Phantom Menace.&lt;br /&gt;&lt;br /&gt;It's got plenty going for it, though. Great British talent. Great British author. Filmed in a Great British location. I'm sure there was some great British post-production and music in there as well. I guess that's why we only have to wait until 2 weeks after the US release date to be able to watch it here! Not that I'm bitter, of course.&lt;br /&gt;&lt;br /&gt;Still, it's going to be a must-see one for me. And a must-buy DVD when it comes out.&lt;br /&gt;&lt;br /&gt;Now where's my towel?...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110858377703226875?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110858377703226875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110858377703226875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110858377703226875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110858377703226875'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/chris-sells-has-seen-it.html' title='Chris Sells has seen it...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110848753694823604</id><published>2005-02-15T17:03:00.000Z</published><updated>2005-02-15T17:13:18.990Z</updated><title type='text'>The end of an Era</title><content type='html'>So I've just read &lt;a href="http://www.dotnetrocks.com" target="_blank"&gt;here&lt;/a&gt; that &lt;a href="http://www.neopoleon.com" target="_blank"&gt;Rory's&lt;/a&gt; left DotNetRocks.&lt;br /&gt;&lt;br /&gt;It's a fair enough decision, I guess. Much as he was really cool, and a grat co-host, I sort of go the impression over the past couple of months that he was a bit preoccupied and generally knackered at the end of the week. Whereas he used to be really bubbly, active and really fun to listen to, over the past couple of months he's been really subdued, reduced to a bit of a 'hi' at the beginning of the show, and the occasional 'yeah. Uhuh' during the show. Who could forget the time when, half way through an interview, Rory shouts 'Gah! I'm gonna have to skip out for a sec. My dog's just crapped on the rug!' Ahh. Happy days (Or if you're me, Happy nights. Listening live meant staying up till 4 or 5 am Saturday morning. Killer!)&lt;br /&gt;&lt;br /&gt;Not that I'm knocking it at all. You just have to listen to the guy's schedule and follow what he's been up to, and you can see any mere mortal would be ready to drop by the end of a week. To have to entertain and be informative after that? That ould  take some doing.&lt;br /&gt;&lt;br /&gt;So Rory's off to build his career. Good luck to him. And why not?&lt;br /&gt;&lt;br /&gt;And Richard's a top notch replacement. I'd point to his blog, but he doesn't seem to have one. Suffice to say, he's gonna rock. It'll actually be quite interesting and a bit weird. I don't think  I've ever heard him talk about code 'n' stuff. He's normally just the toy boy.&lt;br /&gt;&lt;br /&gt;Just wanted to share, since it had me thinking.&lt;br /&gt;&lt;br /&gt;At the end of the day, though. They could do anything they liked to the show, and as long as they had Geoff's hair at the helm it'd rule!&lt;br /&gt;&lt;br /&gt;Apologies for sycophantism.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110848753694823604?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110848753694823604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110848753694823604' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110848753694823604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110848753694823604'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/end-of-era.html' title='The end of an Era'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110845190697409111</id><published>2005-02-15T07:08:00.000Z</published><updated>2005-02-17T07:06:56.316Z</updated><title type='text'>Would you credit such foolishness...</title><content type='html'>It would seem that I can't even wash the dishes without having some sort of accident.&lt;br /&gt;&lt;br /&gt;This one bled and bled like a bugger (luckily Mrs Mawoo was on hand with tea-towels and other such stop-the-blood flowing stuff). I've never seen so much blood up close! Eugh!&lt;br /&gt;&lt;img src="http://freespace.virgin.net/ben.savage/BlogFiles/Wrist.jpg" alt="So much blood, such a small cut!" /&gt;&lt;br /&gt;And after it stopeed bleeding and oozing my life-force all over the kitchen, was I left with a souvenir? A nice scar to show the grandkids (embellished with a suitably tall story)? Anything? No. All I was left with was that nick. I can't even claim to have been a troubled teenager with a cut that small, dammit!&lt;br /&gt;&lt;br /&gt;And although you can't see it in the image, there's a bruise underneath the cut that aches a bit when I write and type. Bugger.&lt;br /&gt;&lt;br /&gt;So I've got:&lt;ol&gt;&lt;li&gt;No big cut&lt;/li&gt;&lt;li&gt;No tall story&lt;/li&gt;&lt;li&gt;No hard-looking scar&lt;/li&gt;&lt;li&gt;A slight ache when I write and type&lt;/li&gt;&lt;/ol&gt;Hardly seems worth dropping that bowl now...&lt;br /&gt;&lt;br /&gt;Just wanted to share. Apologies for umimpressiveness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110845190697409111?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110845190697409111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110845190697409111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110845190697409111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110845190697409111'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/would-you-credit-such-foolishness.html' title='Would you credit such foolishness...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110845048557421018</id><published>2005-02-15T06:47:00.000Z</published><updated>2005-02-15T06:54:45.576Z</updated><title type='text'>The post I never thought I'd write...</title><content type='html'>... But I'm really really glad I am!&lt;br /&gt;&lt;br /&gt;Because it would seem that I've managed to convince a real company, with its own real cheque-book and everything, that I can code stuff worth paying for.&lt;br /&gt;&lt;br /&gt;that's right. After 4 years languishing in the wonderful world of charity fundraising, I've finally got myself a job building ASP.NET Intranet applications for a global supergiant of a company.&lt;br /&gt;&lt;br /&gt;Which should be fun.&lt;br /&gt;&lt;br /&gt;As I'm sure both of my regular readers know, this has been what I've been working for for ages, now. Reading, studying, ignoring Mrs Mawoo, shouting at my computer, all of it's been gearing up to a job writing code day-in-day-out.&lt;br /&gt;&lt;br /&gt;No doubt once I start (need to work out my notice where I am) my blog'll start drifting back onto something that's at least vaguely relevant to code. I know it's been drifting about a bit aimlessly of late, but hey. it's my blog, so there!&lt;br /&gt;&lt;br /&gt;Anyway, just wanted to share. Apologies for smugness!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110845048557421018?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110845048557421018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110845048557421018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110845048557421018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110845048557421018'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/post-i-never-thought-id-write.html' title='The post I never thought I&apos;d write...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110839434061187554</id><published>2005-02-14T15:05:00.000Z</published><updated>2005-02-14T15:19:00.613Z</updated><title type='text'>Another thing that went 'click' today...</title><content type='html'>Although I've been using databinding expressions (the ones that are enclosed by '&lt;%#...%&gt;') in ASP.NET applications for a bit, I never really go how useful they are.&lt;br /&gt;&lt;br /&gt;Now normally, I'll sling a repeater onto a page, and put in databinding expressions to populate bits and bobs in the ItemTemplate, like so:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&amp;lt;asp:repeater&amp;gt;&lt;br /&gt;&amp;lt;ItemTemplate&amp;gt;&lt;br /&gt;&amp;lt;asp:label runat="server" text='&amp;lt;%# container.dataitem("TheValue") %&amp;gt;' /&amp;gt;&lt;br /&gt;&amp;lt;/ItemTemplate&amp;gt;&amp;lt;/asp:repeater&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;But I didn't really realise until today that I could bind anything to anything the same way. The thing that really brought it home today was when I was thinking of having a repeater that contained a UserControl in the ItemTemplate. My UserControl has a public property, 'Item', that was a class that had a bunch of properties that were displayed in the control. I wanted to bind the repeater to an array of said classes.&lt;br /&gt;&lt;br /&gt;What you can do in the ItemTemplate, using databinding expressions was this:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&amp;lt;asp:repeater&amp;gt;&lt;br /&gt;&amp;lt;ItemTemplate&amp;gt;&lt;br /&gt;&amp;lt;SB:ItemDisplayer runat="server" item='&amp;lt;%# Container.Dataitem() %&amp;gt;' /&amp;gt;&lt;br /&gt;&amp;lt;/ItemTemplate&amp;gt;&lt;br /&gt;&amp;lt;/asp:repeater&amp;gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Isn't that clever? Well, I though so, anyway. It's one of those things that makes perfect sense when you look at it, but it had never really occurred to me that you could do it that way.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110839434061187554?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110839434061187554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110839434061187554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110839434061187554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110839434061187554'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/another-thing-that-went-click-today.html' title='Another thing that went &apos;click&apos; today...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110836491836784446</id><published>2005-02-14T06:49:00.000Z</published><updated>2005-02-14T07:08:38.370Z</updated><title type='text'>Aaah Valentine's day...</title><content type='html'>The one day of the year when no matter how caring, considerate, kind and altogether frightfully lovely you are every single day, it ain't worth diddly if you don't turn to with a suitably romantic card and a  bunch of flowers.&lt;br /&gt;&lt;br /&gt;You can be a god-like boyfriend. You can:&lt;ul&gt;&lt;li&gt;Read your partner bed-time stories to help her sleep&lt;/li&gt;&lt;li&gt;Stroke her hair and cuddle her until she goes to sleep every night, any time of day or night, particulately if she's not feeling well&lt;/li&gt;&lt;li&gt;Be at her beck-and-call any time day or night to go to the kitchen and fetch a drink&lt;/li&gt;&lt;/ul&gt;And all manner of gestures and sweetitudes &lt;em&gt;every day&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;But if you haven't got a card, maybe flowers, perhaps chocs, even a restaurant prepared and at the ready, everything you do all year round, every single day is worthless.&lt;br /&gt;&lt;br /&gt;If men tried to pull that kind if stunt every darned year, we'd find ourselves pretty damned single pretty damned quick.&lt;br /&gt;&lt;br /&gt;You see, much as I hate people who harp on about the commercialism of things, I never really liked valentine's day. Not because a bunch of roses that'd set you back about £5 for the rest of the year suddenly shoots up to £15. Not because even if you &lt;em&gt;can&lt;/em&gt; find a restaurant with a table for 2, you're forced to eat what they want you to eat, whilst listening to Barry White. No. I really hate Valentine's Day because it encourages people to totally take their partners for granted. Which I hate.&lt;br /&gt;&lt;br /&gt;And you're only allowed to argue with this point if you meet all the following criteria:&lt;ul&gt;&lt;li&gt;You have a partner&lt;/li&gt;&lt;li&gt;You didn't get a card or gift from them&lt;/li&gt;&lt;li&gt;You're cool with that&lt;/li&gt;&lt;li&gt;You looked your partner in the eyes (the eyes are important!) and told them you loved them within the last 24 hours&lt;/li&gt;&lt;li&gt;You hugged your partner in bed last night, and not just because it's February and freezing in your part of the world&lt;/li&gt;&lt;/ul&gt;Only then can you argue with me.&lt;br /&gt;&lt;br /&gt;Just wanted to share. Apologies for grumpiness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110836491836784446?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110836491836784446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110836491836784446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110836491836784446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110836491836784446'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/aaah-valentines-day.html' title='Aaah Valentine&apos;s day...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110831815977382090</id><published>2005-02-13T18:06:00.000Z</published><updated>2005-02-13T18:09:19.776Z</updated><title type='text'>I'm still here.</title><content type='html'>I know I haven't posted anything for a few days. Which is kinda out of character for me, but it's been a bit hectic in Benjimawoo-land of late.&lt;br /&gt;&lt;br /&gt;However, I might ahve a bit of news soon. Can't really say anything now, since i really don't know anything. Wel,, I know some things, but nothing newsworthy.&lt;br /&gt;&lt;br /&gt;But I'm still here.&lt;br /&gt;&lt;br /&gt;More to follow.&lt;br /&gt;&lt;br /&gt;Jusr wanted to share... nothing. Hmm.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110831815977382090?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110831815977382090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110831815977382090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110831815977382090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110831815977382090'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/im-still-here.html' title='I&apos;m still here.'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110793994695294866</id><published>2005-02-09T09:01:00.000Z</published><updated>2005-02-09T09:05:46.953Z</updated><title type='text'>Backwards Compatability for my head</title><content type='html'>My head, it would seem, is not backwards compatable.&lt;br /&gt;&lt;br /&gt;I find it really counter-intuitive thinking in script, particularly when I'm writing ASP.old pages. I just want to pull everything out as a class and just make method calls on it! Gah!&lt;br /&gt;&lt;br /&gt;Oh well. Keeps me interested, I suppose. And it is, at the very least, another string (or at least substring) to my developer's bow.&lt;br /&gt;&lt;br /&gt;But really, whose idea was Server.CreateObject("TypeAsString") anyway?&lt;br /&gt;&lt;br /&gt;Just wanted to share. I can do it really (It's just like VBA), but it just trips me up now and again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110793994695294866?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110793994695294866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110793994695294866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110793994695294866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110793994695294866'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/backwards-compatability-for-my-head.html' title='Backwards Compatability for my head'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110776152134838934</id><published>2005-02-07T07:27:00.000Z</published><updated>2005-02-07T07:34:25.916Z</updated><title type='text'>More cheap toyness</title><content type='html'>In accordance with my love of toys, I have a added a &lt;a href="http://www.csthota.com/csthota/" target="_blank"&gt;BlogMap&lt;/a&gt; to my blog (Cool little widget by &lt;a href="http://www.csthota.com/csthota/" target="_blank"&gt;Chandu Thota&lt;/a&gt;). Apart from living in my sidebar, have another one here:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.csthota.com/blogmap/blogapi.ashx?method=blogmap&amp;feed=http://feeds.feedburner.com/Benjimawoo&amp;height=250&amp;width=150&amp;label=Learning VB.NET" alt='my blogmap' style='border-color:Black;border-width:1px;border-style:Dashed;'/&gt;&lt;br /&gt;&lt;br /&gt;I think it's quite cool, anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110776152134838934?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110776152134838934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110776152134838934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110776152134838934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110776152134838934'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/more-cheap-toyness.html' title='More cheap toyness'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110747138078049256</id><published>2005-02-03T21:26:00.000Z</published><updated>2005-02-03T22:56:20.780Z</updated><title type='text'>Blogging on Demand #5</title><content type='html'>I was going through my referral logs this evening, as I sometimes do, and I came upon this search that piqued my interest a little bit:&lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.google.com/search?hl=en&amp;lr=&amp;amp;q=how+to+display+pictues+with+xml+asp.net&amp;btnG=Search" target="_blank"&gt;how to display pictues with xml asp.net&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Now I know it's spelt wrong, but that's the only reason it reached my blog in the first place.&lt;br /&gt;&lt;br /&gt;So anyway, I interpreted this as meaning 'How can I retrieve and display images passed via an XML stream from, for example, a webservice?'&lt;br /&gt;&lt;br /&gt;So I endeavored to find out.&lt;br /&gt;&lt;br /&gt;First up I created the web service that was going to send the images across the wire. Now the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdrawingbitmapclasstopic.asp" target="_blank"&gt;System.Drawing.Bitmap&lt;/a&gt; class can't be serialized directly to a form that can be transmitted over http. You have to go around the houses a little bit.&lt;br /&gt;&lt;br /&gt;So here are the two methods in my webservice:&lt;br /&gt;&lt;br /&gt;&lt;code&gt; &amp;lt;webmethod()&gt;&lt;span style="color:blue;"&gt; Public Function&lt;/span&gt; GetImageList() As &lt;span style="color:blue;"&gt;String&lt;/span&gt;()&lt;br /&gt;&lt;span style="color:green;"&gt;        'This just gets a list of the files in the Images subdirectory in the &lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;        'webservice's home directory&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;        Dim&lt;/span&gt; fs &lt;span style="color:blue;"&gt;As&lt;/span&gt; DirectoryInfo = &lt;span style="color:blue;"&gt;New&lt;/span&gt; DirectoryInfo(Server.MapPath("Images"))&lt;br /&gt;     GetImageList.CreateInstance(&lt;span style="color:blue;"&gt;GetType&lt;/span&gt;(&lt;span style="color:blue;"&gt;String&lt;/span&gt;), fs.GetFiles.Length)&lt;br /&gt;&lt;span style="color:blue;"&gt;        Dim &lt;/span&gt;Imagelist &lt;span style="color:blue;"&gt;As New&lt;/span&gt; ArrayList&lt;br /&gt;&lt;span style="color:blue;"&gt;        For Each&lt;/span&gt; fi &lt;span style="color:blue;"&gt;As&lt;/span&gt; FileInfo &lt;span style="color:blue;"&gt;In&lt;/span&gt; fs.GetFiles()&lt;br /&gt;         Imagelist.Add(fi.Name)&lt;br /&gt;&lt;span style="color:blue;"&gt;        Next&lt;/span&gt;&lt;br /&gt;     GetImageList = Imagelist.ToArray(&lt;span style="color:blue;"&gt;GetType&lt;/span&gt;(&lt;span style="color:blue;"&gt;String&lt;/span&gt;))&lt;br /&gt;&lt;span style="color:blue;"&gt;    End Function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;WebMethod()&amp;gt; &lt;span style="color:blue;"&gt;Public Function&lt;/span&gt; GetImage(&lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; fileName &lt;span style="color:blue;"&gt;As String&lt;/span&gt;) &lt;span style="color:blue;"&gt;As Byte&lt;/span&gt;()&lt;br /&gt;&lt;span style="color:green;"&gt;        'This Method gets the image specified in the parameter string&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;        Dim&lt;/span&gt; img &lt;span style="color:blue;"&gt;As New&lt;/span&gt; Drawing.Bitmap(Server.MapPath("Images/" &amp; fileName))&lt;br /&gt;&lt;span style="color:blue;"&gt;        Dim&lt;/span&gt; ImgStream &lt;span style="color:blue;"&gt;As New&lt;/span&gt; MemoryStream&lt;br /&gt;      img.Save(ImgStream, Drawing.Imaging.ImageFormat.Bmp)&lt;br /&gt;      GetImage.CreateInstance(&lt;span style="color:blue;"&gt;GetType&lt;/span&gt;(&lt;span style="color:blue;"&gt;Byte&lt;/span&gt;), ImgStream.Length)&lt;br /&gt;      GetImage = ImgStream.ToArray&lt;br /&gt;&lt;span style="color:blue;"&gt;    End Function&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The first method is easy - it just iterates through the images subdirectory and gets the names of the files in it. I use this method in my client app, so I don't have to remember filenames and stuff!&lt;br /&gt;&lt;br /&gt;The second method does a bit more. First up, it loads the file specified up into memory as a bitmap.&lt;br /&gt;&lt;br /&gt;It then creates a &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemiomemorystreamclasstopic.asp" target"_blank"&gt;System.IO.MemoryStream&lt;/a&gt; to store the serialized image data in.&lt;br /&gt;&lt;br /&gt;The next line saves the bitmap data into the MemoryStream. We now have a stream of serialized data representing the image. After it's stuffed the image into the stream, it then uses the stream's ToArray method to return an array of unsigned bytes. Now, to be honest, I don't know what unsigned bytes are. I mean, I know what bytes are, but what the difference is between unsigned and signed bytes, I dunno.&lt;br /&gt;&lt;br /&gt;So once it's turned it into an array of bytes, it can be sent over the web to your client app. I won't show you what the response stream looks like, since it's really really long. And gobbledegook.&lt;br /&gt;&lt;br /&gt;So that's how the image is sent over the wire.&lt;br /&gt;&lt;br /&gt;To display the image at the other end, you just have to do the reverse.&lt;br /&gt;&lt;br /&gt;This is the code that calls the webmethod and puts the image in a PictureBox control:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="color:blue;"&gt;    Private Sub&lt;/span&gt; GetImage()&lt;br /&gt;&lt;span style="color:blue;"&gt;        Dim&lt;/span&gt; ImgServ As ImageService.ImageService&lt;br /&gt;       ImgServ = New ImageService.ImageService&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;        Dim&lt;/span&gt; ImgArray As &lt;span style="color:blue;"&gt;Byte&lt;/span&gt;()&lt;br /&gt;&lt;span style="color:green;"&gt;'FileList is a ListBox containing the list of images available&lt;/span&gt;&lt;br /&gt;       ImgArray = ImgServ.GetImage(FileList.SelectedValue)&lt;br /&gt;&lt;span style="color:blue;"&gt;        Dim&lt;/span&gt; ImgStream &lt;span style="color:blue;"&gt;As New&lt;/span&gt; System.IO.MemoryStream(ImgArray)&lt;br /&gt;&lt;span style="color:green;"&gt;'RetImage is the name of the picturebox image that displays the image&lt;/span&gt;&lt;br /&gt;       RetImage.Image = &lt;span style="color:blue;"&gt;New&lt;/span&gt; Bitmap(ImgStream)&lt;br /&gt;&lt;span style="color:blue;"&gt;    End Sub&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;As you can see, this takes the array of bytes from the Webservice and writes it out to a memorystream. This stream can then be read into a new bitmap and put into the PictureBox. Hey Presto.&lt;br /&gt;&lt;br /&gt;The code's a bit rough and ready. In real life you'd add type checking, security stuff (possibly) and whatnot like that, but for this demo it's fine.&lt;br /&gt;&lt;br /&gt;As a further note, images can be pushed and pulled about to be displayed for all sorts of situations. Most notably, if you have images saved in an Image column in SQL Server, you'll have to do this (or at least something like this) to push images into and pull them out of SQL Server.&lt;br /&gt;&lt;br /&gt;Second-to-Lastly, I'm no expert. Although I've read about this, I've only done it once. And that was only so I could write this blog entry. If you know of a better way, or you see a glaring mistake in the code, please let me know. It's the only way I'll learn!&lt;br /&gt;&lt;br /&gt;Lastly, if you got this far, well done you!. Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110747138078049256?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110747138078049256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110747138078049256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110747138078049256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110747138078049256'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/blogging-on-demand-5.html' title='Blogging on Demand #5'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110744621451180532</id><published>2005-02-03T15:49:00.000Z</published><updated>2005-02-03T15:56:54.510Z</updated><title type='text'>Paradoxical UI</title><content type='html'>I just had a thought. It was about how we like things just the way we like them, for no apparent reason.&lt;br /&gt;&lt;br /&gt;I just had a minor mishap with Access, and it froze and wouldn't close down. What do I do? I open up Task Manager and hit 'End Task' to make it shut down.&lt;br /&gt;&lt;br /&gt;So what happens then? A dialog pops up asking me if I really want to end the task or not. So I hit 'End Now', &lt;em&gt;as I have done every single time I've ever seen this dialog box&lt;/em&gt;. I think in the years I've been using WinXP (I was on Win 98 before, and can't remember if it did that or not) I've hit cancel on that dialog maybe twice.&lt;br /&gt;&lt;br /&gt;But (and here's where it gets weird) I feel strangely reassured that I'm given the choice. I don't exercise that right to chose. I choose the same thing each and every time. I even sometimes wish that 'End Now' was the default because I always use it. I don't, however, ever get annoyed with this unneccesary dialog popping up.&lt;br /&gt;&lt;br /&gt;Weird that. I'm not even being sarcastic. I genuinely am reassured by the dialog that pops up and checks that after I've opened up Task Manager and chosen my task to end before hitting 'End Task' I really want to end it.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110744621451180532?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110744621451180532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110744621451180532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110744621451180532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110744621451180532'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/paradoxical-ui.html' title='Paradoxical UI'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110744041012380015</id><published>2005-02-03T14:18:00.000Z</published><updated>2005-02-03T14:24:45.523Z</updated><title type='text'>Fun Fun Fun</title><content type='html'>I don't usually post links to pointless and frivolous sites, but this one's had me in stiches all afternoon.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://asksnoop.com" target="_blank"&gt;http://asksnoop.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's very entertaining. Especially when you point it at things like &lt;a href="http://asksnoop.com/shizz_frame.php?url=http://benthevbdeveloper.blogspot.com" target="_blank"&gt;text-heavy blogs&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110744041012380015?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110744041012380015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110744041012380015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110744041012380015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110744041012380015'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/fun-fun-fun.html' title='Fun Fun Fun'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110737715578634532</id><published>2005-02-02T19:47:00.000Z</published><updated>2005-02-02T20:49:00.743Z</updated><title type='text'>Hurdles and Wurdles...</title><content type='html'>I learnt a very important lesson today, and here it is:&lt;br /&gt;&lt;blockquote&gt;&lt;strong&gt;... WHERE NOT Exists (Select SomeField FROM SomeRecords WHERE SomeCriteria)...&lt;/strong&gt; Can be really really bad.&lt;/blockquote&gt;&lt;br /&gt;And I mean &lt;em&gt;REALLY&lt;/em&gt; bad.&lt;br /&gt;&lt;br /&gt;I wrote a SQL Server db to do some analysis for me. I wrote about it &lt;a href="http://benthevbdeveloper.blogspot.com/2004/12/quick-distraction.html"&gt;here&lt;/a&gt; back when I was trying to do the same thing in Access. Needless to say I gave up on that plan and rewrote the lot for SQL Server. Now up until yesterday, I hadn't really tried producing the output and everything all at once. I always did little bits, saw they worked and moved on. I think I did something yesterday to break it, somehow, though. Don't ask me what, just something.&lt;br /&gt;&lt;br /&gt;So I fire up this stored procedure that does some crunching and produces some tables of numbers. Normally I reckon it'd take about 1 or 2 minutes to do it. I'm sure on one of my earlier versions it did.&lt;br /&gt;&lt;br /&gt;I fire it up.&lt;br /&gt;&lt;br /&gt;And wait...&lt;br /&gt;&lt;br /&gt;And wait...&lt;br /&gt;&lt;br /&gt;And wait...&lt;br /&gt;&lt;br /&gt;After 3 hours I start thinking there's sopmething going wrong, so I look through perfmon looking at the usual SQL Server suspects (Disk IO queues, Pages being written out to disk, processor time and a whole bunch of other crap). All the numbers look to be what Star Trek types call 'Normal Operational Parameters'. No obvious problem. Nothing hardware's choking the system. Hmmm...&lt;br /&gt;&lt;br /&gt;So at about hour 5, I think there's something up with my code. I kind of figured there would be, but I was hoping that I could get a pointer to what was taking the time from PerfMon. I was wrong.&lt;br /&gt;&lt;br /&gt;So I was left taking wach and every bit of code apart. Every subquery. Every view, every criterion. Bugger.&lt;br /&gt;&lt;br /&gt;Although having said that, I did manage to find the bit that was tripping it up. There was a 'WHERE EXISTS' clause in one of the views, and the subquery in there took ages and ages to run. So I'm guessing that that subquery was trying to run for each and every line in the view's source dataset. All 860,000 rows. No wonder it was taking its time.&lt;br /&gt;&lt;br /&gt;So I changed that one bit. Instead of doing it that way, I just did a left join on the subquery and picked out the rows without a corresponding record in the subquery.&lt;br /&gt;&lt;br /&gt;Doh!&lt;br /&gt;&lt;br /&gt;It all tuned out nice in the end, though. It did mean that I cut down my stored procedure from 6 hrs+ (I never let it run all the way through in the end) to about 3 minutes.&lt;br /&gt;&lt;br /&gt;Nice!&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110737715578634532?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110737715578634532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110737715578634532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110737715578634532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110737715578634532'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/02/hurdles-and-wurdles.html' title='Hurdles and Wurdles...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110715593466399708</id><published>2005-01-31T07:09:00.000Z</published><updated>2005-01-31T07:18:54.663Z</updated><title type='text'>A Use for #If... Then</title><content type='html'>I've read about #If... Then time and time again. BUt, like so many things, I haven't really hada n excuse to use it.&lt;br /&gt;&lt;br /&gt;I know it's only a very small constructional fish in a huge software pond. More of an ocean really. But still, I never had an excuse to use it.&lt;br /&gt;&lt;br /&gt;Until yesterday. With the cunning use of '#If DEBUG Then' I've managed to make debugging layout things in my little dial control a doddle by adding various lines and stuff when it's compiled in Debug mode, but leaving them out in the Release version.&lt;br /&gt;&lt;br /&gt;Well, I was impressed. It even helped me sort out a wierd layout thing that I had going on. Now I just have to cure the weird rounding error that's happening instead...&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110715593466399708?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110715593466399708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110715593466399708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110715593466399708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110715593466399708'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/use-for-if-then.html' title='A Use for #If... Then'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110689654007021101</id><published>2005-01-28T06:58:00.000Z</published><updated>2005-01-28T09:31:28.443Z</updated><title type='text'>Gotcha, you little blighter!</title><content type='html'>I finally managed to find a solution to &lt;a href="http://benthevbdeveloper.blogspot.com/2005/01/damn-my-maths-is-poor.html"&gt;finding a point on an ellipse&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As is always the way, the answer was surprisingly simple. These 10-ish lines of code are the culmination of many frustrated cigarettes out on the front porch, constant annoyance for a few days, and a niggling feeling that yes, I am really a failure. I even have a small pile of paper covered with calculations trying to fathom how to do it. Don't you really hate it when it takes so much to produce what looks(at least to Mrs Mawoo) like so little.&lt;br /&gt;&lt;br /&gt;So here it is. The code to find a point on the circumference of an ellipse based on the value you want to display.&lt;br /&gt;&lt;code&gt;&lt;span style="color:blue;"&gt;Private Function&lt;/span&gt; GetHandEndPoint(Angle &lt;span style="color:blue;"&gt;As Integer&lt;/span&gt;, BoundingRectangle &lt;span style="color:blue;"&gt;As&lt;/span&gt; Rectangle) &lt;span style="color:blue;"&gt;As&lt;/span&gt; PointF&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; Radians &lt;span style="color:blue;"&gt;As Double&lt;/span&gt;&lt;br /&gt;   Radians = Degrees * (System.Math.PI / 180)&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;With&lt;/span&gt; GetHandEndPoint&lt;br /&gt;       .X = &lt;span style="color:blue;"&gt;CType&lt;/span&gt;((BoundingRectangle.Width / 2) + ((BoundingRectangle.Width / 2) * System.Math.Cos(Radians)), _&lt;br /&gt;&lt;span style="color:blue;"&gt;                       Integer&lt;/span&gt;)&lt;br /&gt;       .Y = &lt;span style="color:blue;"&gt;CType&lt;/span&gt;(BoundingRectangle.Height / 2 + (BoundingRectangle.Height / 2) * System.Math.Sin(Radians), _&lt;br /&gt;&lt;span style="color:blue;"&gt;                       Integer&lt;/span&gt;)&lt;br /&gt;&lt;span style="color:blue;"&gt;    End With&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;End Function&lt;/span&gt;&lt;/code&gt;I can't believe I spent so long trying to work this out!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Note: &lt;/strong&gt; Special credit goes to Paul for leaving the comment that spurred me to get this sorted. He managed to ask if I had in exactly the same tone that my mother used to use to ask me if I'd finished my homework. Thanks.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Edit:&lt;/strong&gt; I know the angle isn't maintained when the ellipse is stretched out. This is intentional. Using this method of calculating the point gives (I reckon) a better display that going solely on angle. One of these days I'll post images to prove it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110689654007021101?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110689654007021101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110689654007021101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110689654007021101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110689654007021101'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/gotcha-you-little-blighter.html' title='Gotcha, you little blighter!'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110684112255805576</id><published>2005-01-27T15:44:00.000Z</published><updated>2005-01-27T15:52:02.556Z</updated><title type='text'>Slightly mind-expanding</title><content type='html'>It's been suggested that I try to expand my resume a little, and have a bit of a stab at classic ASP for a little bit.&lt;br /&gt;&lt;br /&gt;So I'm going to be reprising my &lt;a href="http://www22.brinkster.com/bensavage/wedding" target="_blank"&gt;Dad's wedding photos website&lt;/a&gt;. It's nice and simple, just uses a bit of data access to bung some HTML together to show the pics. This one was knocked up about 18 months ago in about 2 hours.&lt;br /&gt;&lt;br /&gt;No doubt I'll be posting my experiences when I've had some. I've heard old-school ASP's a bit simpler, or at least has slightly smaller scope design-wise than .NET. Which isn't a bad thing, it's just something I've never really had an excuse to use before.&lt;br /&gt;&lt;br /&gt;Wanted to share. And wanted to remind myself when I get home.&lt;br /&gt;&lt;strong&gt;Note to self: &lt;/strong&gt;Do that damned site. It's only 1 page, you lazy toerag. And tonight's the best time for it, what with Mrs Mawoo being out for a little while and all that!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110684112255805576?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110684112255805576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110684112255805576' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110684112255805576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110684112255805576'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/slightly-mind-expanding.html' title='Slightly mind-expanding'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110680908783848202</id><published>2005-01-27T06:52:00.000Z</published><updated>2005-01-27T06:58:07.840Z</updated><title type='text'>Slave for a Day</title><content type='html'>The &lt;a href="http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&amp;rd=1&amp;item=5552696499" target="_blank"&gt;.NET Celeb Auction&lt;/a&gt; for Aceh Aid at IDEF needs, no doubt, no introduction.&lt;br /&gt;&lt;br /&gt;But what would you do if you had at your disposal the time and attention of one of .NET's bigger (or at least better known) guns? &lt;a href="http://objectsharp.com/Blogs/barry/archive/2005/01/26/1380.aspx" target="_blank"&gt;Barry Givern has a fair idea&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Found via &lt;a href="http://www.thedatafarm.com/blog/default.aspx" target="_blank"&gt;Julie Lerman&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Well it made me chuckle, anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110680908783848202?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110680908783848202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110680908783848202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110680908783848202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110680908783848202'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/slave-for-day.html' title='Slave for a Day'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110666775681410548</id><published>2005-01-25T15:35:00.000Z</published><updated>2005-01-25T15:42:36.813Z</updated><title type='text'>Don't believe the hype.</title><content type='html'>Rightly or wrongly, I amd a grumpy old man. Particularly when it comes to 'new' things. If a movie comes out, and it's praised to the hilt in the press, I'll bethe one guy ho says 'nah. I'm gonna wait for the hype to die down.' It's not for any feeling of superiority. I'm sure that if a milion and one poeple say a movie's good, then chances are it will be. I just stay away from new hypie things.&lt;br /&gt;&lt;br /&gt;So naturally, and in a completely subconcious way, without me even realizing it, I've been ignoring this research about &lt;a href="http://news.bbc.co.uk/2/hi/uk_news/4187183.stm" target="_blank"&gt;yesterday being the most depressing day of the year&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;No. I'm a cantankerous old bugger, and I'm not going to be depressed just because the BBC say I'm most likely going to be.&lt;br /&gt;&lt;br /&gt;No.&lt;br /&gt;&lt;br /&gt;I'm going to be depressed today, it would seem. I woke up this morning with a huge hangover, which wouldn't be so bad if I'd got wildly drunk last night; but i didn't.&lt;br /&gt;&lt;br /&gt;I'm bored senseless.&lt;br /&gt;&lt;br /&gt;I really do feel like I'm going to crack and start shooting in a minute.&lt;br /&gt;&lt;br /&gt;Or I might not. I'm also feeling a more than a little apathetic today as well.&lt;br /&gt;&lt;br /&gt;Grr. &lt;br /&gt;&lt;br /&gt;I'm sure it'll all be better tommorrow, though.&lt;br /&gt;&lt;br /&gt;Just wanted to share. Apologies, as usual, for irrelevance. There will be someting worth reading up here one of these days. Promise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110666775681410548?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110666775681410548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110666775681410548' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110666775681410548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110666775681410548'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/dont-believe-hype.html' title='Don&apos;t believe the hype.'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110649408207949982</id><published>2005-01-23T15:22:00.000Z</published><updated>2005-01-24T13:59:52.176Z</updated><title type='text'>Woo, Yay and WTF?</title><content type='html'>So I  had my first real &lt;a href="http://neopoleon.com/blog/category/17.aspx" target="_blank"&gt;google weirdo&lt;/a&gt; today.&lt;br /&gt;&lt;br /&gt;It was: &lt;a href="http://www.google.co.uk/search?hl=en&amp;ie=ISO-8859-1&amp;q=buggering%20penelope%20&amp;btnG=Search&amp;meta=" target="_blank"&gt;buggering penelope&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now I'm not going to nick Rory's idea and add any commentary, but I just wanted to share it. I thought it was kinda funny. Particularly since my blog doesn't even appear on, like, page 30 or anything, but it's right there on page 1. PAGE 1!!! Weird. &lt;br /&gt;&lt;strong&gt;Edit: &lt;/strong&gt;I'm even top of the list when you search for '&lt;a href="http://www.google.com/search?hl=en&amp;q=geoff+maciolek+hair" target="_blank"&gt;Geoff Maciolek Hair&lt;/a&gt;'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110649408207949982?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110649408207949982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110649408207949982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110649408207949982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110649408207949982'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/woo-yay-and-wtf.html' title='Woo, Yay and WTF?'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110636333217236818</id><published>2005-01-22T03:00:00.000Z</published><updated>2005-01-22T11:54:31.926Z</updated><title type='text'>Dot Net Rocks, Mondays, BitTorrent 'n' stuff...</title><content type='html'>I've been vaguely aware of &lt;a href="http://www.bittorrent.com" target="_blank"&gt;BitTorrent&lt;/a&gt; as a filesharing type system for a while now. There are a few reasons I haven't been using it, though:&lt;ol&gt;&lt;li&gt;I didn't really know anything about how it works&lt;/li&gt;&lt;li&gt;What I know of filesharing utilities I don't really like, As far as I can tell, they're veritable feasts of security holes and spyware. At least the slightly dubious ones are, and I didn't really know of any un-dubious ones&lt;/li&gt;&lt;li&gt;I'd never seen it applied in a productive way. At the risk of sounding like an old man, the only applications I'd heard of for it revolved around movies and porn. And both.&lt;/li&gt;&lt;li&gt;I never really saw a need for it when we've got FTP and other protocols out there which are perfectly capable of pulling files at my maximum connection speed&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;However, I've just been listening to &lt;a href="http://franklins.net/dotnetrocks/" target="_blank"&gt;DotNetRocks&lt;/a&gt; where the team there seem to rate it quite highly.&lt;br /&gt;&lt;br /&gt;They rate it so highly, in fact, that Carl and Geoff have a &lt;a href="http://www.pwop.com/video.aspx" target="_blank"&gt;demo video&lt;/a&gt; on how to install and use their BitTorrent client of choice, &lt;a href="http://azureus.sourceforge.net" target="_blank"&gt;Azureus&lt;/a&gt;. Having seen it in action, I actually think it looks like quite a cool thing. &lt;br /&gt;&lt;br /&gt;Essentially the way BitTorrent works is this: When you go to download a file, as well as looking for it on the original server, it also finds other machines online that are downloading that file as well. What it then does is pulls down bits of the file from each of these different machines. With the load being shared by all these connections, it shares the bandwidth over the lot.&lt;br /&gt;&lt;br /&gt;At the same time, however, it also uploads bits of the file that it's already collected to other computers that request it. So you get this whole 'swarm' download thing going on. The end result is faster downloads. The other benefit of doing this is that (in direct contrast to the normal thing of all clients downloading from one server) the more clients you have downloading a file at once, the faster it'll be, since it'll have more places to download parts of the file from simultaneously.&lt;br /&gt;&lt;br /&gt;Where this becomes most relevant is in automatic content stuff like, for example, podcasting (I'm not a big podcaster. I'm not even a small one. My computer &amp; music habits aren't really suited to it.). I only mention podcasting because it's the only context I've seen it used to demonstrate this. But if you happen to have 12 million people who all schedule their podcasting clients to retrieve new content on the hour, each and every one of them will have 11,999,999 peers to pull bits of the file from. Rather than slowing everything right down as the server is flooded, everything gets faster as more people are there to share the download.&lt;br /&gt;&lt;br /&gt;Cool huh?&lt;br /&gt;&lt;br /&gt;I'm not rushing out and installing Azureus just yet, though. I want to have a bit of a deeper look into security 'n' stuff around it. And it's just gone 3 am, so I haven't got time to go into it now.&lt;br /&gt;&lt;br /&gt;I'll get round to it this weekend, though. Mrs Mawoo's out tomorrow, so I'll be able to get it sorted. I could do with having it up and running to download &lt;a href="http://mondays.pwop.com" target="_blank"&gt;Mondays&lt;/a&gt;. Carl's having some bandwidth issues right now, so downloads are coming in reeeaaallllyyyy slow. It'll be interesting to see a comparison, though (assuming there are some other people online to share the load etc...)&lt;br /&gt;&lt;br /&gt;Just wanted to share. Time for bed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110636333217236818?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110636333217236818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110636333217236818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110636333217236818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110636333217236818'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/dot-net-rocks-mondays-bittorrent-n.html' title='Dot Net Rocks, Mondays, BitTorrent &apos;n&apos; stuff...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110620609603956367</id><published>2005-01-20T07:15:00.000Z</published><updated>2005-01-20T07:28:16.040Z</updated><title type='text'>Damn my maths is poor!</title><content type='html'>I used to be pretty hot at maths at school. Took my GCSE a year early, got an A, did A-Level Stats, that sort of thing. I wasn't completely non-numeric. Which was handy, because I'm about as charismatic as a smokestack with the lingual ability of a dead badger.&lt;br /&gt;&lt;br /&gt;So back to the point. I'm trying to work out how to calculate the co-ordinates of a point on the circumference of an ellipse. See, I'm trying to neaten up my little dial control. At the moment the hand is drawn by drawing a pie (&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdrawinggraphicsclassdrawpietopic.asp" target="_blank"&gt;Graphics.DrawPie&lt;/a&gt;)  with a sweep angle of 0.001 degrees. Which strikes me as being a bit of a fudge. It also makes it a bit limiting in terms of what I can do with the hands by way of styling etc.&lt;br /&gt;&lt;br /&gt;What I'm trying to do instead is calculate the co-ordinates of the outer end of the hand, given the angle that the hand should be at. Doing that for a round control is OK - I can just about remember how to do that from school. And I looked it up &lt;a href="http://www.actionscripts.org/tutorials/advanced/trigonometry_and_flash/index3.shtml" target="_blank"&gt;somewhere&lt;/a&gt;. I'm trying to work out how to get the same thing to work for an ellipse. So if I resize the control so it's not square any more, the hands still look right.&lt;br /&gt;&lt;br /&gt;Think I need to get my trusty bit of paper and a pen out. Rest assured, when I work it out I'll be blogging about it.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110620609603956367?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110620609603956367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110620609603956367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110620609603956367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110620609603956367'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/damn-my-maths-is-poor.html' title='Damn my maths is poor!'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110616851693524049</id><published>2005-01-19T20:54:00.000Z</published><updated>2005-01-19T21:01:56.936Z</updated><title type='text'>I did have a huge long post written for this,</title><content type='html'>It was great. Included code, things I'd learnt, the works.&lt;br /&gt;&lt;br /&gt;It was really rubbish, though.&lt;br /&gt;&lt;br /&gt;Suffice to say, I've been writing a custom control. Just one more thing to tick off on my list of 'Stuff I've Done'. It's very nice. It's a dial sort of display type control.&lt;br /&gt;&lt;br /&gt;At the moment it looks like this:&lt;br /&gt;&lt;img src="http://freespace.virgin.net/ben.savage/BlogFiles/SavageDial.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;I'm actually quite impressed with it myself (never having done one before). Tripped up a coupla times, most notably before I found the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformscontrolclasssetstyletopic.asp" target="_blank"&gt;Control.SetStyle&lt;/a&gt; method, but hey, it's done now, and I'm a little wiser for it.&lt;br /&gt;&lt;br /&gt;There are a couple of things I need to do, a couple of bits that could do with a re-write, but that's all part of the fun (or so I've been told).&lt;br /&gt;&lt;br /&gt;Anyway, I was quite chuffed with it. &lt;br /&gt;&lt;br /&gt;You're lucky I didn't post the long one!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110616851693524049?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110616851693524049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110616851693524049' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110616851693524049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110616851693524049'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/i-did-have-huge-long-post-written-for.html' title='I did have a huge long post written for this,'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110603245778890097</id><published>2005-01-18T06:55:00.000Z</published><updated>2005-01-18T07:27:35.796Z</updated><title type='text'>Why not 'My'?</title><content type='html'>Going through the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemenvironmentspecialfolderclasstopic.asp" target="_blank"&gt;Environment.SpecialFolder&lt;/a&gt; enumeration (as in '&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemenvironmentclassgetfolderpathtopic.asp" target="_blank"&gt;System.Environment.GetSpecialFolder(Folder as Environment.SpecialFolder)&lt;/a&gt;'), I've noticed this:&lt;table border='1'&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Enumeration&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Folder Name&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;MyComputer&lt;/td&gt;&lt;td&gt;My Computer&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;MyMusic&lt;/td&gt;&lt;td&gt;My Music&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;MyPictures&lt;/td&gt;&lt;td&gt;My Pictures&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td align='center'&gt;&lt;Strong&gt;?&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;My Documents&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Can you guess the missing value?&lt;br /&gt;&lt;br /&gt;Yes. That's right. Score 1 for order and consistency, 0 for randomness and chaos.&lt;br /&gt;&lt;br /&gt;The misssing value is &lt;strong&gt;Personal&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Personally, I'm torn. Do I prefer the consistency of 'MyDocuments'? Or do I prefer 'Personal' and its cheeky rebellion against the word 'My'? I mean, 'PersonalPictures' just sounds rude, doesn't it?&lt;br /&gt;&lt;br /&gt;Tricky. Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110603245778890097?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110603245778890097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110603245778890097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110603245778890097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110603245778890097'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/why-not-my.html' title='Why not &apos;My&apos;?'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110561463378283247</id><published>2005-01-13T11:03:00.000Z</published><updated>2005-01-13T11:10:48.916Z</updated><title type='text'>Yarrr!!!!</title><content type='html'>After my fine bit of &lt;a href="http://freespace.virgin.net/ben.savage/" target="_blank"&gt;piratical goodness&lt;/a&gt; back in October, I'm going to let you, &lt;em&gt;yes you&lt;/em&gt; the reader decide what kind of a pirate I &lt;em&gt;really&lt;/em&gt; am:&lt;br /&gt;&lt;br /&gt;&lt;table width=100% border=1&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;&lt;a href="http://rumandmonkey.com/widgets/toys/pirate/define.php?id=23727"&gt;&lt;img src="http://rumandmonkey.com/widgets/toys/pirate/23727/" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://rumandmonkey.com/widgets/toys/pirate/define.php?id=23727"&gt;What kind of pirate am I?&lt;/a&gt; You decide!&lt;br /&gt;You can also &lt;a href="http://rumandmonkey.com/widgets/toys/pirate/breakdown.php?id=23727"&gt;view a breakdown of results&lt;/a&gt; or &lt;a href="http://rumandmonkey.com/widgets/toys/pirate/"&gt;put one of these on your own page&lt;/a&gt;!&lt;br /&gt;&lt;small&gt;Brought to you by &lt;a href="http://rumandmonkey.com/"&gt;Rum and Monkey&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Just wanted to share. Apologies for irrelevance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110561463378283247?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110561463378283247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110561463378283247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110561463378283247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110561463378283247'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/yarrr.html' title='Yarrr!!!!'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110554265285318121</id><published>2005-01-12T14:53:00.000Z</published><updated>2005-01-12T15:10:52.853Z</updated><title type='text'>Contrived Solutions to Fake Problems...</title><content type='html'>It sometimes is quite hard to think of contrived projects to write.&lt;br /&gt;&lt;br /&gt;apart from anything else, the clue's in the question. They're contrived. I'll write something not to solve a problem, or meet a need. I'll write something to get some sort of experience of the stuff I've been reading about. As a result, however, it's very very easy to lose my motivation. My inner monologue goes something like this:&lt;br /&gt;Me: Here's a fiddly bit of code. Fancy writing it?&lt;br /&gt;Me2: Hmmm. Dunno. What'll happen if I don't?&lt;br /&gt;Me: Not a lot. it won't get written, that's all.&lt;br /&gt;Me2: And the result will be?&lt;br /&gt;Me: You'll feel a bit guilty for a bit, but that's about it.&lt;br /&gt;Me2: Is that Mrs Mawoo calling me?&lt;br /&gt;Me: Yeah. You'd better go see what she wants.&lt;br /&gt;...&lt;br /&gt;Me: So how about that fiddly bit of code?&lt;br /&gt;Me2: Fancy a bit of Flight simulator?&lt;br /&gt;Me: Oh go on then. &lt;br /&gt;Me2: Cool. Let's go!&lt;br /&gt;&lt;br /&gt;And so it goes on, until I forget what the fiddly bit of code was meant to do, and my little project dies.&lt;br /&gt;&lt;br /&gt;I've found in the past that the only projects I finish are the ones where I have a real thing that I want to do. I want to write an online version of Lingo Bingo. Ok, I'll get that done. I want something to add ID3 tags to my MP3 collection. Ok, I'll get that one. I want to build &lt;em&gt;something&lt;/em&gt; that gives me a chance to get to know how inheritance works. Erm... Maybe later. I want to do &lt;em&gt;something&lt;/em&gt; in SQL Server to exercise some good database design practices to get a bit of a better understanding of what's going on inside. Uhhh. Am I sure I don't fancy a sandwich instead?&lt;br /&gt;&lt;br /&gt;I really do find it quite difficult to keep the motivation going for contrived solutions to fake problems.&lt;br /&gt;&lt;br /&gt;But that's just a personal thing, I'm sure.&lt;br /&gt;&lt;br /&gt;Does anyone else get that? I mean I haven't got a problem with learning new stuff, I soak that stuff right up. at a push, I could probably even tell you how a bunch of stuff works with analogies, diagrams and everything. But how I motivate myself to get some stuff actually &lt;strong&gt;written&lt;/strong&gt;? &lt;br /&gt;&lt;br /&gt;Anyone got any suggestions? &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110554265285318121?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110554265285318121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110554265285318121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110554265285318121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110554265285318121'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/contrived-solutions-to-fake-problems.html' title='Contrived Solutions to Fake Problems...'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110513821032768723</id><published>2005-01-07T22:44:00.000Z</published><updated>2005-01-11T16:08:21.996Z</updated><title type='text'>The Real Terror</title><content type='html'>There are some things that truly terrify me.&lt;br /&gt;&lt;br /&gt;One of them is &lt;a href="http://www.uip.co.uk/romzom/" target="_blank"&gt;Shaun of the Dead&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's not scary, au contraire, it's a romantic comedy. With Zombies.&lt;br /&gt;&lt;br /&gt;No. The truly terrifying thing about it is that every time I see &lt;a href="http://www.imdb.com/name/nm0934362/" target="_blank"&gt;Penelope Wilton&lt;/a&gt; (Shaun's Mum, and darling of British Theatre and Cinema), she looks more and more like my mum (Sorry, no link to a picture of my mum!).&lt;br /&gt;&lt;br /&gt;Just wanted to share. It's been scaring me this evening...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110513821032768723?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110513821032768723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110513821032768723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110513821032768723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110513821032768723'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/real-terror.html' title='The &lt;em&gt;Real&lt;/em&gt; Terror'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110510588341220368</id><published>2005-01-07T13:45:00.000Z</published><updated>2005-01-07T14:10:33.466Z</updated><title type='text'>Not starting a fight</title><content type='html'>I'm not trying to start a fight. I'm not saing one thing is better than the other. I use Firefox and IE in about equal measure at home, and I'm qite adamant that software is (for the most part) only as secure as the person using it.&lt;br /&gt;&lt;br /&gt;That's the disclaimer out of the way.&lt;br /&gt;&lt;br /&gt;But the only reason I'm posting this is after the madness that Peter Torr's &lt;a href="http://weblogs.asp.net/ptorr/archive/2004/12/20/327511.aspx" target="_blank"&gt;Firefox entry&lt;/a&gt; created, there have been &lt;a href="http://www.securityfocus.com/archive/1/386070/2005-01-04/2005-01-10/0" target="_blank"&gt;several vulnerabilities found in Mozilla&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I really don't care either way. Like I said, if I'm an insecure user, then of course my machine's going to get screwed with.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110510588341220368?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110510588341220368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110510588341220368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110510588341220368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110510588341220368'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/not-starting-fight.html' title='Not starting a fight'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110503099133460649</id><published>2005-01-06T16:59:00.000Z</published><updated>2005-01-06T17:09:29.543Z</updated><title type='text'>Oh for Bandwagon Shame!!</title><content type='html'>It's bad enough that I just did an online test because I found it on &lt;a href="http://weblogs.asp.net/rchartier/archive/2005/01/06/347759.aspx" target="_blank"&gt;someone else's blog&lt;/a&gt; (&lt;a href="http://weblogs.asp.net/msdnstudentflash/archive/2005/01/06/347757.aspx" target="_blank"&gt;several&lt;/a&gt; &lt;a href="http://weblogs.asp.net/mhawley/archive/2005/01/06/347695.aspx" target="_blank"&gt;people&lt;/a&gt;, actually).&lt;br /&gt;&lt;br /&gt;It's even worse that I can't even use my nerdliness to justify it!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.wxplotter.com/ft_nq.php"&gt; &lt;br /&gt;&lt;img src="http://www.wxplotter.com/images/ft/nq.php?val=1669" alt="I am nerdier than 56% of all people. Are you nerdier? Click here to find out!"&gt; &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I am, it would seem, only 56% nerd. How can I show my face in my neighborhod, knowing that 44% of the rest of the world are more nerd than me.&lt;br /&gt;&lt;br /&gt;Oh well. Looks like I'll have to keep studying. &lt;br /&gt;&lt;br /&gt;And stop washing my hair.&lt;br /&gt;&lt;br /&gt;Just wanted to share my abject shame.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110503099133460649?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110503099133460649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110503099133460649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110503099133460649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110503099133460649'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/oh-for-bandwagon-shame.html' title='Oh for Bandwagon Shame!!'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110484047381347738</id><published>2005-01-04T11:54:00.000Z</published><updated>2005-01-04T12:07:53.813Z</updated><title type='text'>Swingy Swingy</title><content type='html'>Well, it looks like I'm going to be forced to get back into the swing of normal life after a whole week and a half out of it. &lt;br /&gt;&lt;br /&gt;That means making many small but oh so crucial adjustments to my life.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Moving my joystick out of the way of my keyboard&lt;/li&gt;&lt;li&gt;Drinking only on non-school nights&lt;/li&gt;&lt;li&gt;Getting up at 6 in the morning. WTF? 6? Did I &lt;strong&gt;ever&lt;/strong&gt; get up at 6? Guess I must have - that seems to be the ungodly hour my alarm's set for...&lt;/li&gt;&lt;li&gt;Coding again&lt;/li&gt;&lt;li&gt;Wearing a tie &lt;em&gt;every damned day!&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Very weird. It would seem that in just 2 weeks I've virtually forgotten how to type, my  liver's been reduced to just a fistful of very angry scar tissue, and I've just fired up visual studio which has proudly announced that the last project I was working on was last edited on 23rd December 2004.&lt;br /&gt;&lt;br /&gt;Eugh. Back to real life. I really hate that. I would happily never have another day off work if it meant never feeling like this ever again. Or possibly not. I haven't really decided on that one yet.&lt;br /&gt;&lt;br /&gt;Oh yeah, the other facet of real life I need to get back into. Blogging. Okay, it's dull and no-one reads it. I have to reduce myself to making stupid pictures of other people to get anyone here, but hey, I only ever started writing this to &lt;ol&gt;&lt;li&gt;Help me stop biting my nails (10 months and counting!),&lt;/li&gt;&lt;li&gt;Vent my eternal frustration at my seemingly stagnant career, and...&lt;/li&gt;&lt;li&gt;help me remember stuff I'd learnt about that day&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;So yes, you'll have plenty more inanity and frustration from me semi-regularly. Woo and Yay.&lt;br /&gt;&lt;br /&gt;But having said that, &lt;a href="http://caustictech.typepad.com/" target="_blank"&gt;Caustic Phil&lt;/a&gt;'s got back to blogging, and he is one funny dude. If I thought I was frustrated, then I was very very wrong.&lt;br /&gt;&lt;br /&gt;Just wanted to share.&lt;br /&gt;PS - Skip the Cast and Crew Commentary on &lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/B0002W12K8/qid=1104840372/ref=pd_ka_0/202-4485609-8218261" target="_blank"&gt;Goodfellas&lt;/a&gt;. It's not as interesting as it could be. Oh well. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110484047381347738?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110484047381347738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110484047381347738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110484047381347738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110484047381347738'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2005/01/swingy-swingy.html' title='Swingy Swingy'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6825852.post-110441218862310177</id><published>2004-12-30T13:05:00.000Z</published><updated>2004-12-30T13:09:48.623Z</updated><title type='text'>Back to Reality</title><content type='html'>Just got back from a few days in Plymouth. Went down to be jolly for a bit (since 'tis the season).&lt;br /&gt;&lt;br /&gt;Did some cool stuff, saw plenty of friends and family and whatnot. Now I've got a few more days until I go back to work. Feels a bit weird today, though. Apart from anything else, I can't type any more, it seems. What a bugger. What can I say, nearly a week away from a keyboard really takes it out of you.&lt;br /&gt;&lt;br /&gt;And I guess it being a ver boozy week doesn't help. Think I woke up with a week's worth of DT's this morning. Yow. &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6825852-110441218862310177?l=benthevbdeveloper.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://benthevbdeveloper.blogspot.com/feeds/110441218862310177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6825852&amp;postID=110441218862310177' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110441218862310177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6825852/posts/default/110441218862310177'/><link rel='alternate' type='text/html' href='http://benthevbdeveloper.blogspot.com/2004/12/back-to-reality.html' title='Back to Reality'/><author><name>Benjimawoo</name><uri>http://www.blogger.com/profile/06246234499394493455</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='23' src='http://freespace.virgin.net/ben.savage/BlogFiles/BenWeb.jpg'/></author><thr:total>0</thr:total></entry></feed>
