Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

F# et le "paradoxe de la secte"

F#, fils (ou frère ?) de OCaml, langage intégré à la prochaine version de Visual Studio, fait son buzz ...

Comme toute nouveauté, ne pas connaître c'est risquer de passer pour un idiot à la machine à café (voire à la cantine ou au chinois du coin le midi, l'effet est le même, juste qu'il est plus facile de quitter la machine à café en prétextant un truc urgent à faire que de se lever de table sans avoir fini son rouleau printemps).

De fait ne pas s'informer est en réalité un double crime : d'abord professionnel (rester au courant est un minimum syndical quand on est payé pour faire un job), ensuite social (passer pour un hasbeen est lourd à porter).

Heureusement je veille au grain et grâce à DotBlog vous ne commettrez pas ce double impair !

F# est un langage issu des labos de Microsoft. S'il est très proche de OCaml (au départ totalement compatible) il s'en éloigne par plusieurs points, ne serait-ce qu'en raison de sa parfaite intégration à l'édifice .NET.

Tout le problème avec un nouveau langage c'est qu'il place l'informaticien dans une situation embarassante. Car on attend d'un informaticien qu'il parle d'informatique et qu'il connaisse les outils propres à son métier. Jusqu'à là rien d'anormal. Mais concernant un langage on se retrouve vite devant ce que j'appelle le "paradoxe de la secte" : Soit vous n'y appartenez pas et toutes vos critiques et réserves seront balayées par ses partisans au principe que n'y appartenant pas vous n'en connaissez rien et que votre avis est totalement subjectif, soit vous y appartenez et le bien que vous en direz, tout comme le mal éventuellement, sera considéré comme sujet à caution par tous ceux qui n'appartiennent pas à la dite secte ...

Mais cela pose tout de même un sacré problème : peut-on dire du bien ou du mal d'un nouveau langage de programmation sans avoir écrit un vrai logiciel avec, ou doit-on forcément être capable de réécrire Excel en un week end avec un langage pour pouvoir prétendre donner son avis sur ce dernier ?

J'aime les paradoxes pour le jeu. Mais je n'aime pas l'inconfort intellectuel du "paradoxe de la secte" surtout appliqué à mon métier qui est en quelque sorte une apologie à la Logique et où le monde se règle à coups de If Then Else. Des If avec un Then mais sans Else c'est de la programmation risquée. Et d'ailleurs pour revenir au sujet, F# oblige l'utilisation de Else. Pour cette même raison (c'est risqué). Logique, mais peut-être casse pied à l'usage, il faut voir...

Souhaitant échapper au paradoxe de la secte, je ne vous donnerai pas un avis technique profond sur F#, mais je vous invite à lire une série de billets introduisant la syntaxe de F# pour vous faire vous-même une idée de la chose et je vous propose de venir laisser vos impressions en commentaires afin qu'on puisse en discuter. "Présentation de F#" par Laurent Le Brun

L'article est fait de petits billets, donc c'est facile à lire. En retour c'est un peu sommaire et pas forcément très expliqué, mais on ne peut pas tout avoir. En tout cas ça vous en dira suffisamment pour vous faire une idée, et surtout pour tester la syntaxe si vous téléchargez le langage (ce qui n'est pas nécessaire avec la bêta de VS2010, téléchargeable ici : http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx).

Je vous demandais plus haut de venir ajouter en commentaire votre avis sur F#, autant commencer par donner le mien penserez-vous. C'est oublier le "paradoxe de la secte" dans lequel cela me plongerait malheureux ! Mais comme c'est pour vous, j'ai testé un peu F#, échappant de justesse au paradoxe : ni je n'en connais rien, ni je n'en connais tout, en toute logique le paradoxe ne s'applique plus à mon cas :-) (c'est discutable, je sais, mais tout ce qui est discutable laisse chacun dans la possibilité de croire qu'il a raison !).

Bref, F# c'est jeune, c'est sympa, c'est de la "programmation fonctionnelle" (super classe et dans le vent), donc c'est bien. Peut-être. Ou peut-être pas. A petites doses, sous le couvert de LINQ, au d'extensions de C#, je ne dis pas. Exclusivement et en plat unique et principal, est-ce digeste ? J'ai un doute.

Si La syntaxe F# est "amusante" elle me semble peu lisible, peut-être par manque d'habitude. Toutefois quand on passe de C ou Java à C# on n'a pas cette impression, ni même de Delphi à Java ou réciproquement. Alors première "mauvaise impression" ou bien réalité ? Le problème c'est qu'il faudrait devenir bon en F# pour le comparer et savoir si on l'aime ou pas.. L'horrible et incontournable paradoxe de la secte qui revient ! Donc je suis obligé de rester au niveau subjectif et mon avis n'a rien de technique. De prime abord, je n'aime pas trop la syntaxe donc.

Par exemple il existe un mode "light" (devenant visiblement la "norme"). Dans ce mode la syntaxe devient plus "light" mais au prix que je trouve insensé de donner une valeur réelle à l'espace (le caractère espace, pas starwars hein..). C'est à dire que les blocs ne se déclarent plus avec des mots clés de début et de fin (ou les {} de C#), mais sont uniquement basés sur l'indentation du texte à l'espace près, les tabulations étant interdites.
Utiliser les espaces pour indenter c'est bien, ne pas pouvoir utiliser les tabulations c'est un peu embêtant, mais lorsque qu'on sait que ces espaces ont aussi un impact sur le code ça me dérange un peu. Que le nombre d'espaces devant une instruction puisse modifier son sens ou sa portée m'apparait un dangereux défaut. Mais ce n'est peut-être que par manque de pratique.

Quant à l'esprit du langage, dans la foulée des langages ML comme LISP, ce dernier m'a toujours paru trop abscons pour devenir populaire et jusqu'à lors, en 25 ans de métier aucun de ces langages n'a démenti cette impression et n'est devenu un blockbuster. F# sera-t-il celui qui me fera mentir ? Saura-t-il séduire les foules de développeurs en soif de nouveautés ? Ou bien restera-t-il juste un bel essai boudé par les mêmes informaticiens déjà gavés "jusqu'à là" de trucs nouveaux à apprendre sous .NET (et super géniaux comme Entity Framework, Silverlight, ASP.NET MVC, etc) ?

Wait and see dirais-je sagement pour ne pas trop me mouiller :-)

F# est plein de bonnes idées, mais sa syntaxe et son esprit me semblent difficilement compatible avec l'industrialisation du développement. Caml, OCaml, LISP et consors ne sont jamais sortis de leur cercle d'initiés. L'industrie du logiciel n'en a pas voulu. F# possède-t-il le petit "plus" qui lui permettra d'étendre son influence plus largement que ces prédécesseurs ? Nous verrons bien !

Alors j'attends vos avis et impressions !

Les propriétés de dépendance et les propriétés jointes sous WPF (article à télécharger)

En voilà un beau sujet ! Vous allez me dire qui irait investir deux jours à taper 25 pages sur ce sujet, il faut être totalement givré ! Et bien vous en avez un devant vous (par blog interposé) ... donc pas de remarques désobligeantes sur ma santé mentale, hein !

Certes les propriétés de dépendance et les propriétés jointes de WPF et Silverlight ne semblent pas être un sujet aussi exitant que quelques astuces LINQ ou la meilleure façon d'intégrer de la 3D dans Silverlight 3 (miam!)... Je vous le concède. Mais en revanche c'est un sujet capital car derrière ces propriétés bien particulières se cache l'un des piliers de la puissance de WPF, un mécanisme qui autorise la gestion des styles, des animations, du Data Binding et de bien d'autres choses sans lesquelles WPF ne serait pas ce qu'il est.

Savoir ce qu'est une propriété de dépendance ou une propriété jointe, savoir en déclarer et savoir les utiliser représente une base impossible à zapper.

Alors, pour tout savoir sur le sujet, téléchargez mon dernier article "Propriétés de dépendance et propriétés jointes (WPF/Silverlight)" !

L'article est fourni en PDF avec les sources du projet exemple (utilisable sous VS 2008 ou Blend 2).

NB: Pour mieux comprendre cet article si vous n'êtes pas encore un expert de WPF, je vous conseille la lecture de mon précédent article "10 bonnes raisons de préférer WPF".

Bonne lecture,

... Et Stay Tuned !

Techdays 2009, Le grand rush !

Les Techdays 2009, ce temple des annonces, cette grand'messe de la technologie, que dis-je, ce rendez-vous INCONTOURNABLE à la gloire de notre passion commune et de nous outils préférés, et bien les Techdays 2009 ont commencé depuis hier !

Plein de nouveautés et d'annonces croustillantes et plein de choses à voir et de conférences à entendre !

... bon... seulement voilà, j'aurai bien voulu vous en dire plus mais, hélas, mes obligations professionnelles m'ont interdites d'être sur Paris cette semaine :-( Du coup, et pour la première fois, ce n'est pas moi qui vais vous donner des informations toutes fraiches et exaltantes (même si je suis ce qui se trame de loin !), mais c'est à vous, qui êtes aux Techdays ou qui en revenez, de bien vouloir me tenir au courant, moi et les autres lecteurs de Dot.Blog bien entendu ! :-)

N'hésitez pas à laisser en commentaire ici ce qui vous a le plus marqué, ce que vous avez le plus aimé !

We need you ! Engagez-vous, rengagez-vous et commentez !

... et bonne balade aux Techdays !

Astuce du jour : chercher des ebook avec google

Légal / pas légal, that is the question... Sur le Web on trouve de tout, à vous de savoir ce que vous téléchargez.

Je ne suis pas là pour vous faire la morale mais plutôt pour vous donner une astuce sur la syntaxe de google qui permet de retrouver facilement des ebook.

Pour chercher des ebook ajouter tout simplement la ligne qui suit à votre recherche :

-inurl:htm -inurl:html intitle:"index of" +("/ebooks""/book") +(chm pdf zip)

La syntaxe peut être facilement adaptée. On voit que l'astuce consiste à cherche dans les URL la présence de certains mots comme ebook ou book et plus spécifiquement des répertoires de sites Web s'appelant comme ça. On remarquera aussi la fin de la recherche permettant de chercher chm pdf et zip. On peut supprimer zip ou chm si on ne veut que des pdf ou ajouter d'autres extensions qu'on recherche.

Bonne lecture !

J'ai testé pour vous Windows 7 !

Testez la bêta de la nouvelle version du système d’exploitation : Windows 7 !

l'Annonce Microsoft

"Annoncé par Steve Balmer lors du keynote du CES 2009 de Las Vegas, la bêta de Windows 7 est maintenant disponible sur le site Windows. Cette bêta vous permettra de vous faire une idée concrète de ce que sera  le prochain système d’exploitation de Microsoft: de meilleures performances, encore plus de simplicité, tout en permettant à l’utilisateur professionnel et particulier de vivre de nouvelles expériences numériques ! Découvrez la nouvelle interface, le nouveau centre de gestion des périphériques, la « recherche unifiée » ou encore la fonction « homegroup » pour créer un réseau chez soi ou pour sa TPE en quelques clics . Dépêchez vous seuls 2,5 millions de bêta sont disponibles pour le grand public au niveau mondial ! " (source Microsoft)

Mon avis

Installation sous Virtual PC (ou Hyper V si vous l'avez) 

N'ayant pas de machine libre pour "jouer" avec une bêta j'ai choisi l'option Virtual PC 2007 (que Microsoft diffuse gratuitement, n'oubliez pas le SP1 non plus). Comme W7 n'est pas encore reconnu il suffit lors de la création d'une nouvelle machine virtuelle de choisir Vista. Choisissez un emplacement, une taille raisonnable pour la RAM et le disque (j'ai testé avec 1 Go dédié à W7 et un fichier de 20 Go). Au premier boot la machine virtuelle vous dira comme n'importe quelle PC qu'elle ne trouve pas le boot (ou bien stoppez la recherche de boot réseau si jamais ça cherche trop longtemps). Allez dans les options de VPC et montez le fichier ISO comme un CD. Et là ça boote et ça installe W7 sans l'ombre d'un souci. Une fois l'OS installé complètement, installez aussi (par les menus de VPC) les extensions de la machine virtuelle. Cela permet entre autre une utilisation plus fluide de la souris. Une fois l'OS arrêté, vous pouvez aussi regardez les réglages de la machine virtuelle dans VPC, par exemple la connexion réseau si la votre n'est pas reconnue d'emblée. Pour moi il n'y a eu aucun problème mon réseau a été reconnu tout de suite sans avoir à toucher aux réglages.

Ce que j'en pense

Ceux qui ont refusé d'installer Vista seront soit très contents, soit très déçus. Déçus s'ils s'attendent à "autre chose" que Vista, car W7, comme je l'ai dit maintes fois, c'est avant tout un Vista. Contents, ils le seront si ce qui les gênait dans Vista c'était une certaine lourdeur, car si W7 c'est un Vista, c'est un Vista revu et corrigé, amélioré et surtout plus rapide.

Sous Virtual PC la carte graphique détectée est une S3 Trio, un truc très vieux, vraiment minimaliste, donc pas d'effets 3D ni de jolies transparences. Si vous voulez voir W7 dans toute sa splendeur il faudra l'installer sur une vraie machine et pas en virtuel.

En dehors de l'absence des effets cosmétiques, le test sous Virtual PC a un grand mérite : faire fonctionner l'OS avec peu de RAM, une simulation de disque dur plus lente qu'un vrai disque, une carte graphique pourrie, osons le dire, et assez peu de puissance processeur, le tout pendant que XP ou Vista (selon votre config) tourne en dessous... Pire comme conditions de test c'est dur à faire, même un portable grand public à 400 euros fait mieux aujourd'hui...

Et bien j'ai été très surpris du peu de mémoire consommé (384 Mo) ainsi que de la vitesse d'exécution ! Windows 7 c'est un Vista qui ne passerait pas les contrôles anti-dopage (sauf sur le Tour de France, mais là c'est normal) !

Rapide, peu gourmant, et beaucoup de petites modifications ergonomiques très agréables et intelligentes. C'est un Vista en mieux donc. Tout ce qu'on pouvait reprocher à Vista est parti, et tout ce qui faisait de Vista un très bon OS est resté ou a été amélioré.

Internet Explorer 8 fait partie de la livraison et je n'avais pas eu le temps de le tester jusqu'à là, l'occasion a donc été idéale. Conclusion pour IE8, la même que pour Windows 7 vis à vis de Vista : c'est de l'IE7 en mieux, en plus rapide, et avec des améliorations ergonomiques vraiment bien. On trouve enfin une barre de recherche pour Ctrl-F, seul truc dinosauresque qui m'agaçait vraiment sous IE7.

Côté réseau, mon réseau local a été vu tout de suite sans problème, même entre l'hôte XP et la machine virtuelle Windows 7, ainsi qu'avec toutes les autres machines du réseau. Les petits problèmes rencontrés avec Vista à ce sujet sont donc oubliés.

En terme de vitesse, l'accès et l'affichage des pages Web complexes sous IE8/Windows 7 en machine virtuelle était 2 à 3 fois plus rapide que sous l'OS natif avec IE7 ! Quelle est la part de IE8 et celle de W7 dans ces performances je n'en sais rien, mais tout cela est vraiment rassurant.

Conclusion

Sous ma machine dual boot XP/Vista je suis maintenant très impatient de pouvoir effacer et reformater sous Windows 7 ma partition Vista ! Windows 7 s'avère rapide, peu gourmand, agréable à utiliser. Je conserverais certainement encore ma partition XP pour toutes les vieilleries (et pour certains dossiers clients), mais il est clair que dès la mise sur la marché de la finale de Windows 7 il deviendra mon OS par défaut.

Les liens de téléchargement

http://www.microsoft.com/france/windows/products/windowsvista/enterprise/default.mspx

http://technet.microsoft.com/fr-fr/evalcenter/dd353205.aspx

Visual NDepend un outil d'analyse de code original et puissant

A partir d'une certaine taille le code d'une application devient difficile à maintenir même s'il est bien conçu. De même, la maintenance évolutive oblige souvent à mettre les mains dans un code écrit par d'autres (si ce code est assez ancien, on peut s'y perdre même en en étant l'auteur d'ailleurs !). Auditer un code est ainsi un besoin fréquent dans le travail de tous les jours d'un développeur. Si on effectue des missions d'audit ce besoin devient alors impérieux car il est nécessaire d'entrer rapidement dans un code "étranger" et toujours complexe (je n'ai jamais été appelé en audit pour des logiciels de 20 lignes...).

Les outils d'analyse de code sont ainsi des compagnons indispensables. Hélas ils ne sont pas si nombreux que ça et comme tout ce qui touche la qualité, ils sont un peu "oubliés".

Je voulais ainsi vous présenter un excellent outil : Visual NDepend.

NDepend est puissant, il permet de construire et visualiser des comparaisons, d'auditer la qualité du code, et surtout de mieux visualiser la structure d'une application. Le tout quantitavement (métriques), qualitativement (l'information est pertinente) et graphiquement (le logiciel propose de nombreux diagrammes et schémas permettant de visualiser ce qui est invisible en lisant le code source : structures, dépendances, ...).

NDepend ne se limite pas seulement à l'audit de code, c'est aussi un excellent outil de refactoring.

On notera aussi, côté puissance, l'intégration d'un langage d'interrogation, le CQL (Code Query Language), permettant à la façon de SQL de "questionner" un projet et son code comme s'il s'agissait d'une base de données. La comparaison s'arrête là avec SQL car CQL "comprend" le code alors que SQL ne comprend pas le sens des données qu'il manipule. Cette grande différence confère à NDepend une très grande souplesse et beaucoup d'intelligence.

Par exemple il est très simple de faire des requêtes du type "montre moi toutes les méthodes privées dont le nombre de lignes de code est supérieur à 20", très utile pour repérer rapidement dans un projet les lourdeurs ou la nécessité de refactoring. Une telle interrogation se formule en la requête CQL suivante "SELECT METHODS WHERE NbLinesOfCode > 20 AND IsPrivate".
On peut bien entendu créer des requêtes plus sophistiquées comme rechercher toutes les types qui sont une définition de classe et qui implémentent telle ou telle autre interface !

NDepend est ainsi un outil de grande qualité dont on ne peut que conseiller l'utilisation. Réalisé par Patrick Smacchia, un acteur connu de la scène .NET et Microsoft MVP C#, NDepend est vendu 299 euros en licence 1 utilisateur, c'est à dire pas grand chose au regard des immenses services qu'il peut rendre.

Il y a beaucoup de choses à dire sur cet outil et surtout à voir. Le mieux si vous êtes intéressés est de vous rendre sur le site du logiciel www.ndepend.com où vous pourrez visionner de nombreuses petites vidéos qui vaudront mieux que de longs discours.

Bon refactoring !

 

9 raisons de plus d'utiliser WPF !

Dans mon dernier article paru en décembre, 10 bonnes raisons de choisir WPF (téléchargement ici), je vous proposais sous la forme d'une introduction à WPF ce qui me semblait de bonnes raisons de choisir cet environnement pour vos nouvelles applications. Dario Airoldi de Microsoft Italie nous propose aujourd'hui ses 9 raisons de préférer WPF et ce ne sont pas forcément les mêmes que les miennes, ce qui allonge significativement la liste et vaut un petit détour.

Je ne vais ni traduire cet article (suivez le lien juste au-dessus) ni réviser le mien en ajoutant ces nouvelles raisons, mais voici un résumé des raisons de Dario, elles sont intéressantes :

Raison 1

L'analyste fonctionnel et le graphiste peuvent définir l'interface d'un logiciel par le biais d'un langage commun, XAML, et non plus par des bitmaps et des documents écrits que le développeur devait traduire en code. Avec WPF, développeur et designer peuvent travailler sur une base commune et des documents directement utilisables par les uns et les autres sans "traduction", ce qui diminue grandement les risques de confusion.
[OD]WPF n'impose pas systématiquement le travail d'un graphiste, mais pour obtenir une interface de grande qualité graphique une telle présence s'avère indispensable. Il ne s'agit donc pas d'une obligation de WPF mais bien d'une exigence de qualité de l'expérience utilisateur. Vous avez le droit de faire des choses très laides de type Win32 en WPF si cela vous chante ou vous passer d'un infographiste si vous êtes aussi doué au pinceau qu'en C# ![/OD]

Raison 2

La quantité de code C# ou VB est grandement réduite grâce à WPF. Toute l'interface est gérée soit par du XAML soit par du Data Binding.

Raison 3

La séparation entre l'interface utilisateur et la logique métier est nette et franche.

Raison 4

Le système de routage des commandes de WPF permet de découpler l'implémentation d'une action de l'objet émettant la commande.
[OD] Je n'ai pas développé cet aspect de WPF dans mon article, c'est un tort ! [OD]

Raison 5

Le chargement dynamique de code XAML rend possible l'adaptation à la volée de l'interface utilisateur, par exemple selon le rôle de l'utilisateur, son groupe de travail, son profil...

Raison 6

Les validations côté client et côté serveur sont largement simplifiées par l'architecture de validation du Data Binding et par le système de routage des événements.

Raison 7

Les applications WPF sont plus faciles à maintenir et plus flexibles.
[OD] Cela découle en partie des raisons précédentes et de la nature même de WPF et des outils qui gravitent autour comme Expression Blend par exemple.[/OD]

Raison 8

Le templating des contrôles et les styles permettent de créer des interfaces sophistiquées tout en restant humainement maintenables.
[OD] WPF a été créé en intégrant le graphisme, le multimédia, les animations, la 3D, etc... Avec WPF on personnalise l'interface à l'extrême si besoin tout en utilisant des composants standard et sans nécessité d'acquérir des bibliothèques tierces, impossibles à maintenir, chères et incompatibles entres elles. [/OD]

Raison 9

WPF fonctionne sur la base d'un système de coordonnées déconnecté de la résolution des écrans ce qui rend l'adaptation au matériel bien plus simple.
[OD] Il fut un temps où tout le monde fonctionnait avec "la" norme de l'instant, comme VGA par exemple. Aujourd'hui l'utilisateur a un choix énorme d'écrans aux proportions, tailles et résolutions différentes, sans parler des unités mobiles et autres smartphones ! WPF apporte une solution simple à ce problème. [/OD]

Conclusion

WPF facilite le développement d'applications plus sophistiquées et plus ergonomiques en écrivant moins de code.
[OD] Tout cela est vrai. Mais n'oublions pas que WPF impose aussi une solide formation car la façon de travailler sous cet environnement est très différente de ce qu'on connaissait. Nier cet aspect des choses ne serait pas honnête et c'est ce qui explique que beaucoup de développeurs n'ont pas encore sauté le pas. [/OD]

Pour les détails de l'exposé (sans mes commentaires) je vous conseille la lecture du billet original.

Encore une fois bonne année à tous... et Stay Tuned !

Nomination Microsoft Most Valuable Professional (MVP) 2009 !

L'année commence bien ! J'ai le plaisir de vous annoncer qu'en ce premier janvier 2009 je viens de recevoir ma nomination MVP C#.

Je mesure l'honneur qui m'est fait au travers de cette nomination et je vais continuer à oeuvrer, au travers de ce blog, des articles que je publie et des livres en cours de rédaction, pour mériter ce titre en partageant toujours plus d'information technique mais aussi ma passion en mon métier et ma conviction que les outils Microsoft depuis la naissance de .NET marquent un tournant décisif autant qu'un bond qualitatif jamais réalisé en matière d'environnement de développement et d'experience utilisateur.

Je vous souhaite à tous une année 2009 exaltante, tant sur le plan professionnel que personnel !

Le site MVP où vous pouvez consulter ma nomination