Bueno, muchas veces me ha pasado que para iniciar a hacer una página o un programa me quedo un rato pensando en el diseño … donde poner cada cosa, mas o menos como va a quedar… de hecho no soy muy bueno diseñando y a veces busco irme hacia lo simple, pero de todas formas, ese tiempo que uno le dedica a planear el esquema o la base pues es tiempo que mejor se podría invertir en la codificación :)

Existe el web wireframing, que viene siendo cuando uno hace un esbozo del programa o página que quiere crear … creo que todos lo hemos hecho alguna vez, quizá en algún cuaderno o servilleta para darnos una idea o aterrizar la imagen que traemos en mente de lo que buscamos.

Hago esta entrada por que hace poco me topé con Balsamiq Mockups, una herramienta bastante genial con la que podemos hacer nuestros esbozos de páginas o programas de una manera fácil, rápida e intuitiva. No solo nos sirve para nosotros basarnos, si no que si trabajamos con otras personas se los podemos enseñar o incluso a un cliente para que tenga una idea de que esperar (que de una imágen de computadora a una en servilleta creo que si hay mucha diferencia de presentación).

Algunos ejemplos de lo que se puede crear con Balsamiq Mockups:

Bastante genial, no?

Bueno, el único inconveniente (entre comillas) es que es una herramienta de pago :) … dejo algunos links que tal vez puedan resultar interesantes …. recomiendo ampliamente la herramienta, de hecho creo que yo la adoptaré como una de mis básicas para futuros proyectos.

Ah otra cosa, funciona con Adobe AIR, así que habrá que instalarlo.

http://www.balsamiq.com/products/mockups

http://www.taringa.net/posts/info/2719236/Software-sencillo-para-crear-bosquejos.html

Bueno, pues… recién con lo de Quanaxoft, me he metido un poco más a desarrollar con Javascript para las aplicaciones web y he encontrado en el closure-compiler una interesante herramienta para compilar código :)

Si bien, entre otras monerías, lo que hace el closure-compiler es comprimir nuestro javascript, también le hace modificaciones muy interesantes para optimizarlo.

Closure Compiler

Closure Compiler is a JavaScript optimizing compiler. It parses your JavaScript, analyzes it, removes dead code and rewrites and minimizes what’s left. It also checks syntax, variable references, and types, and warns about common JavaScript pitfalls. It is used in many of Google’s JavaScript apps, including Gmail, Google Web Search, Google Maps, and Google Docs.

Bueno, la página del proyecto la encontramos aquí: http://code.google.com/p/closure-compiler/

Y si queremos probarlo en línea, pues de aqui: http://closure-compiler.appspot.com/home

Es eficiente, libre y multiplataforma…. aparte que se me está haciendo indispensable para trabajar jaja.

Corre en: Windows (solo lo probé en XP, no creo que jale en Linux, es lo malo)

Qué es?: Servidor web

Lenguaje: Jython (pero al caso, es python)

Que tal, pues… hace tiempo me tocó investigar sobre como hacer un servidor web en Jython… Jython a grandes rasgos pues es python, pero puedes usar cosas de Java, asi que ahí tiene su genialidad y por eso el nombre  :) … bueno, como sea… el servidor está hecho por mi (aunque me basé por ahi de alguna otra cosa que vi en la web, no recuerdo bien en que jaja ya que no tomé buenas notas de las páginas que visité en ese entonces), pero pues dejo el código por si a alguien le sirve :)

El código está comentado por si hay alguna duda pues nadamas hay que revisarlo… incluí algunas carpetas de prueba… una carpeta principal se llama “www”, que sería según donde se pondrían los archivos de las páginas web.

Puedes descargarlo de aqui: http://www.mediafire.com/file/ydlwe1zmyt4/server.zip

Subversion

Alguna vez se emocionaron por realizar demasiados cambios a la vez y acabaron “estropeando” su proyecto… y no solo me refiero a desarrollo de software, ¿Qué tal la tesis?…

A mi me sucedió el año pasado, y fue precisamente mientras buscaba en una serie de carpetas marcadas como “octubre2008″, “noviembre2008″, “diciembre2008″ etc una versión lo más coherente posible de mi tesis… que supe que tenía que aprender a usar alguna herramienta que me permitiera regarla con confianza en mis proyectos… y que cuando decidiera, pudiera retomar alguna idea de versiones anteriores de los archivos, sin arrepentimientos ni sentimientos encontrados.

Subversion nos permite hacer esto y mucho más, en este post les propongo sencillos tips para que puedan configurar su repo en 5 minutos y se ahorren muchos dolores de cabeza :) .

Subversión viene instalado Mac OS X Leopard y en Debian Linux… si la terminal no reconoce el comando “svn” les recomiendo lo bajen desde la página del autor.

Una de las ventajas que le veo a Subversion frente a Concurrent Version System (CVS), es que solo existe una versión para todo el repositorio, es decir si tengo n archivos en mi repositorio,  hago x número de cambios en el (add, delete, actualizo archivos, etc.) y posteriormente actualizo el repo (mediante el commando commit del cual hablaremos más adelante) la versión del mismo aumentará en 1, es decir:

versióndelrepo++;

No como en CVS donde se mantiene un “contador” por cada archivo y sinceramente se me hace un relajo administrar eso…

Pero bueno, esto tendrá sentido para ustedes una vez que hayan trabajado un rato con Subversion.

Paso 1: Creación del repositorio

Nuestro repo se llamará:

LaTesisImposible

Y lo guardaremos en:

/Users/dario/Documents/subversionRepos

Para esto utilizaremos los siguiente comandos desde la consola:

mkdir /Users/dario/Documents/subversionRepos
svnadmin create /Users/dario/Documents/subversionRepos/LaTesisImposible

Paso 2: Configuración del repositorio (intro):

Listo! si la ruta es válida se generará nuestro repositorio, si le damos un “ls” a la carpeta LaTesisImposible deben de aparecer las siguientes subcarpetas:

README.txt    dav        format        locks
 conf        db        hooks

El README solamente nos notifica que el directorio es un repositorio Subversion, si lo quieren checar denle un:

nano README.txt

La carpeta hooks contiene “scripts” para asegurar que básicamente no la estamos regando… por ejemplo, hay un script llamado pre-commit.tmp donde Subversion checa que siempre que subamos cambios al repo, pongamos un comentario (ahora les explico como hacerlo), y que si el mensaje es NULL, nos mande un error, también comprueba que tenemos permisos para actualizar el repo.

y ahora es cuando entra la importancia de la carpeta conf…

Si checamos los archivos dentro de esa carpeta encontraremos lo siguiente:

moebius1:conf dario$ ls
 authz        passwd        svnserve.conf

Por lo que es obvio que esta carpeta es el “cadenero a la puerta del bar”.

De una vez les paso la liga al libro “oficial” de Subversion, donde se detalla como establecer permisos de lectura/escritura y todo aquello.

Paso 3: Sincronizar nuestra carpeta de proyecto con el repositorio

Tenemos que movernos a donde queremos que se genere nuestra carpeta de trabajo, por ejemplo, les propongo esta ruta:

cd /Users/dario/Documents/Universidad/9noSemestre/

dentro de esta carpeta ejecutamos:

svn co file:///Users/dario/Documents/subversionRepos/LaTesisImposible

Lo que hara que dentro de 9noSemetre se genere una carpeta llamada LaTesisImposible la cual ya está sincronizada con el repo.

Paso 4: Generar archivos en nuestra carpeta de trabajo

Bueno, pues a trabajar!! yo generé 2 archivos:

miTesis.txt
miBibliografia.txt

//(recuerden que a las compus aún no le gustan los acentos en los nombres de archivos)

Obviamente dentro de la carpeta sincronizada (no en el repo).

Paso 5: Añadir archivos al repo.

svn add miTesis.txt miBibliografia.txt (añade solo esos 2 archivos)
ó
svn add *.txt (añade todos los archivos con extensión txt)
ó
svn add *.* (añade todos los archivos)

Paso 6: Subir los cambios en el repo.

svn commit -m "Añadidos los archivos miTesis.txt y miBibliografia.txt, espero acabar antes de Diciembre"

la opción -m nos permite agregar un mensaje al commit, esto es básico para saber en términos generales lo que vamos cambiando de versión a versión, esto nos permitirá controlar más nuestro desarrollo.

si todo salió bien deben de ver lo siguiente en la Terminal:


Adding         miBibliografia.txt

Adding         miTesis.txt

Transmitting file data .

Committed revision 1.

Listo!!

Ya tienen un repositorio Subversion funcionando, consulten el libro que les pasé arriba para que vayan conociendo más comandos y se enamoren de este
programa.

Tips:

Introduzcan en la Terminal:

svn help

para ver todos los argumentos disponibles, junto con el libro de subversion pueden crear scripts muy interesantes!!

Hey!! una recomendación, utilicen estos comandos para hacer archivos, borrar archivos dentro de las carpetas de trabajo porque de otra manera tendrán que hacer todo dos veces, por ejemplo:

Si quiero generar una carpeta que este bajo control de versión en una línea puedo hacer lo siguiente:

svn mkdir subCarpetaDeLaTesisImposible

esto hará dos cosas:

  1. Creará la carpeta.
  2. La agregará al repo, como si le diera un add.

De otra manera tendría que hacer esto:

mkdir subCarpetaDeLaTesisImposible
svn add subCarpetaDeLaTesisImposible

¡Espero que les haya servido este post como introducción a Subversion!

windows-7-logo-copiaProbado en: Windows 7 Ultimate, 64 bits

Bueno… ayer instalé Windows 7 en mi máquina… y la verdad me llevo muy buenas sorpresas. No solo es más bonito :) , si no que también es rápido … eficiente… y no me ha dado problemas con la compatibilidad con programas o drivers (los drivers los he encontrado en las páginas de los fabricantes, listos para windows 7).

De hecho, admito que Windows 7 es genial :) … jaja, digo… tal vez soy linuxero, pero fuera de fanatismos burdos, creo que es un sistema operativo que tiene mucho que ofrecer … es como un XP en esteroides!

En fin, como yo utilizo mi máquina para desarrollo, me es indispensable tener Apache, PHP y MySQL :) … asi que procedí a hacer las instalaciones respectivas. De hecho, pensé que tendrías muchos problemas, como me pasó en Windows Vista … pero ésta vez, no me animé a utilizar XAMP, si no que hice las instalaciones programa por programa y todo salió bien, les platico mi procedimiento.

No entraré mucho en detalles, solo diré que pasos extra hice en Windows 7, quien ya haya instalado a estos 3 amigos en Windows XP ya estará familiarizado con el procedimiento, solo explico como hice funcionar PHP con Apache en 7, puesto que si da unos cuantos problemas.

1.- Bajar Apache … lo instalamos… todo normal.

http://httpd.apache.org/download.cgi

Versión que utilicé: apache_2.2.13-win32-x86-no_ssl.msi

Probamos: http://localhost

2.- Bajar PHP… lo instalamos … todo normal.

http://windows.php.net/download/

Versión que utilicé: PHP 5.3 (5.3.0), VC6 x86 Thread Safe (2009-Jun-30 08:52:55)

- Recordar elegir la carpeta de configuración de Apache, en mi caso: C:/Program Files (x86)/Apache Software Foundation/Apache2.2/conf

- Lo padre de la versión 5.3.0 es que ya trae seleccionadas las extensiones que me gustan (mysql, mysqli, sockets).

- La instalación no se llevará a cabo exitosamente, nos dirá que falló algo.

- Volvemos a correr el .msi y seleccionamos reparar (ésto no se si tenga un efecto verdadero, yo lo hice para la buena suerte jaja).

- Ahora si se instaló bien.

- Una vez terminado de instalar PHP, detenemos el servicio de Apache (en el tray icon).

tray

- Vamos a la carpeta de archivos de configuración de Apache y modificamos httpd.conf

Agregamos al final:

#PHP SETTINGS
LoadModule php5_module “C:/Program Files (x86)/PHP/php5apache2_2.dll”
AddType application/x-httpd-php .php
PHPIniDir “C:/Program Files (x86)/PHP”

Y agregamos index.php en la parte de indexación:

#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>

- Ok, volvemos a iniciar el servidor Apache (se puede hacer del icon tray)

- Los archivos de páginas web en Apache los guardamos en: C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs

- Creamos un index.php para pruebas

3.- Bajar MySQL, lo instalamos y todo normal :)

http://dev.mysql.com/downloads/mysql/5.1.html

De MySQL, si quieren un manejador gráfico, yo recomiendo SQLyog, a mi gusto… el mejor :)

http://code.google.com/p/sqlyog/downloads/list

Otra aplicación útil para MySQL y que en lo particular me agrada mucho es el MySQL Workbench:

MySQL Workbench is a next-generation visual database design application that can be used to efficiently design, manage and document database schemata.

It is available as both, open source and commercial editions. The Community (OSS) Edition is available from this page under the free software/opensource GNU General Public License (commonly known as the “GPL”)

The Windows version requires the .Net 2.0 framework which is integrated with Windows Vista. Windows XP SP2 users need to download the framework and install it prior to MySQL Workbench.

More information about the project can be found on MySQL Products and the MySQL Workbench Developer Central site.

Lo pueden obtener de aqui: http://dev.mysql.com/downloads/workbench/5.1.html

logo

Es un protocolo utilizado para el manejo de dispositivos en redes IP y es una excelente opción para la administración de nuestra red. Una de sus grandes ventajas es que es un protocolo soportado por una gran cantidad de dispositivos (switches, routers, impresoras, sistemas Windows, sistemas UNIX, etc.) a diferencia de su predecesor, el Simple Gateway Management Protocol (SGMP), el cual sólo estaba pensado para administrar routers.

Podemos utilizar para cosas tan simples como monitorear la condición de nuestros dispositivos hasta poder tener control sobre ellos (por ejemplo, podemos dar de baja interfaces o condiciones más especificas designadas por los fabricantes del hardware).

¿Cómo funciona SNMP?

En el mundo de SNMP hay dos actores: managers y agents.

Se tiene como manager a un servidor que corra un software que pueda administrar tareas para la red, a menudo se les conoce como NMSs (Network Management Stations).

Los agents, son piezas de software que corren en los dispositivos de red que administramos, puede ser un programa separado o puede estar incorporado en el sistema operativo. La mayoría de los dispositivos IP vienen con una especie de SNMP agent.

En SNMP, tenemos que lo importante es la interacción entre estos dos actores, el agent le pasa información al manager, y éste se encarga de administrarla. De hecho el manager puede tener un rol más activo solicitando y actualizando la información del agent.

snmp

Cabe mencionar que el agent tiene una lista de objetos que lo describen (por decir, un objeto podría ser el status operacional de la interfaz de un router) y aquí es donde entran las MIBs.

Una MIB (Management Information Base ) es una base de datos que contiene información de los objetos del agente, el cual puede implementar varias MIBs, sin embargo todos los agents implementan una en particular, la cual es MIB-II y cuyo RFC es el 1213.

SNMP usa UDP (User Datagram Protocol) como su protocolo de transporte para pasar los datos entre managers y agents. La ventaja de que trabaje con UDP en vez de TCP es por la velocidad, debido a que no hay una conexión end-to-end, sin embargo por obvias razones este envío de información no es confiable (pérdida de paquetes, sin embargo no es un problema realmente), depende entonces de la aplicación SNMP el determinar si se perdieron los datagramas y retransmitirlos en todo caso (esto se logra utilizando timeouts).

SNMP usa el puerto UDP 161 para mandar y recibir requests y el puerto 162 para recibir los traps de los dispositivos administrados.

Un punto importante a tratar al hablar de SNMP es lo que se conoce como comunidades (communities) las cuales son la manera en la cual se establecen relaciones seguras (trust) entre managers y agents. A modo de resumen, una comunidad es una contraseña.

Un agent tiene tres nombres de comunidades: read-only, read-write y trap. Cada una controla una diferente actividad y va en relación a su nombre (solo lectura, lectura y escritura y recepción de notificaciones asíncronas respectivamente). Por default, tenemos que public representa a read-only y private a read-write.

Si bien tenemos que en SNMP podemos obtener información operacional sobre los dispositivos queda una pregunta, ¿cómo es representada la información en SNMP?

Cada objeto tiene tres atributos:

Nombre: El nombre o mejor dicho, el identificador del objeto (OID) el cual es único y define a cada objeto. Puede estar representado en forma numérica o en versión “human readable”.

Tipo y sintaxis: El como los datos van a ser representados y transmitidos entre managers y agents (el tipo de dato del objeto), una ventaja es que es independiente de la máquina que sea, por ejemplo, una máquina con Windows 2000 puede comunicarse con una Sun SPARC.

Encoding: Es el como los objetos son encoded y decoded.

Los objetos son organizados en un árbol jerárquico, y de hecho esta estructura es la base para el esquema de nombres en SNMP. Un OID está hecho con una serie de números enteros basados en los nodos del árbol y separados por puntos.

Como en cualquier árbol el primer nodo es la raíz y cualquier nodo con hijos es un subárbol. Cualquier nodo sin hijos a su vez es llamado nodo hoja. Cabe mencionar que solo el subárbol iso(1) del diagrama pertenece a SNMP. La representación numérica, por ejemplo, del subárbol internet(1) sería la siguiente: 1.3.6.1 y en versión “human readable”: iso.org.dod.internet . Como se puede ver cada objeto tiene un número correspondiente (OID) así como un nombre.

Información para el subárbol internet(1):

Respecto al nodo hoja directory(1), actualmente no es utilizado.

El management(2) define un estándar de administración.

Experimental(3) está reservado para pruebas e investigación.

Y en prívate(4) está reservado para que sean definidos nuevos objetos por individuos u organizaciones (para una lista de los números que se han creado de forma privada visitar: http://www.iana.org/assignments/enterprise-numbers , se anexa un documento de todas formas con ésta información).

Ahora veamos el grupo de MIB-II (definido como iso.org.dod.internet.mgmt.1 o lo que es lo mismo 1.3.6.1.2.1) representado en árbol y una lista rápida descriptiva de los objetos que lo integran (analizar el RFC 1213 respectivo a MIB-II para más información):

snmp2

¿Cómo administrar hosts?

Partiendo del hecho de que con SNMP podemos recabar información de las máquinas en nuestra red, podemos usar una rama llamada host que pertenece a MIB-II, con la cual podemos sacar información específica:

host            OBJECT IDENTIFIER ::= { mib-2 25 }
hrSystem        OBJECT IDENTIFIER ::= { host 1 }
hrStorage       OBJECT IDENTIFIER ::= { host 2 }
hrDevice        OBJECT IDENTIFIER ::= { host 3 }
hrSWRun         OBJECT IDENTIFIER ::= { host 4 }
hrSWRunPerf     OBJECT IDENTIFIER ::= { host 5 }
hrSWInstalled   OBJECT IDENTIFIER ::= { host 6 }

El OID de host es 1.3.6.1.2.1.25 (iso.org.dod.internet.mgmt.mib-2.host).

The hrSystem (1.3.6.1.2.1.25.1) información del sistema en si.

The hrDevice (1.3.6.1.2.1.25.3) and hrStorage (1.3.6.1.2.1.25.2) información de los dispositivos del host y de sus medios de almacenamiento respectivamente.

The hrSWRun (1.3.6.1.2.1.25.4), hrSWRunPerf (1.3.6.1.2.1.25.5), and hrSWInstalled (1.3.6.1.2.1.25.6 ) se refieren aspectos respectivos al software instalado en el sistema y a los procesos, etc.

En el siguiente diagrama presentamos el árbol para la rama de host en MIB-II, la razón, con la información extraida del árbol podemos obtener datos para administrar nustros hosts:

snmp3

Ok… ahora como comentario final, diré que podemos hacer nuestrar propias herramientas de administración con PHP (bueno, con otros lenguajes es posible también, pero yo me anime a hacerlo en PHP para tener una herramienta web fácil de desarrollar y administrar sin tantos líos), de hecho desarrolle un sistema para este fin, al cual le llamé junto con un amigo Free-Love Scanner y puedes encontrar más información de él (incluido más documentación y código fuente) en el siguiente link: http://www.quanaxoft.com/blog/category/proyectos/free-love-scanner/

Bibliografía:

SNMP – http://es.wikipedia.org/wiki/SNMP

SNMP Tutorial-http://www.dpstele.com/layers/l2/snmp_l2_tut_part1.php

Essential SNMP, Second Edition, by Douglas R. Mauro and Kevin J. Schmidt. Copyright 2005 O’Reilly Media, Inc., 0-596-00840-6

logo

Que tal, les pongo el programa pero subido al servidor de Apuntux, les da información sobre su IP, no es 100% acertado, pero los resultados a veces son muy cercanos:

http://www.apuntux.com/geo/geoAvanzado.php

Manda las coordenadas a Google Maps, lo que hace interesante la aplicación, el código de este programa ya está publicado en un post anterior, salu2!

logoQue tal, en estos dias me di el tiempo para trabajar sobre algo que se me hizo interesante… geolocalización de IP. Me daba curiosidad como algunas páginas podían determinar la ubicación de alguien por su IP e investigando me topé con MaxMind. Bueno, pues quise documentar el proceso y se los paso a ver si les sirve o les interesa.

El fin del documento es al final poder hacer una página que “geolocalice” una IP y que meta los datos en Google Maps. Anexo también los archivos de la página para que la prueben en sus servidores, cualquier duda la pueden comentar en esta entrada, salu2!.

Ejemplo del programa corriendo en mi servidor:

http://www.apuntux.com/geo/geoAvanzado.php

Descargar tutorial:

http://www.mediafire.com/file/ykn30wmy1jy/Geolocalizacion.pdf

Descargar archivos del programa:

http://www.mediafire.com/file/ounjytlm2hm/geo.zip

sqlyog.thumbnail

vs ems

Bueno, creo que me hice muy dependiente de una herramienta como EMS SQL Manager Lite for MySQL … sin embargo, he tenido problemas con ésta herramienta al quererla iniciar pero sin contar con Internet… o con Internet muy lento… la herramienta simplemente se traba y esto es muy molesto.

emsmysqllite
Captura del EMS SQL Manager Lite for MySQL

Bueno, a lo que voy es que es malo depender de una herramienta… y bueno, en clases recuerdo que el profesor nos había pasado una versión del SQLYog y la verdad es que me pareció bastante bueno, tal vez no tan llamativo como el producto anterior, pero igual de funcional y no se me ha trabado por nada hasta el momento :)

Captura del SQLYog
Captura del SQLYog

Cuestión de gustos… pero en lo personal me quedo con SQLYog…

Que tal, pues gracias al comentario de un amigo (miguex) en un foro… me decidi a hostear el Free-Love Scanner en Google Code…

Les paso la página del proyecto:

http://code.google.com/p/flscanner/

salu2!

© 2011 Quanaxblog Suffusion theme by Sayontan Sinha