Marius Gheorghe

Building software : make it work, make it good, make it fast

Windows Phone 7 development

Not much time for blogging lately. Sigh. Anyway, from my previous post it should be clear that i am working on a WP7 project. The app i am working on should be up in the marketplace at the end of October when the phones will be released.

Here are a couple of comments related to WP7 development :

- don’t treat it as a toy. If you approach the platform with the “desktop developer” mindset you will fail. Hard.

- think a lot about usability when designing the UI of a mobile app.

- understand the app lifecycle and the various performance tradeoffs.

- it’s Silverlight 3 with phone specific additions. You can use some stuff from Silverlight toolkit but don’t count on too many things working out of the box. Look into panorama & pivot controls. They are very useful in a lot of UI scenarios.

- the “runtime” (compact CLR + Silverlight) is pretty fast. For “regular” stuff you’ll never need to worry about performance.

Debug this


var container = new Dictionary<int, List<Tuple<int, string, int, Dictionary<int, string>>>> ();

I'm sure it's very fun to debug the code which is using this data structure.

DataBlock news

Work on Datablock ( continues at a franctic pace. The upcoming release (1.2) will be available at the end of august.
Along with the enhancements (i will talk another time about this) and bug fixes a big noteworthy change :
-.NET 2.0 only.  Mostly for generics (like i already said i'm not entirely happy with the constraints in .NET 2.0 generics) but getting rid of the custom collections along with StringCollections and the like worth it. It's speedier too when compared with 1.1. As long as i'm on this topic....we decided that arrays will still the primary method of returning multiple data ( we can also returned List<TableMetadata> as a conventional sided API for the languages that will support generics......although the generics are CLR compliant i don't expect that most languages will have support for them in the foreseeable future).

  Other new related to DataBlock....well DataBlock will be "the main pillar" of the upcoming codenamed Sunrise business application framework which we will launch along with the .NET 2.0 release. More news about this in the upcoming months.
   We're planning to write some medium size application (with GUI both Windows Forms and ASP.NET) as demonstration for DataBlock.
 (the current one is too small). I will also record a demonstration video for DataBlock  (not everyone has time to read docs ).
 So much things to little time. Got to get back to work.

ClickOnce - death of ASP.NET applications ?

At least ASP.NET applications for the intranet. I confess that i worked
on both Windows Forms and ASP.NET apps. As a user(and also as a programmer)
i prefer the first ones.The usability of the ASP.NET gives a lot to be desired.
The are slow and cluncky.I would choose a normal Windows Application over the
ASP.NET equivalent any time.
  In the intranet scenarios the only advantage of the ASP.NET apps is the deployment.
Deploy on server and forget about it. Update on server and everyone has the latest version.
Not so with Windows apps. It looks like ClickOnce is set to change some of that. I am
saying "some" because i'm not sure that ClickOnce will work in complex deploying
scenarios (for instance installing COM+ applications, adding assemblies to GAC etc).
The only demonstrations for ClickOnce i've seen were some "dinky single window form
app" on Channel9. Btw MS guys, when you do demos, it will give you a WAY better credibility
if you demo with more "Real life" apps instead of toys.
  So, it seems that with .NET 2.0, we will be able to deploy/update Windows Forms apps as
easy/fast as ASP.NET. Will this be the death of ASP.NET apps for intranet ?

I certainly hope so.


Karmencita object query language for .NET released


I have finally released the latest version.  Karmencita is a high level object query language for .NET . It's purpose is to allow easy querying from in memory structured data.

Features :

- easy, SQL like language.

- common, slim API used for querying data.

- supports any IEnumerable data source, DataTables and XmlDataDocuments.

- extensible implementation

- common API but still get results depending on the data source. (for instance when querying XmlDataDocuments we get back XmlElement[]. But if we query a DataTable we get back a DataRow[]).

- supports IComparable for custom type implementation.

Samples :

-query a generic list of Customers :

//get a list of customers
List<Customer> list = ………

ObjectQuery<Customer> oq = new ObjectQuery<Customer>();

string query = “Name=[Marius Gheorghe] and IsMale=true and Age > 10”;

Customer[] custom = (Customer[]) oq.Select(list, query);


 - query a DataTable (the Northwind database products table)

//load the DataTable from the database
DataTable dt = ………

ObjectQuery<DataTable> oq = new ObjectQuery<DataTable>();

string query = “Name=[Salted Pork Meat] and Discontinued = false and UnitPrice > 12”;

DataRow[] rows = (DataRow[]) oq.Select(dt, query);

- query a XmlDataDocument

//load the XmlDataDocument
XmlDataDocument dt = ………

ObjectQuery<XmlDataDocument> oq = new ObjectQuery<XmlDataDocument>();

string query = “Name=[Salted Pork Meat] and Discontinued = false and UnitPrice > 12”;

XmlElement[] rows = (XmlElement[]) oq.Select(dt, query);


The web site is located at

This is free software (LGPL).


Now playing: Amorphis - House Of Sleep