¿A que lenguaje hay que migrar Argentum Online?

#1
Hace tiempo me encuentro preguntando cual seria un buen lenguaje para migrar Argentum Online.

Considerando que VB6 es un lenguaje totalmente obsoleto (la ultima version fue hace 20 años), cuya IDE no es soportada hace mas de 10 años, y ya a nadie le interesa, es claro que si queremos mantener el juego vivo, hay que cambiar de tecnologia.

Varias veces se hizo y se intento. Casos como AOC, DinastyAO, Dakara, AOWEB, et al, nos dan la pauta que existe un esfuerzo colectivo de cambiar el lenguaje, solo que hay distintos esfuerzos que, mayormente, no llevan a ningun lado.

El problema de seguir con un lenguaje obsoleto es que, si bien hace 10~15 años atras alguien que le interesaba la programacion aprendia VB6, colaboraba con el proyecto, y de paso lo que aprendia le servia para conseguir trabajo, la realidad actual es muy distinta; son muy pocos los programadores que quieran "ensuciarse" aprendiendo/programando VB6. Ergo, el proyecto agoniza.

Considerar un nuevo lenguaje no es tarea facil, ya que hay varios factores a tener en cuenta.
  • Compatibilidad. VB6 nos da una amplia compatibilidad con Windows. La compatibilidad minima va a depender en gran medida de cada servidor: algunos usuarios tienen Windows 10, otros tienen Linux, otros Mac, etc. Es cierto que hay muchos jugadores todavia con Windows XP. Si hay que dejar de lado ese grupo o no, dependera del analisis de mercado que haga cada servidor, pero el lenguaje a elegir deberia darnos una opcion.
  • Herramientas. VB6 solo tiene su IDE, la cual es bastante anticuada y no soporta opciones basicas de IDEs modernas como herramientas de refactoring, analisis de codigo, test runner, etc. El lenguaje a elegir idealmente deberia ser lo suficientemente moderno como para tener una IDE moderna que faciliten la tarea al programador.
  • Popularidad. Hoy en dia a la hora de buscar ayuda de un problema relacionado a VB6, el panorama es mas chico que años atras (basta chequear el tag de VB6 en StackOverflow). El lenguaje a elegir deberia ser lo suficientemente popular como para tener una muy buena documentacion y varios canales de soporte, ademas de que ya existan programadores experimentados en ese lenguaje.
  • Facilidad. Hoy en dia, al igual que hace 10 años, todavia hay chicos que quieren aprender a programar para poder modificar ArgentumOnline. Lamentablemente eso sigifica que tienen que aprender un lenguaje obsoleto. Para continuar la tradicion de ser formadores de conocimiento, la curva de aprendizaje del lenguaje a elegir deberia ser amena como para alentar a jugadores a aprender a programar.
  • Performance. Algo muy importante es poder hacer que el juego corra de forma fluida usando pocos recursos. Es sabido que, en Argentina (donde esta la mayor parte de usuarios de la gran mayoria de los servidores) la gente cuenta con computadores con menos prestaciones que la media mundial (no encontre informacion decente para respaldar esta afirmacion, por lo que apelo al sentido comun). La performance en un juego orientado para publico Argentino por lo tanto, no podria fallar en este punto. El lenguaje a elegir deberia tener un overhead minimo y/o proveer herramientas para mejorar la performance.
Otros puntos que no considero tan importantes:
  • Isomorfia. No debemos olvidar que ArgentumOnline cuenta con dos partes: cliente y servidor, y ambas desarrolladas con el mismo lenguaje, y en varios aspectos compartiendo la misma base del codigo. Si bien las implementaciones isomorficas ahorran tiempo de desarrollo, personalmente prefiero el lema de "la mejor herramienta para cada caso".
  • Modularidad. Como podemos observar muy facilmente en esta comunidad, existe el concepto de "sistemas", es decir pequeños fragmentos de codigo que proveen una funcionalidad especifica. Lamentablemente, copiando y pegando codigo es una mala opcion para hacer algo mantenible a largo plazo. Package managers modernos justamente resuelven este problema y hacen que agregar una nueva funcionalidad sea tan facil como correr un comando en la consola. Algo que seria lindo, seria que el lenguaje nuevo (o el ecosistema alrededor de el) permita desarrollar una arquitectura modular, para que instalar y actualizar una funcionalidad sea relativamente sencillo. No considero esto un punto clave ya que dependera mas de la arquitectura del nuevo ArgentumOnline que del lenguaje en si, ya que incluso VB6 tiene la opcion de generar DLLs pero nadie uso esa funcionalidad para hacer un servidor de Argentum modular.
Me voy a tomar el atrevimiento en dar el puntapie inicial de una lista de pros/contras de algunos lenguajes, aunque la idea principal es invitar a los desarrolladores (viejos y nuevos) a opinar y ver si, entre todos, podemos encontrar un consenso.

Algo muy importante es que no estoy buscando armar un grupo de trabajo, esto es simplemente un experimento teorico. Entonces, si quisieramos ser especificos, la pregunta podria reformularse como: ¿En caso de contar con recursos suficientes, cual seria un buen lenguaje para migrar Argentum Online, considerando estos puntos clave?

Al ser un proyecto con dos partes bien diferentes, a veces la opcion de un lenguaje es buena para el cliente, pero el servidor se lleva mejor con otro lenguaje (excepto si utilizamos un enfoque isomorfico, como escribi mas arriba). En la descripcion de cada lenguaje voy a hacer referencia a esta diferenciacion.

Nota: para la popularidad, voy a basarme en las estadisticas de Github. Podria combinar la informacion con otros repositorios y/o Google Trends, pero no creo que sea necesario para probar el punto en cuestion. Para la facilidad de cada lenguaje, voy a aplicar el sentido comun y experiencia personal, aunque tambien me voy a basar en una encuesta hecha a 900~ desarrolladores. Para la performance de lenguajes, principalmente voy a usar la informacion de este benchmark, y mas sentido comun.

  • VB6
    • Si bien no es un candidato, lo dejo aca for completeness.
    • A completar
  • C#.
    • C# es el estandarte de .NET, y tiene bastantes herramientas para facilitar la creacion de juegos. Se podria argumentar que, ademas de VB.NET es la eleccion mas "natural", ya que seria continuar con lenguajes de Microsoft.
    • Compatibilidad: Depende enteramente de la version de .NET que se use. Desde Windows 98 en adelante. Ver listado completo.
    • Herramientas: Cuenta con Visual Studio, una IDE muy potente para desarrollar bajo Windows. Aunque a la hora de C#, no se puede olvidar de Unity, el motor para juegos mas popular actualmente, el cual ya utilizaron algunos proyectos de migracion de ArgentumOnline. Otra herramienta para la creacion de juegos 2D, aunque ya deprecada, es XNA, usada por ejemplo en Terraria.
    • Popularidad: Es el lenguaje mas popular de .NET, y existen varias empresas locales utilizandolo.
    • Facilidad: C# es, junto con Java, enseñado en muchos institutos. Aunque podriamos argumentar que esta un poco atras que Java en la facilidad de curva de aprendizaje.
    • Performance: A completar.
  • Javascript
    • Compatibilidad: A completar.
    • Herramientas: Debido a su popularidad, existe un ecosistema enorme de editores, librerias y package managers con Javacript a la cabeza.
    • Popularidad: Es el lenguaje mas popular del mundo. Al parecer hoy en dia todo el mundo sabe Javascript. Esto nos asegura que existan muchos desarrolladores nuevos con este conocimiento.
    • Facilidad: Es uno de los lenguajes de programacion mas faciles, teniendo en cuenta que cuenta con funcionalidades que hacen la vida mas facil al programador (como closures, o falsy values).
    • Performance: A completar.
  • C/C++
    • A completar
  • Java
    • A completar
  • Rust
    • A completar
  • Go
    • A completar
De nuevo, considero esto como un esfuerzo en conjunto, por lo que invito a todos a poder opinar sobre el tema en base a su experiencia personal, intentando siempre encontrar informacion para nuestros argumentos.

Pido disculpas por el spanglish (desventajas de tener otra lengua natal), ya lo ire corrigiendo.

Revision historica (siguiendo semver):
  • 2018-04-30 0.1.0-draft: Primer draft, la idea principal y algo de informacion.
Todo:
  • Completar la lista de lenguajes iniciales.
  • Encontrar una buena forma de evaluar la performance en juegos, especificamente.
  • Buscar fuentes para todas las afirmaciones que asi lo requieran.
 

GoDKeR

El Rey y el As
Miembro del equipo
Administrador
#3
Java o C# a lo sumo, más que eso no.

Y no debería existir compatibilidad para XP, ni siquiera para resoluciones de 800x600
 
#4
JS

- Es el lenguaje más popular de GitHub -> MUCHÍSIMA documentación, librerías y frameworks.
- Potencia más que suficiente para lo que requiere Argentum.
- Corre en cualquier sistema de la misma forma, tanto del lado del cliente como del servidor. (Esto trae una ventaja adicional: ya no es necesario un VPS Windows, que seguramente saldrá más caro que uno Linux).
- No es necesario descargar absolutamente nada para jugar (en caso de apuntar a la plataforma web).

Hace rato tengo en mente programar un servidor/cliente web en JS usando express, websockets y sqlite. La idea es que clonando el repositorio de GitHub y después ejecutando 3 comandos (npm install, transpilar y ejecutar) ya esté funcionando. Creo que es muy buena idea porque cualquiera podría tener online su servidor sin tener que ponerse a configurar el IDE, bajar librerías, compilar, configurar la db, etc.
 
#5
Por que?

Java o C# a lo sumo, más que eso no.

Y no debería existir compatibilidad para XP, ni siquiera para resoluciones de 800x600
Por que crees que no deberia existir la compatibilidad con XP? Estaria bueno ver la cantidad de usuarios todavia con ese sistema operativo, y ademas las resoluciones. Quiza se podria hacer que algunos servidores implementen telemetria para poder saber finalmente quienes son los que juegan AO.

Como resolverias el problema de la seguridad / cheats siendo que cualquiera puede ver el codigo fuente del juego?
 

GoDKeR

El Rey y el As
Miembro del equipo
Administrador
#7
Por que?



Por que crees que no deberia existir la compatibilidad con XP? Estaria bueno ver la cantidad de usuarios todavia con ese sistema operativo, y ademas las resoluciones. Quiza se podria hacer que algunos servidores implementen telemetria para poder saber finalmente quienes son los que juegan AO.



Como resolverias el problema de la seguridad / cheats siendo que cualquiera puede ver el codigo fuente del juego?
https://prnt.sc/jc8x3j


PD: Javascript es una poronga.
 

Rydzek

OlimpoAO Staff
Miembro del equipo
Moderador
Especialista de RRPP
#8
Yo creo que sería una buena elección el cliente en Java y el servidor en C.
Ventajas del cliente en Java:
-Puede correr en prácticamente cualquier SO.
-Es (en su mayor parte) orientado a objetos, paradigma ideal para representar al AO.
-Es uno de los más usados en la actualidad.
-Muchos lo eligen para aprender a programar.

Ventajas del servidor en C: Muchas

Pensándolo desde otro punto de vista, diría que el futuro del AO está en la web.
Creo que la gente ya no se gasta en descargar este tipo de juegos.
 
#10
Te separo la respuesta en 2 puntos.

1) Controlas todo lo que sea posible desde el servidor.
2) https://github.com/javascript-obfuscator/javascript-obfuscator
Perfecto! El punto 1 es bastante agnostico, por lo que es un punto a tener en cuenta sea el lenguaje que sea.

El punto 2, estuve investigando el link y el resultado no es muy ofuscado. Es decir, alguien con conocimiento avanzado de Javascript puede leer el codigo resultante y entender que esta pasando. Podria detener un hacker / cheater novato, pero en ese caso un minifier alcanza y sobra.

En base a tu comentario, investigue alternativas y encontre que con WebAssembly, se podrian codear las partes criticas en C++ y compilar a WASM. Con esto podriamos detener un hacker un poco mas avanzado.

Es cierto que Windows XP hace rato largo ya no es soportado. Igualmente considero importante saber la cantidad de jugadores todavia con ese SO. Comparto el sentimiento de dejar de soportar versiones viejas, pero no podemos poner un requerimiento minimo sin tener informacion precisa. Habra algun servidor que cuente con esta info? Habria que hacer una encuesta publica?
 

Agushh

MR BROWNSTONE
#14
Creo que mas allá de que el soporte para windows xp expiró, en mi opinión, AO no debería no tenerlo en cuenta.

Pregunto, y sólo en función de java porque estoy aprendiendo un poco de ese lenguaje, por qué cliente en java y servidor no java?. Tan pocas herramientas tiene java, en comparación con otros lenguajes, para no utilizarlo para codear el servidor?. Y si esto es así, se justifica, mas allá del gusto o preferencia de c/u, utilizar algo distinto por esa disponibilidad adicional de herramientas?. Obviamente, teniendo siempre en cuenta que es para aplicarlo al Argentum.

Saludos.-
 

MAB

Symphony of Enchanted Lands
#16
Nadie hasta el momento hizo algo extraordinario con vb6 y el juego en sí.

¿Que te hace pensar que por portearlo a otro lenguaje eso va a cambiar?

Si tu respuesta va a ser un listado de las ventajas de cada lenguaje, te puedo decir lo siguiente:

Para el momento en el que te des cuenta como esta hecho "AO" seguramente comprendas que para obtener esos beneficios de esos lenguajes seguramente tengas que eliminar, modificar y hasta reprogramar gran parte del mismo; llegado ese punto podrías crear un juego similar de 0, mucho mejor que la base que pretendías usar.

En resumen, da igual el lenguaje, la limitación la tiene el desarrollador. A fin de cuentas el juego esta hace años en vb6 con todas las fallas que tiene y sin embargo la gente lo jugó/juega igual.
 
'Me Gusta': OwL

GoDKeR

El Rey y el As
Miembro del equipo
Administrador
#17
Nadie hasta el momento hizo algo extraordinario con vb6 y el juego en sí.

¿Que te hace pensar que por portearlo a otro lenguaje eso va a cambiar?

Si tu respuesta va a ser un listado de las ventajas de cada lenguaje, te puedo decir lo siguiente:

Para el momento en el que te des cuenta como esta hecho "AO" seguramente comprendas que para obtener esos beneficios de esos lenguajes seguramente tengas que eliminar, modificar y hasta reprogramar gran parte del mismo; llegado ese punto podrías crear un juego similar de 0, mucho mejor que la base que pretendías usar.

En resumen, da igual el lenguaje, la limitación la tiene el desarrollador. A fin de cuentas el juego esta hace años en vb6 con todas las fallas que tiene y sin embargo la gente lo jugó/juega igual.
La limitación la tienen varios en la cabeza.
 

miqueas150

The Prophet
Ex-Staff
#18
Go, ahora que actualizaron y tiene soporte a librerias, esta pegando muy fuerte y si no son unos chotos en la programacion puede tener un rendimiento re sarpado.

Y lei varios rumores de internet de que Netflix va a abandonar los lenguajes en que esta (NodeJS y no me acuerdo el otro), y va a migrar x% de sus servidores a GO.

@MAB La limitacion depende de la cantidad de neuronas mastianas tenga activas la persona que programa
 

Midraks

Creador de AOWeb
Ex-Staff
#19
Go, ahora que actualizaron y tiene soporte a librerias, esta pegando muy fuerte y si no son unos chotos en la programacion puede tener un rendimiento re sarpado.

Y lei varios rumores de internet de que Netflix va a abandonar los lenguajes en que esta (NodeJS y no me acuerdo el otro), y va a migrar x% de sus servidores a GO.

@MAB La limitacion depende de la cantidad de neuronas mastianas tenga activas la persona que programa
Go para APIs está rindiendo muy bien, las GoRutines son magia.
 
Arriba