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.

domingo, 13 de julio de 2014

On 20:41 by Unknown   No comments
El error 5100 en las impresoras canon se relaciona con que el deposito de tinta esta lleno, una posible solución a este problema se menciona en el siguiente video:



Otra posible solución al problema de se describe en la siguiente pagina:

http://jack-er.blog.com.es/2009/10/05/resetear-impresora-canon-pixma-ip1800-ip1900-7100109/


En mi caso ninguna de estas soluciones me sirvieron en una canon ip1900, el error surgió al adaptar un sistema de tinta continua y luego de buscar alguna otra alternativa para solucionar el problema encontré la solución en el siguiente video:


Al principio me pareció gracioso pero luego de analizarlo por un momento me parecía que el problema era que el carrete no llegaba a su posición final o por decirlo de otra forma no llegaba a los extremos de sus recorrido, luego de revisar la impresora efectivamente las mangueras del sistema continuo de tinta no permitían que el carrete llegara a un extremo y efectivamente al colocar las mangueras de tal manera que no interfirieran en el recorrido del carrete se soluciono el problema.

En resumen otra solución al error 5100 en las impresoras canon es verificar que el carrete realiza de forma correcta todo su recorrido, retirando objetos que impidan que el carrete llegue a los extremos de sus recorrido.


martes, 11 de marzo de 2014

On 23:20 by Unknown in    No comments
Básicamente el siguiente código es el necesario para ejecutar un paquete de SQL Server Integration Services.

----------------------------------------------------------------------------------------------------------------------
try
        {
            Application app = new Application();
            Package package = null;
            package = app.LoadPackage(@"C:\Carpeta\Package.dtsx", null); //Ruta del archivo .dtsx
            //Ejecutar el paquete
            Microsoft.SqlServer.Dts.Runtime.DTSExecResult results = package.Execute();
            if (results == Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure)
            {
                foreach (Microsoft.SqlServer.Dts.Runtime.DtsError local_DtsError in package.Errors)
                {
                    Console.WriteLine("Package Execution results: {0}", local_DtsError.Description.ToString());
                    Console.WriteLine();
                }
            }
        }
        catch (DtsException ex)
        {
            throw ex;
        }
}
-------------------------------------------------------------------------------------------------------------------------

fuente | http://www.dotnetfunda.com/articles/show/795/how-to-execute-ssis-packages-in-csharp-aspnet-part-ii

 En el link anterior agregan una referencia a "Microsoft.SqlServer.Dts.Runtime", la cual puede no aparecer en las opciones dentro de la pestaña ".NET". En el siguiente link mencionan las posibles rutas en las que puede encontrarse la DLL "Microsoft.SqlServer.ManagedDTS.dll" de dicha referencia.

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/1b3ed694-cf02-445e-8ff4-0de4fd45a464/error-dts-does-not-exist-in-the-namespace-microsoftsqlserver?forum=sqlintegrationservices


La ruta en la cual encontré la DLL fue:

windows->assemby->GAC_MSIL->Microsoft.SqlServer.ManagedDTS->10.0.0.0__89845dcd8080cc91



En dado caso no la encuentren por ningún lado la pueden descargar del siguiente link

Microsoft.SqlServer.ManagedDTS.dll
https://app.box.com/s/h3ilgshkraaoj6vx8e3d

sábado, 27 de julio de 2013

On 19:51 by Unknown in ,    No comments
Resumen acerca de lo que es el modelo osi y sus tres primeras capas:
- capa física
- capa de enlace de datos
- capa de red




Descarga:

martes, 23 de julio de 2013

On 21:27 by Unknown in , ,    No comments
Introducción a los conceptos principales de lo que es la programación orientada a objetos y una breve descripción de los cuatro principales elementos que la componen.


Descarga:

http://www.mediafire.com/?xbyffr69ayet12d

lunes, 22 de julio de 2013

On 16:22 by Unknown in ,    No comments
Documento que contiene los principales conceptos de lo que es un analizador léxico y así como una
explicación de lo que son las Expresiones Regulares y los Autómatas Finitos que son los reconocedores de gramáticas independientes de contexto y que ya nos van adentrando en la teoría necesaria para posteriormente poder construir un analizador léxico y finalmente programarlo.


Descarga:

http://www.mediafire.com/?4c24cpzdcngow9v

martes, 16 de julio de 2013

On 16:32 by Unknown in , ,    No comments
El siguiente documento contiene los conceptos principales que se deben tener presentes y conocer sobre el tema de compiladores, un tema bastante amplio y complejo de las ciencias de la computación y que se necesita bastante paciencia y estudio para entenderlo.

El documento contiene los temas:

1. Lenguaje (¿que es?, tipos, etc)
2. Compilador y sus fases
3. Gramática y jerarquía de Chomsky

Esta es la primera parte nada mas, los siguientes temas tendrán temas mas específicos sobre los compiladores.



Descarga:

http://www.mediafire.com/?wqu3kw7oi1u26ld

lunes, 15 de julio de 2013

On 21:24 by Unknown in , ,    No comments
Me voy a dedicar crear este tipo de entradas que me van a servir como recordatorio y para tener presentes los conceptos principales de los cursos que he visto en la carrera así como ejemplos prácticos que por tanto contenido no me acuerdo muy bien o el peor de los casos (el mas común) se me olvida, y pues puede servir como guía para alguien que quiera sintetizar el contenido de una forma mas simple (eso espero xD). El primer documento es sobre conceptos básicos de programación, la principal teoría así de forma general y que ayuda a comprender mejor el tema.


Descarga en:

http://www.mediafire.com/?qxupepuo52cllrg

martes, 4 de junio de 2013

On 22:13 by Unknown in , ,    No comments


Las tablas pivote sirven para presentar los datos de una forma mas estructurada, reportes, mostrar totales etc, a modo de darle una mejor vista a los datos y que sean mas entendibles al mismo tiempo.

Esto se puede realizar con sql básico que es aceptado por cualquier DBMS y también haciendo uso de la función "pivot" que no pertenece al estándar sql pero que es aceptada por algunos dbms.

Oracle implemento el uso de esta función a partir de la versión 11 (según leí) por lo que en versiones anteriores no es reconocida, se usaba la función DECODE que trabaja de forma similar.

Los siguientes ejemplos están realizados en oracle 11.2 XE versión para windows y prácticamente sirven para mostrar como pasar una consulta pivote realizada con sql básico a una realizada con la función pivot, la cual nos simplifica el código de la consulta.

Se tiene la siguiente consulta con tabla pivote realizada con sql básico





Para realizar esta misma consulta con la función pivot se realiza lo siguiente :

1. Seleccionamos los campos que necesitamos en este caso el año y el mes donde cada año representa una fila y los meses las columnas.

Select * (Select extract(year from fecha_inventario) as anio,extract(month from fecha_inventario) as mes From equipos S )

2. Escribir la instrucción pivot a continuación de la consulta anterior

3. Hacer la función de agregación que necesitamos en este caso “count” y realizar el FOR y el IN

Pivot ( Count (mes) For mes in (1 as enero,2 as febrero,3 as marzo,4 as abril,5 as mayo,6 as junio,7 as julio,8 as agosto,9 as septiembre,10 as octubre,11 as noviembre,12 as diciembre) ) order by anio

Count (mes) para contar el numero de equipos por cada mes y luego el FOR<campo>  en este caso también el mes porque en el es donde vamos a buscar los valores que necesitamos y por ultimo IN en donde se le da un listado de valores a buscar.

Como se puede observar al encontrar un “1” se devolverá “enero” y así sucesivamente.

3. Con la consulta anterior todo bien, y hay muchos ejemplos así en Internet pero el problema es que nos falta la columna “TOTAL” que tiene la consulta mostrada al inicio. Para esto en vez de tener select * al principio de la consulta agregamos lo siguiente

Select anio,enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre, enero+febrero+marzo+abril+mayo+junio+julio+agosto+septiembre+octubre+noviembre+diciembre as total from…. 

 Donde sumamos todos los campos para obtener el total y así tener otra columna al final.

La consulta nos queda entonces:





y con esto ya esta realizada la consulta con la función PIVOT.

Nota: al incluir la clausula IN solamente se puede indicar un conjunto de valores, es decir un listado previamente conocido de valores ya que si queremos agregar las columnas de forma dinámica haciendo un SELECT IN nos dará un error ya que la función pivot no permite trabajar de esta manera.

Por ultimo un ejemplo de una consulta que agrega totales verticales y lo unico que se hace es un UNION ALL.


lunes, 3 de junio de 2013

On 15:56 by Unknown in , , ,    2 comments
La siguiente mini aplicación muestra como conectarse a una base de datos ingresando de forma manual los parámetros de conexión (bd, puerto, etc) y luego visualizar los datos de cualquiera de las tablas de la BD seleccionada, lo diferente que tiene a la mayoría de ejemplos mostrados en Internet es que se cargan las columnas de forma dinámica  es decir que se cargan todas las columnas de la tabla y no solo un numero estático de columnas definidas en el programa, lo cual puede servir en muchos casos, con esto se tiene la conexión y la lectura de datos, si se quiere hacer cualquier otro uso como insertar , eliminar etc, se puede seguir el mismo patrón partiendo de este ejemplo.

En el .zip va incluido el driver (ultima version) para conectar java con postgres, se realizo en netbeans 7.3 con jdk 7u21.

La aplicación se ve así:



y en el cuadro de dialogo ingresan los valores correspondientes y en el combobox de la ventana principal pueden ver las tablas disponibles y ver los datos de cada una.


Pueden descargarla en: Java - Postgres
Nota: El código no es el mas optimo que digamos porque no tenia tiempo para mejorarlo, la prioridad era que funcionara XD y lo pueden notar en los métodos de la clase conexión pero puede ser mejorado y/o modificada de acuerdo a las necesidades.

Créditos a:  http://gnucesar.wordpress.com/2008/07/22/conexion-a-postgres-desde-java/ ya que a partir de esta clase me base para hacer la conexión.

jueves, 2 de mayo de 2013

On 14:41 by Unknown in , ,    3 comments
Las siguientes consultas muestran como trabajar con CASE en sql haciendo uso de tablas dinámicas o pivote, subconsultas entre otras cosas que nos sirven para realizar consultas mas complejas a una base de datos.

Se muestra lo que se pide en la consulta y su resultado (imagen) de la misma, al final se puede descargar el script de la base de datos y el .sql con el código de las consultas. Las consultas se realizaron en postgresql.

Se tiene el siguiente modelo relacional



1. ¿Quién es el cliente que más ha comprado? Mostrar el número de cliente, el primer nombre y el total.
cliente que mas ha comprado (dinero gastado)

Aquí cabe resaltar la forma para mostrar el numero de cliente y el primer nombre junto con el máximo  esto realizado con subconsultas.


2.  ¿Cuál es la categoría más vendida y la menos vendida? (una sola consulta)
Mostrar en la primera línea el nombre de la categoría máxima y el total vendido y
en la segunda línea el nombre de la categoría mínima y el total vendido.

En esta consulta se utiliza la clausula UNION.


3. ¿Cuáles son los totales vendidos por categoría y por mes?
Mostrar la categoría, el total del mes 1 hasta el mes 12 y los subtotales tanto
horizontal como vertical

En esta consulta ya se trabaja con las tablas dinámicas mostrando la información que se tiene almacenada en filas como columnas.


4. ¿Cuáles son los totales vendidos por país y por categoría?
Mostrar el país, el total de la categoría Action hasta Travel y los subtotales tanto
horizontal como vertical

Otra consulta parecida a la numero 3 solo que un poco mas extensa.



5. ¿Cuáles son los totales vendidos por los mejores 5 vendedores por categoría?
Mostrar el nombre del vendedor, el total de la categoría Action hasta Travel y los
subtotales tanto horizontal como vertical.

Otra consulta con tablas dinámicas pero que para los totales de cada columna se necesita realizar una subconsulta con cada uno porque no se están tomando todos los datos sino que solo los cinco mayores.


Descarga:  Consultas

miércoles, 1 de mayo de 2013

On 15:40 by Unknown in , ,    No comments
Pequeño tutorial de como instalar postgresql en ubuntu, específicamente la ultima versión a la fecha de este sistema operativo.

Hay varias formas de realizarlo  pero esta me parece de las mas sencillas ya que lo único que cambia en cuanto a su instalación con windows es que necesitamos dar permisos de ejecución al archivo .run y listo, lo ejecutamos desde la terminal como superusuario o doble clic en la carpeta como superusuario.

1. Descargamos la ultima versión desde el siguiente enlace.

2. Nos autenticamos como superusuario (sudo su) y nos vamos a la carpeta donde descargamos el archivo de postgresql.
Le damos permisos de ejecución (chmod +x <nombre_archivo>
como podemos ver en la primera parte donde liste los archivos de la carpeta (ls) aparece el de postgresql con letras blancas, al darle permisos de ejecución y al listar nuevamente aparece con letras verdes.





3. Ejecutamos (./<nombre_archivo>) el archivo y ya comienza la instalación normal.



y por ultimo ya podemos abrir Pgadmin III para trabajar con esta base de datos.


On 15:18 by Unknown in    No comments
La semana pasada se libero la ultima versión de Ubuntu, he usado ubuntu desde hace 3 años y he utilizado desde la versión 8 hasta esta ultima y la verdad que al principio me funciono excelente pero ya a partir de la versión 11.10 empece a tener problemas de compatibilidad, errores bastante raros y con la versión que trabaje bastante fue con la 12.10 y me pareció bastante inestable en comparación con las anteriores.



Entonces decidí esperar esta ultima versión y ver si había mejorado en algo y la respuesta es SI, esta versión ha mejorado bastante en comparación a su predecesora y resaltare los puntos de mejora :

1. Inicio mas rápido:  El inicio es bastante rápido  aproximadamente unos de 10-15 segundos, no mas que W8 pero si mas rápido que ubuntu 12.xx o alguna otra versión de windows.


2. Apagado casi instantáneo  El apagado de ubuntu casi siempre ha sido un poco lento, ahora vuela, solamente clic a la opción apagar, luego al menú de apagado que aparece y en cuestión de segundos se apaga el sistema.

3. rapidez en Unity: Una de las cosas que no ayudaban mucho era la lentitud al querer buscar alguna aplicación con unity ahora encuentra todo bastante rápido.



4. Fluides en el Sistema: Da esa sensación de fluidez y rapidez al navegar por carpetas, trabajar en el escritorio y correr aplicaciones.



El único problema que tengo es que no me reconoce el 100% de mi batería y intente probar cuanto dura la carga y es aproximadamente 1h 35min mientras que en windows casi 2h 30min y no se si tenga que ver con el hardware o ya sea problema directamente del S.O.

Pero ignorando lo anterior hasta ahora mi experiencia ha sido bastante buena ya hasta le he agarrado gusto a unity (no me gustaba) y en resumen se puede decir que ubuntu 13.04 es RAPIDO.

Queda explorarlo y trabajar con el a fondo para ver si en realidad ha sido mejorado en todos los aspectos posibles.

lunes, 29 de abril de 2013

On 15:22 by Unknown in ,    No comments
El siguiente ejemplo muestra la redistribución entre protocolos de enrutamiento.

Tenemos la siguiente topologia:


Como se ve en la imagen vamos a redistribuir entre ospf - rip y entre ospf-eigrp.

R1 tiene protocolo rip
R2 tiene protcolo rip y tambien ospf asi como redistribucion de rip a ospf y redistrubucion de ospf a rip.
R3 y R4 tienen ospf
R5 tiene ospf y eigrp asi como la redistribucion entre ambos.
R6 tiene protcolo eigrp

Se hacen las respectivas configuraciones de las ip de cada puerto, se asignan protocolos y ya es posible hacer pruebas para ver si redistribuimos de forma correcta.


Por ejemplo un traceroute de R6 a R1


y por ultimo ping del host ubuntu al winxp y tracert de winxp a ubuntu respectivamente
.



Dejo los archivos de configuración de los routers por si le sirve para ver la sintaxis y entender de mejor forma el enrutamiento dinámico.

Configs

domingo, 21 de abril de 2013

On 19:42 by Unknown in ,    No comments
Cada uno de los protocolos de enrutamiento dinámico es usado para diferentes propósitos de acuerdo a las características de cada uno y comúnmente se utilizan juntos en redes de gran tamaño.

En el post anterior se mostro un ejemplo del protocolo RIP, en este se mostrara nuevamente su sintaxis asi como tambien como hacer que se comunique con otros protocolos (comando redistribute) y lo mismo para el protocolo EIGRP y el OSPF.


Sintaxis protocolo Rip:


conf t
router rip 
version 2
network <red_directa>  
exit

Si en dado caso tenemos un router que tiene que redistribuir el protocolo OSPF agregamos entonces:

conf t 
router rip
version 2
redistribute ospf [ID] metric 1 
exit

Si lo que queremos distribuir es el protcolo EIGRP entonces:

conf t
router rip
version 2
redistribute eigrp [SA] metric 1 
exit

o bien si ya sabemos previamente que debemos redistribuir protcolos lo hacemos todo junto desde el inicio.


conf t
router rip 
version 2
network <red_directa> 

--redistribucion--
exit

Donde [ID] es el valor asignado al protocolo OSPF y metric 1 es el valor de la métrica por defecto  y
[SA] es el valor asignado al sistema autónomo del protcolo eigrp.

Sintaxis Protocolo EIGRP

conf t
router eigrp <SA>
network <red_directa> <wilcard>
exit

<SA> es el valor de sistema autonomo que le asignemos al protcolo eigrp el cual es un numero entre 1 - 65535. NOTA: todos los routers que esten relacionados con el protocolo eigrp deben tener el mismo numero de SA.

Para redistribuir RIP:

conf t
router eigrp <SA>
redistribute rip metric 10000 10 255 1 1500
exit

donde los valores de metric son : <ancho_banda> <retraso><confiabilidad><carga><mtu>

para mas informacion sobre estas metricas pueden ir a:
metricas EIGRP

Para redistribuir OSPF:

conf t
router eigrp <SA>
redistribute ospf [ID] metric 10000 100 255 1 1500 
exit


Sintaxis protocolo OSPF



conf t
router ospf <id> 
network <red_directa> <wilcard> area <num_area>
exit


donde <id> es un numero entre 1 y 65535 y debe ser común entre los demás routers que se relacionen con el protocolo ospf y el área también debe ser el mismo numero en los demás routers.

Para redistribuir RIP:

conf t
router ospf <id>
redistribute rip subnets
exit

Para redistribuir EIGRP:

conf t
router ospf <id>
redistribute eigrp [SA] metric 500 subnets
exit

Para mas información sobre las métricas de OSPF: Metricas OSPF

Esa es la sintaxis básica para configurar protocolos y la redistribución  En el siguiente post se mostrara un ejemplo realizado en GNS3 en donde se utilizaran los 3 protcolos juntos.