Wednesday, December 20, 2006

Wiki, meet MSDN. Hurrah for the MSDN Community Content


Most of you probably know the Microsoft MSDN, and if you’ve ever programmed for the Windows platform you have most probably used the library. It provides information on Microsoft Products (COM, MFC, .Net …) as well as more general knowledge (programming practices, networking, multi-threading …).

I definitely like this library; however some articles are poorly documented or feature no or few examples. Until now you had no choice but to go take a look on other websites for those examples you desperately need.

This time may have come to an end with the new Microsoft step toward the social web: MSDN Community Content or MSDNWiki. As of now anyone can add content to the MSDN library. However don’t get fooled by the name, it’s not a Wiki, you can’t add article, remove others contributions, you have to login with a live ID… it’s just a way for developers to share their knowledge inline.

If you want to try, just look for the “Add new Community Content” at the top and bottom of each page.


More information on the MSDN page about MSDNWiki

EDIT (12/21/2006) :
MSDN is a powerfull tool, when you can acces it. Here is what I can see of MSDN today : :

Saturday, December 16, 2006

Reading office 2007 file with 2003

With the recent release of the new Office 2007, one may expect more and more .docx, .pptx , ... file to be exchanged.
For those already using 2007 no problem; but most people will wait before switching to 2007 (maybe for a new computer purchase). So Microsoft has provided us with a plug-in for Office 2003 which enables us to read/write .docx and other new file formats.

You will find this genuine tool there on the micosoft website.


Another tip: *.docx, *.pptx, files are just a bunch of .xml and image files archived in a zip file. When such a file is corrupted, one may try uncompressing the file and modifying the corrupted xml before archiving everything back.

Friday, December 15, 2006

Java meets Vista

Here it is finally, the new Java Standard Edition 6. According to Sun this version brings a lot of new or enhanced features. One may think of the enhanced Web Services and AWT/Swing (I plan to take a look at those two).

However some features are not only intended for developers, support for Windows Vista is such a feature.

Yes, you may finally run java (application or applet) on your Windows vista without getting upset at the “The color scheme has been changed to Windows Vista Basic” stuff. Hurrah for Java under Aero Glass.

Well, I am still waiting for some other applications to become fully Vista compliant (thinking of the Zen Creative Suite right now) but that’s a huge step forwards considering the number of java Web Sites and Applications out there.

You will find this new release

http://java.sun.com/javase/downloads/index.jsp

PS : Only Java Standard Edition (JSE) is available in version 6, Java Micro edition (JME) and Java Enterprise Edition(JEE) 6.0 has not yet been released.

Wednesday, November 22, 2006

First English post

I have finally decided to write in English instead of French. Among other motives is the fact that I am soon going to the USA for a 6 month internship. I will leave in February for Centreville (just south of Washington DC) to work on a Service Oriented Architecture. I can’t wait, both to work on a SOA and to live in the USA.

You may have also noticed that I haven’t written any post since quite a long time. I hope I will be able to post more often in the future.

I haven’t had (neither did I took it) to write post because I have been involved in time consuming projects lately.
  • An Instant Messaging Protocol and a .net client for this protocol. This protocol offers some interesting (well, at least, so I Hope) features. It’s a server less protocol with automatic discovery of chat partners on the LAN. It also (we are on working on it) implement security features (symmetric and asymmetric encryption with AES and RSA). A java client is also being developed by a friend mine. This project is open-source. A .net library is available for those who want to create quickly a new client without worrying for network programming. No file release has yet been made ( I plan to do one in a few days) but you can check the protocol definition and the source code at : http://sourceforge.net/projects/chat4lann/
  • I am working on a new website to host this blog. The blog you are currently reading is hosted by blogger.com, the design blogger’s as well. My new website will host two blog (personal and professional) along with a place to publish my articles. I am currently working on the look of this website, and then I will work on the database. I plan to buy a domain name for this website but I am still looking for a good DN. What about joesspot.com ?

Wednesday, July 26, 2006

Le nouveau C++ : C++0x

Le C++ standard commence à se faire vieux. Bien que la version actuelle ne date que de 1998 (C++98), de nombreux défauts commencent à se faire sentir. Après avoir gouté aux joies de langages plus faciles d’accès (C# et Java *), il est difficile de retourner au C++ standard.

Bien sur les avantages du C# et Java sur le C++ s’expliquent par le fait qu’ils ne soient pas comparables… Les deux premiers sont plus faciles d’accès en premier lieu parce que ce ne sont pas que des langages, ce sont aussi des plateformes de programmation complète (les machines virtuelles Java et .NET avec les collections d’objets associés). Ainsi, pas besoin de chercher quel API utilisé pour réaliser ses GUIs, parsing XML, accès aux web services, … tout ce qu’il faut pour réaliser la base de ces programmes est fournie. Le C++ standard lui nécessite de nombreuses librairies avant de pouvoir réaliser quelque chose. C’est tout à la fois la force du C++ (possibilité de l’utiliser pour faire à peu prés tout et n’importe quoi sur n’importe quelle plateforme, une fois munie de la bonne libraire) et sa faiblesse.

Cependant, je pense que même sur un plan plus comparable de nombreux reproches sont à faire au C++. L’absence de gestion automatique de mémoire, une syntaxe parfois lourde (essayer de faire un template de template puis d’itérer dessus).

Bref le C++ en l’état n’est clairement pas mon langage de choix pour le développement. Cependant le comité de standardisation du C++ s'est remit au travail après quelques années de silence. Ce comité est en train de travailler sur les spécifications du nouveau C++, le C++0x avec peut être le 9 en lieu et place du x (encore 3 ans à attendre …).

Cette nouvelle déclinaison du C++ me parait très prometteuse. Le créateur du C++ (Bjarne Stroustrup) fait partie du comité et milite activement pour l’intégration de plus de librairies :

  • gestion des Threads

  • expressions régulières

  • ajout de containers à la stl actuel

  • fonctions mathématiques

  • pointeurs intelligents

  • éventuellement mais peu crédible GUI

  • ...

Bref beaucoup de choses très utiles, notamment les « smart pointers » (sans doute issue de la librairie de Boot) qui offre une méthode pour la gestion automatique de mémoire. Certes le comptage de référence (si je ne m’abuse les pointeurs intelligents ne savent guère faire plus en matière de gestion automatique), est moins simple qu’un garbage collector (Java, C#, …) mais cela reste un grand pas en avant.
Ce nouveau standard doit aussi apporter de nombreuses facilités syntaxiques :

  • fonctions anonymes

  • for-each

  • itérateur de type « auto »

Ces « Syntaxic sugar » devraient grandement améliorer la facilité d’écriture et de lecture du code source.
Pour en savoir plus :


* : J’ai volontairement omis de parle de langages encore plus haut niveau comme le python, tout d’abord parce que je ne les connais pas suffisamment, mais aussi parce qu’ils ne me paraissent pas destiné aux mêmes usages.

Wednesday, July 19, 2006

L’avenir de Microsoft et de ses APIs

Je suis tombé par hasard sur un article très intéressant d’un blog très bien fourni. Ce billet discute de Microsoft et de ses APIs (WIN32, .NET, COM, …).
Un article très général et sans aucune discussion technique. Il revient sur le passé et la bataille MS/APPLE/SUN pour finir sur les derniers développements. Il conclut sur le fait que l’avenir c’est le WEB 2.0 (sans le citer, c’est un article qui date de 2004) et non plus les applications riches locales.

Que sa conclusion soit pertinente ou non je vous engage à lire cette article très long dont l’auteur(qui a notamment créé Visual Basic Pour Applications quand il était encore chez Microsoft) est extrêmement bien renseigné.



Vous trouverez cette article ici :
http://www.joelonsoftware.com/articles/APIWar.html
Quand vous l’aurez fini il vous restera à lire les autres billets tout aussi intéressants :
http://www.joelonsoftware.com/

Wednesday, July 12, 2006

Le C++/CLI, et le Managed C++ s'en vas

Le Managed C++ (ou plutôt Managed Extensions C++ : MC++) est un moyen de concilier .NET et C++, proposé par Microsoft dans les frameworks 1.0 et 1.1. Ce langage proposait grâce à la technologie Just In Time d’exécuter du code non managé (C++ standard) dans des assemblies. Le MC++ permettait ainsi aisément de profiter des facilités du .NET au sein de projet C++ standard et ceux avec un impact de performance minime (quelques % d’après Microsoft, qui n’est certes pas le plus objectif pour en juger).


Un exemple : vous possédez un ensemble de classes réalisant des fonctionnalités métiers. Si ces classes sont énormes vous n’envisagerez sans doute pas leur réécriture dans un langage purement .NET (C# …). Le MC++ était alors la solution parfaite.


Bref une très bonne initiative qui encourage réellement la transition vers le .NET de manière plus douce, cependant de nombreux défauts entachaient le C++ :

  • Les assemblies générées n’étaient pas « pure » c'est-à-dire que leurs exécutions n’étaient assurées que par le framework Microsoft. Les autres frameworks (Mono par exemple) n’étaient que très partiellement capable de les exécuter.
  • La syntaxe était une horreur. Même symbole pour les références d’objets managés et les pointeurs natifs, ajout de __ devant les mots clefs managés, …
  • Séparation complète des fonctionnalités managées et natives.

Et bien bonne nouvelle, à l’occasion du passage à la version 2.0 du .NET (et suite aux remarques des utilisateurs) Microsoft a revu sa copie pour nous présenter le remplaçant du MC++ : Le C++/CLI (Common Language Infrastructure).


Ce nouveau langage standardisé par l’ECMA améliore grandement les choses (au détriment de la compatibilité, uniquement partielle, des projets MC++ et C++/CLI). Les points ci-dessus se voient ainsi réglés.

Bref si vous voulez profiter des facilités du .NET au sein de vos projets C++, pensez à ce nouveau langage.


Plus d’informations : http://msdn.microsoft.com/visualc/default.aspx?pull=/msdnmag/issues/04/05/visualc2005/default.aspx

Saturday, June 10, 2006

GTLRegEx, notre outil de gestion d'expressions régulières

Savez vous ce que sont les expressions régulières ?
Pour faire simple c’est un format d’écriture permettant d’effectuer des recherches très précises sur des champs textes.

En tout cas, que vous connaissiez ou non les expressions régulières, le logiciel qu’un ami et moi avons réalisé peut vous être utile.

Il s’appelle GTLRegEx (Generate Test and Learn Regular Expression) et vous le trouverez à l’adresse :
http://gtlregex.sourceforge.net

Un détail qui a son importance, le code source (en Java) est ouvert et vous le trouverez sur sourceforge.net.

Monday, June 05, 2006

Wiki pour LabUTC, le club nouvelle technologie UTC

Comme dit dans mon dernier post, je voudrais monter un club dans mon école. Un club qui serait destiné à parler de nouvelle technologie, notamment les technologies Microsoft (.NET).

Après m’être assuré qu’un certain nombre de personne était intéressé voila l’étape suivante dans la réalisation de ce projet. La publication d’un Wiki destiné à accueillir l’opinion des gens sur ce que doit faire ce club.

Vous trouverez le wiki de LabUTC à l’adresse suivante.

Wednesday, May 24, 2006

Microsoft Student Club et Microsoft Certified Programmer

Dans l’informatique une des grandes divisions peut se résumer à Microsoft contre les logiciels libres (Linux, The Gimp, Open Office, …). Un géant représentant du capitalisme américain contre un esprit communautaire et libre. Cette division n’est pas le sujet de ce billet. Je tiens seulement à signaler ici qu’en dépit de ces (nombreux ?) défauts, Microsoft apporte aussi beaucoup de bonnes choses.

Ainsi ais-je beaucoup travaillé ces derniers temps avec le framework .NET (en c# et uniquement sur les Windows Form). Je ne peux m’empêcher, après avoir utilisé ce framework, de penser qu’il représente vraiment un atout pour nous autres programmeurs.

J’en viens donc à ma grande question du moment, me faut-il m’engager plus en avant dans la voie Microsoft (le côté obscure, dirait certains) ?
  • le passage d’une certification Microsoft sur le C# (pour devenir MCP donc) me sera il utile sachant que le travail d’un ingénieur en informatique n’est pas censé être de coder ? Oui mais malgré tout un ingénieur commencera toujours par coder. Bref il me faudrait trouver une société qui acceptera de me payer ma certification (peut être en échange d’un petit développement pendant mes cours).
  • Deuxième point que j’envisage de plus en plus sérieusement, même si il ne me reste plus qu’environ six mois à passer dans mon école, pourquoi ne pas créer un club centré sur les technologies Microsoft (enfin plus précisément le framework .NET). Je pense que ce serait une expérience grandement appréciée par des futurs employeurs. Il ne reste plus qu’a trouver assez d’adhérent, des projets intéressant pour ce club, et voila…


Des idées pour créer ce club ?

Monday, May 15, 2006

Etre un développeur informatique

Bonjour, juste un petit post rapide pour présenter ce superbe site :

http://dchaffiol.free.fr/dcollage.htm

Crée par un ingénieur informatique il regorge d'informations pratiques (ce que cache les dénominations dans ce corps de métier, comment demander une augmentation, comment quitter une SSII, s'expatrier, ...) et de nombreux exemples.

L'aprés POO : la Programmation Orientée Composants

De nos jours tous les programmeurs savent et pratiquent intensivement la programmation orientée objet (POO). C’est une méthode de conception effectivement très mature, il est possible de mal l’utiliser (mauvais choix de granularités des objets, relations mal définies), mais armé d’une bonne analyse tout doit bien se passer.
La POO à sans doute été un pas en avant énorme (passé du C au C++ représente un soulagement assez important), les programmes sont tout de suite beaucoup mieux structurés et compréhensibles si les objets sont correctement choisis. Cependant les enseignements de POO (en général et en particulier dans mon école l'UTC) n’insistent guère sur la notion d’encapsulation.

La Programmation Orientée Composant
Un objet c'est bien, mais que diriez vous d’un objet boite noire pour lequel vous ne verriez que un port de connexion (une interface). Ce concept est appelé Programmation Orienté Composant (POC), en effet un objet muni d’une interface est appelé un composant.
Pour bien comprendre ce principe de composant il vous suffit d’imaginer que vous créez un port matériel bien défini et sur lequel vous vous êtes mis d’accord avec les utilisateurs avant toute conception du composant en elle même. Les représentations graphiques des interfaces (en analyse) rappellent d’ailleurs ce concept. Ce port permet aux utilisateurs de se connecter à votre boite noire sans en connaître le contenu.

Les avantages premiers:

  • Un meilleur travail en équipe, l'ensemble des interfaces est crée au cours de l'analyse, chacun peut alors travailler sur ses composants en adressant ceux des autres membres de l'équipe. Même si l'implémentation des autres composants n'est pas fini, l'adressage est valide.
  • Vous pouvez facilement ajouter des fonctionnalités à vos composants, tant que vous ne touchez pas à l’existant les autres composants pourront continuer à se brancher sur le votre.
  • Tout changement d’implémentation restera transparent aux autres composants si l’interface n’est pas modifiée.
  • Vous pouvez distribuer votre composant sans fournir son implémentation (distribution de composant métier que vous ne voulez divulguer), seul l’interface est visible à l’utilisateur de vos composants.

Et encore plus
En poussant ce principe ce principe plus loin, deux autres avantages apparaissent :

  • La possibilité de distribuer physiquement facilement ses modules, par exemple la technologie DCOM de Microsoft permet de faire appel à des composants situés sur un réseau
  • La possibilité de mettre en place de meilleures méthodologies de tests. Vous pouvez créer des Modules de tests qui viendront se brancher sur vos interfaces afin de tester les réactions de votre composant. S’ouvrent alors à vous les joies du « Unit Test » et « Test Driven Devellopement » (j’en parlerai dans un futur billet)

Pour finir, il est vrai que l’utilisation réelle de POC n’est pas triviale. Définir les interfaces qui seront implémentées avant même l’écriture des blocs métier peut paraître ardue. Je pense qu’il faut une certaine expérience de génie logiciel avant d’être capable de réaliser dès l’analyse des versions définitives d’interface. C’est cependant un travail qui doit porter ses fruits, et puis le temps passé sur l’analyse n’est jamais perdu.

Exemples
Il existe des technologies mettant en oeuvre ce principe depuis maintenant relativement longtemps, vous connaissez sans doute COM de Microsoft. Plus récemment on a aussi pu voir les UserControl du .NET et les Java Beans.
On notera par ailleurs que le C# a était conçue dés le début dans une optique de POC et pas seulement POO.

Capture d'image avec GDI+

Capture d'écran sous Windows

Effectuer des captures d’écrans sous Windows à partir de votre programme est la plupart du temps assez compliqué. Il faut appeler l’api Win32 (fonction bitblt si je ne m’abuse).

Pour appeler les fonctions de l’api il faut utiliser le Plateform Invoke et donc rédiger à la main l’adaptation en .NET des prototypes de fonctions à partir des DLLs de plateformes. On peut toujours aller sur www.Pinvoke.net pour obtenir automatiquement les prototypes. Quoi qu’il en soit moi ça ne me plait pas trop, en effet le PInvoke crée explicitement un appel à une fonction non managée. Je préfère me contenter d’écrire du code managé tant que possible.

La solution, appeler GDI+ pour effectuer sa capture. Un petit exemple :

Bitmap memoryImage;
Rectangle rc = Screen.PrimaryScreen.WorkingArea;
memoryImage = new Bitmap(rc.Width, rc.Height, PixelFormat.Format32bppArgb);
using (Graphics memoryGrahics = Graphics.FromImage(memoryImage))
{
memoryGrahics.CopyFromScreen(rc.X, rc.Y,0, 0, rc.Size, CopyPixelOperation.SourceCopy);

}

Et voila vous obtenez votre bitmap dans memoryImage, un bitmap facile à enregistrer dans un fichier, ou à mettre dans un picturebox. Vous pouvez même effectuer un thumbnail grâce à Bitmap.GetThumbnailImage().



--------------------------------------------------------------------------------


Le problème

Si vous essayez de faire une capture d’une vidéo vous risquez d'avoir un problème, il est possible que la vidéo soit en overlay sur la couche GDI+. Auquel cas vous ne récupérerez qu’un carré noir à sa place.

C’est un phénomène que je ne suis pas encore capable d’expliquer en détail (encore un sujet sur lequel il faut que je me renseigne ), cependant j’ai deux solutions à vous proposer pour l’instant :

Désactiver l’accélération matérielle de votre lecteur vidéo
Ouvrir deux lectures vidéo, la première est affichée en overlay tandis que la deuxième s’affichera bien sur la couche GDI+

Visual Studio 2005

Voici la solution à un problème de Visual Studio 2005 très embêtant et que je ne suis pas le seul à avoir rencontré après quelques recherches sur le Net.
Il m'est arrivé deux fois (la première en installant la version finale de VS2005 après avoir désinstallé la Beta 2, la seconde fois de manière encore inexpliqué) que VS2005 semble perdre tout contrôle sur le clavier en dehors des touches alphabétiques :

  • l'ensemble des raccourcis clavier disparait (et la liste des raccourcis et complètement vide)
  • Les flèches de direction, touches BackSpace, Enter, ... ne répondent plus

Vous vous doutez bien que la productivité en prend un coup. Les solutions que j’ai trouvées pour ma part :

  • soit en le désinstallant puis en supprimant tout les éléments (dossiers, clés) laissés derrière [solution pas très fine il est vrai]
  • soit en tapant dans "devenv /resetuserdata" dans la fenêtre exécuter


En espérant que vous n'ayez pas à vous en servir !

Premier Message

Petite présentation pour commencer ce blog, Jonathan 21 ans étudiant en informatique à l’UTC, principalement intéressé par les technologies Microsoft récentes (.NET ...) en ce moment.

La suite sur moi plus tard, peut être.

Mon principal objectif ici est de réunir des petites informations et astuces que j'ai pu trouver en matière informatique. Premièrement pour les partager avec les personnes que cela peut intéresser mais aussi pour en garder une trace pour moi même.