# Friday, August 29, 2008

pmcapWhat's the hardest part of creating any open-source project?

No, not writing the code.

No, not helping users in the support forum...

I'll tell you: writing documentation, especially when the documentation is not in your native language. So that's what I have been doing for the last few weeks (or should I say "months"?).

In fact, the documentation project was the only thing that held back the release of ProMesh.NET version 2.0, and today I am proud to announce the release of the first release candidate of ProMesh.NET 2.0, with full documentation online. The documentation still needs a lot work, but at least (almost) all the features of the framework have been documented.

So, what's new in ProMesh.NET 2.0 (RC1) ?

  • Built-in routing engine. Routing can be added at runtime (at application startup), or can be specified using attributes on the controller classes and action methods.
  • Support for calling/rendering view components from templates. View components are special controllers that render a view, which will be inserted in the calling view.
  • Support for any page extension, including none at all (recommended for IIS 7 deployment)
  • New template engine (SharpTemplate.NET) which supports full C# expressions in view logic
  • Ajax validation of forms
  • Performance improvements

Want to check it out? Why don't you start where all the new stuff is: The Official ProMesh.NET Website

Or if you want to go straight to the download: Go to CodePlex

kick it on DotNetKicks.com
Friday, August 29, 2008 10:55:08 PM (W. Europe Daylight Time, UTC+02:00)  #    Comments [3] -

# Thursday, August 21, 2008

I'm a SmartPhone addict, I admit. At the same time, I am very picky about the requirements of a smartphone:

  1. 3G (HSDPA)
  2. Support for push e-mail (MS Exchange Server)
  3. Web browsing (even if it's flaky)
  4. Small form factor

Looking at the list, I may not be that picky after all. Feature number 2 however forces me to use Windows Mobile, and to be honest, I never think twice about that when deciding on a smartphone purchase. So these were my latest phones (in order of purchase)

What do these have in common? Of course, they're all HTC, but most importantly they're all Windows Mobile devices.

You would think progress means that every generation of a technology improves on features, power and responsiveness, but once you mix in products made by some huge company from Redmond, this universal law no longer applies.

Of the smartphones listed above, the fastest one was the MteoR, followed by the S730 and ... well, I almost threw the damn thing into a concrete wall several times since I bought the Diamond 2 months ago.

What the hell is wrong with Windows Mobile? Why, after so many years of development, after so many releases can't they get their act together and create a user interface that does something within, like, 2 seconds of acting upon it. Tapping something on the screen has become an act of blind faith because there's no immediate feedback. You just hope something is going to happen, and when you're in a hurry (you always are, otherwise you wouldn't need a smartphone), you tap again, only to find out that the "system" was already processing your first tap and sending your second tap to the button or link that will be in that same spot on the next screen within 5 seconds or so. If you're lucky, that button will delete an important file or hang up on an important client. Thank you so much, mighty Microsoft.

How does Microsoft expect to win the battle against Apple or Google (Android) in the smartphone world? If they even can't get the basic stuff right. Don't tell me it can't be done on small devices. Apple did it, and from what I've seen so far, Google did it.

One small piece of advice for the Windows Mobile developers: focus on the immediate feedback of the user interface, NOT on features. Rewrite all the user interface handling from scratch, put the user interface code in a dedicated area of memory that can't be "virtualized" (is there such a thing in Windows Mobile?) and get your act together.

My iPhone 3G will arrive tomorrow. Amen. (thank you Apple for licensing MS Exchange for the iPhone 3G)

kick it on DotNetKicks.com
Thursday, August 21, 2008 10:37:56 PM (W. Europe Daylight Time, UTC+02:00)  #    Comments [2] -

# Friday, August 15, 2008

Time for an update on the state of ProMesh.NET, the open-source MVC Web Application framework I started a few years ago. The last public release was almost 7 months ago, and a lot has been changed since then. The original plan was to create a version 1.5, but I decided against that and made it in a full 2.0 release, for several reasons:

  • The framework has a lot of new features, like a built-in routing engine similar to ASP.NET MVC and support for view components
  • Some small changes are required to existing application using ProMesh.NET v1.2

At the same time of the release (late August, early September), the full documentation will be available on a dedicated website about ProMesh.NET.

A quick overview of the most important features in version 2.0:

  • URL routing engine similar to ASP.NET MVC
  • Support for view components (combination of code+templates callable from templates)
  • Configurable template language syntax
  • Full C# expression parser available in the template language
  • New template language syntax (but the old one is still supported)
  • Support for extension-less URLs

Watch this space for the release announcement in a few weeks!

kick it on DotNetKicks.com
Friday, August 15, 2008 7:47:05 PM (W. Europe Daylight Time, UTC+02:00)  #    Comments [1] -

# Thursday, May 29, 2008

It has been almost one year since the last public release of CoolStorage.NET ("cool" open-source object mapper for .NET 2.0), but this doesn't mean the product was dead. A lot of people regularly downloaded the latest builds from CodePlex and I received a lot of great feedback, which finally lead to the release of version 1.2.

Besides a bunch of bug fixes and performance improvements, the new features in this release are:

  • Support for prefetching of many-to-one, one-to-one and one-to-many relations (marked by the [Prefetch] attribute at compile-time or by using the .WithPrefetch() method). This change results in a spectacular performance improvement in most cases where lists of objects with related objects are retrieved from the database.
  • Support for paging at server level. Use the Range() method on the CSList class to get a specific range of records
  • Support for GUID fields (server-generated and client-generated)
  • Support for specifying a context when calling generic CSDatabase.RunQuery() methods
  • New method ToList<T> on CSList
  • New method ThenBy() on CSList (in line with the LINQ methods)
  • New attribute [ClientGenerated] for GUID fields
  • New attribute [NotMapped] for fields that are not mapped to a database column
  • Support for VistaDB 3.x database

Databases currently supported are:

  • MS SQL Server 2000/2005
  • MS Access
  • SQLite v3
  • VistaDB 3.x
  • MySql 5.x
  • IBM DB2

The latest release can be downloaded from CodePlex.

In case you have no idea what CoolStorage.NET is:

CoolStorage.NET is a fully typed Object Relational Mapping library for .NET 2.0.

The main strength of CoolStorage.NET is the ease of use. Most ORM tools still require a lot of type casting and other plumbing to be written, CoolStorage.NET is designed to relieve the programmer from these tedious and error-prone tasks, making it very intuitive to use. It is "session-less", meaning you don't have to keep a connection or session object lying around to access objects in the database.

The main features are:

  • Supports SQL Server 2000/2005, MySQL, IBM DB2, SQLite, MS Access, VistaDB
  • Any existing relational data model can be mapped to CoolStorage objects with minimal effort
  • All relation types are supported: One-To-One, One-To-Many, Many-To-One and Many-To-Many
  • Completely typed object model (no type casts required)
  • Full support for transactions, including .NET 2.0 TransactionScope
  • Nullable columns can be mapped to .NET 2.0 nullable fields or any other value
  • Delayed (lazy) loading of data to minimize database access
  • Selective pre-fetching of all relation types for improved query performance.
  • Powerful and intuitive database-independent object query language
  • Flexible event framework to intercept any event
  • Identity (auto-increment) keys are supported for all database types
  • Support for server and client generated Guid keys
  • Sessionless data access
  • Objects can be mapped to different databases, even across object relations
  • Pageable object collections
  • Extensive support for retrieving aggregate values on collections (count, sum, average, ...)
  • Collections implement IBindingList so they can be used by controls (grids) as a data source
  • Underlying database engine uses optimized and parameterized SQL queries. SQL injection is impossible
  • Built specifically for .NET 2.0, taking full advantage of generics and nullable variables
  • Raw SQL and/or stored procedures can be called on the underlying database without the need for a separate database connection
  • Small footprint (less than 120 KB)
kick it on DotNetKicks.com
Thursday, May 29, 2008 11:28:58 PM (W. Europe Daylight Time, UTC+02:00)  #    Comments [0] -

# Monday, May 26, 2008

Am I the only one who believes a great programming font can boost your productivity and increase your coding joy?

Personally, when I'm using a nice, clean font for my coding, I feel happy about my code. The code just looks better. And I don't mean it "looks" better, but it looks better (catch my drift?)

I have tried a lot of fonts, and for the last few years I've always gone back to Damien Guard's excellent Envy Code R font. It is (IMHO) the perfect font for source code.

Today Damien released "Preview #7" of his font, which is a big step forward: the font looks almost perfect at all sizes. I really recommend it to anyone. And it's free! (he does accept donations, which he really deserves)

The link to his announcement: Envy Code R Preview #7 released

kick it on DotNetKicks.com
Monday, May 26, 2008 12:13:51 PM (W. Europe Daylight Time, UTC+02:00)  #    Comments [7] -