"TopicProvider.cs," the developer shouted, indicating someone in the room had committed an updated project file, but not the new file.  Humbled, I quickly went to my sandbox and added and committed the file.

"TopicProviderTests.cs," came another shout.  Again quickly I added the file.

Feeling embarrassed that I missed committing two files, I noticed that I had no icon overlays on my files, indicating my status with the CVS repository.  No matter what I did I couldn't get the overlays to come back, and boy I was missing them.  You don't realize how often you use the visual cues they provide until they're gone!

I tried:

None of the above worked.  The only thing I could think of was that I had recently installed Office 2007, which installed a folder synching program called "Groove".  I thought maybe Groove worked similarly to CVS and provided some icon overlay to notify you of a change.

Some digging provided the following provided the following from the TortoiseCVS Page:

The number of overlays allowed by Windows is limited to 15 in total. Windows itself uses 4 of those, leaving the remaining 11 to be used by other applications. If you have other software installed that uses icon overlays, the limit may be exceeded, causing some overlays not to be shown.

To resolve this problem, either uninstall the other software altogether, or manually remove one of the other icon overlay handlers. This can be done by editing the registry. Use at your own risk! You can delete [unused] entries at HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/ShellIconOverlayIdentifiers.

A quick check of the registry key above showed the following:

RegistryWithGroove

Notice the number of Groove icons.  Windows sorts the registry based on Alpha, and this must've been found somewhere else, because if you look, TortoiseSVN stores it's overlays by preceeding the name with an integer.  Very smart!!

My TortoiseCVS overlays disappeared when I had installed Groove due to the limitation that Windows has on overlays.  I uninstalled Groove and there appeared my TortoiseCVS overlays.  Here's my registry after:

RegistryWithoutGroove 

Completely evolutionary thinking that prompted someone in the SVN camp to notice this problem and figure they should make themselves first in the registry all the time and therefore never have users experience what I did.


 
Categories: Software | Tools

January 11, 2008
@ 02:21 AM

A few days ago I posted about our frustrations with LINQ to SQL and that it was not impressing me.  After a few days and far too much time devoted to figuring this framework out, we've abandoned our attempts to use LINQ right now.  It was far too difficult to manage entity objects with it and relations, in fact we experienced the same frustration attaching our entities to LINQ to SQL as Rick Strahl, where he aptly renamed LINQ to CLUNQ:

CLUNQ

The more I look at LINQ the more I'm coming to the conclusion that using LINQ in a middle tier - especially in a generic business object architecture - is not going to work well. There are many little problem issues that when all added up point at more problems being created than solved by the entity generation and easy CRUD layer.

Hopefully I'm just being dense and there are some workarounds for some of these issues, but reading a number of other posts on this 'detached' issue at least it doesn't appear so... Apparently even the ADO.NET Entity framework doesn't address this issue. <shrug>

 

Well...back to your regularly scheduled DAL.


 
Categories: ORM | Software

January 10, 2008
@ 12:03 AM

crInetaPresident While much of the political discussion last week surrounded Iowa and it's first in the nation caucus there was a small, yet important election that was rarely covered.  As the CNNs and Fox News shows and other non-stop cable news channels have since packed their vans and are now focusing on "Super Tuesday" and whether Barack can bet Hillary, there was a much (much) smaller battle that recently took place in the frozen corn fields of Iowa that barely received any coverage.

This last Monday, after many campaign promises, debates, town hall meetings, and baby kissing, Iowa voted their conscience electing me to serve as the new Cedar Rapids Ineta president for 2008, proving once again that negative campaigning and accepting money from lobbyists does not resonate with the ethical voters of Iowa.

To those of you who voted for me and supported me during this tough campaign season, thank you.  To my wife who has been at my side during the arduous process, the late night strategy sessions, and the countless debate preparations, thank you.  To my loyal volunteers who stood in battle with me for a cause that we truly believe in, thank you.

It is truly an honor to server you in 2008 and I look forward to it.

Tim Barcz

CRIneta President


 
Categories: Ineta

Over the past year or two I've really tried to improve coding abilities by thinking on objects.  By talking about, and programming, real-world objects you can reduce the impedance with clients when discussing the problem.  I'm not alone, Karl Seguin comments about domain objects in a recent blog series about the foundations of programming:

Anyone who's gone through the above knows that learning a new business is the most complicated part of any programming job. For that reason, there are real benefits to making our code resemble, as much as possible, the domain. Essentially what I'm talking about is communication. If your users are talking about Strategic Outcomes, which a month ago meant nothing to you, and your code talks about StrategicOutcome then some of the ambiguity and much of the potential misinterpretation is cleaned up. Many people, myself included, believe that a good place to start is with key noun-words that your business experts and users use.

While looking at LINQ over the last few days I've become disappointed to find out that many-to-many relationships aren't supported.  Sure you can hack you're way around it, but anyone can hack their way around anything.  If you question whether or not it's a hack, consider all the language features implemented to make LINQ work and still many-to-many isn't supported.

LINQ requires an intermediate class in order to do a join.  In the real world there is no such this as OrderProductJoin or TopicCategoryJoin, so why do I have to have that object in code?  That smells funny.

I feel the pain of Hamilton Verissimo, the founder of CastleProject, when he comments about FUD surrounding Castle.  ActiveRecord, as an ORM, has respected the domain object for quite some time while providing Many-to-Many support.  LINQ however requires an DBML file, the usage of DataContext everywhere, and doesn't support many-to-many joins.

David Hayden, respected blogger and Microsoft MVP defends LINQ to SQL but adds:

DLinq is perfect for those developers who focus on small applications and Microsoft-related technologies.

After having used both NHibernate/ActiveRecord and LINQ, the clear winner right now in my mind is NHibernate/ActiveRecord, despite LINQ having the backing of Microsoft.  ActiveRecord respects the domain model allowing you to talk about objects with a shallower learning that LINQ.


 
Categories: Musings | ORM | Software