domingo, 7 de octubre de 2012

Proyectos de software random: MobiRPG

Sí, al fin les comentaré sobre algún proyecto de software que haya programado desde cero este autoproclamado programador (casi) demente. ¡Mwhahahahaha!

Su nombre: MobiRPG

¿Qué es?
MobiRPG tiene como objetivo ser un clon (barato...) del famoso RPGMaker, fusionando estilos con la serie de juegos de rol de Nintendo: Pokémon (basado en su Versión Esmeralda), y, mediante conjuntos de "motores" gráficos y de jugabilidad diferentes, emular otros estilos diferentes de juegos de rol como los famosísimos Final Fantasy, e incluso, en alguna version futura, permitir hacer todo esto en 3D. Éstas eran las principales razones de ser de este proyecto, Además de que con éste aprendí mucho sobre la programación, cómo funcionan los scripts, y puso a prueba mis dotes de programador, no es mucho lo que se puede demostrar con este proyecto, pero sin duda me ha ayudado mucho.

Estado:
Actualmente, si mal no recuerdo, es capaz de cargar los mapas y correr cierto nivel de scripting, el cual es binario, contrario a Ruby, que es el lenguaje de programación utilizado en el RPGMaker XP, dado que lo que buscaba era facilidad de implementación en lo que sea que fuera a ejecutarse (el teléfono más limitado en el que fue probado ha sido un Motorola V360, con sólo 512KB de memoria utilizable, compartida con el mismo programa en sí). Además (limitado por la implementación java donde se ejecute), es capaz de reproducir SFX y reproducir secuencias MIDI, lo común en una aplicación J2ME. Sí, es J2ME, he intentado portarlo a Android, y el 90% del código ha sido fácil de portar, pero aún tengo problemas para manejar la pantalla (cuestiones de DPI y escalas). Está optimizado desde sus inicios a utilizar pocos recursos (dada la capacidad de los dispositivos de la época), por lo tanto debería 'volar' en cualquier smartphone que pueda ejecutar android.

Comenzó con un simple "helloworld.java", y poco a poco se fueron agregando funciones y clases, en una de sus etapas ya incluía pantalla de presentación, y estaba levemente implementado un sistema de menús, pero finalmente borré el código que lo hacía, dado que se había vuelto incompatible con el código actual. Su scripting, como ya había comentado, era binario, pero tenía lo necesario, sentencias IF..ELSE, bucles FOR y WHILE, manejo de memoria (de 16 bits), operadores comparativos, control de vibración del teléfono, etc.
Está totalmente basado en eventos y timers (a pesar de que se recomiendan bucles de dibujado para este tipo de juegos) e incluso incluye una débil implementación de threads. Utiliza mapas de bits en PNG, pero estaba en proceso de desarrollo la utilización de algoritmos RLE combinados con indexación de colores, para reducir un poco más el peso de los recursos gráficos. También se estaban probando efectos de transición (p.ej. el clásico desvanecimiento), el cual funcionaba perfectamente en la última ejecución. ¡Oh! También tiene ese famoso infinite scrolling que se ve en los juegos sobre los que está basado, fue un poco complicado de implementar, pero está casi perfeccionado hasta el momento.
En cuanto a Música y SFX, la clave estaba en el MIDI para la música y WAV para los SFX, dado que no existía soporte nativo para música repetitiva (indispensable para los BGM) intenté hacer la implementación por cuenta propia, fallando muchas veces, limitado por las interfaces y funciones que exponía la implementación JAVA del dispositivo. Actualmente no es muy funcional, en ciertos dispositivos funciona, pero hay que modificar los MIDI (implicando conocer otros skills de hacking) tarea hecha por otro pequeño programa escrito también en C#.
¿Por qué tantos programas adicionales? Simple. Si un programador necesita hacer algo y no encuentra una herramienta que haga lo que necesita y tiene los conocimientos necesarios, simplemente programa la herramienta, y fin del problema.

Actualmente el código se encuentra en SourceForge (aquí), y no contiene el proyecto de Visual C# del editor gráfico (el cual esta programado en C# [.NET 2.0]) ni ninguna otra herramienta adicional programada producto del desarrollo del mismo puesto que aún no había organizado los archivos del proyecto.

¿Cómo se ve?
¡Aún funciona!
(SE K850i)
El editor también funciona
en MONO














Bien, espero les haya gustado mi pequeño proyecto, tal vez tenga futuro, pero mi ocupada agenda actual no me permite avanzar más con en el código por el momento. Por cosas como esta es que es muy divertido programar.

EL. PSY. CONGROO.

domingo, 30 de septiembre de 2012

Migración a x86_64: Utilizando todos los bits disponibles

!Hola! Tiempo sin actualizar, oye.

Veamos qué ha hecho este auto-proclamado programador (casi) demente:

Siendo ya una acalorada noche de domingo, al fin he terminado (o eso creo) de migrar mi sistema de una arquitectura de 32 bits a 64 bits.
¿Por qué lo hago? Pues si ya tengo 4 años con la misma máquina, a pesar de tener un procesador capaz de trabajar a 64 bits, y con una compatibilidad de aplicaciones 64 bits bastante elevada, me he dicho ¿Por qué no?
Al final, ha resultado más fácil de lo que pensaba. Aunque se me hizo un poco mas fácil aún puesto que he reparticionado de cero (y de paso convertido a GPT) dado que tenía una partición de 80GB vacía donde hace 3 años residía algún Windows, había que ponerla a trabajar.

La migración en mi caso lo único que me requirió fue hacer un backup de /etc para recordar las configuraciones y ajustes que había hecho en todo mi tiempo de vida con esta distro; y del /home, puesto que iba a mover la partición donde residia éste último. Al final tamnbién me decidí por eliminar la partición swap pues ésta se recomienda para equipos con 512MB o menos. Teniendo 2GB y habiendo probado estos últimos 9 meses que tengo de haberle hecho el upgrade, que no llego a ocupar más del 75% durante el uso más pesado, fue la única razón que necesitaba.

Lo más pesado, como siempre, ha sido el backup de los documentos, puesto que la instalación se fue en menos de 15 minutos (base y algunos agregados básicos como el grub). Por el otro lado, he sentido que cuando los desarrolladores de ArchLinux eliminaron el framework de instalación, nos han dado mucha más libertad, de forma simplificada, como siempre ha sido, motivo por el cual siempre me ha gustado y utilizo esta distribución.

Finalmente, me tomará algunos días recordar las cosas que me falten restaurar, como aplicaciones que uso poco, pero lo escencial está listo.

Como en toda acción de este tipo, no faltaron los problemas. Al intentar recompilar para arquitectura de 64 bits el CRM que utilizo para mi clúster, SLURM, el compilador me ha mandado a ver si la marrana puso, prácticamente, puesto que algún parche necesario no estaba disponible. Todo se resolvió al compilar la versión -git que al parecer soporta x86_64 por defecto, paquete que no quería compilar cuando estaba usando 32 bits...
That's Suspicious...

No está de más, pero ésta es la prueba como debe ser:















Y bien, con esta corta publicación, me despido por esta vez, ¡nos vemos!

EL. PSY. CONGROO.

domingo, 23 de septiembre de 2012

De scripts y sus allegados

¡Y aquí estoy, otra vez, yo el autoproclamado programador (casi) demente!

Algo que no puede faltar a la hora de trabajar con cantidades numerosas de archivos y datos, son los famosos, benditos y muy bien diseñados scripts.
¡Ah~!, ¿qué sería de nuestras vidas sin los scripts?

Imagínense que deben recorrer una lista de archivos que se encuentra en un archivo de texto plano de unos 2.4MB que contiene cerca de medio millón de líneas de información. ¿Creen que pueden procesar todo el documento línea por línea manualmente? ¡Claro que no! ...aunque en teoría se puede, pero requiere de mucho tiempo y esfuerzo, cosas que en nuestras aceleradas vidas de la era del internet escasean.

Hace un tiempo, organizando mi biblioteca de música, me encontré esto de los 'moodbars', cuestión que funciona perfectamente en mi administrador de música favorito, Amarok, y como soy bastante 'picky' a la hora de ordenar mis cosas (mas no así mi cuarto/laboratorio jejeje) pues necesitaba encontrar la forma de que el proceso de escanear toda la música y generar los moodbars, fuera automático.

Navegando, navegando y nadando en la red, dí con este sencillo script llamado moodbar-gen:

...el cual se ha convertido en varios scripts, dependiendo de la función que hacen, los cuales he modificado para agregarles algunas mejoras y correcciones, como por ejemplo:

Script para transcodificar algunos tipos de archivo de audio a vorbis o mp3, cuyos ajustes son para lo que necesito, obviamente:


O este script que se encarga de analizar 15 segundos despues del primer minuto y actualizar las etiquetas del archivo con el valor de las BPM:

Y así, con pequeñeces como éstas, he logrado hacer mi vida más facil.
Sí, señores, esto es el poder de la consola. Personalmente las GUI las utilizo sólo en caso de que sea necesario, y cuando quiero Eye Candy para lo que haga.

...Y así, termino mi publicación del día de hoy, pueden utilizar los scripts que he modificado, ¡pero tengan en cuenta que aún pueden contener errores!

EL. PSY. CONGROO.

miércoles, 19 de septiembre de 2012

Proyecto actual: Cluster 'Yummi'

Yo! Soy yo de nuevo, el autoproclamado programador (un poco) demente, Rozen.

En esta ocasion vengo a presentarles mi pequeño proyecto actual, al cual he llamado Yummi.
Como ya la había presentado anteriormente en Google+, seré un poco perezoso y haré un poco de copy-paste.

Señoras y señores, les presento a mi proyectito de cluster. #NotitasDeUnInformaticoLoco  
Yummi, en todo su esplendor
Codename: Yummi
Objetivo principal: Ayudar en la conversión de una enorme cantidad de archivos de música (unos 70GB por lo menos)
Objetivo secundario: ¿La dominación del mundo informatico? --tal vez termine solo como sujeto de pruebas random xD

Historia:
Este proyecto nace de la necesidad de acelerar el proceso tedioso de convertir una biblioteca musical a un formato un poco mas compatible con todos mis cacharros multimedia, esto es, MP3, un formato con perdida que a pesar de que prefiero mil veces OGG Vorbis (que ademas es OpenSource), tiene la ventaja en compatibilidad.
Yummi, deriva de la pronunciación japonesa de la primera sílaba que compone el nombre de Junerin, PC de escritorio a la derecha, debajo de la GameCube, y la primera letra repetida mas la primera sílaba del nombre MInAMI, que pertenece a la netbook de trabajo universitario mostrada en primer plano, las cuales son las primeras unidades en funcionamiento.

Especificaciones:
Junerin: Una ya un poco antigua Pentium Dual-Core @ 2.5GHz con 4GB de RAM. Utilizada para las tareas mas pesadas, y sujeto de pruebas para todos mis proyectos de software/hacking/etc. Utiliza ArchLinux como SO.
MInAMI: Una netbook como la gran mayoría, con un Atom @ 1.6GHz y 1 triste GB de RAM (xD). Utiliza ArchLinux también como SO.
PC-X A la izquierda: Aún sin nombrar ni agregar al cluster, contiene unos pésimos 256MB de RAM y un procesador de 1GHz, para mi asombro. Está en blanco y esperando inicialización.
PC-Y A la izquierda en cajeta debajo de PC-X: Igual que PC-X, solo que con unos 32MB de RAM y 800MHz de Procesador, no sé si ayudará o ralentizará al cluster (lol). Igual está en blanco y en espera de ser inicializada.
PC de hermano-san: (no se muestra en la imagen) Ejecuta Windows XP, pero pienso hacerle Dual-Boot para que pueda agregarlo al cluster. Tiene 512MB de RAM y un Intel Pentium D @ 2.5GHz.

Y bien, aquí está, luego de pelear con distintos CRMs (¡TORQUE te odio!), terminé instalando (no si antes tener que rastrear un parche por que si no, no compilaba) el SLURM (https://computing.llnl.gov/linux/slurm/) y configurando, configurando, al fin he dado con la configuración óptima.
Ahora la siguiente etapa es la configuración de los otros nodos y la adaptación de los scripts que utilizo.
Ha llegado la hora de poner a prueba (sólo un poco) los conocimientos que he obtenido a través de los años (oh, sí, hace décadas #PunIntended  ) sobre programación y redes (agradezco a cisco por enseñarme a cómo programar sus routers, por cierto, no tengo uno, pero la idea era enseñarme los conceptos, ¿no? xD), y lo tanto que he aprendido en la Universidad *cough-nada-cough-niet-cough-nothing-* así que ahí vamos.
Solo espero que esta bestialidad no aumente el recibo de luz, mas de lo que ya está 89 palos union fenosa? are you fucking kidding me?

#ToBeContinued  ...

Mientras tanto, en una subsiguiente publicación:

La (antigua) portátil de mi madre
Continuando con mis aventuras en #NotitasDeUnInformaticoLoco  , he recordado que tenia una portatil tirada, la abuelita que ven en la imagen, que ya no le funciona el teclado (ciertas teclas, pero no es utilzable), y los puertos USB ya no aguantan que ni siquiera les conecte un teclado =/
Aparte de eso, tiene un Intel Celeron @ 2.4GHz y 512MB de RAM, los cuales a duras penas empuja el windows XP y cojeando levanta en escritorio XFCE pero viene perfecto como servidor para mi proyecto Yummi.
Al inicio se mostraba reacia a actualizar sus paquetes, dado que #ArchLinux  había hecho un despelote con el paquete 'filesystem' y la música la ponía el paquete 'glibc' feat. el directorio /lib, proceso que me costo un poco, ya que esta portátil no la enciendo desde hace 4 meses xD
Una vez resueltos los trepaquesube que se me fueron formando patrocinado por el equipo de devs de Arch, saltaba otro pequeño pero importante problema: No quería conectarse al Nodo Maestro, horas después me doy cuenta que NTP no estaba instalado y la fecha de la misma estaba desfasada en -4h.
Al final, ya esta funcionando, ahora solo me falta hacer las pruebas impertinentes pertinentes :D

EDIT: La prueba ha finalizado y le he sacado 9x en la velocidad de conversión, aun esta astronómicamente lejos de los 29x que alcanza el Nodo Maestro, pero algo es algo y sigue siendo mayor que los 4x de MInAMI, supositoriamente mas nueva que esta xD
Ah sí, ¿que cómo demonios he logrado configurarla sin un teclado funcional? ¡pues eso es la magia del SSH, amigos! xD

#ToBeContinued  ...

Y así, llegamos al día de hoy donde finalmente he sorteado ciertos obstáculos que explicaré en breve, y por lo cual he iniciado esta publicación.

¿Qué es lo que más me ha tomado tiempo al configurar este clúster?
Aunque no lo crean, algo tan sencillo como una UID incorrecta. Sí, señores, una UID me tenía a punto de arrancarme los pelos (y ya saben que las personas con bata de laboratorio no encajan muy bien con el hecho de ser calvos, muchas series animé comprueban esto!), y al cabo de unos días, finalmente he dado con la solución a este problema, que me impedía usar el último nodo que habia agregado, el cual me escupía en la cara errores sobre procesos con credenciales inválidas por doquier.

Bueno, hoy me he decidido a inicializar al menos uno de las otras 2 CPU que tenía haciendo polvo en mi laboratorio (sí, es mi cuarto) y esto es lo que ha salido:

Scumbag HDD / Scumbag RAM
¡Y U NO funcionan como deben!



¡Vaya, pero qué tenemos aquí!


¡Funciona!... O eso creí

Pues sí, resulta que tenía Windows 98 de serie. ¡Y no era la Second Edition!

Al fin, poniéndonos serios e instalando un SO que valga la pena para un cluster.

En resumen, una RAM defectuosa (¿qué raro, verdad?) me impedía el arranque de este nodo, ahora tengo un nodo con sólo 128MB de SDRAM PC133... al menos.
El disco duro que tuve que reemplazar era uno de 40GB, otro más para la caja de discos duros fritos, lo fué por uno un poco más... modesto.
Con 4.7GB de disco duro, ¿mejor hubiera instalado el sistema en NFS, verdad? ahh, pero qué rayos, así se queda, ahora no tengo mucho tiempo para trastear mucho pequeñeces como esa. con 2GB me sobra espacio para el trabajo que va a hacer.
Este señor de 4GB me traía un Windows 98 que por supuesto no arrancó (dado que Windows es muy sentimental para las arquitecturas sobre las que se ejecute), así que lo he reformateado y fin de la historia.
Oh sí, lo más importante, su nombre. Este nodo se llamará... Crystal. Ni idea de por qué le pongo nombres femeninos a las cosas, pero bueno, qué se le va a hacer.

Crystal en todo su esplendor funcionando


Y así, termino de contarles mi aventura del día de hoy con este proyecto que les he mostrado.

EL. PSY. CONGROO.

martes, 18 de septiembre de 2012

Un poco de historia, parte 1: RozenTensai, el autoproclamado programador (un poco) demente.

Inicios, primeros pasos en la programación.

Oh sí, allá por el 2003, cuanto obtuve mi primera PC, una DELL Optiplex V350 cuyos specs eran:

CPU: Intel Pentium II@350MHz
RAM: 64MB SDRAM PC100
Disco Duro: Quantum(R) Fireball 6GB IDE
Monitor: 17" 4:3 DELL Trinitron CRT

; vino en blanco, dejándome solo con una línea de comandos DOS la cual no respondía para nada a cualquiera que sea el comando que le introdujera, le dije a mi madre que la llevara a que le instalaran Windows XP, lo cual hizo y al principio todo era color de rosa, pero a las pocas semanas el equipo tardaba exactamente 35 minutos desde que presionaba el botón de encendido hasta que llegaba a un escritorio usable. Eso me enseñó que no se puede obtener todo en la vida.

Pocos años después nos actualizamos a una DELL Optiplex GX150 cuyos specs eran:

CPU: Intel Pentium IV@1.13GHz
RAM: 128MB SDRAM PC133
Disco Duro: Maxtor 20GB IDE

; a la cual se le agregó unos meses más tarde una tarjeta gráfica decente (una nVidia GeForce 6500 AGP8x si mal no recuerdo), lo cual redujo un poco el tiempo de carga gracias al procesador, pero aún se veía limitado por la memoria RAM que tenía.

En esos momentos (circa 2005) comenzaron mis pasos en el mundo de la programación, comenzando con VisualBasic, un vecino algo mayor que yo me prestó sus discos de instalación del VisualBasic 5.0 (esto era cuando la piratería no era necesariamente ilegal, pero no era tan pronunciada como ahora) y ahí comenzó todo... BOOM!... algo dentro de mi cerebro joven en ese momento me interconectó con el lado informático de la vida, los planetas se alinearon, el algoritmo de encriptación para mi entendimiento de la informática fué roto y... bueno, sucedió lo que hoy soy, un aficionado de la programación que gusta de experimentar con el código, especialmente si los resultados son obtenidos por cuenta propia.

Luego de este suceso, logré hacerme de una portátil nueva, algo más avanzada que el equipo que teníamos en casa, y pues, pude llegar a otros límites. Sus specs eran:

CPU: AMD Sempron Mobile@2.0GHz
RAM: 1GB DDR2
Disco Duro: Toshiba 120GB SATA

Me metí en el mundo JAVA, y por curiosidad, específicamente en J2ME, algo bastante popular en el momento, y pues, de ahí salió mi primer proyecto, MobiRPG. Más adelante en otra publicación he de ampliar mis proyectos actuales, activos y descontinuados.

Pocos años después (exactamente 23 de diciembre del 2007) logré reunir dinero para una PC decente, cuyas specs son:

CPU: Intel Pentium Dual-Core@2.5GHz
RAM:1GB DDR2
Disco Duro: Seagate 160GB SATAII + Samsung 500GB SATAII

; la cual es mi equipo de confianza y trabajo hasta el sol de hoy.
Allí he experimentado con C#, C/C++, aunque en realidad estoy un poco más diestro con el C# dada su (sospechosa!) cercanía con JAVA, lenguaje en el que ya tenía un buen par de años programando (proyecto MobiRPG), además en este lenguaje hice bastante experimentos de hacking como por ejemplo, un programa que leía las ROMs de GBA y les extraía las partituras MIDI (en ROMs que las soportaran), el editor gráfico para los proyectos que salieran de mi primer proyecto serio, MobiRPG, incluso he intentado programar compresores de archivos varios, una inteligencia artificial, entre otras randomsadas varias, las cuales han tenido sus altas y bajas.

En fin, así se puede resumir mi historia con la programación.

En mi siguiente publicación: mi historia con los sistemas operativos, y algunas aplicaciones.


EL. PSY. CONGROO.

¡Inicio de operaciones registrado!

Hola mundo!

Con esta simple pero muy conocida frase que todo humano en la tierra que se haga creer conocedor de informática debe conocer, inicio esta primera entrada de mi nueva bitácora, en la cual estaré publicando a intervalos de alguna forma irregulares o regulares (eso espero) información sobre los descubrimientos obtenidos en mi aventura por el mundo de la informática y tal vez algunos otros temas interesantes que deriven de éstas.

Hace un tiempo llevaba pensando la idea de crear una bitácora, pero nunca se materializaba la idea, inclusive culpaba al hecho de que no se me ocurriera un tema en particular, pero gracias a mi amigo @RandyProton, finalmente he decidido iniciar. Tal vez sean un poco erráticos mis publicaciones o el tiempo entre cada uno sea enorme, dado a mi reducido tiempo libre (el cual dedico precisamente a inventar con lo que se me ocurra), pero aún asi ya he tomado finalmente la decisión de registrar todo (o casi todo) lo que descubra a través del tiempo.

Tal vez no logre hacer mucho, pero algo es algo y sumando ideas se llega a algún lugar. Lo principal es intentarlo, por que como dice el dicho, "Más vale arrepentirse de haber hecho algo que arrepentirse por no haberlo hecho", con todas las repercusiones que este dicho implica, hoy 18/sep/2012, desde mi automóvil a través de mi portátil, esperando por mis clases nocturnas de la universidad, inicio mis operaciones.

Así, me despido, estimados lectores, de esta entrada. (hopefully tendré algunos en algún momento, jej)

EL. PSY. CONGROO.