# Friday, November 27, 2009

J'ai déjà parlé de la conférence Microsoft PDC, et plus particulièrement d'une session sur la manière d'écrire des applications modernes avec Visual Studio 2010.

Malheureusement, elle est en anglais. Alors j'en ai écrit les sous-titres ! Plus d'excuse pour ne pas vous remettre à C++ !

Pour voir cette conférence avec les sous-titres, il faut télécharger la vidéo sur le site microsoftPDC au format Windows Media Video, puis télécharger les sous-titres ici sur mon Skydrive (fichier type TXT de 60 Ko). Il faut que le fichier des sous-titres soit dans le même dossier que la vidéo, et qu'il portent le même nom, à l'extension près. Puis, lire la vidéo avec VLC Media player, le lecteur media bien connu. C'est dommage, Windows Media Player ne permet pas à ma connaissance de lire une vidéo WMV avec des sous-titres. Téléchargez VLC ici sur 01net.net par exemple.


Le fichier sous-titres au format SRT (fichier texte de 60 Ko)

Microsoft PDC presentation Visual Studio 2010 C++

Au menu de cette vidéo, qui présente de nombreuses de façons de moderniser du code C++ :

- Comment utiliser Direct 2D très facilement en C++/MFC pour ajouter des animations et effets visuels "à la WPF".

- Comment ajouter des extensions à Visual Studio dans le nouvel outil d'extension de Visual Studio 2010, plus simple et plus puissant.

- La navigation dans le code et intellisense ont été améliorés pour C++, y compris avec des gros projets. Intellisense fonctionnait beaucoup moins bien avec C++ qu'avec C# dans Visual C++ 2008 .

- Comment utiliser les "r-value" et "move constructors" de C++0x pour améliorer les performances des listes d'objets. Je ne sais pas comment on dit "move constructor" ou "move assignment operator" en français ? A ce sujet, petite précision : il existe deux types d'expressions en C++ : les l-values (left-values, à gauche du signe =, qu'on modifie) et les r-values (right values, à droite du signe =, qu'on ne modifie pas).

- Comment appeler très simplement en C++ une méthode d'un Web Service (WCF, SOAP, Ruby, C++...) défini par son fichier WSDL, et se connecter au Web en quelques lignes de code C++. Ici le programme se connecte au moteur de recherche bing.com. (Ne fonctionne que sous Windows 7)

- Comment étendre MSBuild, le système de génération de projet C++, plutôt qu'utiliser un "post build step", beaucoup moins pratique.

- Comment utiliser le designer de ruban de Visual Studio 2010 pour générer une interface ruban C++/MFC sans écrire de code.

- Le nouveau Class-wizard, qui revient de Visual C++ 6, encore plus puissant et plus agréable à utiliser !

- Comment effectuer facilement certains traitement en parallèle et en tâche de fond pour les rendre plus rapides et agréables à l'utilisateur de l'application avec le nouveau namespace C++ "concurrency". Le traitement parallèle rendu simple pour le programmeur !

- Comment utiliser les expressions lambda de C++0x. C'est un élément incontournable de C++...

- Comment C++ est plus rapide, puissant, et précis que C#. Je crois que Boris Jabe n'aime pas beaucoup C# : en effet, en C# on ne pense pas vraiment à la performance ni à la qualité du code généré... en C++ il faut réfléchir un peu plus ;-)

- A quoi servent les shared_pointers de C++0x et comment utiliser des types de données thread-safe en environnement parallèle.

- Comment utiliser le gestionnaire de crash de Vista et Windows 7 pour récupérer les documents non enregistrés après un plantage. En deux lignes de code avec les MFC !

A suivre...

 

Tags
 27 November 2009, 18:10

Il y a pas mal d'applications qui ont été écrites en C++ natif, avec les MFC. Ou bien avec ATL.

La bonne nouvelle c'est que Visual Studio 2010 nous donne les moyens de moderniser ce genre d'application, et de les remettre au goût du jour.

Avant Visual Studio 2010 on se disait :

" Bon, on a cette application C++/MFC dont l'écriture a commencé il y a 6 ou 10 ans. Maintenant la tendance et les derniers gadgets à la mode sont dans .NET : Winforms ou WPF. Alors on va migrer l'application vers .NET. "

Et commençait un long périple qui avait plusieurs issues possibles, selon les cas. Les exemples cités ici sont de vrais cas, seuls les noms ont été changés ;-) :

1ère solution : les devs prennent la décision de tout réécrire from scratch en WPF (ou en Winform) et arrivent à convaincre leur hiérarchie. Effet tunnel, ça prend deux ans. Il faut payer l'équipe de développement pendant ce temps parce que rien ne sort. Et à la fin, si ça aboutit (des fois ça n'aboutit pas), on a les mêmes fonctionnalités qu'avant. Avec un look and feel plus sympa et moderne quand même. Le marketing râle après le développement : "Quoi ?! Il vous a fallu deux ans pour faire ça ? Et on a quoi de neuf nous à vendre aux clients ? On avait déjà toutes ces fonctionnalités avant". Les développeurs ont passé leurs nuits pour tout refaire en C#. Au moins le code est en .NET, et il est propre. Mais ça a coûté très cher. Entrer dans ce genre d'aventure et s'en sortir n'est possible qu'avec de bons développeurs et un excellent encadrement technique.

2eme solution : Le chef déclare qu'il faut faire une migration vers .NET petit à petit, écran par écran. Pour éviter l'effet tunnel. Alors commence une longue souffrance pour l'équipe de développement. Les écrans vont être réécrits en .NET un par un, et intégrés dans le projet C++ natif avec de l'interop. Au bout de quelques semaines, le chef voit qu'il a des boîtes de dialogue en .NET (Winform par exemple) dans son application. Il a l'air content. Mais il ne voit pas l'usine à gaz en dessous. Si certains développeurs comprennent ce qu'ils font et le font proprement, il peut arriver que d'autres ne comprennent pas bien. Réaliser ce genre d'intégration avec de l'interop n'est pas si simple qu'il n'y paraît. J'ai vu du code C++ natif appeler du code C#, qui rappelait du code natif, qui à son tour appelait du code C#. Je n'ai pas vu de projet conséquent de ce genre arriver à terme. Ca a fini dans un mélange infâme de code natif et managé. Mais des fonctionnalités on pu être ajoutées au projet pendant que des écrans étaient réécrits en C#, et le marketing est content.

Heureusement Visual Studio 2010 propose une autre approche avec de nouvelles fonctionnalités pour les projets C++. Une troisième solution devient possible pour mettre à jour une vieille application C++ ! La mettre au goût du jour avec les nouvelles fonctionnalités proposées dans Visual Studio 2010 !

3eme solution : Quelques programmeurs C++ vont pouvoir changer l'interface utilisateur, connecter l'application au Web, ajouter quelques gadgets sexy, gérer le parallélisme pour profiter des processeurs modernes, etc. Et tout ça en quelques semaines seulement.

La conférence sur Visual C++ 2010 que j'ai citée dans le billet précédent sur la conférence PDC résume comment faire. 

Et puis, j'effectue moi-même en ce moment la migration d'un projet C++/MFC commencé il y a... 16 ans ! Il fonctionne toujours, est très rapide, et consomme très peu de mémoire.

Voici une capture d'écran d'un logiciel écrit proprement en C++ depuis 16 ans, toujours en cours de développement avec VS 2010, et qui ne fait pas son âge.

Oui, on ne dirait pas une application dont l'essentiel du code date de plus de 15 ans...

Je détaillerai très bientôt les étapes à effectuer pour une migration de ce genre dans des billets à venir.

 

 

Tags  |  | 
 27 November 2009, 16:47
# Thursday, November 19, 2009

En ce moment se tient la conférence microsoft pour les développeurs, vous le savez sans doute. Les conférences sont déjà disponibles en streaming HD (merci Silverlight !) ou en téléchargement WMV.

Pendant que tout le monde est en train de parler de Silverlight 4, j'ai quand même noté que Microsoft apporte pas mal de nouveautés à Visual Studio 2010 concernant C++, et qu'il y a plusieurs conférences sur le sujet ! En anglais of course...

Le point d'entrée est sans doute la conférence de Boris Jabe, Accelerated Windows Application Development with Microsoft Visual C++ 2010, qui est à mon sens indispensable pour tout utilisateur du langage C++. Oui c'est en anglais mais je peux faire des sous-titres en français si vous me le demandez ?

Ce développeur de Visual C++ passe en revue les nouveautés de Visual C++, de l'IDE en passant par le langage, et parle notamment des nouveautés concernant le développement parallèle. Je me posais des questions dans mon précédent post sur Visual C++ 2010, des réponses y sont apportées. J'y reviendrai.

Par exemple, les expressions lambda de C++0x facilitent réellement la programmation multitâche. Au sujet du partage de variables entre threads, je voudrais citer de mémoire une phrase de Boris qui m'a bien fait rire : "Une manière de faire est de le faire à la C#, en passant tout en paramètre sans se soucier des performances ni de l'occupation de la mémoire" ;)

D'autres conférence sur le sujet promettent d'être intéressantes, Boris Jabe nous en sélectionne quelques unes dans une de ses slides. Slide affichée dans une application MFC, évidemment ! :D


Boris Jabe présente Visual C++ 2010, et sélectionne quelques conférences que tout développeur C++ devrait regarder !

Rendez-vous sur www.microsoftpdc.com pour les regarder.

 

Tags  |  | 
 19 November 2009, 15:00