En memoria de Dennis Ritchie


#include <stdio.h>
int main(void){
while(1)
printf("Gracias infinitas Dennis Ritchie, por tus aportes a la computacion \n");
return 0;
}

Mis proyectos de sistemas en la USAC parte VI: Compiladores 1…

Que ironía, se me olvidó colocar el curso que auxilio en la universidad,  Introducción a los lenguajes y Compiladores 1.  Y si lenguajes era introductorio a éste, éste a su vez, es introductorio a la yuca de Compiladores 2 como lo describí anteriormente.  Lamentablemente, como tanto el auxiliar de ese curso, como el ingeniero, no sabian ni rosca, me tocó a mi estudiar por mi cuenta, mas por mi gusto que por ganarlo. y así fue. a continuación publico los únicos 2 proyectos que se realizaron.

1. Strim.

Un proyecto que la verdad, estaba bastante fácil, se trataba de un simple “concatenador” y “repetidor” de cadenas. el cual la mayor complicación era ponerse de acuerdo con el auxiliar para saber qué era lo que querían.  Desarrollado en C usando Flex y Bison, recuerdo cómo los demás compañeros aún no usaban la característica de atributos sintetizados, haciendoles más dificil la elaboración del mismo. El codigo esta en:

svn checkout http://proyectos-kreig-usac.googlecode.com/svn/trunk/c++/COMPI1-proy1-strim/ strim

2. Godzilla.

Bueno, aquí las cosas se empezaron a complicar, me rifaba entre hacer bien éste proyecto y dejar mediocre el de estructuras que estaba haciendo paralelamente… y así fue, me enfoqué más en este proyecto, el que consistía en un mini motor de un subconjunto de PHP, además que debía renderizar el HTML generado.  Desarrollado también en C++ usando QT 3 como framework, y Flex y Bison para el analizador léxico y sintáctico respectivamente, y enfocado desde su concepción a ser compilable y ejecutable tanto en Windows como en Unix.  Recuerdo aún que la mayor complicación de éste era el desarrollo de los ciclos, el cual, con un poco de autoaprendizaje de representaciones intermedias y árboles de sintaxis abstractas,  se simplificó y optimizó bastante la implementación de dicho lenguaje.  El código esta en:

svn checkout http://proyectos-kreig-usac.googlecode.com/svn/trunk/c++/COMPI1-proy2-godzilla/ godzilla

Bueno, eso fue compiladores 1, con un primer proyecto trivial, y el segundo no trivial… bastante parecido al semestre actual (enero-junio 2009) en este sentido. Un curso en el cual conocí la Biblia de los compiladores, el magnífico Libro del Dragón, y una introducción a lo que para muchos se convertiría en su peor pesadilla.

PD. Para poder bajarlos, deben instalar el cliente subversion de consola en gnu/linux y ya instalado ejecutar el comando dado en el directorio donde se vaya a bajar. Tambien recomiendo usar el TortoiseSVN si van a bajarlos en Windows

Mis proyectos de sistemas en la USAC parte II: Progra 2…

Bueno, luego del exitoso post anterior (de donde jodidos), tambien he publicado los proyectos desarrollados en el curso de Introducción a la Programación 2… en un semestre donde se comenzaban a complicar las cosas pues habia que llevar varios cursos no triviales como Fisica 2 o Lenguajes formales.  La progra 2 de aquellos tiempos era un poco diferente a la de ahora, pues antes se daba solamente temas de persistencia en archivos, OOP,   Memoria dinámica (punteros, listas y todo eso), un poco de análisis y diseño (unico tema que persistió en la progra 2 de ahora), y conceptos básicos de redes… y lo que se programaba se hacia en C ++.

Y aunque seguían con su necedad de obligarnos a programar en el asquerosisimo borland C++, me importó un comino y empecé a hacerlo en un compilador mucho más superior y que cumple estándares… GCC, desarrollandolos dentro de algo que es más que un IDE… EMACS, y sobre un sistema operativo tambien superior, Linux. además que daba primera vez uso de un sistema básico de versionamiento, el CVS.  Y para cuando tenian que calificarmelo en windows que hacia? pues como los proyectos eran básicamente en consola, no me costo mucho portarlos a Windows usando el compilador MingW.  Bueno, a continuación un trio de proyectos inútiles cuya única finalidad era didáctica (bueno, quiza tambien tenia de finalidad trabarnos, pero al menos no lo lograron conmigo):

1. FIRST (FIfa Rating SysTem)

Continúan los nombres estúpidos, para un proyecto tambien estúpido, supuestamente era un calculador de posiciones y punteos para torneos de la FIFA,  lo más difícil era entenderle bien la ambiguedad del enunciado que la mera programación en sí.  Éste proyecto tenía que hacer uso de archivos no recuerdo para qué, pero lo que si recuerdo es que sacaba estadísticas.

svn checkout  http://proyectos-kreig-usac.googlecode.com/svn/trunk/c++/IPC2-proy1/ first

2. MOTHELL:

Este supuestamente era una administración de hoteleria o algo así, en donde se debía poner en práctica los conceptos de OOP que supuestamente habian enseñado.  Tiene estructura parecida al anterior, pues fue hecho por el mismo mortal con las mismas herramientas… ahh, e incluye su Makefile para una facil compilacion.

svn checkout http://proyectos-kreig-usac.googlecode.com/svn/trunk/c++/IPC2-proy2/src/ mothell

3.  Libra:

El último y más trabajoso proyecto (aunque la verdad estaba bastante facil) que consiste en Mantenimientos para libros de una biblioteca, administrando también préstamos y todo es en colas. En éste se tendría que utilizar ya estructuras de memoria dinámicas como pilas, listas y colas, y además, usar full OOP.  Aqui empezaba a meter mano a los TDAs, además de usar la característica de Templates de C++ para no andar reescribiendo un TDA para cada tipo de dato. Compila bajo GCC e incluye makefile tambien.

svn checkout http://proyectos-kreig-usac.googlecode.com/svn/trunk/c++/IPC2-proy3/ libra

Bueno, esto fue IPC2, un curso “comodín” en donde metían cualquier tema que les diera la gana dar.  con proyectos que quizá eran los más fáciles de la carrera media vez se dominara de antemano la OOP (algo dificil para la mayoria, dado que se aprendia en progra 1 en el paradigma top down)…

PD. Para poder bajarlos, deben instalar el cliente subversion de consola en gnu/linux y ya instalado ejecutar el comando dado en el directorio donde se vaya a bajar. Tambien recomiendo usar el TortoiseSVN si van a bajarlos en Windows

Mis proyectos de sistemas en la USAC parte I: Progra 1…

Bueno, el ocio es taller de Satan, y para aprovechar mejor mi tiempo de ocio, decidí hacer un clean a todos aquellos proyectos de programación que desarrollé en la carrera de Ingeniería en Ciencias y Sistemas de la gloriosa y tricentenaria Universidad de San Carlos de Guatemala.  Y luego de limpiar dichos  proyectos, publicarlos en Internet, aprovechando el repositorio que google ofrece por medio de su servicio google code.

Iré curso a curso publicando los que fueron los proyectos más significativos de estos, muchos de estos son medios ratas, otros no tanto, pero hay que comprender que, en la Universidad siempre nos ponían a hacer dichos proyectos contra el tiempo. Y hoy, es el turno de publicar aquellos proyectos que desarrollé durante el curso de Introducción a la programación 1… si, progra 1 de la vieja escuela… cuando éramos obligados a usar el nefasto Borland C++ 3.1 (y me quejo por el compilador que era una basura, no por el lenguaje).  pero qué otra, muchas veces los auxiliares ineptos no dan otra opción.   Los proyectos son los siguientes:

1.  Paintkiller.

Con Éste proyecto supe qué era programar un proyecto de la Universidad, Nombre inspirado en la canción Painkiller para denominar a un programa básico de dibujo al estilo paint de windows, con una interfaz gráfica tan antiestética y antiusable, pero que al final es funcional, que era lo que importaba.  Está desarrollado en Borland Turbo C++ 3.1, y pues, de estilo, casi nada, cero patrones, y puro hardcode,  aparte que mezcla C y C++ por la poca diferenciacion que le hacia este compilador a ambos lenguajes.  La interfaz grafica, pues es puro modo gráfico que proporcinaba el borland para MS DOS por lo que no creo que exista alguna SO actual que lo pueda correr.  Por ser el primer proyecto, pues lo único que puedo comentar es que solo era aprender lo básico en un lenguaje de programación, de una manera no tan trivial, pero bueno, fue una buena experiencia hacer este proyecto, pues puse en práctica mis conocimientos de OOP al hacer mi “libreria” de widgets, teoría la cual ántes, enseñaban (digamos) hasta Progra 2.

ahi si quieren curiosear pues les dejo el comando SVN para poder bajarlo.

$ svn checkout http://proyectos-kreig-usac.googlecode.com/svn/trunk/c++/ipc1-proy1-PAINTKILLER/

2. Hammerfile

Bueno, otro proyecto más en BorlandC++, y otro más con nombre inspirado en algo de heavy metal, esta vez en Hammerfall (nombres mas basuras los que les pongo, pero de alguna manera los tenía que identificar),  Este proyecto, pues en realidad no me recuerdo que hacia, y como no lo puedo correr no puedo ver actualmente, lo único que me recuerdo es que me llevó la chingada para parsear los benditos archivos de entrada… si tan solo hubiera sabido que flex/bison eran para eso en ese entonces.  Igual que el anterior, es C y C++ mezclado, usando la misma librería de widgets que me fume en el primero, y obviamente, para MS DOS, aqui va el url:

$ svn checkout http://proyectos-kreig-usac.googlecode.com/svn/trunk/c++/ipc1-proy2-HAMMERFILE/ hammerfile

Bueno, la verdad no creo que a estas alturas le puedan servir a alguien, dado que ya no se programa ni en C++ ni mucho menos en Borland en el curso de programación 1 de la USAC, pero bueno, lo tenía que hacer, quiza para que los patojos de la nueva generación se dén cuenta que la época en la que viven es más sencilla… cuando ántes nos llevaba sor judas cuando intentabamos solamente mostrar el mouse en el modo grafico de MS DOS.

Iré publicando más proyectos, avanzando de curso en curso, durante el transcurso del tiempo, asi que, pilas.

PD. Para poder bajarlos, deben instalar el cliente subversion de consola en gnu/linux y ya instalado ejecutar el comando dado en el directorio donde se vaya a bajar. Tambien recomiendo usar el TortoiseSVN si van a bajarlos en Windows

M-x introduccion-a-emacs

Una de las herramientas mas marcianas que ví la primera vez que usé un sistema GNU/Linux fue un extraño editor llamado emacs. pues ingresaba a él, y luego no sabía como cerrar la aplicación.

Emacs logo

Sin embargo, como buen estudiante de ingeniería en sistemas, me gusta complicarme la existencia, y decidí ponerme a aprender a utilizar dicha aplicación. Encontré luego que al presionar F10 accedía al menú ficticio que me aparecía en la pantalla principal, navegué hasta la ayuda, y vi algo así como “Tutorial rápido de emacs”. Decidí tomarlo, y luego no pude despegarme de este excelente editor de texto (?) , que me ayudó principalmente en el curso de Programación 2 y Compiladores 1 ya hace algunos años, cuando hacía programas en C y C++. Y no solo me dejaba hacer eso, sino que con ayuda de CVS llevaba el control de versiones de dichos proyectos, así como generaba los autoconf y automake respectivos. Además de muchísimos otros beneficios que tiene esta aplicación. Por lo que decidí publicar una pequeña transcripción de una descripción muy certera que le hacen a esta poderosa aplicación.

Emacs como IDE

GNU Emacs, tiene en comun con algunas otras buenas cosas, la cualidad de que es mejor apreciado con la experiencia en vez de una descripcion a sangre fría. Gracias a su grandiosa extensibilidad, y a la larga gestación producto del trabajo compartido de muchos programadores, se ha convertoido en “Todo” para “todos”, Su extensibilidad y personalización está hecha gracias a sus archivos auto documentados “Elisp”. Emacs crece y crece en una gran feceta modular. una arquitectura protable y vasta, que está compuesta de módulos de código colectivo. En resumen Emacs ofrece un entorno totalmente integrado y listo para configurar para cualquier tipo de programación común y no común. procesado de texto y tareas computacionales regulares.

Éste grandioso programa puede ser usado para escribir y editar textos como éste. para probar, escribir, y ejecutar código, páginas webs entre servidores, actualizar y publicar entradas de blogs, organizar pensamientos y notas de nuevas formas, y como punto de entrada para manipulación del todo poderoso Shell de Unix. Y así esta lista se extiende y se extiende…

Así que si tienen la oportunidad (y la paciencia) para tomar el tutorial de éste app, háganlo, y verán que con emacs, las tareas cotidianas de programación se simplifican.

Aqui les dejo el link para que puedan probar el poderosísimo emacs

Bajar Emacs

Para mas informacion:

El Blog de Emacs (Inglés)

ALT+X help (desde emacs)

Mi historia digital pt V: Programando el futuro.

Con esto tuve las bases de lo que se convertirían en la inspiración necesaria para iniciar mi carrera de Ingeniería en Ciencias y Sistemas en la gloriosa y tricentenaria Universidad de San Carlos de Guatemala, Segui estudiando, y aunque la matemática 1 fue una pequeña dificultad que me atrasaría un año en mi carrera debido a las escasos fundamentos matemáticos adquiridos durante la educación media, ésto no me desanimó para llegar a mi primer contacto universitario en informática: el curso de Programación 1, curso que se me hizo bastante sencillo ya que dominaba a buen nivel el lenguaje C++ y tenía buenos fundamentos para la programación orientada a objetos, causando que me fuera otorgado el sobrenombre de “Objeto” en la Universidad por el compañero Rojo, y que a la vez originó el nombre de este blog.

USAC

Mi afinidad al software libre siguió creciendo, y en 2005 logré mi primer compilación exitosa del kernel de linux, debido a que quería leer NTFS sobre Red Hat Linux 9.0, una funcionalidad que ésta distribución no proporcionaba por cuestinoes de patentes. Siguieron pasando los cursos, conocí los lenguajes formales y los compiladores, las Estructuras de Datos, la matemática discreta, la electrónica digital, y veía cada vez mas lejos mi deseo de crear algún emulador funcional, debido a que con tanto proyecto, no contaba con el tiempo necesario para programarlo.

Actualmente, en el 8vo semestre de esta carrera, encontré un trabajo de medio tiempo, permitiéndome poner en práctica todo lo que en programación he aprendido, y haciendo contacto con el mundo real en cuanto a informática se refiere, mientras continuo con mi carrera. La misma satisfacción que sentí cuando pasé el escenario 1-1 de Super Mario Bros, es la misma que sentí cuando logré correr mi primer Script de JavaScript incrustado en un html, la misma que sentí cuando logré instalar GNU/Linux por primera vez, la misma que sentí cuando corrió por primera vez funcionalmente mi primer proyecto de Progra 1, la misma sentí que cuando armé mi primer tabla LALR, y la misma que sentí el último día de mi primer semana de trabajo, y la misma que seguiré sintiendo cuando desarrolle cualquier proyecto exitoso. Y estoy seguro que esta pasión no terminará hasta la muerte de ésta vida dedicada a la informática.

Mi historia digital pt II: Jugando con fuego

Luego de ésto, por el año 1994-95, un amigo que era mi vecino en ese entonces, era de los pocos que contaban con una IBM-PC compatible u ordenador de uso general, en el cual tenía instalado un subsistema llamado Direct Access montado sobre alguna versión de MS-DOS creo, pero esto no era lo importante, sino lo importante era que éste tenia un acceso directo al Prehistorik 2. En ese tiempo, yo ya contaba con mi propia consola de videojuegos (el Super Nintendo), por lo cual no me parecia nada novedoso el Prehistorik, además de que me parecía tedioso tener que jugar con el teclado, por lo que las PC todavía no eran de mi gusto personal.

snes

Mientras mi adicción a los videojuegos de consola aumentaba gracias a juegazos de SNES como Super Metroid, a la vez, mi concepto acerca de la PC comenzó a empeorar cada vez mas, cuando ingresé a un colegio de bajo nivel educativo en el año 1997 el primer año de secundaria, en el cual ya tuve contacto directo con aplicaciones de uso general, era lamentable el atraso tecnológico que había en ese colegio para esa fecha, ya que supuestamente me enseñaban computación un gran imbécil que decía que al exponer los diskettes al sol contraían virus, algo que yo no me tragaba. y usabamos aplicaciones tan rústicas como el odioso TLS (The Learning System) que quien lo usó, ha de tener grabado en la mente la musiquita nefasta del inicio, y entre otras como Banner Mania, Professional Write, Lotus 123, etc,. Y mientras todo eso pasaba, ocurrió algo, otro compañero, quien en su casa también contaba con PC, tenía instalado Windows 3.11 For Workgroups. esta configuración de software elevó mis deseos de conocer más acerca de la PC, debido a que veía que éste era un ambiente más amistoso y sencillo.

BannerMania

Además de que gracias a una revista de videojuegos, logré conocer un poco acerca de qué herramientas y conocimientos eran necesarios para hacer videojuegos, por ejemplo, que se hacían en un tal lenguaje C, y que se necesitaban muchos conocimientos de matemática. Aunque yo todavía no tenía pensado estudiar algo relacionado con la informática, comenzé a pensar si existiría alguna carrera universitaria que me permitiera hacer videojuegos, o algo similar.