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.

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.

Fibonacci y el Código Davinci

El codigo Da VinciPara quienes estamos relacionados con la Programación y las Ciencias de la Computación, alguna vez nos hemos que tenido que topar opn la serie de Fibonacci, ya sea para programarla o para estudiar su comportamiento. Cada número de esta famosa serie se obtiene de la suma de los dos anteriores.

La serie de Fibonacci tiene muchas aplicaciones, no solo en la computación sino también en ciencias que en las cuales las matematicas aparentemente no tienen mucho que ver.

Me tomo por sorpresa leer acerca de ésta (y otras cosas mas) en el libro: El código da Vinci de Dan Brown, por que es utilizada para encriptar un mensaje. No solo se trata de la serie de Fibonacci sino también del numero Phi = 1.618 llamado también la divina proporción. Algunas cuestiones matematicas estan muy relacionadas con la naturaleza las cuales se debe tener en cuenta al momento de pintar un cuadro.

Escribiré un post acerca de este interesante libro cuado termine de leerlo. Mientras tanto…

Sabemos que generar estos números es sencillo de programar. Debido a que los valores de la serie se hacen grandes muy grandes, el reto es generar la mayor cantidad de numeros de Fibonacci. Los tipos de datos números en los lenguajes de programación (int, double, float) tienen sus límites y el asunto es romper esos límites.

El siguiente es un programa es la forma recursiva de obtener el numero N de la serie de Fibonacci:

unsigned long Fibonacci(unsigned int n)
{
    if ((n == 0) || (n == 1))
	{
        return 1;
	}
	else
	{
        return (Fibonacci(n -1 ) + Fibonacci(n - 2));
    }
}

Puede que el programa sea dañino para la salud del Sistema Operativo, por ello también les escribí una versión no recursiva.

unsigned long Fibonacci(unsigned int n)
{
    if ((n == 0) || (n == 1))
	{
        return 1;
	}

	unsigned long last = 1;
	unsigned long curr = 1;
	unsigned long tmp  = 0;

	while(n > 2)
	{
		tmp = curr;
		curr = curr + last;
		last = tmp;
		n--;
	}
	return curr;
}

Con la primera función el calculo del numero 30 de Fibonacci demorará a l rededor de 5 segundos, para el numero 40 demorará unos minutos dependiendo del procesador que tengan. Si utilizan una cray esto sucederá un unos cuantos milisegundos. Hay quienes dicen que una cray se sale de un bucle infinito en 6 segundos.

Con el segundo programa logré calcular el numero 47 (2971215073), a partir del numero 48 empieza el desbordamiento. Existen otras formas de obtener el esto de números.

El programa para probar cualquiera de las dos formas es:

int main(int argc, char* argv[])
{
	if(argc <= 1)
	{
		cout<<"Modo de uso :"<<endl;
		cout<<"\t"<<argv[0]<<" N "<<endl<<endl;
		return 1;
	}
	cout<<Fibonacci(atoi(argv[1]));
	cout<<endl;
	return 0;
}

Si tienen problemas para compilar no olviden agregar el parámetro –lstdc++ al gcc (linux)

EXPRESS OLE DB – Visual C++

Cuando uno empieza a desarrollar aplicaciones en Visual C++ y tiene la necesidad de acceder a datos, se presentan muchas alternativas para ello. Muchas de las alternativas no se llevan bien entre ellas mismas lo que hace que la migración o el cambio de tecnología sea doloroso (ADO, DAO, OLE DB, etc)

Sypram es una compañía que ha desarrollado una librería que permite realizar una conexión a una base de datos desde Visual C++: EXPRESS OLE DB es una librería completa que extiende el uso de OLE DB sin la complejidad de éste. Es de muy fácil utilización y una alternativa muy robusta para el acceso a base de datos en Visual C++.

Actualmente utilizo esta librería en mis aplicaciones, pero aun sigo utilizando DAO como segunda alternativa.

Lo mejor de todo es que esta librería es de de distribución LIBRE. Puede ser descargada desde:
http://sypram.com/Download.htm

ASCII Art

ASCII Art es una forma arte basado en caracteres ASCII (American Standart
Code for Information Interchange), el lienzo es un archivo de texto plano, y la herramienta cualquier editor de archivos de texto.

Encontré miles de paginas relacionadas con éste arte. Pero con un solo link basta, Google tiene en su directorio un completo repertorio de enlaces a páginas que contienen ASCII Art:

http://directory.google.com/Top/Arts/Visual_Arts/ASCII_Art/


 .'/,-Y"     "~-.
 l.Y             ^.
 /\               _\_
i            ___/"   "\
|          /"   "\   o !
l         ]     o !__./
 \ _  _    \.___./    "~\
  X \/ \            ___./
 ( \ ___.   _..--~~"   ~`-.
  ` Z,--   /               \
    \__.  (   /       ______)
      \   l  /-----~~" /      -Row
       Y   \          /
       |    "x______.^
       |           \
       j            Y

Este arte se ha extendido tanto que existen herramientas como Figlet para los tipos de letra, aqui una muestra:

 _          _   _           _                _
| |    __ _| |_(_)_ __   __| | _____   _____| | ___  _ __   ___ _ __
| |   / _` | __| | '_ \ / _` |/ _ \ \ / / _ \ |/ _ \| '_ \ / _ \ '__|
| |__| (_| | |_| | | | | (_| |  __/\ V /  __/ | (_) | |_) |  __/ |
|_____\__,_|\__|_|_| |_|\__,_|\___| \_/ \___|_|\___/| .__/ \___|_|

También se han desarrollado técnicas que convierten una imagen de mapa de bits en un ASCII Art, en este caso se utilizan técnicas y algoritmos avanzados que tienen que ver con la tonalidad y densidad de los caracteres.

ASCII Art

En este enlace pueden ver esta fotografía representada en formato ASCII:

http://www.latindevelopers.com/ivancp/images/picture.htm

de navisoft a latindeveloper

Muchos de nosotros adoptamos (o se nos denomina) con seudónimo esto sucede cuando empezamos nuestra vida en el ciberespacio o cuando nuestros amigos simplifican nuestros nombres, comportamiento o parecido con algo. Algunos toman especial atención a la forma o pronunciacióndel nick, en fin… Incluso se pueden encontrar nick’s sumamente raros o extravagantes (huachafos) aqui una muestra de algunos nick’s que pueden ser considerados dentro de esa clasificación:

– – –^[nick]^– – –

•·.·´¯`·.·• nick•·.·´¯`·.·•

`·.¸¸.·´´¯`··._.· nick`·.¸¸.·´´¯`··._.·

(¯`·._) nick(¯`·._)

¯¨’*·~-.¸¸,.-~*’ nick¯¨’*·~-.¸¸,.-~*’

Oº°‘¨ nick¨‘°ºO

Algunos adoptan nombres de personajes famosos como neo o morfeo (de Matrix) en combinación de caracteres extraños que adornen la espresión.

En realidad, depende de cada uno. Es como la tonada de los celulares.

En el caso del mio (navisoft) empezó gracias a que una gran amiga (Danitza) me empezo a decir «navi» (inversa de ivan) y como casi todos los fanaticos de la programación (y todo lo relacionado) hice una combinación este apodo con «soft» … algo huachafo hoy en dia… Me quedé con ese nick varios años hasta hoy.

Hoy decidí cambiar por muchas razones, entre ellas por que «navisoft» ya es una marca registrada y ya no me agrada. Por otro lado Latindevelopers.com ha crecido y no se ve bien que el admin tenga un nick infantil como navisoft.

De ahora en adelante cambio de nick pero seré el mismo… es mas trataré de mejorar en todo lo que pueda… por que nadie es perfecto.

Ahora mi nick es «latindeveloper».

MySQL cada vez mejor

MySQL esta con nosotros desde hace ya mucho tiempo. Hemos podido notar que este gestor esta evolucionando cada vez y se esta convirtiendo en el gestor de datos que todos desearíamos que fuese.

MySQL se ha convertido en una seria amenaza para los gestores de datos como Oracle o SQL Server.

Segun un artíulo que encontre por la red:

MySQL toma nuevo impulso y ya es una seria amenaza para Oracle, IBM y Microsoft
Según varios analistas, la base de datos de código abierto MySQL puede convertirse en una serie competencia para gigantes como Oracle, IBM y hasta Microsoft. La última versión de esta plataforma libre incluye nuevas características -como sub-búsquedas y un nuevo formato binario- que fortalecen aún más su posición como una alternativa a las grandes empresas.

Estas no son novedades para quienes utilizamos constantemente MySQL, pero el resto ya lo esta empezando a tomar en serio.

MySQL y Visual C++

MySQL es un gestor de base de datos en plena evolución, inicialmente captó mi atención (como muchos) por que es liviano, rapido, confiable. Tiene algunos problemas en situaciones extremas, aun asi sigo siendo su fiel seguidor.

Como programador debo comentarles que, como casi todos los gestores, MySQL provee unas API’s que estan escritas en C/C++ las cuales pueden incluirse para implementar aplicaciones de acceso a base de datos sin necesidad de ODBC y esas cosas.

Para ello escribí un articulo respecto a eso: Como acceder a una base de datos MySQL desde Visual C++. Seguramente los seguidores mas romanticos del movimiento de Software Libre (el cual apoyo) se escandalicen al ver tal combinación, pero quienes utilizamos Visual C++ sabemos que no existe mejor compilador para Windows.

Estoy escribiendo un programa con las librerías GTK para que pueda correr en Linux. Pronto lo tendré listo.

Mientras tanto pueden descargar el articulo incluyendo el codigo fuente del proyecto y algunos archivos necesarios en esta dirección:

https://www.latindevelopers.com/ivancp/articulos/mysqlapi.pdf

Para que puedan tener mas referencia respecto a las API’s de MySQL pueden visitar:

http://dev.mysql.com/doc/mysql/en/mysql-apis.html

Un control chart para Visual C++

Un dia domingo despues de googlear en la busqueda de un control chart que fuera totalmente funcional para incluirlo como componente en Visual C++ , decidí programar mi propio control, ya que los que encontré eran muy pesados para distribuir (Objetos OLE) ó las clases ofrecian tanto que llegaban a ser tan complejas que la integración con un proyecto se hacia muy dificil.

En realidad no fue nada sencillo, por que tenia muchos factores importantes para tomar en cuenta, pero lo que necesitaba en esa semana era un control que muestre graficas de barra y sectores (nada mas).

Cuando terminé de programarlo tuve que lidiar con el parpadeo y algunos otros problemas adicionales, Finalmente modifiqué el modo de pintado del control con double buffering. Una tecnica muy utilizada en la computación grafica.

Al dia siguiente no podia creer que habia programado tal cosa en tan poco tiempo… y decidí enviar el codigo fuente a otras personas.

Aqui les muestro una imagen del control NSChart corriendo en un dialogo. (puede correr sobre casi cualquier classe basada en CWnd)

Este control puede ser de mucha utilidad para programadores Visual C++. Su sencillez hizo que Personas como : Mervyn Jose Fundador de SiteAll.com, Randall Barber de MicroWorks Inc. , y otros mas, lo utilizaran en la implementacion de sus aplicaciones.

Lo que queda por implementar en este control es:

  • Valores negativos.
  • Otras formas de mostrar la data: lineas, sectores extendidos, barras apiladas, etc.
  • Mejorar el ajuste de distribución segun el espacio disponible.
  • Exportar a JPG, GIF, PNG, etc.

Si alguien esta interesado en agregarle (por lo pronto) alguna funcionalidad, puede descargarse el codigo fuente completo y el proyecto de ejemplo en los siguientes sitios: CodeProject.com y
Codeguru.com

Version en Español
http://www.latindevelopers.com/vcpp/misc/nschart/

Visual Studio 6 aun vigente

Codeprojet.com es un repositorio de código fuente (sobre Visual C++ y algunos otros) que recibe miles de visitas diarias. En este portal hay una encuesta semanal que trata de medir tendencias del mercado, preferencias, etc. En este caso quiero mostrarles una encuesta donde la pregunta es «Qué versión (o versiones) de Visual Studio utiliza?».

El resultado de la encuesta no hace mas que confirmar que Visual Studio 6.0 … me refiero exactamente al Visual C++ 6.0 sigue siendo utilizado seriamente. Todavía no me he cambiado a Visual C++ .NET. Pero en unas semanas lo haré.

En el caso del lenguaje C/C++ el cambio o migración de una versión a otra no es tan dramática como el VBasic y otros.