Oct 01

I’m currently reviving a mobile application that I started a long time a go.

Since that time, I downloaded lots of useless software on my mobile phone…no more space to deploy my application. I tried to deploy directly on the storage card but the way to do so did not pop immediately. I googlized around this topic to get the tip and did not find anything. 

The tip is simple: go in the properties of your .Net mobile project, in the “Device” tab, you click on the button on the right of “Output file folder” and select “Root folder”, then enter the full path “\Storage Card\Program Files\MyApp”.

Jan 24

I’m using Rhino Mocks and I’ve seen the real great feature “Ability to joke” when this (click on the image to see it as my theme does not have a main column large enough):

RhinoMock 1!=1

Finally my test was just wrongly written. I’m using RhinoMock and I’m very pleased with it, so I was really surprised by such message.
Ayende, don’t ask the step to reproduce of this, I’m not able to reproduce it and I did not backup my program at that time…sorry about that.  The only think I can tell is that I was playing with 2 threads in this test…and the test was not testing what it was supposed to.

Jan 15

I recommend 2 great articles on this topic:

Oct 16

Robert Cooper talked about why he hates BPM products but love BPM: XML is not a programming language! I fully agree on this assertion and you can read about a post (in French) I’ve written on this.

This is true for BPM, but also for many enterprise software (see this post from Ayende about what is an enterprise software): they pretend/tend to be highly customizable to be able to match the enterprise processes without requiring high development skills…this usually true, but the drawback is the maintenance, upgrade and evolution capabilities which are usually also very poor.

I think Designer Oriented Architecture for non-techy (non-techy does not mean “no skill” at all…see later in this post) is not compatible with maintenance, upgrade and evolution capabilities. For the rest of this post and as I’m lasy, I will talk only about maintenance but you can replace by “maintenance, upgrade and evolution”. The incompatibility is simply due to the fact that a non-programmers have in fact development skills but are Morts (see Jemremy’s post which I totally agree on), meaning they have to build/customize applications to fulfil some requirements and they learn/use only what they need to do this: “Mort is a developer who only learns just what he needs to complete his project, on the project”.

Microsoft Visual Studio and .Net framework are addressing this very well. This is in itself not a bad thing, but it prevent maintenance. Evan Hoff catch it in his post. Clearly: Designer Oriented Architecture goes against maintainability…and Enterprise Softwares (or BPM products) have not yet understood this. Today, I’ve seen high level requirements for new Enterprise Software platform for an external company with 3 requirements inside the same slide: “Easy to build quality application” (where quality means testability and maintainability), “High level of extensibility without preventing upgrade” and “Ease tayloring, configure and manage applications”.

I can understand people that are looking for a Ferrari able to do cross over and consuming less than 1liter of fuel per 100 kilometre…but I’m doubtful on the success of the search.

Quality, maintenance, ease of upgrade, evolution capabilities are just incompatible with tayloring done by Mort.

Oct 04

Scott Guthrie announced that microsoft will release the .Net framework libraries later this year.

The licence will limite the usage of these sources: you can only use them…no bug fix, no enhancement and no new features. This will only help to understand some unexpected behaviour…but only this. Especially for bug fix, this licence is a strong limitation. The best choice then is to use Mono :).

Microsoft has a strange definition of “Open” and it seams to be a trap for real open source project as mono. Steven J. Vaughan-Nichols highlight it there

Jun 14

Reading an interesting post from Dwhittaker, I think the problematic is broader. It appears through the question on how should I build my entity from the DAO object. To my opinion, the DAO object should be as much simple as possible…not smart at all. The best is to generate it using byte code generation for example using annotation in the real entity object for example, buit this should be addressed into another post ;-)
If the DAO object is generated, then the entity (or value object) can be build by generic code using reflection for example. Then the “real” question raise: what about information lost during the entity creation. Let me explain with a very simple example: waht about the Id of the DAO object? It has absolutely no sense in the entity object, but is required when the application push back the entity object to the persistence layer to store changes. This topic is highlighted in this post of Ayende and expose another example: detection of changes.

The problem is about keeping track of information on an object (the entity) without exposing it. more over, this object can be moved from a process to another (or webservice). This sounds very close to the state in ASP net pages, which provide a very good answer. So, I wouold advocate to store a state in the entity object that is crypted and reused by the persistence layer.

May 22

Je viens d’acheter un smartphone: le Qtek S200. Je décide alors de m’intéresser au développement sur ce genre de plateforme, et j’en profite pour installer Orcas dans l’idée de regarder ce que SilverLight donne sur un smartphone. Première déception, il me faut 62 Mo pour installer ce qu’il faut sur le smartphpone, et je n’en ai que 47 car je n’ai pas pris d’extention mémoire. Je décide donc de me restreindre à un développement “classique” d’une application .Net windows forms sur le smart phone en utilisant bien entendu le .Net Compact Framwork 2.0.

J’opte pour le développement d’une application de gestion de cave…et oui le vin est aussi une de mes passions. L’intérêt du Qtek S200 est sa compatibilité wifi: afin d’avoir l’application la plus légère possible, je décide d’utiliser la liason wifi entre le smart phone et un web service hostant la base de donnée. Premier problème: l’environnement de développement que j’utilise ne permet pas d’exposer le web service a autre chose que “localhost”. J’avais déjà voulu installer IIS il y a 1 an, mais j’avais eu des problèmes d’installation. Je m’y remet et bien sur IIS refuse toujours de s’installer car il ne trouve pas staxmem.dl_. Je décide de rechercher a nouveau sur internet si une solution existe (il y a 1 an, je n’avais rien trouvé)…et là, quelqu’un a enfin la solution. Donc merci a reyluv qui a trouvé la ligne de commande qui récréée la métabase de sécurité:

esentutl /p %windir%\security\database\secedit.sdb

Il est assez déplorable que Microsoft n’a jamais documenté cette solution (ou alors elle est bien cachée) et propose de réinstaller XP SP2…rien que cela! Chose intéressante, il semble que CriketMaster (lire le thread sur la solution) ai un desktop HP…ce qui mon cas…est-ce une mauvaise installation de l’OS d’origine sur ce genre de matériel..???

Bref, mon IIS fonctionne…sauf que .Net 2 ne fonctionne pas! En cherchant un peu (merci google encore), il semble que .Net ne fonctionne correctement au dessus d’IIS uniquement s’il a été installé après IIS. Il suffit donc de faire un “repair” sur l’installation de .Net Framework 2.0 pour que tout roule.

En conclusion: google est peut être le support microsoft non officiel le plus efficace que je connaisse.

Apr 24

Here is an updated piece of the nikhilk sample application demonstrating .Net Ajax features. The initial sample application was using atlas framewokr (beta version). I needed the thumbnail features on top of the release 1.0, which requires some update. I wanted also to validate the control as a user control inside a master page. Feel free to use this sample, and do not hesistate to ask if you have problems.

Mar 29

This post is the third of a serie of posts on persistance stack.

In the previous posts, I describe my humble opinion of the layering for a persistance stak for an entreprise application (for smaller application, there is no problem to mix or get ride of layers). Most of the folks talking about a persistance layer are often forgot to talk about the various services that are providing a strong added value to the applications build on top of it. So, this post is dedicated to some of these services. I’m not saying I will be exhaustive (because I simply do not know all of the potential servics that a persistance stack could provide) but I will try to go beyond what I usually see on this topic.

What is a persistance stack service?

I should;maybe say: why are they so often forgotten? I think this is because we start to deals with business requirements that are not so attractive to technical folks that prefer challenge on the core of the persistance stack. IMHO, a persistance service is an engine that can fulfill extra business requirement from a persistance perspective. That means it’s not mandatory at all from a persistance stack to provide such services as they can be provided through the applciations themselves. The huge benefit to integrate them in the persistance stack is to allow consistent and rapide application development without derundancy in code.

In this post i will details services as query language, scripting, database creation and upgrade, workflow engine, archiving, versioning and partitioning. Some of this service are low level services … I mean they require access to the lower layers of the stack (even if their configuration can be localised in the same area than configuration of higher level services).

Query language

Even if lot’s of persistance stack provide a query language, I do not concider it as a core service of the persistence stack as these persistance framework are usually presenting it as a tuning step or a way to workaround the regular usage of the framework for complexe request. Despite this, this is probably the persistance service having the strongest capabilities and is often a requirement for the other services as partitioning for example. The aim is provide a query pseudo SQL to the framework. I don’t think the key feature of this service is to provide an RDBMS independante query language…I’m sure most of you won’t agree. To me the key feature is to provide a way to provide to the application administrator a way to go beyond the application limitations…if it’s RDBMS independant: great, but we all know that even if SQL is a standard, all implementations are differents and I don’t talked about opitimization! This service is so powerful that it should be

Partitioning

This service is a low level service, that means it’s customization requires the user to use the Query Language as it expose more the database schema than business objectes. Partitioning is a way of doing segregation on (read or write) access to entities (I should say main record of entities). This is tipically a where statement.

Workflow Engine

The persistence layer will trigger this engine to handle integrity check and process steps.

 

Mar 23

Cette question refait encore surface (cf billet sur slashdot). Il est incroyable de voir tant de guerres de chapelles avec des arguments totalement loin de la vraie problématique. La question classique est “En quoi l’assembleur peut apporter quoi que ce soit alors que tout le monde utilise un langage de haut niveau style Java ou C#?”.

Primo, tout le monde n’utilise pas ce genre de langages et l’assembleur est parfois totalement indispensable dans certains domaines (drivers, pixel shader,…etc). Secundo, même en dehors de ces domaines, l’assembleur ou plus précisément des connaissances en assembleur sont très utiles. On peut sans problème coder sans avoir la moindre connaissance de l’assembleur…c’est vrai, mais il assez impressionnant de voir comment des Bac+5 se plantent sur des problèmes simples genre listes chainées. Ensuite, quand arrivent les problèmes de performances, consommation mémoire, un développeur qui ne sait absolument pas comment cela se passe en interne, sera complètement démuni. On pourrait re-phraser la question initiale en :”Quel est l’intéret de connaitre les pointeurs quand on programme en Java ou C#?”. La réponse est la même: on peut faire sans, mais on se casse les dents sur des bugs tout bêtes et on tombent sur des problèmes de consommation mémoire.

En conclusion, le langage assembleur n’est plus vraiment utilisé (saufs domaines spécifiques a ne pas négliger) mais sa connaissance (ou tout du moins la connaissance des méandres internes des langages de haut niveau) permettent d’éviter beaucoup de problèmes. Les développeurs ayant cette connaissance ont aussi en général un très bon niveau algorithmique et savent optimiser et coder correctement. Ce n’est donc pas indispensable mais reste la preuve d’un niveau élevé.