Yesterday, Jeroen van den Bos showed me Sphere Online Judge (SPOJ), a site with almost 1200 (!) challenging programming problems / puzzles, and which allows you to upload a solution in sourcecode form and which is compiled and tested on the server. The site exists for over 2 years already and has over 2600 contestants trying to get to the top. That's right, for every puzzle you solve, you get points and the more points you get, the higher your ranking. .
So apparently some people got a free laptop which was payed by AMD and Microsoft. I say: good for them, getting gifts is always nice. (no, I didn't get one, nor would I have accepted it). However a gift from a company has a side effect: there's always a catch.
A couple of people (Ayende Rahien, Jeremy Miller and David Hayden) started to wonder why Open Source Software (OSS) isn't that big in Microsoft/.NET land, why the 'big' open source projects in Microsoft/.NET land aren't really big compared to commercial competitors or are dying away without large piles of support from the community and Microsoft.
Yesterday, we released HnD, which stands for Help and Discuss, our own customer support system and forums software! HnD has been released as free, open source software under the GPL v2 and uses ASP.NET 2.0, SqlServer and uses LLBLGen Pro v2.0 power for 100% of the data-access functionality.
I'm simply speechless . Today I read Sam Gentile's remark that Vista itself is its own killer app. Reading the article linked above I can't believe Vista can even be considered a forward, as it's definitely a BIG step back for software engineering.
Dennis van der Stelt posted some fine articles about Microsoft's new way of doing communication between applications and services: WCF, how to get started and some background info behind the various elements of WCF. Highly recommended for anyone who wants to know more about WCF, which is now part of .NET 3.0 which has been released last week.
After nagging about it for a long time, it seems Microsoft finally understood that getting a hotfix for VS.NET 2005 was too cumbersome for a lot of people (outside the US, calling PSS isn't a picknick). So they decided to start a pilot program to see if downloadable hotfixes will make a difference!
Simon Hewitt wrote two articles (first, second) about optimizing serialization (binary formatter) in .NET, and they're published on Codeproject.com. The first article discusses serializing data in classes you wrote yourself or other data in classes you have control over, the second article discusses serializing data in datasets and datatables.
Back in november 2005, I reported an issue to Microsoft (and I'm definitely sure I wasn't the only one), which was about slow response from the C# editor when you were editing large files: the cursor/editor couldn't keep up with the typing. Like you were back in the '80-ies on a slow box. Type some text and the cursor was lagging behind tremendously.
Roy wrote a better perfmon tool, Perf+. I haven't tried it yet, and it's still Alpha but it seems to solve the problems every .NET developer runs into with the normal Windows perfmon toolkit. If you need to run perfmon now and then to check whether your .NET code is really that efficient, this could make your life a lot better
A couple of days ago, the community learned that Jamie Cansdale, creator of Testdriven.NET wasn't re-nominated for the MVP title. As an explanation from Microsoft, he received a vague email that in the past year, he apparently didn't do enough for the community to get the award, and also apparently violated some MVP code of conduct. Well, I'm an MVP as well, and after asking around, it appears that this MVP code of conduct is a simple list of rules which looks very much like the one Microsoft uses for their newsgroups.
According to Soma Somasegar's last post, the following is/isn't supported on Windows Vista, Microsoft's OS which has to replace Windows XP:
- Visual Basic 6 runtime and IDE. Supported.
- Visual Studio.NET 2002. Not supported
- Visual Studio.NET 2003. Not supported
- Visual Studio.NET 2005. Supported with SP1 (now in beta) and you've to shut down UAC, till they've fixed that after Vista ships.
Microsoft has decided to make the bootsound of Vista mutable! . See the article on Ars Technica.
Yeah, catchy title, eh? Do I know what it means? No, I don't have the slightest idea what on earth mr. Steve Ball, group program manager for the Windows Audio Video Excellence team (what do these people do?), meant with spirtual side of the branding experience. You can read all about it here: The startup sound in Vista (Scobleizer).
One of the biggest myths in O/R mapper land is about 'caching'. It's often believed that using a cache inside an O/R mapper makes queries much faster and thus makes the O/R mapper more efficient. With that conclusion in hand, every O/R mapper which doesn't use a cache is therefore less efficient than the ones who do, right?
Well... not exactly. In this article I hope to explain that caching in O/R mappers is not there for making queries more efficient, but is there for uniquing. But more on that later on. I hope that at the end of the article, I have convinced the reader that the myth Caching == more efficiency is indeed a myth. Beware, it's perhaps a bit complicated here and there, I'll try to explain it in as much layman's terms as possible.
To work with data on a semantic basis, it's often useful to specify general definitions of the elements a given portion of logic will work with. For example, an order system works with, among other elements,
Orderelements. To be able to define how this logic works, a definition of the concept
Orderis practical: We will be able to describe the functionality of the system by specifying actions on Order elements and supply with that a definition of that element
Well, better late than never . I'm glad it's finally here. Haven't tried it yet, but will do later today .
Say, you have a .NET 2.0 Windows Forms application with one form and on the form one menu strip at the top, you know, very simple. On that menu strip, you have the menu 'Foo' and on that menu you have a menu item 'Bar', which are in .NET 2.0 of type ToolStripMenuItem. You assign a keyboard shortcut to the Bar menu item, say Cntrl+B.
You disable the menu 'Foo', by setting its Enabled property to false. Now it's impossible for the user to click / select the Bar menu item, right?
I switched off anonymous comments, after a truckload of comment spam in the last couple of days. Luckily the CS system contains a moderation system so they don't end up on the blog as comments but it's still annoying as the moderation system mails me the comments.
Whoa time flies! . After 9 months of hard work, LLBLGen Pro v2.0 has been released!
LLBLGen Pro V2.0 comes with a new licensing scheme: it's now licensed per seat, instead of per-department. Current customers of v1.0.200x.y can upgrade for EUR 49.- per developer. (Designer using developers need a license, the rest don't). Of course, every new release brings new features and enhancements, and this version isn't an exception to that ! Below is a summary of the long list of big and small enhancements and new features packed into v2.0:
- Full .NET 2.0 support in generated code and runtime libraries with separate runtime libraries codebase for .NET 2.0, using .NET specific features like generics internally as well for optimal performance.
- SqlServer 2005 server side paging queries now use a CTE based query instead of a temptable based query for optimal performance.
- Support for nullable types for value-type based entity and view fields. (.NET 2.0 targeting code only)
- Support for System.Transactions transactions when applicable (SqlServer 2005, .NET 2.0)
- Support for wsdl schema interpretation logic to have wsdl.exe generate typed stubs for webservices instead of DataSet based stubs (.NET 2.0 targeting code only)
- New feature-rich validation framework.
- Powerful data-projection framework: project any entitycollection or resultset retrieved from a datareader onto any datastructure of any type using generic code.
- Ability to specify scalar queries in expressions, so a subquery inside a selectlist or inside expressions in filters is now possible.
- It's now possible to fetch a query as a datareader. This query can be a stored procedure call, or a query created on the fly. This datareader can then be used further, if required, to project the data onto classes like entity classes, datatables or custom classes using the generic data-projection framework. This makes it possible to fetch entities through a stored procedure call with very a few lines of code.
- EntityView (SelfServicing) and EntityView2 (Adapter) classes added, which are dataview-style objects for entity collections. They support sorting, and filtering in-memory, data projection onto other entity collections, datatables or custom classes. Filtering and sorting is done through strongly-typed, compile-time checked predicate and sortclause objects, which are also used for filters and sorters in database queries.
- Expressions now support calls to database functions (UDF's or system functions). Database functions can accept entity fields or normal values you pass to the function or other expressions (like for example scalar queries).
- Full support for 2-way declarative databinding and design time databinding in ASP.NET 2.0, using the LLBLGenProDataSource (selfservicing) and LLBLGenProDataSource2 (adapter) controls. These controls support (design time) databinding of entity collections, typed lists and typed views and support server-side paging, sorting and filtering. They also support data persistence / retrieval delegation to different methods (by tracking changes into a UnitofWork object), and filtering/sorting based on parameter binding with other controls on an ASP.NET 2.0 webform.
- Full support for design time databinding in .NET 2.0 windows forms.
- .NET 2.0/VS.NET 2005: A set of Debugger Visualizers has been added for a lot of classes in the framework to ease debugging your code.
- support for CF.NET 2.0 and SqlServerCE 3.0
- Oracle support using the Microsoft Oracle provider. This replaces the DataDirect based Oracle support.
- SqlServer 2005: support for synonyms for tables and views, support for User Defined Types (UDT) based on CLR classes, support for NEWSEQUENTIALID() so sequential uniqueidentifier values can be generated by the DB and read back into entities.
- PostgreSql support for PostgreSql v7.4 and up
- Much lower memory footprint of entity collections in memory.
- Entity fetch speed has been greatly enhanced.
- LLBLGen Pro designer is now running on .NET 2.0, using the new Janus Windows controls v3 for windowing and grids.
- Plug-ins can now open their own docked window in the LLBLGen Pro designer
- It's now possible to specify in the designer additional namespaces and interfaces to generate into the entity classes
- Completely new code generation configuration system, which makes it very easy to add/remove/edit the tasks scheduled in the run queue for code generation.
- New template configuration system which makes it very easy to add your own templates to an existing set of templates to enhance or replace existing templates without having to alter any system configuration.
- Much more small enhancements, changes, tweaks and additions.
Several days ago it finally arrived: Applying Domain-Driven Design and Patterns by Jimmy Nilsson! It's Jimmy's latest book and it's great. Well, 'great' is not really the word, it's more a matter of Must Have, it's that good.
It's perhaps a bit strange, to hear from me that a DDD/TDD book, which this is, is a Must Have, but let me explain: Applying Domain-Driven Design and Patterns, is not a book which is written by someone who writes books for a living. It's a book written by someone who writes software for a living. This makes the book so great, because it applies DDD and TDD in a very practical way, as you would do too, explained to you by a master in this field. This means it also discusses potential problems with some aspects of DDD and TDD, how to avoid them or how to deal with them, like you would have to do as well. Simply put: a must have book for software engineers who have to write code, create beautiful software for a living, for software engineers who have to face todays problems when creating software!
Jimmy is a great writer and good teacher too. I find that essential in a book: does the author know what s/he's talking about, is s/he a true bore or is the material taught in a comfortable way? I think Jimmy hit the sweet spot with this book: before you know it you've read several chapters and you've at the same time learned a lot. The style is also nice, it's as if Jimmy sits next to you talking to you, discussing the topics of the book while you're listening and learning.
My best friend Jeroen van den Bos has just posted a great article about why Visual Studio should be part of Windows. Jeroen and I share a long history together and as we're both ex-demosceners, I fully understand his reasoning and I wholeheartly agree with his point: make Visual Studio.NET Express part of Windows Vista.
Sorry for the second rant posting today, but I'm so fed up with this. Microsoft started with a product feedback site when VS.NET 2005 was in beta, and it was received with great enthousiasm, me included. However, I currently have the feeling it's been abandoned, or has been 'evolved' into a site where people can log bugs but they'll almost never result in a bugfix.
George asks about SP1 of the .NET Framework 2.0... Again the details have not been 100% worked out, so don’t take this as an official statement, but I expect SP1 of the .NET Framework 2.0 to be at the same time as Orcas .NET Framework ships.
Jon Skeet, a C# MVP I greatly respect, has written a great article about The 7 Deadly Sins of Software Development. I personally think every software engineer should simply read it and better: should use the knowledge inside the article in their work next week and beyond!
Recently, Scott Guthrie blogged about
using DLinq with ASP.NET.
I read the interesting article and thought... that must be possible today, with code using normal .NET 2.0! So, I started
LLBLGen Pro v2.0 (V2 is currently in beta) and yes, I was able to do everything Scott showed in his article,
with very little effort. The steps I took are described below.
I've to add, LLBLGen Pro v2.0 is currently in beta, so similar to DLinq, it's not yet available in final form, though we hope to release v2.0 of LLBLGen Pro later this month. The beta is open for our customers. The current version of LLBLGen Pro is v1.0.2005.1.
Ok, so let's get to work!
Normally I don't p1mp blogposts of others here, but for my good friend Sahil Malik I'm happy to make an exception . Sahil will be your instructor for everything ADO.NET 2.0 at the ADO.NET 2.0 boot camp. Read more at his blog.
Like I said before, for the near-term I will throw up the occasional interesting article or reposted comment. Perhaps that is all it takes given the number of excellent, good-looking people willing to spend time reading and contributing to the comments. And I'll continue to moderate comments just because occasionally something wildly offensive does show up in the pending queue. So does this mean that this is the end of Mini-Microsoft? For now, yes, but only my end of it. The rest is up to you.
You'd think that by now everyone would have said everything that you can say about Stored Procedures vs. Dynamic SQL, but apparently Eric Wise and Jeremy Miller disagree with that and have started another iteration of this Never Ending StoryTM.
So, now that we've this new CommunityServer 2.1 blog engine at our disposal here at weblogs.asp.net (Thanks guys! ), the big 'let's make my blog look better'-struggle begins again, as .Text skins don't work in CS 2.x for obvious reasons.
There are some issues now with the RSS urls, which are not complete. More people have this problem at the moment, so I hope someone finds out what the cause of this is.
It appears a post only shows up in the main feed if it's tagged with a tag from a small set of tags. Understandable of course.
Test post, to see if this works. Apparently posting through w.bloggar does post the text here, but doesn't seem to propagate the post to the main feed...
Last night, http://weblogs.asp.net has been migrated to CS 2.1, and this of course gives a lot more features to the blogs at this site, including this blog! The skin I had on the .Text powered version of this blog couldn't be migrated as CS 2.x works differently, so I picked this one from the skins available. I'll try to update this skin a bit later on, when I have more time ( at the moment it's a little hectic with LLBLGen Pro v2 in beta now so I hope to have a more custom skin soon, but when I'm not sure. )
(I used the VB.NET notation in the title so it won't nag about illegal characters like < and >)
In .NET 2.0 you'll have this new generic Hashtable variant called Dictionary<TKey, TValue>. It can be used as a Hashtable but now strongly typed and it doesn't use boxing anymore with value types. That's great and all, though there's one thing that's different from the hashtable: retrieving a value with a key that's not there. If the key value isn't present in the Dictionary, you'll get an exception when you do:
MyClass myValue = myDictionary[key];and key is not present in myDictionary, while with the hashtable, you'll get back a null value. See my old blogpost about that.
Hurray! . Microsoft made me a C# MVP again!
First, dig in and have a good read in the comments over at Mini-microsoft: Vista 2007. Fire the leadership now!. It's a good read, though with over 450+ comments, it can be a bit time consuming. While reading the comments, and also the ones in the slashdot threads Windows Vista 5342 screenshots and Microsoft's Not So Happy Family, I started to wonder about some things, which in general come down to the software engineering process coupled to the inevitable sales force.
(Dutch, sorry :)). Morgen (donderdag), vindt er weer een meeting plaats van de Nederlandse .NET gebruikersgroep, dotned, en ik zal daar tezamen met Maurice de Beijer een presentatie verzorgen met als titel: VB.NET vs. C#, the battle. Maurice is een VB.NET MVP en zoals men wellicht weet ben ik een C# MVP en we zullen de strijd met elkaar aangaan omtrent de vraag die ons allen bezighoudt: welke van die talen is nou de beste? Maar we houden het luchtig
Dinsdag en Woensdag ben ik op de DevDays 2006 in Amsterdam, dus voor diegenen die face-to-face over C# of .NET of andere zaken willen bomen, kom langs! Ik ben veelal op de Microsoft stand aanwezig of in verschillende sessies, maar omdat alle MVP's herkenbare kleding dragen die 2 dagen moet het niet moeilijk zijn me te vinden. Tot dan!
VS.NET 2005 comes with a new feature, called Debugger Visualizers. A debugger visualizer is a small piece of code which visualizes the object currently hovered by the mouse in a debug session, of course after you hit a breakpoint. While the VS.NET 2005 debugger is a great improvement over its slow little brother in VS.NET 2003, sometimes you still want to look at the data inside an object in a more convenient way than the debugger shows you. With visualizers you can.
As a developer, IMHO you can't receive a bigger 'thank you' from your customers besides they being very happy than when they write a great review about your work or do the ultimate: write a whole book! . Joseph Chancellor wrote a book about Visual Studio.NET 2005, SQL Server 2005 and LLBLGen Pro called Rapid C# Windows Development. It walks the reader through a complete windows forms application for .NET 2.0 using the AdventureWorks database for SqlServer 2005 and LLBLGen Pro, from scratch to deployment and beyond.
You know what's the most frustrating thing on earth? Writing code for design time databinding. If you've never tried it, and want to feel how frustration can flow throw a human body, please give it a try. If you're lucky you'll do everything right the first time, but as the documentation lacks and the code to write isn't that simple, you probably will make a few mistakes here and there. But that's not that bad, right? You have exceptions with stacktraces and debuggers, right?
Today I was writing some additional mail functionality for our forum software we use internally. This is a .NET 1.1 application written with ASP.NET. I stumbled upon MailMessage.Fields and wondered what it was for so as a Good ProgrammerTM I pressed F1.