• Acerca Deu0026#8230;.
  • Wacken 2011
    • Prólogo
    • Llegada
    • Día 0
    • Día 1
    • Día 2
    • Día 3
    • Despedida

Thy.Abstrakt.Objekt.Weblog

  • Buscando el paraíso perdido….

    julio 20th, 2007

    En los ultimos meses estuve buscando nuevas alternativas para satisfacer mis necesidades metaleras, con esto me refiero a nuevas bandas/artistas que ofrezcan algo innovador que no haya escuchado antes. Ante esto aparecieron 2 alternativas viables, que aunque ya son bandas con años de existencia, por cerradura mental no quize escucharlas, estas son Amon Amarth y Symphony X.

    Iniciando con la primera, tuve la oportunidad de escuchar el album del 2006, «With oden on our side«, que ya me habia bajado ya hace varios meses. Éste me pareció bastante bueno. El subgenero de estos cuates es Viking Metal o algo así como un Death Metal Epico. el cual al escucharlo da un ambiente inigualable, con riffs bastante melódicos, un bajo galopante y voces graves que afirman el por qué este fue uno de los discos más aclamados del año pasado.

    Por otro lado. Symphony X, una banda a la que me negaba a escuchar, en un principio por que mi ignorancia me decía «ahh, otros clones de Rhapsody», luego esto fue aclarado al darme cuenta de que son una banda más orientada al Power Progresivo Neoclásico, sin embargo aún no me convencia, ya que las pocas bandas progresivas y power-progresivas (Como Dream Theater, Spiral Architect o Evergrey) siempre se me han hecho bastante aburridas.. Todo cambió cuando Jason, un compadre metalero fue al concierto, y en un chupadero cerca de la U puso una rola de esta banda. Me pareció interesante y me vi en la necesidad de bajarme el disco mas reciente «Paradise Lost«. Cual fue mi sorpresa al darme cuenta despues de unas 2 escuchadas, que estaba ante una de las mas grandes obras majestuosas de este año desde mi punto de vista. Canciones como Set the World on Fire, Domination, Eve of Seduction o Seven me hicieron cambiar de parecer ante el Progressive/Neoclassical Metal, y me mostraron que no todo tiene que ser necesariamente aburrido. Un disco muy recomendable, y si lo ven en algun sitio de torrents o en su tienda de discos no duden en adquirirlo. Ahora me arrepiento de no haberlos escuchado antes, ya que me perdí el concierto que hicieron en El Salvador hace 3 semanas… Que lástima 😦

    
    
    Anuncio publicitario
  • Proyecto, Generador de Analizadores LALR en Java

    julio 10th, 2007

    Bueno señores, a continuación, un post aburridon y geek como cosa rara, pero estoy seguro que le puede servir a muchos estudiantes de Sistemas que van a llevar algun curso de Compiladores. Aqui publico el código fuente de uno de los más grandes y costosos proyectos que me ha tocado hacer en la carrera, un generador de analizadores sintácticos LALR. Este fue realizado para el laboratorio del curso Organización de lenguajes y Compiladores 2, y fue desarrollado en un mes aproximadamente. El proyecto fue hecho en parejas, complicándome yo mismo al elegir la parte más difícil (perdón pero la mejor manera de simplificarme la vida es complicándomela jaja) lo cual consistía en la de la creación de la tabla LR usando el famoso método LALR del famoso libro del dragón, así como también la interpretación del lenguaje de las acciones semánticas, si no entienden algo de lo que a continuación voy a escribir, por favor, ganen compiladores 1 y/o léanse (y entiendanlo que es lo mas difícil) el libro del dragon (Compilers, Principles, Techniques, and Tools. 1986. Aho, Sethi, Ullman ) del capitulo 1 hasta el capitulo 6 jeje.

    El proyecto consiste en un compilador de una gramática en formato similar a los archivos de entrada de CUP, el lo compila hacia un paquete .lalr dado, el cual es un archivo binario que contiene toda la información necesaria (tal como la tablas LR(1) de goto y accion, tokens, y acciones semánticas) para poder interpretar cualquier fuente que está descrito con esa gramática, ejecutando las acciones dadas en cada producción.

    Para ponerlo mas sencillo vean el sig. ejemplo:

    – Tenemos un archivo de gramática para una calculadora con lo siguiente:
    /**Definimos terminales y no terminales*/
    terminal mas, por, num;

    no terminal Inicio, S, E;

    /**Definimos la gramática*/
    S ::= E:res {:echo $res;:}

    E ::= E + E {: RESULT = $e1 + $e2;:}
    E ::= E:e1 * E:e2 {: RESULT = $e1 * $e2;:}
    E ::= num:n {: RESULT = $n; :}
    E ::= apar E:e1 cpar{: RESULT = $e1; :}
    – Tenemos tambien un archivo de entrada que cumple con la gramatica anterior con lo siguiente:
    1*2+(35*20)
    NOTA: posiblemente las entradas dadas anteriormente necesitarán algunas modificaciones para que se puedan ejecutar, ya que no recuerdo muy bien la especificación del lenguaje, y esto lo escribí en base a lo que me recuerdo jeje, además que obvie las partes donde se definen las expresiones regulares y la parte de las funciones definidas por el usuario para su uso en las acciones.

    Lo primero que se debe hacer es generar el paquete de la gramática escrita, luego con el paquete ya compilado, se analiza el archivo de entrada que cumpla con la gramatica especificada, e inmediatamente ejecutará las acciones asociadas segun vaya parseando.

    El lenguaje que se definió para las acciones semánticas es un subconjunto muy reducido del lenguaje PHP, aceptando expresiones aritméticas y booleanas básicas, sentencias de control if y while, además de funciones. sin embargo, debido al poco tiempo dado para el desarrollo del proyecto, quiza algunas características de la interpretación en PHP no funcionen muy bien (por ejemplo, la verificación de tipos), por lo que estan en toda libertad de modificar el código, si lo logran entender jaja.

    La parte del generador léxico se las debo, ya que como el proyecto fue desarrollado en parejas, esta parte le tocó al compañero Chucho, del cual no tengo autorización de publicar su código. Sin embargo esta parte la pueden desarrollar fácilmente al utilizar clases de tipo Tokenizer o incluso métodos de la clase String de java.

    Por cierto, el proyecto fue desarrollado en el lenguaje Java bajo el JDK 1.5, se utilizó como herramientas JLex y Cup (aunque a mi parecer hubiera salido más facil con ANTLR, pero las reglas son las reglas), además de desarrollarse en NetBeans 5.5. Si tienen alguna duda o problema con la compilacion, lean primero el javadoc del proyecto, revisen el código fuente, y si no pues, posteen aqui.

    El proyecto lo pueden acceder desde esta direccion

    O si usan subversion con un simple checkout

    svn checkout http://proyectos-kreig-usac.googlecode.com/svn/trunk/java/COMPI2-proy1-vmw/  vmw

    Recuerden que están libres de modificarlo y hacer lo que les permita la GPL, mediante me coloquen en los créditos jajaja.

  • Modularización, un problema pendiente…

    julio 9th, 2007

    Es lamentable que muchos estudiantes de la carrera de Sistemas no apliquen los conceptos más importantes de modularización, sea cual sea el lenguaje… Es algo inaceptable que un proyecto largo, como los que suelen dejar en los cursos de Sistemas de la USAC, venga si mucho un par de archivos fuente.

    Recuerdo en mis tiempos, cuando llevé progra 1/progra 2, y se programaba en C existían proyectos con una modularización que daba pena, ya que ni modularizaban a nivel algoritmico ( o sea, todo lo hacian en el void main() olvidando los principios fundamentales de la programación descendente), mucho menos utilizaban diferentes archivos para la división semántica del proyecto, y en algunos caso llegaban a utilizar hasta sentencias goto!!(incluso todavía hay gente que lo utilizan en java… que pecado a la abstracción).

    Por ello, es importante una buena modularización, tanto para el entendimiento del propio código, como del código ajeno (ojo Willy), además de que ayuda
    evitar código redundante.

    Cada lenguaje y compilador cuenta con sus propias herramientas y técnicas, además de «barreras naturales» para una mayor modularización, listaré algunos ejemplos básicos:

    • HTML/XHTML del lado cliente: Dividir el contenido, presentación e interacción en diferentes archivos .htm/.xhtml, .css,(Hoja de estilos) y .js (javascript). Esto es muy importante mas si se van a utilizar RSS Feeds.
    • Java: Utilizando un public class por cada .java, y aplicando el concepto de packages, ademas de utilizar generics cuando sea posible para evitar redundancia.
    • C#: Aplicando un public class por cada .cs, tratar de enfocar todo el motor en las librerías, y utilizar namespaces, generics, y reflexion cuando sea posible.
    • C: Contener la definición en un .h, y la implementación en un .c, tratando de colocar las estructuras de datos y declaraciones en el .h, y colocando sólo los algoritmos y funciones para estas estructuras de datos en su respectivo .c.
    • C++: Aplican los mismos principios que en C, ademas de hacer uso de namespaces para evitar colisiones, y templates para evitar redundancia.

    Bueno, estos son los principales, en los que regularmente se suele hacer un espagueti de código (en especial C). Tomen el consejo… modularizen y sigan la regla KISS (Keep it simple, stupid!!)

  • King Diamond te ha pedido tu alma!

    julio 4th, 2007

    Analisis dec King Diamond.- Give me your soul please

    Hace poco obtuve el nuevo material de King Diamond… dado que lo estuve esperando desde que fue anunciado. Hasta donde lo he logrado «compilar», este disco presenta mucho parecido respecto el anterior (The Puppet Master) en la estructura de las canciones, ademas de que volvemos a escuchar en este disco la incursión de la misma voz femenina que fue introducida en el disco anterior en canciones como Moving On. En cuanto a trabajo de guitarra, se puede escuchar que se ha enfocado mucho las canciones en sus riffs estando éstas llenas de Riffs cañeros que lo inspiran a uno a moshar a solas, además que presentan solos muy buenos por parte de nuestro buen amigo Andy el cual esta en mi lista de los mejores guitarristas en la escena, sobre todo con canciones como Never Ending Hill, Black of Night o Mirror Mirror, Tanto así que incluso existe una cancion llamada The Floating Head. que me hace recordar mucho a canciones del Rust in Peace de Megadeth en cuanto al trabajo en riffs. El disco presenta tambien canciones con estructuras complejas y variaciones de tiempos como Is Anybody Here o The Cellar… que tiene mucha resemblansa con Emerencia o con exitos de Mercyful Fate que contaban con esta característica.
    Sin embargo no pueden faltar las canciones «típicas» al estilo natural de King Diamond, como The Girl in the Bloody Dress…

    Me pareció muy buena propuesta de King Diamond para este año, sin embargo a veces las canciones más enfocadas a los riffs pueden a llegar a sonar repetitivas, debido la repeticion de los coros, tal es el caso de la canción del título del mismo nombre, la cual pareciera un loop infinito sobre un bridge y un coro.

←Página anterior
1 … 42 43 44 45
Siguiente página→

Blog de WordPress.com.

Privacidad y cookies: este sitio utiliza cookies. Al continuar utilizando esta web, aceptas su uso.
Para obtener más información, incluido cómo controlar las cookies, consulta aquí: Política de cookies
  • Seguir Siguiendo
    • Thy.Abstrakt.Objekt.Weblog
    • ¿Ya tienes una cuenta de WordPress.com? Inicia sesión.
    • Thy.Abstrakt.Objekt.Weblog
    • Editar el sitio
    • Seguir Siguiendo
    • Regístrate
    • Iniciar sesión
    • Denunciar este contenido
    • Ver sitio web en el Lector
    • Gestionar las suscripciones
    • Contraer esta barra