2 points par GN⁺ 2024-11-15 | 1 commentaires | Partager sur WhatsApp
  • Avalonia Visual Basic 6 est un projet jouet qui recrée l’IDE classique Visual Basic 6 et son langage en C# avec Avalonia
  • Une version web peut être ouverte dans le navigateur, et une version desktop peut également être compilée sur la base de .NET 9.0
  • Ses principales fonctionnalités sont un concepteur visuel, l’enregistrement et le chargement de projets dans un format compatible VB6, l’exécution de projets et une prise en charge limitée du langage VB6
  • La version navigateur nécessite .NET 9.0, tandis que le build desktop peut aussi utiliser .NET 8.0 en modifiant Directory.Build.props
  • Les droits sur le nom, les icônes et les graphismes Visual Basic appartiennent à Microsoft Corporation, et ce projet n’a aucune intention commerciale

Présentation du projet

  • Avalonia Visual Basic 6 est un projet qui recrée l’IDE classique Visual Basic 6 et son langage en C# et Avalonia
  • Il est présenté comme un fun, toy project sans objectif commercial
  • Tous les droits relatifs au nom, aux icônes et aux graphismes Visual Basic appartiennent à Microsoft Corporation
  • La version web peut être exécutée dans le navigateur

Fonctionnalités prises en charge

  • Fournit un Visual Designer
  • Permet d’enregistrer et de charger des projets dans un format compatible VB6
  • Fournit une fonctionnalité d’exécution de projet
  • La prise en charge du langage VB6 est limitée

Compiler la version desktop

  • En général, .NET 9.0 est requis
  • La version desktop peut utiliser .NET 8.0 en modifiant Directory.Build.props
  • La version navigateur nécessite .NET 9.0
  • La commande de build desktop est la suivante
dotnet build AvaloniaVisualBasic.Desktop/AvaloniaVisualBasic.Desktop.csproj

Erreurs Antlr4 et Java

  • Si des erreurs Antlr4 surviennent, il est possible que la bibliothèque Antlr4BuildTasks n’ait pas réussi à télécharger Java automatiquement
  • Dans ce cas, installer Java manuellement peut résoudre le problème

Déploiement desktop

  • Il faut publier séparément le projet IDE et le runtime
dotnet publish AvaloniaVisualBasic.Desktop -f net9.0 -o bin/
dotnet publish AvaloniaVisualBasic.Standalone -f net9.0 -o bin/standalone/
  • Après le déploiement, le fichier suivant peut être exécuté
./bin/AvaloniaVisualBasic.Desktop

Projets et ressources utilisés

1 commentaires

 
GN⁺ 2024-11-15
Avis sur Hacker News
  • Fil de discussion connexe publié il y a 3 jours : https://news.ycombinator.com/item?id=42105869 — 224 commentaires
  • Mon Dieu, il faut absolument que je commente ça. C’est exactement comme ça que j’ai appris à programmer quand j’étais enfant
    J’avais trouvé « Write Your Own Adventure Programs » (1983 - Usborne : https://colorcomputerarchive.com/repo/Documents/Books/Write%...) sur l’étagère de l’école primaire ; le code était en BASIC et, à l’époque, nous n’avions pas de vrai ordinateur à la maison
    Quelques années plus tard, en voyant Visual Basic, je me suis dit que ça devait être similaire, et c’était assez vrai. Au début, je n’avais pas de livre pour apprendre, alors je cliquais sur tous les menus et boutons pour voir ce qu’ils faisaient, puis je téléchargeais par modem toutes sortes de contrôles de formulaire VB tiers, je les déposais sur un Form et je regardais ce qu’ils faisaient
    À force de copier-coller et de modifier, j’ai fini par créer des aides aux devoirs qui calculaient par exemple l’aire d’un cercle, ainsi que des programmes de blague qui affichaient une icône dans la zone de notification à côté de l’horloge, ou qui masquaient une fenêtre pour faire des bruits agaçants en arrière-plan. En revanche, quand j’essayais de les installer sur l’ordinateur d’un ami, ça échouait souvent parce que les .dll nécessaires ne tenaient pas sur une seule disquette
    C’était parfois frustrant, mais je me sens très chanceux d’avoir appris la programmation comme ça, grâce au fait que mes parents m’aient laissé manipuler presque librement une machine qui devait coûter cher à l’époque
    Même les tutoriels étaient plus amusants alors. C’était du genre : « tutoriel Windows Registry de hypnoMan37 !!! HEyyeyeyy Guuyzs :-)))) Venez sur mon canal IRC #blabla sur EFNet ! Commencez par appeler RegistryCreateNewKey32(...)… », et bien sûr je n’avais pas non plus de CD MSDN
    L’apprentissage façon bootcamp est sûrement bien plus efficace, mais en comparaison c’est tellement aride. Je me demande si le coût de l’ennui mortel infligé aux débutants n’est pas assez élevé
    • J’ai eu une expérience similaire avec VB6, mais en partant de l’opposé. Je ne lisais pas un livre sur BASIC, mais un livre sur VB.NET
      Mon premier contact avec Visual Basic a été le VBA de MS Word ; en l’ouvrant, j’ai bien compris que c’était un endroit où coder, mais je n’avais absolument aucune idée de quoi saisir. À l’époque, je ne connaissais aucun langage de programmation
      Plus tard, j’ai trouvé un livre sur VB.NET dans une librairie et j’étais tellement content que j’ai immédiatement essayé de le suivre dans VBA, mais le code ne s’exécutait pas du tout, ce qui m’a beaucoup découragé. Je me suis dit que j’allais essayer une toute dernière fois et abandonner si ça ne marchait pas ; heureusement, ça a fini par s’exécuter
      Il s’est avéré que le VBA de MS Word sur mon ordinateur était basé sur VB 6, alors que le livre portait sur VB.NET, donc le code était légèrement différent
      Ensuite, j’ai acheté tous les livres sur VB 6 que je trouvais, et j’ai fini par dénicher par hasard, dans une pile de CD chez un proche, un installateur de l’IDE VB 6, que j’ai installé. Aujourd’hui encore, je pense que le constructeur d’interface graphique de VB 6 est le meilleur que j’aie jamais utilisé
    • Le passage où tu dis avoir téléchargé par modem tous les contrôles de formulaire VB tiers possibles pour les essayer dans un Form réveille vraiment des souvenirs
      La bibliothèque du quartier avait aussi « Visual Basic How-To: The Definitive Vb3 Problem Solver », et je l’ai prolongé tellement de fois qu’on m’a dit que je ne pouvais plus l’emprunter. Je me souviens avoir créé une interface réellement fonctionnelle à partir de l’interface « Peanut Computer » du début de Out of this World
    • J’aimerais que mes enfants vivent la même expérience, mais je ne sais pas trop comment faire aujourd’hui sans BASIC. Les outils qui se contentent de leur faire créer un jeu de plateforme en WYSIWYG ne m’attirent pas vraiment
      Quelqu’un a de bonnes idées ?
    • Mon point de départ a été « How to Create Adventure Games » (1986) de Christopher Lampton, à la bibliothèque municipale. QBASIC était préinstallé sur l’ordinateur de mon père, donc j’ai saisi le code BASIC à la main
    • J’ai eu exactement la même expérience enfant. J’ai trouvé un livre sur GW-BASIC dans la bibliothèque de mes parents, puis j’ai découvert que QBASIC était inclus dans Windows et que la plupart des exemples de code du livre fonctionnaient ; à partir de là, j’ai été complètement happé
      Quand je m’ennuyais, j’aimais lire le manuel de MS-DOS 6 du début à la fin
      À l’époque où l’accès à Internet n’était pas courant, la qualité de la documentation et des exemples de code était impressionnante
  • C’est une vision vraiment inspirante, mais après l’avoir utilisé environ 2 minutes, il manque pas mal de petites fonctionnalités. Du moins pour la build web
    L’esperluette dans les libellés des boutons ne crée pas de touche de raccourci. Par exemple, &Go ne souligne pas le G
    Dans le vrai VB6, quand on plaçait un contrôle Label et qu’on tapait directement, son contenu changeait ; ici, il faut d’abord donner le focus au champ de saisie. Cliquer sur l’en-tête « Caption » ne marche pas non plus, il faut cliquer dans la colonne de saisie
    Pour améliorer la fidélité, lorsqu’un contrôle est sélectionné dans le designer GUI, une ligne de la grille Properties devrait toujours être mise en surbrillance. Pour un Label, la valeur par défaut était Caption ; pour les contrôles sans propriété par défaut, il me semble que c’était Name
    Quand on passait à un autre contrôle, si celui-ci avait une propriété portant le même nom que la propriété actuellement sélectionnée, VB6 conservait cette sélection. On pouvait donc modifier rapidement la propriété Tag de plusieurs contrôles à la suite avec un minimum de clics
    Il est évident que les menus comme débogage, sauvegarde, aide et compléments ne sont pas encore implémentés. Si le bouton Build qui crache un « exécutable » tournant dans le navigateur fonctionne, ce serait génial
    Ces remarques pointilleuses viennent de l’affection ;-)
    • Dans Avalonia, le caractère de raccourci est normalement le soulignement _, mais je viens de pousser une mise à jour pour prendre aussi en charge & :)
      La sauvegarde fonctionne bel et bien. Mais seulement sur desktop, et en plus elle est compatible avec le format VB6. Le support global étant limité, la compatibilité l’est aussi, mais je compte l’améliorer un peu
      Build fonctionne aussi, mais seulement sur desktop ;)
    • Le fait que l’esperluette dans les libellés des boutons crée une touche de raccourci n’est pas propre à VB, c’est une fonctionnalité des contrôles communs Windows, donc elle a peut-être été oubliée
    • Si vous avez besoin d’un bouton Build qui crée un « exécutable » tournant dans le navigateur, vous pouvez regarder Quartex Pascal de Jon Aasenden : https://quartexdeveloper.com/
  • Je ne comprends toujours pas comment on est passés de ce genre de choses aux toolkits GUI modernes

Visuellement comme dans son fonctionnement, c’est vraiment intuitif

  • On s’est éloigné des widgets familiers, discrets et non clivants, pour aller vers des designs sophistiqués, très stylisés et plus profonds, qui affichent la marque.
    Il est apparu qu’en misant sur des marques voyantes et atypiques, on attirait non seulement de nouveaux utilisateurs, mais on rendait aussi le passage à autre chose plus étrange et frustrant, ce qui réduisait l’attrition. C’était plus facile à monétiser que l’approche précédente, centrée sur l’efficacité utilisateur et la différenciation fonctionnelle.
    La technologie a suivi cette mode en dépensant son budget de complexité dans la personnalisation du style, les animations, l’amélioration du rendu des polices, etc., et a abandonné les tentatives visant à encourager un langage de design standard auquel créateurs et utilisateurs pourraient s’habituer ensemble.

  • Toutes les versions ultérieures de Visual Studio ont le même builder. Je l’utilise tous les jours pour créer de petites applis personnelles. Même le tout nouveau Visual Studio 2022 sorti hier est presque identique à 100 %.
    En réalité, c’est mieux aujourd’hui, parce qu’il est plus facile d’aligner et de modifier les propriétés. Mais l’interface est la même et, littéralement, elle n’a pas changé en 25 ans.
    Je viens de lancer VS2022 et j’ai créé cette appli en moins de 60 secondes : https://imgur.com/a/qHOCasJ

  • Deux choses m’attiraient dans VB. La première était de pouvoir dessiner directement l’interface graphique : à l’époque, pouvoir créer avec un effort minimal un logiciel qui « ressemblait à un logiciel » était une expérience vraiment géniale et valorisante.
    L’autre, c’est que pour créer une interface graphique, il fallait se battre avec des bibliothèques de classes plutôt qu’avec VB. À l’époque, l’OOP était totalement impénétrable pour un programmeur amateur comme moi, et créer la moindre appli « hello world » sous Windows ou Mac nécessitait des pages d’instructions.
    Au fil des décennies suivantes, les exigences envers les interfaces graphiques de qualité ont augmenté, tandis que les compétences de programmation nécessaires pour créer de petites interfaces graphiques en code semblent aussi s’être davantage généralisées. C’est peut-être parce que les langages ont progressivement rendu cela plus facile.
    Aujourd’hui, pour le niveau d’interface dont j’ai besoin, je préfère simplement l’écrire en code et, dans mon cas, laisser Tkinter la placer avec une mise en page par défaut correcte. Mes victimes — pardon, mes utilisateurs — n’ont rien demandé de mieux.

  • C’est assez proche de l’approche Interface Builder de Xcode utilisée pour les apps macOS et iOS.
    Comme d’autres l’ont dit, ça fonctionne bien jusqu’au moment où il faut prendre en charge les tailles d’écran, les mises en page, les animations, les interactions tactiles, etc.

  • Pour avoir créé à la fois des apps natives desktop et des apps basées sur navigateur, je pense qu’une fois la courbe d’apprentissage passée, il est efficace de décrire la disposition des widgets sous forme de texte, en code ou en balisage.
    Je crois que Qt et wxWidgets ont aussi des fonctions de mise en page automatique, mais comme tout repose sur C++, l’expérience peut être moins fluide. Jusqu’ici, le designer de formulaires de Visual Studio impose un placement manuel au pixel près, ce qui devient fastidieux à mesure que l’interface se complexifie.
    Le glisser-déposer de contrôles est facile à apprendre, donc pratique pour les débutants, mais dès qu’on atteint une douzaine de contrôles, le temps passé à les déplacer, les aligner et les redimensionner manuellement devient notable. Avec une interface basée sur du balisage ou générée procéduralement, ces calculs de placement sont faits à votre place.

  • L’interface Windows des années 1995–2001, c’était vraiment l’apogée de Windows.
    C’était très net et très propre. À l’époque, Visual C++ et Visual Basic n’étaient pas parfaits, mais ils permettaient simplement de faire le travail.
    XP arrivait juste après, et à mon avis tout a décliné ensuite.

    • Rien ne vaut une installation propre de Windows 2000.
    • Sous XP, Vista et 7, on peut retrouver cette sensation en utilisant le mode classique.
  • Un peu hors sujet, mais c’est fait avec Avalonia, dont je n’avais jamais entendu parler. Quelqu’un l’a déjà utilisé ? La promesse de créer de belles applications cross-platform avec une seule base de code .NET est impressionnante, mais je me demande si, en pratique, ça tient vraiment ses promesses.
    https://avaloniaui.net/

  • Ça me fait vraiment plaisir de voir ça.
    J’étais l’un des premiers développeurs à avoir travaillé sur la partie « visuelle » de Visual Basic.
    À l’époque, ça s’appelait Ruby, sans aucun lien avec le langage de programmation Ruby. C’était censé devenir un shell personnalisable pour Windows 3.0. L’idée était que chaque utilisateur de Windows puisse créer son propre environnement de bureau personnel à l’aide d’un éditeur visuel et de « gizmos », qui ont ensuite reçu le nom beaucoup plus ennuyeux de « controls ».
    Microsoft a probablement jugé, avec sagesse, que cela convenait mieux comme outil pour développeurs que comme outil pour utilisateurs finaux, et a combiné Ruby avec Basic pour créer Visual Basic.
    Si vous avez déjà créé des contrôles personnalisés VBX, vous pouvez me tenir responsable de cette API atroce.
    Et si vous vous demandez d’où vient l’expression « fire an event », vous trouverez la réponse dans l’article de Retool sur VB : https://retool.com/visual-basic
    Avertissement sur le contenu : il y a des formulations liées aux drogues. Autrement dit : « demandez-moi n’importe quoi ».
    Pour faire un peu d’autopromotion éhontée, je cherche actuellement du travail. Chez IBM, notre équipe a été assez durement touchée lors de la récente vague de licenciements, et nous avons perdu McDonald’s, qui était notre seul client dédié.
    Je connais beaucoup de langages et de frameworks, mais pas tout. Qui le pourrait ?
    J’aime travailler avec les clients pour comprendre leurs besoins. Comme tous les programmeurs, j’aime coder, mais le code n’est qu’un moyen de rendre le client heureux.
    Si cela vous intéresse, vous pouvez me trouver ici : http://linkedin.geary.com/, http://resume.geary.com/

    • C’est pour ce genre de messages que je reviens sur ce site :-)
      C’est moi qui ai écrit le long commentaire enthousiaste plus haut. J’aimerais passer environ une heure sur Zoom à écouter vos histoires de cette époque, et je pense que les gens aimeraient voir la vidéo ici.
      Je n’ai aucune expérience d’interview et aucun canal média, mais je ferai de mon mieux pour poser des questions intéressantes. Si ça vous intéresse, envoyez-moi un e-mail ; il est dans mon profil.
    • Merci d’avoir rendu possible mon entrée dans mon premier développement logiciel professionnel. Cela rendait vraiment facile la création de petits utilitaires pour faire le boulot.
    • Je suis surpris d’apprendre que vous avez aussi créé SQLWindows. Respect.
  • Y a-t-il aussi un rapport avec MS Dialog Editor ?

  • En fouillant dans le code, on voit que l’auteur n’a implémenté que le strict minimum pour réaliser une belle démo.
    Par exemple, seules deux fonctions sont prises en charge, MsgBox et InputBox : https://github.com/BAndysc/AvaloniaVisualBasic6/blob/383a005...
    Cela dit, quand on regarde l’historique des commits, c’est impressionnant d’avoir créé quelque chose d’aussi complexe en 4 jours. C’est aussi un bon point de départ pour en faire un IDE complet.
    Les fonctionnalités avancées comme la coloration syntaxique et l’autocomplétion manquent malheureusement. Je ne l’ai pas exécuté, mais comme j’utilise macOS, je m’attends à ce qu’il n’y ait pas non plus de débogueur.
    Pour raconter moi aussi mes souvenirs d’enfance, mon parcours de développeur a commencé avec Turbo Pascal, puis je suis passé à Delphi 7. Delphi ressemblait pas mal à VB6 : on concevait des apps en glissant-déposant des composants sur des formulaires.
    Ma première app était un clone de Notepad++, et j’en ai encore le code, mais il est tellement mauvais que j’ai honte à chaque fois que je le regarde.

    • La coloration syntaxique existe en fait. Elle a été ajoutée après l’enregistrement du GIF et on peut la voir dans la version web. Pour l’autocomplétion, eh bien, peut-être plus tard :)
      La prise en charge du langage VB6 est elle aussi limitée. C’était plutôt un jouet ou une preuve de concept, mais les réactions positives me donnent envie d’implémenter davantage de fonctionnalités. D’autant que le format de sauvegarde est compatible avec VB6. Cela restera un jouet, mais peut-être un jouet qui fonctionne vraiment ?
  • On peut ouvrir la version web dans le navigateur : https://bandysc.github.io/AvaloniaVisualBasic6/

    • C’est très rapide dans Firefox et Chrome, mais pour une raison quelconque, c’est presque figé dans Microsoft Edge (Chromium).
      Mise à jour : j’ai trouvé la cause. L’option Enhance your security on the web d’Edge ralentit énormément les choses. Désactiver cette option résout le problème de performances.
  • Les composants de type frame me manquent vraiment dans les applications modernes. Tout le monde semble penser qu’un titre en gras et un peu de marge en bas suffisent à regrouper des éléments.

    • En HTML, il existe fieldset, qui a cet aspect. Mais trop de frameworks CSS le cassent. Personnellement, j’aime vraiment son apparence.
      Pour vérifier, il suffit de mettre ceci dans un fichier HTML vide et de voir comment c’est rendu : Frame1, HTML, CSS, JavaScript
    • Exactement. GroupBox est un élément décoratif d’interface indispensable, mais comme il manque dans les toolkits actuels, je finis par le recréer moi-même. Quand tout un groupe de contrôles est lié à une fonctionnalité que l’on peut activer ou désactiver, j’ajoute aussi une case à cocher avec un libellé posé sur le contour. C’était utilisé comme un standard dans beaucoup d’anciennes interfaces, et c’était très clair.
      Dans le même genre, un autre élément important qui a disparu est un vrai TabView. Je ne sais pas qui a été le premier à prétendre qu’une simple rangée de boutons ordinaires était un TabView, mais c’était probablement Apple, et c’est nul. Car, comme quand il manque un GroupBox, rien n’indique que les contrôles en dessous se trouvent au-dessus de la vue de l’onglet sélectionné. Ça me paraît pourtant évident.