My Gestalt

Understand the chaotic world by developing meaningful perception through the acquisition of seemingly disparate knowledge.

Collect information in large quantity with precise detail and connect the dots of meaning to form your own picture of the universe.

Act upon it

Knowledge and understanding without action is waste.

Be Grateful

Never underestimate the power of gratitude.


Forgiveness will make your heart happy. Forgiveness is not about someone deserving it, it's about healing your heart.

Entries in Interesting Ideas (15)


Install it and Love it!

Before I get going on my Framework Series, I needed to have a way for people to get the code, branch it, play with it and fork it in way I don't expect them to.

I mean, this is THE WHOLE POINT OF MEF, extend in ways in which you cannot predict when you initially design your App.

I have been using Subversion for years and know for a fact (from multiple personal experiences) that branching and merging can cause tremendous pain for you. So I did not want to use SVN. This means basically I needed another SCM System.

I see only two viable alternatives, Mercurial (Hg) and Git. Git is cool, but it's also pretty complex and doesn't run very well yet on Windows which is my primary audience, so we are left with Mercurial.

Joel Spolsky says:

Learn Mercurial, trust Mercurial, and figure out how to do things the Mercurial way, and you will move an entire generation ahead in source code control. While your competitors are busy taking a week to resolve all the merge conflicts they got when a vendor updated a library, you’re going to type hg merge and say to yourself, “Oh gosh, that’s cool, it just worked.”

So who am I to argue with that. I'm not, in fact I agree with it whole heartedly.

  1. Get Mercurial Here or Here with Explorer Integration
  2. Learn how to use it Here
  3. and Integrate with Visual Studio using VisualHg Here or using HgSCC Here

The more I work with Mercurial the more I really love it.

I see an Ag Issue Tracker with Hg integration in my future, maybe "Mg" :-)


BitNami and Development Installations

I just discovered Bitnami... How have I never seen this before? I know about all the VM Appliance stuff and I use it occasionally but I really don't like VMs.  It's not a matter of speed really,its just a personal opinion for how I like to run things.  I used to really like VMs and I do still run several, the thing is, what if I want to install something like Redmine on a Windows machine then decide I don't need it on that machine, uninstalling from most other techniques are a horrid experience, usually easier to repave.

BitNami stacks make it incredibly easy to install your favorite open source software. Application stacks include an open source application and all the dependencies necessary to run it

BitNami :: BitNami Stacks

Bitnami changes that by making everything run in an isolated place that you can just nuke if you don't want it and everything continues on, no registry problem, no DLL Hell (which we still have no matter what the Marketroids tell you).  So far I am very pleased with what I am seeing, especially from the Ruby Space.

Microsoft needs to learn about how to make installations simple.  Installing Visual Studio is an all day process, and if you screw it up or put anything beta on that installation, repave is the only real way out.

I would really like to see Microsoft make Installable Appliances that live independently of my OS.  There is really no reason this cannot happen today and in Windows 7 this would be a great target of opportunity, but it won't happen due to what.... backward compatibility.

You know what... I don't care, they should just bite the bullet and make a real 64bit OS that is hardened and nothing can touch it except itself.  All programs should live in a sandbox that we can destroy at will.  How long does it take to copy a DVD? 5 Minutes, 10?  that is how long it should take to install Visual Studio.


This sort of interesting work has me looking seriously at IronRuby

MagLev is a Ruby VM based on the GemStone S64 VM, which runs Smalltalk. The Smalltalk VM has been extended with special byte codes to make it Ruby compatible. GemStone's Smalltalk VM has been used for over 20 years in sectors such as real time financial markets and the worldwide shipping industry. It as a mature, fast, stable, distributed, and transactional data store which can hold over a trillion objects or 17PB (Petabytes) worth of information. The goal of the MagLev project is to bring this distributed object technology to the world of Ruby on Rails...

In essence, MagLev was filling the roles not just of the VM but also the caching and persistent storage layers.

InfoQ: GemStone Reveals Plans for MagLev - Ruby VM at RailsConf 2008

Oh how I would love to see VB make this even easier. But it won't, so I am looking seriously at IronRuby as a preferred development language.  I wonder if we will start seeing enough demo material to make it worthwhile. 

I'll be watching closely to see how John Lam's team keeps making progress.


Time for Change (of blog engines...)

I have “threatened” to write my own Blog Engine in VB.Net with a Silverlight UI and still might...

Until I can find time to actually do that, I have evaluated all the different engines I would consider using instead.

Since this blog runs on DotText, the first obvious thing to look at was SubText, it's cool, and does pretty much everything exactly the same, this is both good and bad, bad because it does not do much innovation and just tacks on some extra functionality. In fact I went as far as trying to get it to import my old blog (which failed miserably in 3 releases).  So I don't want to bother with it any more. 

I don't really like the skin model anyway its ok, but not really what I am looking for in a web 2.0 world.

Last night I had the priviledge of seeing a demo of Graffiti by none other than Rob Howard.

Let me tell you, this interface is incredible!  At first glance, I thought it was a Silverlight App, but it is pure CSS and HTML.  What it does is more akin to a full Content Management System (CMS) than a blog engine, but it is not Community Server (huge and bulky for a small operation).

I thought about Community Server a long time ago and rejected it only because it is way overkill for one person.  Same thing with DotNetNuke.

Grafitti is exactly what I was looking for, so when it is out of Beta, I am switching.


Why Your Development is Crazy

Kathleen makes some great points about how Development is really, really hard.

Why Your Development is Crazy - Leaning Into Windows

I STILL see that many clients think a single hacker in a weekend can crank out the software equivalent of "War & Peace".  I find this incredibly frustrating when talking about my hourly rate and that it is going to take about 10x more hours to do the work than they seem to think it will.  Granted this is not always the case, but it still pervades the small business world.

Tools are getting better, but at the same time, the demands for what the code should do keeps getting more complex.

My very first paid programming experience was a Label Generator for a Dot Matrix Printer written in Ashton-Tate's DBase III on a Kaypro CP/M machine.

The "Design Doc" consisted of my Client saying... "Make it print names and address on pin-fed labels..."

Compared to that "Program", software development has indeed become quite complex.  Just wrapping your head around something like Generics or debugging Events with Delegates can make your head spin when you first look at it, or the Second or even 10th time you look any more.  Just about every time I look at software I have written, I think I can improve it.  That's not because I wrote it "bad" in the first place, it is because the sheer number of alternatives we have to do things today is staggering.

I am one of those people pushing for VB.NET to return to its roots and make this stuff easier to do.  Sure we can have all the power in the world to write great programs, but if that comes at the sacrifice of productivity, all is lost.

Can a Lone Developer survive in today's world?  Yes, but its certainly not easy.


Developing ASP.Net with Ajax and SQL is completely Free

I was reading Julie Lerman's post today about her discovery of some things ASP.NET does and found this:

2) You can develop ASP.NET sites (and with AJAX) for free. Visual Web Developer 2005 Express Edition is free and the .NET Framework is free and the AJAX extension are free. And if you want to do data access, SQL Server 2005 Express Edition is free.

OK, so I knew that, but I am betting that the general mass populous of developers and other people who want to break into development don't.

But what about getting "free" hosting... can you even really do that anymore even on LAMP?  You can, but not with any real quality or without heavy restriction.

This blog is hosted at Webhost4life who charges a whopping FIVE dollars a month to give you ASP, SQL and an assortment of plugins to use.  For a few dollars more you can get dedicated SQL and Sharepoint.  It's completely affordable for anyone to do garage based development in.  For the price of a single Starbuck's Latte a month I can host a site... Amazing.  Even more amazing, I can get the absolute latest features of even the most sophisticated hosts.  I think I  have been down a few minutes in the last 5 years - that's more reliable than a T1.

So if someone tells you that developing with M1cro$haft is too expensive... Tell them they are completely out of touch with reality and need to come out of the cave and look around a bit.  Microsoft has an incredible developer support arsenal.  From MSDN to the Empower Program to the Dev Team Blogs to the Online Training resources to GlidePath and other projects as well as the Forums and Lists; there simply is no other single company on the planet offering you as much support in your development endeavors as Microsoft.  And by the way... MOST OF THEM ARE FREE! (as in Free Lunch, Free Beer, Freedom or any other spin you want to put on it)


Recursive FindControl(Of T As Control)

I really love it when someone inspires me to actually THINK about how to do something better, I remember a problem I specifically had in a project last year when I need to use FindControl to get something on a MasterPage from a SubPage.

I came up with a solution, but it was nothing noteworthy...

My friend J. Michael Palermo, IV posted a recent entry about doing this in C# (as well as VB, but somehow I only saw the C# version before I started into the conversion process).  The idea was spawned originally by Steven Smith, Mike's version put a Generics spin on the code.

I thought about this for several reasons.  1. It was done with Generics.  2. It used Recursion and 3. It is something that I have to do all the time.  I generally frown on using FindControl for obvious reasons, it just scans everything and is pretty much a performance pig.  However, there are a few times when you really do need to do it.  Then there are other times, when you can extract a starting point (or already know it) and just want to look down into some control that you know has what you need, but you have to get the name from Generated output.

Eventually, I arrived at this conclusion:

    Public Shadows Function FindControl(ByVal id As String) As Control
Return FindControl(Of Control)(Page, id)
End Function

Public Shared Shadows Function FindControl(Of T As Control)(ByVal startingControl As Control, ByVal id As String) As T
Dim found As Control = startingControl
If (String.IsNullOrEmpty(id) OrElse (found Is Nothing)) Then Return CType(Nothing, T)
If String.Compare(id, found.ID) = 0 Then Return found
For Each ctl As Control In startingControl.Controls
found = FindControl(Of Control)(ctl, id)
If (found IsNot Nothing) Then Return found
Return CType(Nothing, T)
End Function

So with this Code There are a couple of things to point out.  The Generics routine belongs somewhere in your utility code.  You don't need to have more than one copy of this in your App.

Generics are cool, but... Most people don't seem (myself included) to want to call functions using the "Generics Way" in VB.  Not because it is particularly hard to remember, it just so happens that sometimes, I want to override some basic  Framework method with one with more functionality.  So, I can drop down this nice Generics Routine into my Utility Class and then set a wrapper (or 2) in my Base Page to call it.  The only reason to wrap it, is to shadow the built-in routine for Controls, which can cause confusion unless you name this Function FindControlRecursive... or something similar.   I personally prefer not to, and to add insult to injury, I prefer to override all the places in my App that is using the built-in FindControl() method.  Why?  Well, for consistency and to provide a way for a development team to see how overriding some functionality at a base level can make life much easier, and correct any false assumptions of how some things work in the first place.  If I want the Recursive, Generic Routine to have the same limitations as the built-in framework method, I can always set the startingControl to something other than Page or use MyBase.FindControl().


Krugle This...

Krugle is a search engine for Source Code, this is seriously cool stuff and frequently a real timesaver hunting down some obscure algorithm I need.  The Overview really makes it clear how good this engine can be.

Just about any language is supported as a search criteria, and the VB.NET Code I have searched for is pretty good stuff!


Blog Engines...

About a year ago, I very seriously committed to writing a new Blog Engine.  Then life hit the fan and I had absolutely 0 time for extracurricular activities. In fact I have been lucky over the last year to find time to breathe, my life completely turned upside down and the dust is still only just starting to settle.

I still want to write the engine, and my main motivation is still to make one that is completely SOA and built on WCF, so I can learn WCF inside and out with a real project.  Furthermore I wanted an engine that can be plugged into anything, like DNN, Sharepoint, its own UI, a new one someone else wants to build, or extended in ways you can't achieve with the rigid architecture most so-called engines have. 

Meanwhile, I thought about upgrading DotText to Community Server but I really don't want CS for various reasons I don't really want to talk about. It's great software, but it doesn't fit in with the way I want to use a blog engine.  I also really like Drupal but that's PHP and also doesn't really fit in with the way I want to use a blog engine.

So until the world stops spinning and I have some time really make my engine, which is just that... an engine, not the whole dang Train! I am going to upgrade to Subtext.  Why?  Because it is a fork of what I am already using and what I am comfortable with; its open source and it has a nice conversion path from DotText.

I only recently found out about Subtext because Tim Heuer just upgraded to it (for some of the same reasons apparently), thanks for the tip Tim.

I think that before I sit down and do my engine, I will find enough time to write my Publish to Blog addin for OneNote 2007.



This is a GREAT tool for tracking your conversations.  I get so frustrated when I can't remember where I left a post asking about something important (or at least something I was curious about) and then have to google around for a while to track it down (if even possible)

With CoComment Enabled Sites, your conversations are all stored in a handy place where you can get at them, read and search them, then look for responses.  First Rate, hopefully more people will enable their sites to support this great tool.  Speaking of which... my site doesn't support it (yet) because I am still using DotText version 0.95 (yes, I know... how lame... but not for long)