Check out the story in the Cherokee Tribune. The thing that I found rather odd was that even though the premise was that blogs are getting mainstream, the only examples they had were blogs from 3 technical males (1 tech writer and 2 developers).
Some developers avoid code generation because they have lots of custom code. The key isn't avoiding custom code, but knowing precisely where to put it. Isolating handcrafted custom code from the plumbing goop is code generation's single biggest benefit. Code generation splits your application into technology-driven templates, business-defining metadata, and custom business algorithms. These three elements evolve on different timescales; treating them independently lets you weather massive technology changes or use templates to reuse the same technology to solve totally different problems.Kathleen is also one of the few people that tells you how to manage generated code so it doesn't overwrite your custom code, which has always been a problem for most.
My ADO.NET XML Provider (WilsonXmlDbClient) just passed 200 downloads and my ASP.NET Server Form for Multiple Forms (WilsonWebForm) is about to pass (or has already) 350 downloads. The WilsonXmlDbClient is an ADO.NET provider that enables Xml to be worked with just like a database in .NET. It supports the most common Select, Insert, Update, and Delete SQL syntax, as well as tranactions and parameters. The ASP.NET WilsonWebForm enables Multiple Forms and Non-PostBack Forms, allowing you to overcome this ASP.NET restriction. This is a real Server Form that supports WebControls, ViewState, and Events, as well as Action to Post to other pages/sites. I hope some of you have found these useful.
The following are all Atlanta bloggers (thanks for Kirk for most of these):
Kirk Allen Evans
Keith J. Rome
Matt and Brendon
I have said a few times that there was a bug in CSLA, at least in an early version, where DataReaders do not get closed. I should instead have said that this bug was in the examples of how to use CSLA, which are found in the CSLA book, not in the CSLA core framework itself. That is a legitimate distinction, and I erred in not making it, but it should also be noted that many people follow these examples of usage.
If you are new to object-oriented programming, or at least business objects, then I heartily recommend Rocky Lhotka's books. The CSLA framework that he develops in his books is one of the best explanations of how to build a business object framework available (if not the best). I owned the previous VB6 version, and now have a .NET version, and I can honestly say that I have learned from Rocky's books and speaking.
As I have said a few times, and has apparently offended some CSLA groupies, you should never assume that any framework or tool is perfect or ready-to-use in your situation. CSLA, like any framework or tool, may include things that you do not need which can make it heavy, it requires a commitment to learn, and it may not save as much time as other tools when used manually (without code gen). Be prepared to make changes.
I sale an O/R Mapper, if you can call $50 and free upgrades for live selling, which I think is one of the simplest tools out there, as well as being easy to extend when necessary. It has some overlap with CSLA, so it can be perceived that my comments are made to increase my sales. Of course, CSLA and my O/R Mapper can most likely be used together, since what my mapper does is what CSLA leaves undone, and vice versa.
I hope that this somehow proves that I am at least somewhat objective and positive, and not just "trash" talking, misleading, or being dishonest when it comes to CSLA. There are many styles and possible solutions in .NET -- I have used CSLA on a major project and do not want to do so again -- but I can say the same about many other techniques I have used in the past too. Feel free to similarly critique my O/R Mapper, but please don't make it personal and simply "trash" talk me for simply stating my opinions. Finally, I would like to say thank you to the many people that have positively appreciated my comments in the past -- and were glad to know they were not alone in their experiences -- and I understand why most of you preferred to only communicate in private emails to avoid the very groupie talk that I have fell into.
I was going to continue my thoughts on simplicity, but now I think I might have been better off not bring it up afterall. That's because I was going to give some examples of complexity to better show where we miss simplicity. But apparently some people just can't handle it when someone like myself says something isn't perfect. I'm not going to name it here, but I recently said something wasn't a silver bullet -- and now I'm being bashed in their blogs and forums. It seems I'm continuously negative, even trash-talking, and just down-right untrustworthy -- I had no idea. They also found a couple of other times when I said this thing wasn't the solution to every problem. Of course they don't mention the times I've said this thing was a good thing in other ways, as well as a great learning example. And while they like to say I'm just trying to sale my O/R mapper, they conveniently ignore the fact that I didn't mention my mapper in these comments. Not to mention that I've said worse things about my own mapper -- its also not for everyone, and other mappers have even more features.
So why is it that some things in the software world become untouchable, and people aren't allowed to say they are less than perfect? I've seen people in the past giving good honest opinions be bashed for it, and as a result a lot of real architecture questions go unanswered since no one is willing to step up and get bashed. Heck, one time I asked a publisher if I could get out of a review for a book I requested because I couldn't find much nice to say about it -- and of course they gladly accepted my offer to not review it! And yet I'll admit I wanted out just as much as they did, because I knew my "opinions" could be ridiculed by those that wanted to defend the authors and their subject. But that brings me back full circle, for my biggest complaint with that book was that it was full of the most complex examples that in my opinion made their subject far worse than it really was. But how can I really talk in a meaningful way about simplicity without examples of things that are too complex? I've learned the most from looking at such short-comings, both my own as well as those of others.
I'm a huge fan of simplicity in software -- and I think its finally time to write about it. First, let me reveal a little about myself to add a personal tone -- I'm not that smart! Huh? That's right, I'm not the smartest developer by any means, although I don't mean I'm stupid either. Let's put it in perspective -- all developers are likely to be smarter than average, so yes I am "smart". But there are many developers out there that have been far more schooled in computer science, along with algorithms and design patterns. My background is actually pure math, with a fair dose of physics and philosophy and finance -- not computer science at all. Thus, I really do think that I'm not that smart when comparing myself to the best in software development.
Why is this relevant to you? Because by definition there are only so many people that can be the smartest -- the rest of us are all less than that -- in other words, "not that smart". And while I have worked with some smart developers, I have also seen many more that are "not that smart", often more so (or is that lesser) than I! Heck, as someone who spends a lot of time in forums and newsgroups answering questions (learning in the process myself), I can assure you that there are even some pretty "stupid" developers out there. My point is that if you expect your software to be understood, and thus used, whether it be the external API or the internals for maintenance and extension, you really need to be targeting the "not so smart" developers too.
So what is simplicity? Ockham's Razor says (paraphrased) that the simplest explanation that works is the most likely to be the best. Einstein said "Everything should be made as simple as possible, but not simpler". In software, Kent Beck defines four traits of simplicity: passes all tests, reveals intentions, no duplication, and smallest codebase. In other words, "simple" software should do what it is supposed to do, but no more, and it should do it with the least amount of code possible, while still being easy to understand. Finally, Martin Fowler said "... a complex design is more difficult to understand than a simple design. Therefore any modification of the system is made harder by added complexity." I think these sum up simplicity.
Why did I finally choose to blog about simplicity? Because I'm seeing far too much complexity out there. And finally, today in the forums there was actually someone trying to say his product was better than others because it was larger! I want the opposite -- I want fewer classes and a much smaller external API so that my "users" will quickly understand how to use my product, or a simpler UI if its an end-user application. I also want my internals to be minimal and obvious so that others (not to mention myself) can maintain and extend my software. That last point is why I think I've been able to make a dent in the community with some of my ideas -- they get the job done and just as importantly are easy to extend when you need more than I've done!
I'm going to end here today -- and keep this post "simple". I could add a lot more, but I think I'll make this into a series of posts instead. That will also give some of you the opportunity to tell me what you think about simplicity, and it will probably look better in my stats. :)
I have been continually getting errors trying to approve users to join my XmlDbClient workspace on GotDotNet, and there is no response to submitting a bug report (hello -- anyone home), so I decided to try with FireFox / Mozilla -- it worked like a charm. I may just make FireFox my default soon, although I still need to try it on my kid's sites -- but even there I'm willing to bet that FireFox is better since sometimes their games in IE lock up their entire computer.
Apparently there is a tool called iBATIS in the java world, and now in the .NET world too, that is like an O/R mapper except that instead of generating your sql at run-time, or using stored procs, it uses the Sql that you declare in an Xml file. This just seems totally bizarre to me, and as far as I can tell their main argument for doing this is because they want an O/R mapper, but they want total control over all the Sql, and of course they also like to note that this allows them to avoid recompiles. I just don't get why anyone would want to write Sql in Xml, and so far the person that has been posting about this tool pretty much makes his entire argument that this is just better, without any supporting rationale -- so what do you think about this tool?
We have officially sold our house -- closing was this afternoon -- we are now homeless for 3-4 weeks. :) We're actually renting back from our buyers for the next month, so we're not literally homeless, but we're not home-owners at the moment. Our new house only has a few small items still to be done, along with the final cleanups, and we'll close on it on October 20 and have 9-10 days to move our stuff. Its a great feeling to have it all work out -- and not have to move twice and rent an apartment if our house had sold too fast -- or to have two payments if it hadn't sold.