2 puntos por GN⁺ 2024-11-15 | 1 comentarios | Compartir por WhatsApp
  • Avalonia Visual Basic 6 es un proyecto de juguete que reconstruye el IDE clásico de Visual Basic 6 y su lenguaje en C# usando Avalonia
  • La versión web puede abrirse en el navegador, y la versión de escritorio también puede compilarse sobre .NET 9.0
  • Sus funciones principales son un diseñador visual, guardar y cargar proyectos en un formato compatible con VB6, ejecutar proyectos y soporte limitado del lenguaje VB6
  • La versión para navegador requiere .NET 9.0, y en la compilación de escritorio también puede usarse .NET 8.0 modificando Directory.Build.props
  • Los derechos sobre el nombre, iconos y gráficos de Visual Basic pertenecen a Microsoft Corporation, y este proyecto no tiene intención comercial

Descripción general del proyecto

  • Avalonia Visual Basic 6 es un proyecto que reconstruye el IDE clásico de Visual Basic 6 y su lenguaje con C# y Avalonia
  • Se presenta como un fun, toy project sin fines comerciales
  • Todos los derechos sobre el nombre, iconos y gráficos de Visual Basic pertenecen a Microsoft Corporation
  • La versión web puede ejecutarse en el navegador

Funciones compatibles

  • Incluye Visual Designer
  • Permite guardar y cargar proyectos en formato compatible con VB6
  • Ofrece función de ejecución de proyectos
  • El soporte del lenguaje VB6 es limitado

Compilación de la versión de escritorio

  • Normalmente se requiere .NET 9.0
  • La versión de escritorio puede usar .NET 8.0 si se modifica Directory.Build.props
  • La versión para navegador requiere .NET 9.0
  • El comando de compilación para escritorio es el siguiente
dotnet build AvaloniaVisualBasic.Desktop/AvaloniaVisualBasic.Desktop.csproj

Errores de Antlr4 y Java

  • Si aparecen errores de Antlr4, es posible que la biblioteca Antlr4BuildTasks no haya podido descargar Java automáticamente
  • En ese caso, instalar Java manualmente puede resolver el problema

Despliegue de escritorio

  • Hay que publicar por separado el proyecto del IDE y el runtime
dotnet publish AvaloniaVisualBasic.Desktop -f net9.0 -o bin/
dotnet publish AvaloniaVisualBasic.Standalone -f net9.0 -o bin/standalone/
  • Después del despliegue, puede ejecutarse el siguiente archivo
./bin/AvaloniaVisualBasic.Desktop

Proyectos y recursos utilizados

1 comentarios

 
GN⁺ 2024-11-15
Opiniones en Hacker News
  • Hilo relacionado publicado hace 3 días: https://news.ycombinator.com/item?id=42105869 — 224 comentarios
  • Dios, esto sí que me obliga a comentar. Así fue exactamente como aprendí a programar cuando era chico
    Encontré "Write Your Own Adventure Programs" (1983 - Usborne: https://colorcomputerarchive.com/repo/Documents/Books/Write%...) en el estante de libros de la primaria; el código estaba en BASIC y en casa en ese momento no teníamos una computadora de verdad
    Unos años después vi Visual Basic y pensé que sería parecido, y en cierta medida lo era. Al principio no tenía libros para aprender, así que probé todos los menús y botones para ver qué hacían, y por conexión telefónica descargaba todo tipo de controles de formularios VB de terceros, los tiraba en un Form y veía qué hacían
    Al final, a fuerza de copiar, pegar y modificar, hice ayudantes para tareas como calcular el área de un círculo, y también programas de broma que mostraban un ícono en el área de notificación junto al reloj o escondían una ventana para hacer ruidos molestos en segundo plano. Pero cuando intentaba instalarlos en la computadora de un amigo, muchas veces fallaba porque las .dll necesarias no cabían en un solo disquete
    A veces era frustrante, pero siento que tuve mucha suerte de haber aprendido a programar así, gracias a que mis padres me dejaron toquetear casi a mi antojo un equipo que en esa época debía de ser caro
    Hasta los tutoriales eran más divertidos entonces. Eran del estilo: “¡¡¡tutorial del registro de Windows de hypnoMan37!!! HEyyeyeyy Guuyzs :-)))) ¡ven a mi canal de IRC #blabla en EFNet! Primero llama a RegistryCreateNewKey32(...) y…”, y obviamente yo tampoco tenía el CD de MSDN
    Aprender al estilo code camp seguramente es mucho más eficiente, pero en comparación se siente demasiado seco. Me pregunto si el costo de aburrir hasta la muerte a los principiantes no será bastante alto
    • Tuve una experiencia parecida con VB6, pero mi punto de partida fue el opuesto. No leía un libro de BASIC, sino un libro de VB.NET
      Mi primer contacto con Visual Basic fue VBA en MS Word; al abrirlo entendía que era un lugar para programar, pero no tenía ni idea de qué escribir. En ese momento no conocía ningún lenguaje de programación
      Más tarde encontré un libro de VB.NET en una librería y me emocioné tanto que enseguida intenté seguirlo en VBA, pero el código no corría en absoluto y me desanimé mucho. Decidí intentarlo una última vez y, si no funcionaba, rendirme; por suerte, sí corrió
      Resultó que el VBA de MS Word en mi computadora estaba basado en VB 6, mientras que el libro era de VB.NET, así que el código era un poco distinto
      Después compré todos los libros relacionados con VB 6 que encontré y, por casualidad, hallé entre un montón de CDs de un familiar un instalador del IDE de VB 6 y lo instalé. Incluso hoy sigo pensando que el constructor de GUI de VB 6 es el mejor que he usado
    • La parte de descargar por conexión telefónica todos los controles de formularios VB de terceros posibles y ponerlos en un Form realmente me trae recuerdos
      En la biblioteca del barrio también tenían "Visual Basic How-To: The Definitive Vb3 Problem Solver", y lo renové tantas veces que me dijeron que ya no podía llevármelo más. Recuerdo haber creado una interfaz que funcionaba de verdad basada en la interfaz “Peanut Computer” del inicio de Out of this World
    • Me gustaría que mis hijos tuvieran la misma experiencia, pero hoy no sé muy bien cómo hacerlo sin BASIC. No me atraen mucho las herramientas que simplemente les permiten crear juegos de plataformas de forma WYSIWYG
      ¿Alguna buena idea?
    • Mi punto de partida fue "How to Create Adventure Games" (1986), de Christopher Lampton, que estaba en la biblioteca municipal. La computadora de mi padre ya traía QBASIC instalado, así que escribí a mano el código BASIC
    • De chico tuve exactamente la misma experiencia. Encontré un libro de GW-BASIC en el estante de mis padres y, tras descubrir que Windows incluía QBASIC y que la mayor parte del código de ejemplo del libro funcionaba, quedé enganchado
      Cuando me aburría, me gustaba leer el manual de MS-DOS 6 de principio a fin
      En una época en la que el acceso a Internet no era común, la calidad de la documentación y del código de ejemplo era impresionante
  • Es una visión realmente inspiradora, pero tras usarlo unos 2 minutos vi que faltan bastantes funcionalidades pequeñas. Al menos en la build web
    El ampersand en las etiquetas de los botones no crea teclas de acceso rápido. Por ejemplo, &Go no subraya la G
    En el VB6 real, si colocabas un control Label y empezabas a escribir, el contenido cambiaba de inmediato; aquí primero hay que enfocar el campo de entrada. Tampoco funciona hacer clic en el encabezado “Caption”; hay que hacer clic dentro de la columna de entrada
    Para aumentar la fidelidad, cuando se selecciona un control en el diseñador de GUI, una fila de la grilla Properties debería estar siempre resaltada. En Label el valor predeterminado era Caption, y en los controles sin propiedad predeterminada, según recuerdo, era Name
    Al cambiar a otro control, si había una propiedad con el mismo nombre que la actualmente seleccionada, VB6 mantenía esa selección. Por eso se podía cambiar rápidamente la propiedad Tag de varios controles seguidos con el mínimo de clics
    Está claro que menús como depuración, guardado, ayuda y complementos todavía no están implementados. Sería genial que funcionara un botón Build que escupiera un “ejecutable” que corra en el navegador
    Estas críticas quisquillosas vienen desde el cariño ;-)
    • En Avalonia, el carácter para atajos originalmente es el guion bajo _, pero acabo de subir una actualización para que también admita & :)
      Guardar de hecho funciona. Solo que únicamente en escritorio y, además, es compatible en formato con VB6. Como el soporte general es limitado, la compatibilidad también lo es, pero planeo mejorarlo un poco más
      Build también funciona, pero solo en escritorio ;)
    • Que el ampersand en las etiquetas de los botones cree teclas de acceso rápido no es una función propia de VB, sino de los controles comunes de Windows, así que quizá se les pasó
    • Si necesitas un botón Build que cree un “ejecutable” que corra en el navegador, también puedes ver Quartex Pascal de Jon Aasenden: https://quartexdeveloper.com/
  • Todavía no entiendo cómo pasamos de cosas como esta a los toolkits de GUI modernos

También se ve y funciona de forma realmente intuitiva

  • Se alejó de los widgets familiares y discretos, para pasar a un diseño muy estilizado, refinado y profundo, que deja ver la marca
    Quedó claro que enfocarse en marcas llamativas y peculiares no solo atraía a nuevos usuarios, sino que también reducía la deserción al hacer que mudarse a otra cosa se sintiera más raro y frustrante. Era más fácil ganar dinero así que con la tendencia anterior, centrada en la eficiencia del usuario y la diferenciación funcional
    La tecnología también siguió esa moda y gastó su presupuesto de complejidad en personalización de estilos, animaciones, mejoras en el renderizado de fuentes, etc., y se abandonaron los intentos de fomentar un lenguaje de diseño estándar al que creadores y usuarios pudieran acostumbrarse juntos

  • Todas las versiones posteriores de Visual Studio tienen el mismo builder. Uso ese builder todos los días para hacer pequeñas apps personales. Incluso en el nuevo Visual Studio 2022 que salió ayer es casi 100% idéntico
    De hecho, ahora es mejor. Porque es más fácil alinear y cambiar propiedades. Pero la interfaz es la misma y, literalmente, no ha cambiado en 25 años
    Acabo de abrir VS2022 e hice esta app en menos de 60 segundos: https://imgur.com/a/qHOCasJ

  • Me atrajo VB por dos razones. Una era que podía dibujar la GUI directamente, y para la época era una experiencia muy genial y empoderadora poder crear, con el mínimo esfuerzo, software que “parecía software”
    La otra era que, si querías hacer una GUI, en vez de VB tenías que pelearte con bibliotecas de clases. En ese entonces, la OOP era completamente incomprensible para un programador aficionado como yo, y hasta crear una app mínima de “hello world” en Windows o Mac requería instrucciones de varias páginas
    En las décadas posteriores crecieron las exigencias para las GUI de alta calidad y, al mismo tiempo, parece que las habilidades de programación necesarias para hacer GUI pequeñas con código se volvieron más comunes. Tal vez porque los lenguajes fueron facilitándolo de forma gradual
    Hoy, para el nivel de GUI que necesito, simplemente la escribo en código y, en mi caso, me resulta más satisfactorio dejar que Tkinter la coloque con una distribución predeterminada razonable. Mis víctimas, digo, usuarios, no han pedido algo mejor

  • Esto es bastante parecido al enfoque de Interface Builder de Xcode, usado en apps de macOS e iOS
    Como dijeron otros, funciona bien hasta que tienes que soportar tamaños de pantalla, layouts, animaciones, interacciones táctiles, etc.

  • Después de crear tanto apps nativas de escritorio como apps basadas en navegador, creo que, una vez superada la curva de aprendizaje, hay eficiencia en escribir el layout de widgets como texto, ya sea en código o en markup
    Entiendo que Qt y wxWidgets también tienen funciones de layout automático, pero al estar sobre C++ la experiencia puede ser menos fluida. Hasta ahora, el diseñador de formularios de Visual Studio exige colocación manual por píxeles, lo que se vuelve tedioso a medida que la GUI se complica
    Arrastrar y soltar controles es fácil de aprender y bueno para principiantes, pero con apenas una docena de controles ya se nota el tiempo que pasas arrastrando, alineando y redimensionando manualmente. En una GUI basada en markup o generada proceduralmente, esos cálculos de disposición se hacen por ti

  • La UI de Windows entre 1995 y 2001 realmente parecía el punto máximo de Windows
    Era muy nítida y limpia. Visual C++ y Visual Basic de esa época no eran perfectos, pero simplemente te dejaban terminar el trabajo
    XP estaba a la vuelta de la esquina y, para mí, después de eso todo fue cuesta abajo

    • Nada como una instalación limpia de Windows 2000
    • En XP, Vista y 7 también puedes lograr esa sensación usando el modo clásico
  • Un poco fuera de tema, pero esto está hecho con Avalonia, del que es la primera vez que escucho. ¿Alguien lo ha usado? La promesa de crear aplicaciones multiplataforma hermosas con una sola base de código .NET suena impresionante, pero me pregunto si en la práctica realmente cumple así de bien
    https://avaloniaui.net/

  • Me alegra mucho ver esto
    Fui uno de los primeros desarrolladores que hizo la parte “visual” de Visual Basic
    En ese entonces se llamaba Ruby y no tenía relación con el lenguaje de programación Ruby. Iba a ser un shell personalizable para Windows 3.0. La idea era que cada usuario de Windows creara su propio entorno de escritorio personal usando un editor visual y “gizmos”, que más tarde pasarían a llamarse con el nombre mucho más aburrido de “controls”
    Microsoft, probablemente con buen criterio, decidió que esto encajaba mejor como herramienta para desarrolladores que como herramienta para usuarios finales, y combinó Ruby con Basic para crear Visual Basic
    Si alguna vez creaste controles personalizados VBX, puedes culparme por esa API espantosa
    Y si te preguntas de dónde salió la expresión “fire an event”, puedes encontrar la respuesta en el artículo de Retool sobre VB: https://retool.com/visual-basic
    Advertencia de contenido: hay expresiones relacionadas con drogas. Digamos que es un “pregúntame lo que sea”
    Con una autopromoción un poco descarada: estoy buscando trabajo. En IBM, nuestro equipo recibió un golpe bastante fuerte en los despidos recientes y perdimos a McDonald's, que era nuestro único cliente dedicado
    Conozco muchos lenguajes y frameworks, aunque no lo sé todo. ¿Alguien lo sabe?
    Me gusta trabajar con los clientes para entender sus necesidades. Como todos los programadores, también disfruto programar, pero programar es solo un medio para hacer felices a los clientes
    Si te interesa, puedes encontrarme aquí: http://linkedin.geary.com/, http://resume.geary.com/

    • Por publicaciones como esta vuelvo a este sitio :-)
      Soy la persona que escribió el comentario largo y entusiasta de arriba. Me encantaría sentarme por Zoom una hora para escuchar historias de esa época, y creo que a la gente le gustaría si publicamos ese video aquí
      No tengo ninguna experiencia entrevistando ni canal de medios, pero haré lo mejor posible para hacer preguntas interesantes. Si te interesa, mándame un correo. Está en mi perfil
    • Gracias por hacer posible mi primera entrada al desarrollo profesional de software. Hizo realmente fácil crear pequeñas utilidades para resolver cosas
    • Me sorprende que también hayas creado SQLWindows. Siento admiración
  • ¿También tiene relación con MS Dialog Editor?

  • Si uno revisa el código, se ve que el autor implementó solo lo mínimo para crear una demo genial.
    Por ejemplo, las únicas funciones soportadas son MsgBox e InputBox: https://github.com/BAndysc/AvaloniaVisualBasic6/blob/383a005...
    Aun así, al ver el historial de commits, es impresionante que haya creado algo tan complejo en solo 4 días. También es un buen punto de partida para convertirlo en un IDE completo.
    Lamentablemente faltan funciones avanzadas como resaltado de sintaxis y autocompletado. No lo probé, pero como uso macOS, supongo que tampoco tendrá depurador.
    Para contar también algo de mi infancia: mi camino como desarrollador empezó primero con Turbo Pascal y luego pasé a Delphi 7. Delphi era bastante parecido a VB6, así que diseñaba apps arrastrando componentes al formulario.
    La primera app que hice fue un clon de Notepad++ y todavía conservo el código, pero es tan malo que me da vergüenza cada vez que lo veo.

    • En realidad sí tiene resaltado de sintaxis. Se agregó después de grabar el GIF y puede verse en la versión web. Lo del autocompletado, bueno, quizá más adelante :)
      El soporte del lenguaje VB6 también es limitado. Era más bien un juguete o una prueba de concepto, pero al ver la reacción positiva me dan ganas de implementar más funciones. Sobre todo porque el formato de guardado es compatible con VB6. Seguirá siendo un juguete, pero quizá pueda ser un juguete que realmente funcione, ¿no?
  • Se puede abrir la versión web en el navegador: https://bandysc.github.io/AvaloniaVisualBasic6/

    • En Firefox y Chrome va muy rápido, pero por alguna razón en Microsoft Edge (Chromium) se vuelve tan lento que casi parece congelado.
      Edit: encontré la causa. La opción Enhance your security on the web de Edge lo vuelve mucho más lento. Al desactivar esa opción, se soluciona el problema de rendimiento.
  • Realmente extraño el componente Frame en las aplicaciones actuales. Parece que todos creen que un título en negrita y un poco de espacio al final alcanzan para agrupar elementos.

    • En HTML existe fieldset, que tiene ese aspecto. Pero demasiados frameworks CSS lo rompen. A mí de hecho me gusta esa apariencia.
      Para comprobarlo, basta con poner lo siguiente en un archivo HTML vacío y ver cómo se renderiza: Frame1, HTML, CSS, JavaScript
    • Exacto. GroupBox es una decoración de UI esencial, y como no existe en los toolkits actuales, estoy haciéndolo yo mismo. Cuando todo el grupo de controles está relacionado con una función que se puede activar y desactivar, también pongo una casilla de verificación con etiqueta sobre el borde. En muchas interfaces antiguas se usaba casi como estándar y era muy claro.
      Otra cosa relacionada que desapareció, pero que es importante, es un TabView bien hecho. No sé quién fue el primero que insistió en llamar TabView a una simple fila de botones comunes, pero probablemente fue Apple, y es pésimo. Porque, igual que cuando no hay GroupBox, no muestra el límite que indica que los controles de abajo están sobre la vista de la pestaña seleccionada. Me parece que debería ser obvio.