Un poco de todo lo relacionado al area de la informatica... programacion, ocio, configuraciones, en fin herramientas que pueden ser utiles para un estudiante de ingenieria en ciencias y sistemas.

jueves, 18 de diciembre de 2014

On 21:09 by Unknown in , ,    No comments
Cuando necesitamos que las maquinas virtuales que utilizamos estén disponibles en una red especifica necesitamos que estas en su configuración de red el adaptador sea de tipo puente, con esto si tenemos un dhcp la VM (virtual machine) tomara una ip automáticamente o bien podemos configurar una ip estática dentro del rango correspondiente a la red en la que queramos trabajar.

Bueno, en kvm se debe realizar el mismo procedimiento lo unico es que la configuración por defecto de KVM no permite tener el adaptador de tipo puente porque debemos crearlo en nuestra maquina host.

En mi caso lo que necesitaba era comunicar dos maquinas virtuales una en cada host diferente, es decir comunicar una maquina física con una VM dentro con otra maquina física con otra VM dentro.

Esto se realiza de la siguiente manera.

1- abrimos el archivo /etc/network/interfaces

2- originalmente el contenido que tiene este archivo es similar a este:

auto lo
iface lo inet loopback




o este:


auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp


lo que debemos realizar es crear una nueva interfaz que va a ser el adaptador puente de la siguiente manera:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.1.200
        network 192.168.1.0
        netmask 255.255.255.0
        broadcast 192.168.1.255
        gateway 192.168.1.1
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0

Donde 192.168.1.200 sera la ip de nuestra maquina física en la red y con la cual nos comunicaremos con el resto de host o guest dentro de la red.

Lo primero que se hace es agregar la interfaz eth0 si no nos aparece e indiciar que tomara una ip statica o manual.
Luego se crea la interfaz br0 y se le asigna la ip estática y con la linea bridge_ports eth0 se indica por medio de que interfaz sera la comunicacion del adaptador puente. (eth0 es la interfaz ethernet0 o interfaz cableada).
Las 3 lineas finales son opcionales.

Una vez modificado el archivo, guardamos y reiniciamos el equipo.

Al abrir kvm e ir a la parte de opciones ya nos debe de aparecer la opcion para utilizar adpatador puente como red.


3- Ahora dentro de la maquina virtual vamos a asignarle una ip statica la cual debe de estar dentro de la red que se haya utilizado en el paso anterior.


4- probamos la comunicacion entre el host y el guest con ping, luego realizamos el mismo proceso en la otra maquina fisica, obviamente asignando una ip diferente a la del primer host (192.168.1.200 en este caso) y luego configuramos la ip de la vm del 2do host.

5- Conectamos el cable de red entre ambas computadoras y probamos la comunicación entre las 2 VM.

El post original y que sirvio de base para esta configuracion es el siguiente:
Post Original
Por lo tanto se le da el respectivo crédito al autor.

martes, 16 de diciembre de 2014

On 22:06 by Unknown in , , ,    No comments
La instalación de Mongodb es bastante sencilla, en mi caso la instale en ubuntu server 14.04.1 y una vez terminada la instalación ya es posible acceder a la consola de la base de datos simplemente tecleando el comando "mongo", bueno hasta ahí todo bien y ya pude trabajar con la bd pero al acceder un día después a la BD para mi sorpresa al teclear el comando "mongo" me aparece el error:

couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:145

Entonces a buscar en el mejor amigo que podemos tener, si, hablo de google y
en stackoverflow la mayoría de respuestas dicen que tienen que ver con que se bloquea la BD y es necesario desbloquearla y repararla pero no me funciono.

Otra solucion era reparar la bd y luego acceder por medio de mongo <ip_sistema> pero tampoco funciona, otras soluciones hablan de modificar la ip_bind o algun otro parametro en el archivo /etc/mongodb.conf (archivo de configuracion de mongo) pero sin solucion, reinstalar la bd y el mismo error.

En fin segui buscando pero ninguna solucion funcionaba entonces decidi regresar al sitio donde segui el tutorial para instalar la base de datos (link) y ejectuar nuevamete el comando:

tail -n 100 /var/log/mongodb/mongodb.log

Para verificar el estado de mongodb y en los resultados en una par de lineas me mostraba lo siguiente:

[initandlisten] ERROR: Insufficient free space for journal files
[initandlisten] Please make at least 3379MB available in /data/db/journal
or use --smallfiles
 
 
 
 
La razon por la que muestra este error es porque el disco duro no tiene espacio suficiente para los archivos journal y en mi caso estaba utilizando una maquina virtual con 4Gb de disco duro por lo que el espacio necesario no estaba disponible.

Buscando entonces que es el tal "journal"en Mongodb es como un tipo de sistema para optimizar el acceso a memoria por medio de la BD y como backup por si la BD llega a fallar, tiene una funcionalidad mas especifica pero hay que leer bien la documentación para entender como funciona realmente.

El archivo mongodb.conf tiene una parte en donde se puede desactivar la de journal y desactivando esta opción y reiniciando el sistema sorpresa!! ya es posible acceder a la consola por medio del comando "mongo".

solamente es de des-comentar la parte de nojournal = true





La solución entonces es desactivar que la base de datos trabaje con journal files cuando tenemos poco espacio en el disco duro o como en mi caso que necesitaba montar varios servidores sobre KVM y necesito asignarles pocos recursos, porque si se tiene el espacio suficiente no da ningún problema (probé por amor al arte en una VM con 10 Gb disponibles) solamente se instala, se reinicia el sistema y se conecta a la BD y lamentablemente antes de instalar Mongodb no encontré requisitos donde hablara del espacio libre que necesita la BD para trabajar o si Se me pasaron por alto, pero si alguien tiene el mismo problema esta solución le puede funcionar y con esto se evitan perdidas de tiempo mas quebraderos de cabeza.




domingo, 7 de diciembre de 2014

On 15:12 by Unknown in , , ,    No comments

Hay una forma sencilla de manejar cadenas y comentarios en Irony sin necesidad de utilizar expresiones regulares, a continuacion se muestra un ejemplo de como se podria realizar.

Comentarios


En este caso los comentarios son del tipo:
>> comentario de una linea

<- comentario que
    incluye varias lineas ->

se utiliza CommentTerminal para reconocer comentarios en Irony y luego solamente se debe de indicar que se ignoren los comentarios y no se tomen como parte de la gramatica.



y con esto ya se pueden incluir comentarios en nuestra gramatica, solamente es de sustituir los caracteres con los que se quiera reconocer los comentarios por ejemplo en vez de ">>" utilizar "//".

Cadenas

Nuevamente utilizando las propiedades de la clase de Irony se utiliza "StringLiteral" para el manejo de cadenas en una gramatica.



y ya podemos llamar al terminal cadena en nuestra gramatica.

viernes, 5 de diciembre de 2014

On 18:42 by Unknown in , ,    No comments
El siguiente ejemplo contiene lo que son acciones asociadas a una gramatica.
Es una calculadora sencilla que opera enteros y decimales.

La gramatica utilizada es la gramatica clasica que se usa desde lenguajes y se sigue usando en compiladores 2 para operar numeros.

S->E
E->E+T | E-T | T
T->T*F | T/F | F
F->num | (E).

Lo que cabe resaltar del ejemplo y que tiene que ver con Irony es que se utilizan las Clases "Accion" y "Analizador" de las cuales el codigo no se cambia ya que solamente se llaman sus metodos posteriormente para el parseo.

La clase AccionesGramatica contiene las reglas asociadas a la gramatica (Clase Gramatica) en donde efectivamente como se menciono en la parte 1 se recorre el arbol sintactico generado por irony con un Switch y se asocian las acciones a las reglas.



 Por ultimo en el Formulario se compila el texto:




La base para este ejemplo se tomo de un ejemplo (valga la redundancia) enviado por el auxiliar del curso en su momento y que fue de mucha ayuda para entender como trabaja Irony por lo que parte del credito va para el auxiliar y el ejemplo original.

En el siguiente enlace esta el ejemplo completo y comentado para descargar.

 Ejemplo
On 12:45 by Unknown in , ,    No comments
¿Que es?

Es un generador de parsers orientada a las herramientas de .net.
Se integra de manera sencilla con C#.

La ventaja que tiene con respecto a herramientas como CUP  o Bison es que en Irony se programa directamente en codigo de C#, es decir que no necesitamos escribir la gramatica en texto plano como las herramientas anteriores para luego generar el parser o crear un skeleton (como en gold parser) para poder trabajar sobre nuestra gramatica sino que la gramatica y sus acciones son archivos con codigo de C#.

Una desventaja es que no se encuentra mucha documentacion, sino que hay que buscar bastante cuando se tiene algun problema con la herramienta o en la parte de colocar las acciones a la gramatica, no hay ejemplos en donde se pueda ver como hacerlo por lo que esta es la parte compleja de utilizar la herramienta, la falta de informacion.

¿Como funciona?
Practicamente para trabajar con Irony lo que se hace para aplicar acciones a la gramtica es recorrer el arbol sintactico que nos genera. Suena muy vaga la descripcion pero es lo que se debe hacer, ya que practimente al parsear un texto con nuestra gramatica en Irony lo que hace es que genera un arbol sintactico al cual le vamos a asociar las acciones que necesitemos, lo del recorrido no es mas que ir agregando acciones a las producciones y llamando al metodo de forma recursiva (en la parte 2 se mostrara un ejemplo).

En conclusion Irony es una herramienta muy buena que permite realizar parsers de forma rapida, quizas al principio se siente que es dificil pero esto es debido a que es un pardigma distinto al que se acostumbra a trabajar en la universidad (USAC) en donde solo se trabaja con CUP o con Bison y en ocaciones gold parser.


A continuacion el link con la documentacion sobre irony.

Irony WikiBook

Ejemplo

Ahora a lo que interesa que es el ejemplo, este pequeño ejemplo es una aplicacion de consola que lo que hace es imprimir el arbol generado por Irony en orden, preorden y postorden.
Lo que realiza la aplicacion no es lo mas importante en este casi sino la forma en que trabaja Irony y como se construye una gramatica.

El ejemplo consta de 3 clases, la gramtica, la clase para compilar la gramatica y la clase principal para ejectutar el programa.

Clase Gramatica



En esta clase se declara la gramtica que vamos a utilizar, se puede observar que se declaran los terminales, los no terminales y luego las reglas de produccion. Esto es Similar a CUP lo unico que cambia es la sintaxis y la  forma de declaracion ya que en una misma clase declaramos los no terminales y los no terminales sin necesidad de utilizar alguna otra herramienta para el analisis lexico.
Como se puede ver al final de las producciones se debe indicar this.root = <no terminal inicial>  , es decir que se debe de indicar el No terminal que da inicio a nuestra gramatica.

Clase Compilar


Solamente se muestran los dos metodos que tienen que ver especificamente con el funcionamiento de Irony.

El primer metodo solamente verifica que el texto a parsear sea valido y el 2do obtiene la raiz del arbol generado una vez parseado el texto.

Por ultimo en la clase principal se llaman los dos metodos de la clase anterior, primero se verfica que la cadena sea valida y si esto se cumple se llama al metodo getRoot.

A continuacion dejo el link con la aplicacion con el codigo completo.

 Aplicacion

Requisitos para ejecutar:
Al descargar Irony veran que es un proyecto el cual se debe compilar y esto genera un .DLL el cual debe agregarse como referencia en el proyecto de C#.

En la aplicacion ya va generado el dll el cual se compilo con la version de Vstudio 2013 Express, por lo que en alguna version anterior de Vstudio puede dar error.

VStudio 2013 (El dll de irony utilizado se compilo en esta version.)
.Net Framework 4.5 o posterior.


En la parte 2 se publicara un ejemplo en donde se mostrara como asociar acciones sencillas a una gramtica  y en la parte 3 un ejemplo sobre como añadir acciones a una gramatica compleja utilizando una estructura de arbol recursivo.



jueves, 4 de diciembre de 2014

On 21:22 by Unknown   No comments
El blog ha estado totalmente abandonado pero en este mes y el proximo año tratare de estar subiendo nuevas soluciones a problemas ya sean configuraciones o codigo que sean de ayuda para quienes estudian informatica y tambien en especial para quienes estudian ingenieria en ciencias y sistemas en la USAC ya que tambien se publicaran consejos y/o sugerencias que serviran para los distintos cursos impartidos en la carrera y que de alguna forma buscan ayudar y tener un apoyo cuando no se sabe por donde empezar algun proyecto o practica.