• INICIO
  • AOJAVA EN SF.NET
  • DESCARGAS
  • ARGENTUM ONLINE

AOJava

  • ingresar
  • registrarse
Inicio

bitácoras

Imagen de gorlok

De vuelta en linea

gorlok — 26 November, 2009 - 20:30

Después de un tiempo con el sitio caído, debido a que se murió el viejo servidor, ya está restablecido con nuevos bríos.

El proyecto sigue su lento y paulatino curso Laughing out loud. Tengo algunas novedades por el lado del servidor AOJava que compartiré en otro momento, y hubo avances con el nuevo cliente.

  • noticias
  • gorlok's blog
  • 1 comentario
Imagen de gorlok

Cambios en el sitio

gorlok — 2 June, 2009 - 23:43

Estuve haciendo mantenimiento en el sitio, para solucionar el problema con el envío de mails al registrarse y al intentar recuperar la clave. También algunos habrán notado que se había llenado de spam en los comentarios, todo por un descuido en la configuración en la última actualización del sitio Shock . Ya fue corregido y el spam eliminado Evil, y espero que no se vuelva a producir. Creo que no se perdió ningún comentario, cualquier inconveniente, no dejen de avisarme.
Reactivé el captcha payaso y ahora hay una nueva versión. Lamento los inconvenientes que pueden traer esto, pero habrá que convivir con ello por un tiempo. Si resulta muy agresivo, molesto o redundante, me avisan en los comentarios o en contacto.

  • gorlok's blog
  • Inicie sesión o regístrese para enviar comentarios
Imagen de gorlok

Curiosidad y novedades

gorlok — 18 February, 2009 - 00:20

Primero una curiosidad: revisando archivos viejos y algunos datos, caigo en la cuenta que el proyecto AOJAVA, ¡ya tiene más de 5 años!.

Nació el 5 de septiembre del 2003, más precisamente a las 22:30, cuando creé el primer archivo. Era una clase muy simple para probar la comunicación via sockets. Usé Netbeans para armar el proyecto. Al día siguiente ya estaba armando la clase principal del servidor y algunas más.

El día 4 de febrero de 2004, a las 18:17, se registró en SourceForge.net el proyecto, dándolo a conocer al poco tiempo.

Desde entonces, de forma discontinua, con algunas pausas prolongadas, fue creciendo hasta lo que es hoy. Muchos me han ayudado y colaborado en todo este tiempo, entre ellos se destacan Nachito, AlejoLP, Morgolock, ElOso, Maraxus y Piluex.

Bueno, basta de melancolía Smile, y paso a contarles las novedades:

- Lo más importante, estoy haciendo el cambio de licencia de GPLv2 a AGPLv3. Es algo que tenía pendiente desde hace tiempo.

- Integré Maven2 y TestNG.

- Rehice la carga y grabación de mapas, y actualicé los mapas a los últimos liberados. Aprovechando TestNG, la primer prueba fue para comprobar que estas rutinas funcionen sin errores, probando la carga y grabación, comparando archivo original y nuevo por MD5. Fue una prueba interesante, que permitió corregir algunos detalles, y poner en marcha la infraestructura para tests.

- Por la llegada de Maven, reorganicé el proyecto de forma más prolija.

- Estoy revisando toda la arquitectura, haciendo refactoring 2 por 3, buscando un diseño más simple y claro, y con mayor desacople.

- En el camino apliqué algunos Patrones de Diseño donde mejoraban la arquitectura. Se ganó bastante con esto, en varios sentidos. No pienso aplicar patrones por gusto, sino por necesidad, para no incurrir en el fanatismo de meter patrones solo por ganas de implementarlos y decir que se usaron. Todo se está haciendo a conciencia y meditando los pros y contras.

- Se han corregido e implementado nuevos paquetes.

- Aparecieron algunos bugs nuevos, y pero muchos más son los que se corrigieron.

- Se resolvieron los problemas de estabilidad del servidor, por el manejo inapropiado de algunas colecciones de vectores, que resultaban en ConcurrentException (y no era por threads).

- Falta revisar todo el manejo de red. Si bien NIO es el camino correcto, estoy muy interesado en usar Apache MINA, por su buena arquitectura y el valor agregado que ofrece.

- Tal vez use algún framework de inyección de dependencias, para facilitar el desacople de algunos componentes. Aunque se podría hacerlo de otra forma, incluso "caserito", tal vez le de una oportunidad a Guice. Otra opción que conozco bien sería Spring, pero debe ser lo menos intrusivo posible.

- Estuve haciendo algunas pruebas de performance, encontrando un par de problemas. Uno tiene que ver con el GC, que he estado afinando y ya parece estar razonablemente bien, pero debo seguir vigilándolo. Hay otro tema, que parece ser culpa del manejo de red que hago con NIO, que no está 10 puntos desde que agregué el protocolo binario "de prepo". Si integro Apache MINA, esto quedaría resuelto porque aprovecharía a desacoplar y reemplazar todo el manejo de red. En caso contrario, habrá que hacerlo de todas formas y revisar en detalle este tema.

- Como no podía faltar, ¡aparecieron los clones!. Por el momento no me preocupa mucho, ahora que estoy armado con TestNG vamos a ver cómo reproducir el problema con un test, y ver qué sale de la experiencia.

En definitiva, mucho para hacer, pero también bastante avance. En las próximas semanas se me va a complicar avanzar a este ritmo, pero continuaré en los ratos que pueda. Voy organizándome un plan de tareas para no trabarme, manteniéndolo el trabajo interesante y agradable la mayor parte del tiempo posible.

Y ahora a descansar, que siempre hay mucho para hacer Smile

  • gorlok's blog
  • Inicie sesión o regístrese para enviar comentarios
Imagen de gorlok

Bug fixes

gorlok — 10 February, 2009 - 19:59

Corregí el paquete PlayWave, que le falta enviar las posiciones (x, y).
Corregí el decodeData(), que estaba todo mal Laughing out loud, y adapté el generador de paquetes para que lo genere.

Pendientes:
Arreglar el encoding de los .dat, tal vez falta especificar el encoding al abrir el archivo, o esté en utf-8.
El comerciar con NPC falla. Revisar ChangeNPCInventorySlot, ChangeInventorySlot, UpdateUserStats, CommerceInit.

Actualización 23:57:
Ya está incorporado el módulo de Areas, y parece funcionar bastante bien. Hay algunos bugs, pero ahora se puede caminar (con algunos tropiezos) por el mundo nuevamente! Laughing out loud

  • aojava
  • noticias
  • gorlok's blog
  • Inicie sesión o regístrese para enviar comentarios
Imagen de gorlok

Actualización del Protocolo a 0.12.1b y novedades

gorlok — 10 February, 2009 - 00:02

Hacía mucho que no comentaba nada, así que haré un rejunte un poco extenso.

Hoy se actualizó el protocolo a 0.12.1b, el actual en el trunk del AO oficial. Con esto, nos ponemos al día, y permite usar el cliente de AO para realizar pruebas y verificar la compatibilidad... o por los menos un poquito Smile

El servidor ahora está muy inestable, y algunos paquetes estén fallando y hace falta revisarlos. Por el momento se puede conectar, crear usuarios (aunque falla la conexión luego de crearlos), pedir estadísticas, ver el mapa, etc.

Gran pendiente: desarrollar el manejo de áreas de forma equivalente al oficial, y resolver todos los cuelgues.

Hace un par de semanas estuve viendo alternativas para el cliente. Hace un par de años hice un rendering en Java2D, usando FSEM (full-screen exclusive mode) y "active rendering". Volví sobre este diseño para ver cómo había quedado, y si había posibilidades de resucitarlo. Si bien el código estaba bastante bien, recordaba muy bien las dificultades al tratar de integrar los controles de Swing con el Active Rendering, o mejor dicho, este último y el EDT (Event Dispatcher Thread).

Buscando otras alternativas, llegué a Slick: es una API para desarrollar juegos 2D en Java usando OpenGL. La verdad que me impresionó, por lo sencilla que es, y la calidad prometedora de los juegos realizados por su comunidad. Muchos son muy entretenidos, y se pueden jugar desde la web gracias al JWS (Java Web Start). Con un par de horas nomás, ya había portado mi viejo rendering desde Java2D a Slick, y un funcionamiento impresionante comparándolo a Java2D.

Slick trae librerías para el manejo de tilesets, mapas, gestión de las imágenes, fonts, sistema de partículas, sistema de sonido 3D, sistema de física, y mucho más. Para la GUI, por lo que estuve viendo, la que más me gustó fue Thingle, que está basada en Thinlet, y a su vez está basado en XUL. Es muy intuitivo, aunque al comienzo no veía ni cómo empezar Laughing out loud. Pero apenas vi un par de ejemplos, fue muy fácil agregar algo de GUI al cliente de AO.

Por el momento, el nuevo cliente solo realiza rendering y poco más. No tiene nada de red.

Volviendo al tema servidor, necesita urgente un refactoring total, y reescribir gran parte. Hay cosas que son un asco, y que ni siquiera me gustaría reconocer que alguna vez fueron escritas por mi Laughing out loud. Es una tarea pendiente desde que comencé con él, porque inicialmente traté de mantener cierta similitud con el fuente y rutinas del AO, facilitándo mucho el port. Sin embargo, esto llevó a una implementación lejos de un buen diseño OO, y ahora se hace más que evidente la necesidad de replantearlo. Con el conocimiento y experiencia adquirida, ahora me encuentro en una mejor posición para llevarlo a cabo.

La elección de usar NIO allá en sus comienzos, ha sido un gran acierto, pero el diseño no resultó tan limpio como quisiera. Me gustaría migrar todo el manejo de red al framework Apache MINA. Por lo que vi, no sería complicado, y resultaría en un diseño claro, intuitivo, y extensible, con muchos extras: compresión de datos, encriptación (SSL/TLS), logging y gestión por JMX, etc.

Hoy agradecí haber usado el generador de paquetes del servidor y cliente con metaprogramación. Cuando porté AOJava al protocolo binario, AlejoLP me dió un script php y unos archivos de definición, que él había usado para generar los paquetes del protocolo para Python. Yo lo había adaptado para generar paquetes para Java, tratando de mantener actualizados los archivos de definición de tanto en tanto. Hoy encontré algunas diferencias con respecto al protocolo actual, el 0.12.1b, así que una vez detectados los cambios y corregidos los archivos con la descripción, regenerarlos fue unos segundos. Me puso muy contento eso Smile

Hace un tiempo que recolecto info técnica de AO cuando encuentro algo sobre formatos de archivos, o especificaciones y explicaciones sobre algoritmos usados, y cosas así. Sinceramente es muy poco lo que hay o lo que se encuentra, y está todo muy desperdigado. Intentaré juntar lo que pueda, para subirlo en algún momento a una wiki o algo similar, para consolidarlo, y que quede disponible como biblioteca técnica siempre a mano.

Bueno, esto es todo por ahora. Cualquier cosa, el último código fuente del servidor está en el CVS. Si alguien se anima a probar algo, no dejen de comentarme cómo les fue. Probablemente migre el repositorio a Subversion en alguna oportunidad, pero ya habrá tiempo para eso.

Hasta la próxima.

  • aojava
  • noticias
  • gorlok's blog
  • Inicie sesión o regístrese para enviar comentarios
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • …
  • siguiente ›
  • última »
Distribuir contenido

Navegación

  • FAQ
  • instalación
  • contacto


Sitio oficial de Argentum Online
Fenix AO
Tierras del Sur
Imperium AO

SourceForge.net Logo
Get Firefox!
Powered by Drupal
Valid XHTML 1.0 Strict
Add to Technorati Favorites



{entre llaves}
Foro de desarrollo AO
Blog de AlejoLp
Mozilla Argentina

  • ingresar
  • registrarse

Java is a trademark of Sun Microsystems, Inc. in the United States and other countries.