Algo esta pasando

Desde hace algunas horas el servidor de datos de CodeProject.com ha muerto o estan en plena configuración. El servidor web esta trabajando bien.

Al intentar visitar la pagina saltan los siguientes errores:

Microsoft OLE DB Provider for SQL
Server error '80004005'
[DBNETLIB][ConnectionOpen (Connect()).]
SQL Server does not exist or access denied.
/script/common/db.asp, line 108

Mensaje de error cuando no se puede establecer la conexion con el servidor de datos.

Hace minutos cambió el mensaje.
Provider error '80004005'
Unspecified error
/script/common/db.asp, line 108

Todo hace pensar que tienen serios problemas. Supongo que estan modudando el servicio o han hackeado el servidor. Espero que mañana este activo el servicio.

Grafos

Los grafos son un tipo de estructuras de datos; no voy a explicar exactamente de que se tratan los grafos pero pueden encontrar mas información al respecto aqui.

Llegar a implementar en forma básica listas, árboles y grafos es una parte importante en los inicios de la carrera de un programador. Por lo que estoy preparando pequeño artículo sobre como implementar grafos.

Lo interesante de este articulo, que desarrollé hace algunos años, es que lo combiné con un algoritmo de ordenación grafica basada en distancias y para que el parpadeo no moleste lo implementé con double buffering.

Aquí un recorte de muestra del programa en ejecución.

Grafo Visual C++

Pueden descargarse un demo ejecutable, por lo pronto, en el siguiente enlace:

grafos.zip

Cuando lo tenga completamente listo voy a publicarlo documentado y podrán descargarlo con código fuente que podran compilar en diferentes sistemas operativos. Espero que luego les pueda servir como punto de inicio y llegar mas lejos con las estructuras de datos.

Update: Pueden descargar el artículo de la siguiente dirección:

Implementacion de Double Buffer en Visual C++:
http://www.latindevelopers.com/vcpp/bitmap/doble-buffer/

Testigo Musical

SilentHades me ha invitado a participar en el «Testigo Musical», pues aqui esta mi testimononio musical:

  1. Tamaño total de los archivos de música en mi ordenador
    40.2 Gb perdidos , 1.4Gb recuperados, 79Mb activos
  2. Último disco que me compré:
    Oscar D’Leon En Vivo – hace dos años, fue el último de los 4 discos que compré en toda mi vida.
  3. Canción que estoy escuchando ahora:
    Killing me softly – Roberta Flack
    Llorarás – Oscar D’Leon.
  4. Canciones que escucho un montón o que tienen algún significado para mí:
    Lloraras Oscar – D’Leon
    Kill’me Sofmly – Roberta Flack
    El preso – Latin Brothers.
    Desiciones – Rube Blades.
    Idilio – Willy Colon
    Cuando pienses en volver – Pedro Suarez Vertiz .
    Patrona de los Reclusos – Latin Brothers
    Como duele el corazon – Proyección
    Niñachay – William Luna

    Hay unas cuantas mas… hasta llegar a 79Mb

  5. 5 personas que tendrán que recoger el testigo y poner el mismo post
    Waltico
    Juan Odicio
    Luis Alberto
    Slayer_X
    Yosef

Microsoft compraría RedHat Inc.

Parece el titulo de una pesadilla, pero no me sorprendería mucho si llegara a suceder. RedHat a empezado a comercializar su sistema operativo RedHat Linux Enterprise hace ya mucho tiempo.

Cuando la vida libre de RedHat Linux, que todos conocemos, finalizó empezó el proyecto Fedora Linux que es apoyado por la empresa RedHat. A pesar del proyecto Fedora, quedó una espina en nuestros corazones.

Según los siguientes enlaces Microsoft estaría interesado en comprar RedHat Inc. No voy a ser el primero ni el único en oponerme a esta posible operación, la decisión es de RedHat Inc. Talvez sólo sean rumores y este post sea por las puras.

Crecen los rumores de que Microsoft quiere comprar Red Hat

Microsoft podría comprar Red Hat

Detectar pais del visitante en PHP

PHP Logo Los webmasters nos preocupamos mucho por saber quienes son los que visitan nuestras páginas, para ello utilizamos herramientas muy útiles como contadores de visitas, analizadores de tráfico, etc., pero no siempre tenemos lo que queremos, no hay como hacer un script con tus propias manos.

Hace mucho tiempo encontré una base de datos (actualizada periódicamente) que contiene todos la mayoría de números IP que se pueden encontrar en la red. Estos están almacenados en forma de rangos y contiene el dato que nos interesa el País. Con esta base de datos es fácil determinar el país de procedencia del visitante a partir del numero  IP.

MaxMind es una empresa que provee este tipo de servicios y nos brinda un archivo libre (pero limitado) que podemos aprovechar.  http://www.maxmind.com/app/geolitecountry , solo tenemos que descargar el archivo e instalarlo en nuestra base de datos MySQL, sigan los pasos:

Paso 1: Descargar y Descomprimir la base de datos MaxMind (formato .csv):

wget http://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
unzip GeoIPCountryCSV.zip  #contiene el archivo GeoIPCountryWhois.csv

Esta es una vista previa del archivo GeoIPCountryWhois.csv

...
"190.8.128.0","190.8.159.255","3188228096","3188236287","PE","Peru"
"190.8.160.0","190.8.163.255","3188236288","3188237311","PA","Panama"
"190.8.164.0","190.8.167.255","3188237312","3188238335","VE","Venezuela"
"190.8.176.0","190.8.179.255","3188240384","3188241407","CO","Colombia"
"190.8.180.0","190.8.183.255","3188241408","3188242431","EC","Ecuador"
"190.8.184.0","190.8.191.255","3188242432","3188244479","AR","Argentina"
"190.8.192.0","190.8.255.255","3188244480","3188260863","CO","Colombia"
"190.9.0.0","190.9.31.255","3188260864","3188269055","AR","Argentina"
"190.9.32.0","190.9.47.255","3188269056","3188273151","VE","Venezuela"
...

Luego debemos crear la tabla donde vamos a importar esos datos en formato csv:

CREATE TABLE ipdatabase
(
  str_ip_from varchar(15),
  str_ip_to varchar(15),
  ip_from int unsigned,
  ip_to int unsigned,
  country_code2 char(2),
  country_name varchar(50),
  KEY ip_from (ip_from),
  KEY ip_to (ip_to)
);

Es importante que los campos ip_from e ip_to sean int unsigned por que guardaremos números realmente grandes.

LOAD DATA LOCAL INFILE '/ruta_hacia/GeoIPCountryWhois.csv'
INTO TABLE ipdatabase
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n';

Para poder mostrar las imágenes debemos tener las imágenes de las banderas de todos los países, pueden descargar un pack banderas en diferentes tamaños de: http://speckyboy.com/2010/08/04/top-10-country-flag-icon-sets/

Ahora todo esta listo para que podamos escribir el código PHP que determinara el registro al cual pertenece un determinado numero de IP:

$link = mysql_connect("localhost" , "ipdatabase", "pwd");
mysql_select_db("ipdatabase",$link);
$sql = "SELECT lcase(country_code2) as code,country_name as name ".
"FROM ipdatabase ".
"WHERE ip_from <= inet_aton('{$_SERVER['REMOTE_ADDR']}') ".        
"AND ip_to >= inet_aton('{$_SERVER['REMOTE_ADDR']}') ";
if($res = mysql_query($sql,$link)) 
{
if(mysql_affected_rows($link) > 0 && $row = mysql_fetch_array($res))
    $im = imagecreatefrompng("../images/flags/".$row['code'].".png");
else
    $im = imagecreatefrompng("../images/flags/-.png");
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
mysql_free_result($res);
}
else
{
echo mysql_error($link);
}
mysql_close($link);

El resultado del script anterior es el siguiente:

Usted nos esta visitando desde :

Ustedes pueden personalizar el código PHP para publicarlo en sus paginas web.

Espero les sirva.

Modificaciones a WordPress

Como habrán podido notar he mudado mi Blog hace ya mucho tiempo) de Blogger.com al sistema de publicación WordPress. WordPress esta escrito en PHP, la instalación es muy sencilla, es un súper blog-management absolutamente recomendable para quienes todavía no lo estén utilizando o piensan cambiar.

Desde el momento de la instalación he estado revisando el código fuente para hacer algunas modificaciones. El tema actual me gusta pero es muy común, así es que voy a tratar de hacer algunas mejoras de contenido. Tarea sencilla por que WordPress esta escrito en PHP y almacena los contenidos en MySQL.

WordPress Logo

Por lo pronto aumenté una sección de «Envíos Recientes» al estilo Blogger, y reacomodé el tema principal para poder incrustar los anuncios.

Para obtener los envíos anteriores al post actual utilizo la siguiente sentencia SQL en PHP, en el archivo single.php del tema por defecto:

$sql = "SELECT  year( post_date ) Anho,
          right(concat('0',month(post_date)),2) Mes,
          post_name,post_title FROM wp_posts
        WHERE binary `post_status` = 'publish'
          AND post_date  < '$post->post_date'
        ORDER BY  `post_date` DESC LIMIT 10";

Todavia no he revisado la documentación de las funciones, por lo que el resultado de la consulta anterior puede obtenerse de otro modo.

Correo ViaBCP

Hace unos días el servicio de correo del Banco de Crédito del Perú (BCP) esta teniendo problemas. Seguramente detectaron (como yo) que estaban enviando SPAM desde su servidor y esto es simplemente por que el servidor de correo del ViaBCP no requiere autenticación al enviar mediante el protocolo SMTP. Con esta falla en la configuración cualquiera podía enviar correos (anónimos o no) desde cualquier cuenta utilizando éste servidor.

Espero que el BCP arregle esto lo mas antes posible.

Supongo que este problema es a causa de la actualización que vienen anunciando hace semanas.

Maria Magdalena

Hace unos meses Discovery Channel ha estado difundiendo una serie de documentales de la serie «Las escrituras» en donde narran historias referentes no solo a la Biblia sino también a muchas escrituras halladas recientemente, las analizan y explican si lo que dicen las escrituras son ciertas o no. En un capítulo narran la historia de Maria Magdalena la supuesta prostituta.

Según éste documental Maria Magdalena fue difamada con el argumento de que era prostituta con el fin de que Pedro se hiciera del liderazgo del movimiento del cristianismo. Que en realidad quienes debieron formar parte fundamental de este movimiento debieron ser los seres que nos dan la vida las cuales son consideradas culpables del cambio, me refiero a Eva y a Maria Magdalena.

En el libro de Dan Brown «El Codigo DaVinci», afirma que Maria Magdalena no solo estaba en la última cena, sino que era la compañera (esposa según traducciones antiguas) de Jesús y estaba embarazada durante la crucifixión, y este secreto lo mantenía una sociedad secreta a la que pertenecía Isaac Newton, Leonardo DaVinci, Víctor Hugo, etc. a lo largo de estos años desde la muerte de Jesús.

He leído muchos comentarios sobre el libro «El Codigo DaVinci» y muchos de los críticos mas duros dicen que éste libro es anti-católico y otros lo elogian fervientemente.

Mi opinión personal es que el libro es interesante para la lectura, lo mantiene a uno en suspenso todo el tiempo. Hay muchas supuestas revelaciones de este libro que necesitan ser comprobadas. Respecto al caso de Maria Magdalena recientemente la misma iglesia católica se retractó al considerarla como prostituta.

Programmer’s Block

Los escritores y compositores alguna vez han tenido que padecer del «Bloqueo de Escritor», es una situación en la cual el ingenio y la creatividad propia de ellos desaparece por un periodo de tiempo (días, meses, años) en el cual no pueden escribir un solo párrafo coherente.

Desde hace algunas semanas me encuentro en una situación similar, pero en este caso el término correcto sería «Bloqueo de Programador»… es decepcionarte sentarse frente al computador sin poder programar o continuar/modificar los proyectos que tengo pendientes. Lo único que he estado haciendo es responder mis correos y dedicar el tiempo libre a terminar de leer «El Codigo DaVinci».

Estoy seguro que el stress es una de las causas de este mal. Voy a ver como «despejo» mi mente en estos días.

Los Miserables según Bille August

Los Miserables Los Miserables es el libro de Víctor Hugo que llego a mis manos gracias al diario El Comercio, allá por el año 99, se convirtió en mi lectura preferida y posiblemente sea el causante de que mi vida haya cambiado de rumbo desde ése entonces. Los Miserables es un libro que trata fundamentalmente de acontecimientos en la sufrida vida del expresidiario Jean Valjean. Es una historia larga, creo que en otro post puedo comentar mejor respecto a esa obra maestra.

Éste post es para comentar la película “Los Miserables” dirigida por Bille August.
La película salió a la cartelera en 1998 (según lo que pude averiguar). Quedé profundamente decepcionado al verla. Sin embargo los actores fueron de lo mejor: Liam Neeson (Jean Valjean), Uma Thurman (Fantine) .

Esta película lo único que hace es narrar la historia de un Jean Valjean perseguido por el inspector Javert, pero se olvidaron de varias situaciones y personajes que hacen que la historia tenga sentido o que se parezca un poco a la historia original.

La película muestra un Jean Valjean muy distinto, tampoco llegan a igualar la personalidad de muchos de los personajes de la historia y muchos de ellos ni siquiera están. Es una decepción.

Javert en la historia original es un policía rudo e incapaz de violar las leyes y se comporta como tal pero no es malvado como lo pintan en la película.

Posiblemente no se pueda narrar una gran historia en un poco mas de 2 horas pero eso no es excusa para cambiar parte del argumento en los puntos mas importantes.