Python Ping, un script que revisa las direcciones IP de tu red

python ping en ejecucion

La mejor forma de aprender un lenguaje de programación es tomando un proyecto y resolviendo sus problemas. En el proceso se investiga como hacer las cosas, resolver algunas dudas, depurar el código y probar su funcionalidad.

Soy fan de Python, pero no soy un experto. Python Ping es un programa que toma un archivo CSV (delimitado por comas) que tiene dos datos, una descripción del equipo y su dirección IP.

El programa toma esa información y hace ping, si el equipo responde, muestra un mensaje de OK, de lo contrario, reproduce un sonido y muestra un mensaje de error.

Hace una pausa de 10 minutos y vuelve a empezar. De esa forma es posible detectar problemas en la red, su ubicación y su frecuencia.

En una operación normal, todo debería de estar OK, pero todos sabemos que eso no siempre es así.

El archivo CSV.

Lo bonito de almacenar la información en un archivo CSV es que es muy sencillo de editar, actualizar y mantener.

Para ejemplo de este artículo elegí servidores que todos conocemos:

Archivo servidores.csv

Google , google.com
Bing , bing.com
Facebook , facebook.com
Twitter , twitter.com
Wikipedia , wikipedia.com

Una descripción, luego una coma y al final una dirección. Para el ejemplo puse los dominios, pero se pueden reemplazar por las direcciones IP. Eso lo hago porque a mi me interesa revisar una red local.

Desmenuzando el programa.

Al final del artículo pondré el código completo, aquí voy a ir desmenuzando algunas de las partes del mismo.

Import

import os
import csv
from colorama import Fore
import time
import datetime

Esta es la lista de los import del programa. Para que algunas cosas funcionen es necesario declararlas primero.

os lo utilizo para ejecutar instrucciones como si estuviera en la terminal.

csv para importar la información del archivo CSV en una variable dentro del programa.

colorama le da color, poniendo los errores en rojo, lo que esta bien en verde, los textos en blanco.

time y datetime los uso para formatear algunas salidas de tiempo.

check_ping

La función check_ping es la que hace el trabajo pesado. Quiero hacer notar que en lugar de utilizar el comando ping tradicional uso el comando fping que es más rápido y se adapta mejor cuando se llama desde un script.

La instrucción fping hace 10 reintentos antes de declarar un error de conexión.

sonido_alerta

Esta función es un plus. No voy a estar viendo la pantalla todo el tiempo durante la ejecución del script. Así que si hay un error hace un sonido. Como pueden ver en el código, lo que hace es reproducir un archivo mp3 a su elección.

El loop

El programa se repite indefinidamente en un ciclo haciendo una pausa de 10 minutos. De esta forma está revisando continuamente la red y avisa si hay algún problema. Para terminar el ciclo hay que presionar Control + C y se interrumpe la ejecución.

python_ping en acción

Como pueden ver, el programa es relativamente sencillo. Estoy consciente de que hay muchas cosas que se pueden mejorar, así que estoy abierto a sus comentario. Si desean utilizarlo, lo pueden hacer respetando claro la licencia pública general GNU, que permite utilizar, distribuir y modificar este código.

La bola mágica, un divertido script en Ruby

la bola mágica

El otro día vi un capitulo de los Simpon en el que Milhouse usa una bola mágica a la que le hace preguntas. Por pura diversión hice un pequeño script en Ruby para simular esta la bola mágica (Magic 8 Ball).

Episodio de los Simpson en el que usan la bola mágica
Episodio de los Simpson en el que usan la bola mágica.

El dispositivo original es bastante ingenioso, se le hace una pregunta a la bola mágica que tiene en su interior un icosaedro y en cada una de sus caras tiene grabada una respuesta que se puede ver a través de una ventanilla.

Read moreLa bola mágica, un divertido script en Ruby

CodeAcademy una buena idea mal ejecutada

Please try again later

Si más no recuerdo, el mes pasado me enteré del sitio [CodeAcademy](http://www.codecademy.com/) que ofrece cursos para mejorar tus habilidades en varios lenguajes de programación y que estaba estrenando varios de estos cursos en Español.

Me inscribí al curso de **Ruby**, en miras de afianzar mis conocimientos para después tomar el de **Make a Rails App**.

Me gusta el concepto educativo que maneja Codeacademy al estilo de “Mira, este es el concepto” – “Te muestro un ejemplo” – “Modifica el ejemplo” y cuando completes la tarea pasas al siguiente nivel. En el transcurso de los cursos vas acumulando “Medallas” al estilo de “Logros desbloqueados” cuando terminas una lección. Hasta aquí todo parecía genial y por algunos instantes difruté mucho las lecciones. Sin embargo no todo es miel sobre hojuelas en CodeAcademy.

## Capítulos mal enlazados
Durante mi curso de **Ruby** tuve un problema a la mitad del curso, simplemente no podía avanzar a la siguiente lección y en su lugar me aparecía la información de mi perfil.

Después de varios intententos fallidos seguí un consejo que ofrecían en los foros de soporte de CodeAcademy. Busqué en Google la siguiente lección y mediante un enlace del buscador pude avanzar, pero al finalizar el curso me siguen faltando las dos lecciones que tienen el error, así que nunca pude terminarlo y me quedé con un 80% avance. :S

Curso incompleto de Ruby.
Curso incompleto de Ruby.

## El eterno “Try again later”
Me di cuenta que era inútil mirar atrás y continué avanzado. Cuando empecé el curso **Make a Rails App** los problemas aumentaron. Solamente una vez logré que funcionará el curso, de ahí en adelante siempre me ha aparecido el mensaje: **Sorry, something’s gone wrong. Please try again later.** y de ahí no pude salir. Intenté de todo, varios navegadores, cambios en mi conexión a Internet, limpiar el caché y nada … Siempre me aparece el mismo mensaje de error.

Please try again later
Ya no pude avanzar más en este curso.

## Sin soporte
Aunque el diseño de los cursos de CodeAcademy es muy bueno y la metodología me encanta, los problemas frecuentes hacen que la estancia en el salón de clase sea tan frustrante como en un salón real. Lo único que se puede hacer con los *bugs* es reportarlos y [así lo hice](http://www.codecademy.com/forum_questions/54c08859937676fd280008eb), pero tal parece que son foros fantasma, no hay un mensaje de confirmación por parte de algún moderador de CodeAcademy, son los usuarios reportando una y otra vez el mismo problema. Incluso llegué a redactar un reporte más en forma en inglés con más información pero a la fecha no se han solucionado y tampoco he recibido un correo con algún tipo de confirmación o con alguna solución al problema.

Algunos compañeros me han dicho que la versión en inglés del curso no tiene tantos problemas, pero no he encontrado una forma sencilla de cambiar el idioma en mi perfil. Desde mi particular punto de vista creo que no deberían de liberar un producto con tantos problemas si no han probado anteriormente.

Si quieren probar otros cursos adelante, me han dicho que los cursos de HTML y CSS están muy interesantes, espero que no tengan tantos problemas como yo.