Archives
-
Codebase size isn't the enemy
In Steve Yegge's latest blog post, he argues that the size of a code base is the code's worst enemy. Today, Jeff Atwood wrote a follow-up with the same sentiments. Now, both bloggers are great writers and have almost always insightful articles. However, this time they both disappointed me a bit: both can't really give a set of reasons why a big code base is particularly bad, and more importanty: what is too big ?
-
Developing Linq to LLBLGen Pro, part 10
(This is part of an on-going series of articles, started here)
-
Contact form for emailing me has been disabled for now
I've disabled the contact form on this blog to email me, as spammers have found a way to spam me through that form and as I don't like spam, I have disabled that form till Telligent patches this hole (if ever).
-
Categorizing Software Engineers
Jeff Atwood posted a nice blog post today about The Two Types of Programmers. I always like to refer to programmers by using the term 'Software Engineer', when they're software engineering. The term 'programmer' is often associated with a 'code monkey' (human code generator), and Jeff's post isn't about code monkeys.
-
Developing Linq to LLBLGen Pro, part 9
(This is part of an on-going series of articles, started here)
-
Visual Studio Team System 2008 Team Suite RTM now available on MSDN subscribers
Visual Studio Team System 2008 Team Suite (x86 and x64 WoW) - DVD (English). Date/Time Posted: 2007-11-19 06:46:35 (UTC).
Have fun hammering the MSDN download servers -
Correctness provability should be the goal, not testability
(edited. s/proof/prove/gc and some sentences which were 'out of wack' have been corrected as well)
-
Developing Linq to LLBLGen Pro, part 8
(This is part of an on-going series of articles, started here)
-
Developing Linq to LLBLGen Pro, part 7
(This is part of an on-going series of articles, started here)
-
Developing Linq to LLBLGen Pro, part 6
(This is part of an on-going series of articles, started here)
-
Alternative Rock
Ever heard the term 'Alternative rock' ? It's a term for rock music which isn't mainstream. Or something. Anyway, read the wikipedia page for the fine print. I'm a metal fan (despite the pile of trance house music I've created in a dark past ) and once in a while I listen to alternative rock to ease the eardrums a little. Every time I do so, I get the same thought: Why is it called alternative?. I mean: isn't it just rock music like all that other rock music?
-
More on the .NET sourcecode and its 'Reference License'
Today I read an interesting post by Arne Vajhøj in the C# newsgroup. He brought up the point that in the Java research license, which was the license the Java sourcecode was released under before it was released under the GPL, a clause was added to prevent that the reader of the code was 'brandmarked' or 'tainted':
-
Don't look at the sourcecode of .NET licensed under the 'Reference license'
Update: If you think I should be shouting 'awesome' and similar words like most of the .NET community members, please take a walk down the path of 'licenses', something you all should be familiar with in every cell in your body, but by the look of all the different posts about this source release I can only conclude: hardly anyone has any clue whatsoever what licensing, copyright, software patents and related material really mean to a software developer. You didn't really think that by copying a class from the internet you owned the code, did you?
-
Deferred execution in Linq pitfall(s)
Say you have this query in Linq to Sql
// C# int id = 10254; var q = from o in nw.Orders where o.OrderID = id select o; // some other code id++; foreach(var o in q) { // process o. }
-
Developing Linq to LLBLGen Pro, Day 5
(This is part of an on-going series of articles, started here)
-
Developing Linq to LLBLGen Pro, Day 4
(This is part of an on-going series of articles, started here)
-
Developing Linq to LLBLGen Pro, day 3
(This is part of an on-going series of articles, started here)
-
Developing Linq to LLBLGen Pro, day 2
(This is part of an on-going series of articles, started here)
-
Developing Linq to LLBLGen Pro, Day 1
(This is part of an on-going series of articles, started here)
-
Developing Linq to LLBLGen Pro, Day 0
Now v2.5 of LLBLGen Pro is out the door and the release-stress has gone away, it's time to pick up the next project, which is Linq support for LLBLGen Pro, which will be rolled into v2.6 of LLBLGen Pro, which is scheduled for Q4 2007.
-
LLBLGen Pro v2.5 has been released!
Back in January 2007 we started designing and developing LLBLGen Pro v2.5, and it's finally here!
When you develop a framework, at a given moment in time you'll wonder: "Ok, now that I have all the basics covered, which direction shall I go into now, what are the more meaningfull additions to the framework?", and we came to the conclusion that a more framework focussed approach was best, instead of adding more into UI oriented fluff like generating user interfaces (we still can do that though with a set of templates we developed, but it's not the core of the design). So, we added more entity management features, made the framework richer with a Dependency Injection mechanism and of course the usual set of new databases. -
Just in case you're using VS.NET 2008 Beta 2 with C#...
If you're using C# and VS.NET 2008 and you're typing some code like:
CustomCollection<MyType> items = new CustomCollection<MyType>() foreach(OtherType other in OtherTypeCollection) { items.Add(CreateItemFromOtherType(other)); }
where CustomCollection<MyType> implements IList explicitly (void IList.method(params) {} ), you will run the risk that the IDE collapses with a crash. This is a known bug and it is fixed before RTM (yay!), but it still can cause headaches for the early-adopters of MS' next IDE. So you have been warned .
Full report here. -
VS.NET 2008 Beta 2 / .NET 3.5: Windows Forms ComboBox contains nasty bug.
The Windows Forms combobox control contains a nasty a lot of people who will try .NET 2.0 applications on .NET 3.0 will run into: the Sorted property makes comboboxes unable to bind to data: they stay empty. This is particular bad, because any solid working application for .NET 2.0 using comboboxes in a databinding scenario (and I estimate a lot of applications fall into that category) which uses the Sorted property to get sorted results will run into this problem, and it has huge consequences: any user who has .NET 3.5 installed will run into this, no matter what you defined as supportedRuntime in the .config file of your application.
-
Oh no, another tag-youre-it game!
Sahil tagged me in the never-ending-series of tagging other bloggers. This time it's about Stuff I wouldn't wanna live without. Read Sahil's list here. The funny thing about these tagging games is that despite the useless babble that's mostly cluttering the tag-posts, there are always a few gems to find, things which will make you think "oh that's cool, I didn't know that!". I hope my useless list will trigger some of these thoughts as well .
-
Maintainable software: why you can't live without proper solid documentation
This post is a reply to Jeremy D. Miller's post 'A Train of Thought, June 17, 2007'. It's part of an on going discussion about maintainability of software and what's necessary for having maintainable software. I'm not going to link to every post in the discussion, you can find most of them from Jeremy's post.
Before I continue, I'd like to say that I'm not participating in this discussion to disqualify TDD/Agile as a set of useful methodologies because I do think they have some solid points everyone can benefit from. I'm also not participating in this discussion because I'm a waterfall-follower, because I'm not a waterfall follower. Waterfall is a methodology which could be very beneficial but it has to suit the project. For example, you really want to use waterfall in software for some medical equipment as you don't want to run the risk to miss a spot because you didn't anticipate a particular use-case would be possible. I don't use waterfall myself as I'm not in the medical equipment business and I'm also not a consultant payed by the hour. But more on that later on in the article. The post is build up as replies to things Jeremy said in his post, so the blockquotes are quoted from his post.
The summary comes down to this: Documentation describes the what and the why, code describes the how. You need both documentation and code to have the complete overview, not just the code. -
Don't use foreach over MatchCollection, use for. UPDATED
UPDATE. Apparently they both call GetMatch(). So my advice isn't correct. Thanks 'Reflector' for the comment. What surprises me though is that first my routine (checked with Ants profiler) was slow because of the foreach, and now it's not.
-
SqlServer 2008: Does it or doesn't it have the Entity Framework?
I just read an interesting post on the Oakleafblog of Roger Jennings. There, Roger enlists his feedback he would have given to the ADO.NET team. It's an interesting list of items, most of them I can agree on. Though the better gems are in the comment posted by Mike Pizzo, ADO.NET's architect.
-
SqlServer 2005 paging: there IS a generic wrapper query possible
(the Name field in the queries below is without [ and ] brackets, because CS currently goes bezerk because of these. Don't know why, but apparently a glitch somewhere.)
-
Posting something with [Name] in the text fails
I'm trying to post a new article about SqlServer paging but the query SQL I was posting contained the reference to a Name field, WITH [ and ]. This gives an error in CS 3.0 here. Just for reference :)
-
My last post on THE soap
Ok, this will be my last post on the soap of TD.NET and MS (has anyone already called Hollywood? ). In the community there's some controversy starting to pop up here and there and I just want to make clear what my position is and will be. This to avoid getting pulled into any camp in this soap.
-
Thou Shall Not Work Around Technical Limitations! (whatever they are)
Dan Fernandez responded to my recent blogpost with a follow-up on the Jamie vs. Microsoft soap.
He used an analogy to try to make his point:To paraphrase an analogy from that post, this would be comparable to a 3rd party company working around the technical limitations in the LLBGEN demo to unlock features in LLBGen Pro for free.
-
Look! Microsoft is working hard on building a community!
-
My interview with DotNetRocks! is now online!
My interview with .Net Rocks! is now online! . Please use this link to to get to the show's page.
-
Gavin King slams Object Databases
In a great article, Gavin King (of Hibernate fame) whipes the floor with what we used to call 'Object Databases'. Excellent reading material and full of information why these RDBMS's still stick around after all those many claims of object database vendors that their product is so incredibly more efficient.
-
The endless fall to uselessness of MS Connect
I ran into a new low for Microsoft Connect product feedback. Check this item (you have to login with your MS Passport/Live ID. I don't know why). The title is "When will .NET 2.0 service pack 1 be out (IF ever) ?", I posted this on April 17th. The title explains it all.
Today I got a reply (whoa, after one month already). The status is now changed to "Resolved (Fixed)". This is the comment Microsoft posted:Thanks for your post. Our plans are always to deliver the necessary roll-up of a product in Service pack form when it makes the most (positive) impact. We continue to deliver necessary fixes (QFEs and GDRs) in the meantime and we've delivered a SP1 for Visual Studio.
-
API's and production code shouldn't be designed by scientists
One of the biggest mistakes Microsoft made in Database land was the absense of a proper paging mechanism in SqlServer 7 and SqlServer 2000. (No, don't come to me with tricks with @@ROWCOUNT because these don't always work in all situations). People had to use temp tables to get a mechanism which always works in all situations. What a surprise it was to see that Microsoft said they solved it in SqlServer 2005: they added a construct which offered paging inside the database without the necessity of temp tables. Though, who designed this feature? Did that person ever write production SQL code or did that person ever write normal business applications? Did anyone ever tell that person that all other major databases on the planet, except Access, had a simple paging mechanism build in so anything more complex than that would be bad? Apparently not.
-
New blog server as it seems, which doesn't work ok with my blog-skin
It seems Telligent uploaded a new version of Community server here on weblogs.asp.net, though it broke my custom blog-skin so the blog doesn't look that great now. Sorry for that, I'll try to migrate the skin a.s.a.p.
-
ADO.NET Entity Framework cut from .NET 3.5/Orcas.
First, read the announcement here.
Had that deja-vu yet? Me too . But let's not get into that right now, because I do think the Entity Framework situation is different from the WinFS/ObjectSpaces situation. So what's going on here? -
More on Lazy Loading vs. Pre-loading in O/R mapping scenarios
Recently I replied to a post on Ayende's blog which I'll quote below:
In general lazy loading is more of a burden than a blessing.
The reason for this is that it leaks persistent storage access to different tiers via the lazy loadable associations. If you want to prevent your UI developers to utilize lazy loading, or are sending entities across the wire to a service, how are you preventing that lazy loading is called under the hood? We support 2 models, one has lazy loading, the other one doesn't (and is more geared towards disconnected environments).
You don't really miss lazy loading in the second model really, as long as you have prefetch paths to specify prefetching what you want (also into an existing graph) The thing is that the model then forces you to write more service oriented software: make the call to the data producer and tell the data producer (or repository, whatever you want to call it) what to get and you get the data and work with it. there's no leaky lazy loading under the hood bypassing the repository, you need to call the dataproducer to get the data, period. -
I'll do a Chalk & Talk session on O/R mapping at the next Dutch CodeCamp!
I'll host a chalk & talk session at the upcoming Dutch CodeCamp on May 12th. The title is O/R mapping and Architecture, and as my session is the first of 3 sessions, the others are held by Alex Thissen and Paul Gielens, we will align our sessions so the whole track is actually one big session .
-
Why change-tracking has to be part of an entity object
Recently, Andres Aguiar started a discussion between him and Udi Dahan about change tracking in the upcoming Entity Framework (EDM) from Microsoft. Basicly, Andres described why it was unfortunate that the EDM doesn't have change tracking inside the entity objects itself and gave some examples why that's unfortunate. Udi pulled the discussion into SOA land, and I think that was unfortunate as well, because there's a much wider used example which will illustrate why Andres is right and the rest is wrong: ASP.NET 2-way databinding. This article will be very technical, and it refers to stuff you won't run into most of the time, as it's functionality which is deep inside controls you just use. However to be able to use these controls and these features available to you in ASP.NET 2.0, they shouldn't force you to implement a lot of plumbing code yourself, as the sole reason you're using these controls is because they are the plumbing, they should take care of all that, why else bother using them?
-
this.AddAward(new MVPAward());
Hurray! . Microsoft awarded me the MVP award for C# for the 4th time!. Congratulations to all the other fellow MVP renewals and new MVPs!
-
And this is why Google will win...
Jeffrey Palermo blogged tonight about his new link blog. It's not really a blog, it's a feed of shared items in Google Reader. I didn't know that was possible with Google Reader.
What a great concept: the info is already there in your reader, so why not add the blog items of various blogs you're reading to a new list, which forms a new blog? So I instantly dropped Omea Pro and moved to Google Reader with my feeds. As I read a lot of blogs every day, I will try to share the items I think are useful to all my two my readers on my shared items 'blog' at Google. It's linked at the left, but for convenience, you can also click here. There's not that much shared at the moment, but I'm currently traversing my feeds to see if I can share more stuff. Every shared items 'blog' at Google also has an RSS feed, so you won't miss a thing! -
Yeah, software is hard. Film at 11
I ran into this today and it was simply too good to pass on:
Like most O/R solutions today, ObjectSpaces attempted to support a rich set of mappings and scenarios through custom query generation. Adding support for a new type of inheritance mapping, for example, meant adding code to a query generator to insert the necessary join conditions in all the right places. Understanding how this new construct composed with other joins, projections, unions, and predicates added throughout the query to model other object-like concepts made the code complex and somewhat brittle. Trying to understand how to generate updates against such complex queries, or if such updates were even possible, was even more difficult. Worse of all was trying to verify that all possible combinations of the constructs composed into a query were handled correctly.
Source
-
MVP summit!
Next week, the MVP summit is again reality and I'm there . I'll arrive on Sunday and will leave on Thursday, and I'll hope I'll meet a lot of my fellow MVP friends and perhaps others who are in the neighborhood
-
Jeroen van den Bos' articles about software maintenance and maintainability
Jeroen van den Bos started a very interesting series of articles about software maintenance and software maintainability, what it does with your architecture, how to evolve implemented systems to contain new functionality etc. etc. Below the links to the articles which are currently online, more will follow soon. Highly recommended.
-
NDepend 2.0 has been released
Disclaimer: I'm offered a free license for NDepend 2.0
-
Software Architecture Workshop in Arosa: back to reality
Last week I had the privilege to spend 5 days in Arosa, Switzerland, among a group of people who were way more smarter than I am, for the annual Software Architecture Workshop (SAW). The SAW in Europe is an initiative of Jimmy Nilsson, and uses the Open Spaces methodology to let the participants discuss all kinds of topics during a set of parallel tracks. This year, the organization was done by Beat Schwegler of Microsoft. From the Netherlands, Paul Gielens, Arjen Poutsma (of Spring framework fame) and myself were present. The SAW is an invite only event.
-
AssemblyFileVersions: 2.0.0.071005 is bad, but 2.0.0.061005 is good
I was unhappily surprised this morning when I compiled a new build of an assembly and changed the assembly file version attribute from 2.0.0.061005 to 2.0.0.070105: I got this wicked warning from the C# compiler:
warning CS1607: Assembly generation -- The version '2.0.0.070105' specified for the 'file version' is not in the normal 'major.minor.build.revision' format
-
I'm tagged and happy newyear!
First of all: Happy New Year!