Junio 17th, 2006 — Personal
Ahi va:
- ¿Cual es o podrían ser tus vacaciones soñadas?
Un viaje laaargo a Brasil.
- ¿Cual es la cosa sin la que no habría vacaciones?
No hay “cosas” que pueda considerarlas como imprescindibles o importantes, pero creo que sin mi amorcito no serían vacaciones.
- ¿Cual ha sido el mejor viaje de tu vida?
No he tenido aún un viaje tipo Indiana Jones, pero que puedo mencionar un viaje que hicimos hacia Candarave con la banda de mi colegio (aquellos años), fue una aventura.
- ¿Quien fue contigo en ese viaje y cual es su papel en tu vida?
Fuimos al rededor de 40, casi todos forman parte del recuerdo que tengo de mis epocas de colegio.
- ¿Que es lo peor que te puede pasar en vacaciones?
Quedarte varado y sin dinero.
Junio 7th, 2006 — Personal
Esto suena a periódico de ayer pero quise hacer un comentario respecto a las elecciones del pasado domingo.
No suelo hacer comentarios políticos, pero debo resaltar un detalle que me incomoda al momento de votar:
Al votar, los ciudadanos peruanos, estamos obligados a manchar nuestro dedo medio con una tinta indeleble – generalmente azul – que esta en un pequeño frasco sobre la mesa de votación. Supongo que se optó por esta medida por que antiguamente (solo algunos años) el documento nacional de identidad era una libreta donde los datos estaban escritos a mano, era muy fácil de falsificar; y obviamente para evitar que un ciudadano vote mas de una vez: lo manchan.
Hoy esa practica es ridícula ya que es casi imposible que alguien vote dos veces (salvo algunos casos), por que incluso uno puede ver su foto impresa en el padrón en el que se va a firmar.
Mas allá de esa molestia temporal me siento aliviado de que Ollanta Humala no fuera elegido, pero tuve que votar en contra de él emitiendo mi valioso voto (tapándome la nariz) por Alan García.
Mi voto será uno en millones pero para mi vale mucho.
Mayo 27th, 2006 — MySQL, Programacion
Un sabor amargo me queda despues de hoy!
Sucede que estamos en medio de la implantación de un pequeño software en la Municipalidad de Puno y hace algunas horas nos dimos con la sorpresa que el tipo de dato time_t incrustado en la clase CTime solo soporta fechas desde 01/01/1970 al 31/12/2039… maldita sea!
Tendremos que trabajar algunas horas extra solucionando ese “problemita”.
Se había tomado la decisión de guardar las fechas en segundos para poder hacer mejor los cálculos posteriormente, creo que eso no va a cambiar. Pero se trabajo de igual manera con el resto de campos de tipo fecha. (craso error)
El problema saltó cuando se intentó registrar a alguien que había nacido en el año 1949: ¡Horror!
¿Por que no nos dimos cuenta? Aun que el problema pueda ser solucionado con unas cuantas líneas de código y previa modificación del modelo de la base de datos, ¿Por qué no pensaron en esto? (Esto se parece al problema de la memoria base de 256K) Creo que echarle la culpa a otros es de malos amigos, así es que dejémoslo ahí.
De ahora en adelante, utilizaremos la clase COleDatetime que evitarán sorpresas futuras y post’s como éste.
PD. Hay que estar preparados para el año 2039.
Mayo 11th, 2006 — Personal
Despues de una laaarga espera, hace unas semanas llegaron mis dos nuevas adquiciciones, dos libros de lo mejor:
Practical PostgreSQL y Crear Paginas Webs Para Dummies:

Una de las razones que me impulsó a comprar fué el bajísimo precio en el que los ofrecian.
El segundo libro es para mi socia y asistente personal (que en ratos libres es mi enamorada).
A disfrutar.
Mayo 8th, 2006 — Programacion
Las semanas que pasaron nuestro servidor ha estado muy inestable, perdimos 2 meses de activad y muchos archivos, pero finalmente nos recuperamos del desastre y seguimos adelante con Latindevelopers.com
Teníamos pendientes 4 articulos por publicar:
Shell para Simulación
LaPetite - La Aplicación M.F.C. mas Pequeña
ImageCtrl
CARGAR JPG, GIF, BMP todo en uno
Espero que no vuelva a suceder el mismo desastre o que no afecte tanto a la comunidad.
Las proximas semanas vamos a terminar de implementar algunas secciones del site.
Mayo 4th, 2006 — MySQL, Programacion
Generalmente me conecto a MySQL con ayuda del controlador ODBC que provee el mismo MySQL. Como sabemos todo MySQL esta en pledo desarrollo, ocurre que se presentan situaciones que no fueron contempladas, por consiguiente hay errores que perjudican el desarrollo haciendo que uno tome precausiones antes de utilizar un codigo especifico. Muchos hemos crecido con MySQL y creo que si no hubiera sido asi lo hubieramos desechado por detalles como este que les voy a mostrar a continuacion.
Para no darle mas vueltas al asunto concretamente el problema es como sigue:
Cuando se intentaba leer un campo varchar (o relacionado) que este vacio o NULL, el controlador ODBC lo reconocía como UNKNOWN, evidentemente no podía realizarse el paso de valores al tipo CString o char* del Visual C++.
Para evitar ese problema se tenía que averiguar la longitud del campo que se va a leer, algo asi como esto:
ULONG len = 0;
rs.GetAccessor()->GetLength(2,&len); // segundo campo
if(len > 0)
{
rs.GetFieldValue(2,sValue);
//...
}
Esto sucedia con las versiones del ODBC Connetor inferiores a la 3.51.12. Ahora el codigo anterior se reduce a la linea que lee el campo y hace el paso del valor a la variable.
Febrero 10th, 2006 — Programacion
Quienes programamos en MFC Visual C++ algunas veces hemos tenido que eliminar los espacios en blanco de una cadena y sucede que la clase CString no tenia una sola funcion trim, sino las funciones TrimLeft y TrimRight.
Nose por que diablos demoraron tanto (o no se dieron cuenta) en agregar esa funcioncita.
Lo que se hacia normalmente es:
m_sCadena.TrimLeft();
m_sCadena.TrimRight();
Esto ahora ha causado un problema de compatibilidad con las versiones anteriores y no creo que sea la unica.
Febrero 2nd, 2006 — MySQL, Programacion
Resulta que algunas veces es necesario acceder desde C++ a MySQL, razones hay muchas…. el asunto es como hacerlo.
Esta mañana intenté hacer una conexion sobre Fedora Core 3 con C++, tengo instalado MySQL 5.0.17, y mysql-devel 5.0.18 ( Todo eso lo pueden descargar de http://dev.mysql.com )
El codigo no es gran cosa, pero puede servir a muchos.
Enjoy!
//conexion.cpp
#include <iostream.h>
#include <mysql.h>
int main()
{
MYSQL mysql;
mysql_init(&mysql);
if (!mysql_real_connect(&mysql
,"localhost"
,"root"
,""
,"munipuno",0,NULL,0))
{
cerr<<"Horror ! : "
<<mysql_error(&mysql));
}
char *query = "select * from maestro_departamentos";
mysql_real_query(&mysql,query,strlen(query));
MYSQL_RES *res = mysql_store_result(&mysql);
MYSQL_ROW row;
while ((row = mysql_fetch_row(res)))
{
cout << row[0] << ” ” << row[1] << endl;
}
mysql_close(&mysql);
return 0;
}
Parametros gcc para compilar este programa.
gcc conexion.cpp -o conexion -Wno-deprecated
-I/usr/include/mysql -L/usr/lib/mysql
-lmysqlclient -lstdc++ -lz
El resultado de este programa es el siguiente:
[ivancp@servidor1 cpp]# ./conexion
01 AMAZONAS
02 ANCASH
03 APURIMAC
04 AREQUIPA
05 AYACUCHO
06 CAJAMARCA
07 CALLAO
08 CUSCO
09 HUANCAVELICA
10 HUANUCO
11 ICA
12 JUNIN
13 LA LIBERTAD
14 LAMBAYEQUE
15 LIMA
16 LORETO
17 MADRE DE DIOS
18 MOQUEGUA
19 PASCO
20 PIURA
21 PUNO
22 SAN MARTIN
23 TACNA
24 TUMBES
25 UCAYALI
Enero 27th, 2006 — MySQL
Muchos prefieren hacer backups de su valiosa data en formatos predefinidos por el gestor (.backup, .dbf, etc…) por mi parte prefiero el formato SQL guardado en un archivo de texto.
MySQL no tiene un formato SQL tan migrable que digamos (eso se puede arreglar), pero es muy util hacer mysqldump de vez en cuando.
Si lo que uno quieres es liberarse de la tarea de estar haciendo backups diarios o semanales (segun la paranoya de cada uno) puede utilizar anacron.
El comando para sacar una copia de la base de datos:
mysqldump -u backup munipuno > /... /munipunobackup.sql
Para que el comando de copia de seguridad se ejecute cada dia a eso de las 11.pm agregamos esta linea a la configuracion de nuestro anacron
0 23 * * * mysqldump -u backup munipuno > /var/log/backups/munipunobackup.sql
Para sacar una copia de toda la base de datos
mysqldump -u backup --all-databases > /var/log/backups/mysqlbackup.sql
Le pueden agregar el parametro –password=”clave” al comando por si se necesita. Lo unico malo es que no tendremos copias historias, solo un archivo: munipunobackup.sql Eso se puede arreglar con SH, pero luego.
Enero 5th, 2006 — Opinion, Programacion
Es conocido por todos los que alguna vez pasaron por el sector publico que el Sistema Integrado de Administración Financiera (SIAF) es un software al que no podemos pasar por alto, a pesar de que esta hecho en Visual Fox y se presentan errores en el funcionamiento periódicamente. Pero nos guste o no tenemos que utilizarlo, de todas maneras el SIAF es la norma hecha Software.
Desde hace algunos meses vengo trabajando en la Oficina de Informática de la Municipalidad Provincial de Puno, y definitivamente tener funcionando el SIAF sobre un Servidor de Archivos Windows es vivir en zozobra.
Los virus, colgadas inesperadas, y innumerables pantallas azules indicando Error numero 0xADFD21244 y mas bla bla bla; me hicieron desechar el sistema operativo Windows del servidor y pasarme a Linux Fedora Core 3 con Samba para que los usuarios del SIAF no se den cuenta del cambio.
Cuando los residentes del SIAF o los del staff de soporte técnico venían a actualizarlo no sabían que hacer con el servidor, incluso preguntaban “¿Que Windows es éste?”
Desde aquel historico día, los problemas solo fueron del mismo SIAF ya no del sistema operativo. Aunque no esta muy difundido esto del Linux en las Instituciones Publicas del Perú, deberían tomarlo en cuenta, por que además de que ademas de ahorrar miles de dólares en licencias también se ahorran las molestias que causa Windows frecuentemente.
A todo esto, en las instituciones publicas es muy difícil implantar el software libre en los equipos usuario, por que ya están mentalizados en utilizar Word para sus documentos, Excel para sus hojas de calculo, por solo citar dos ejemplos. El software libre vive normalmente en el entorno académico, depende de nosotros que esto cambie.
Si desean asistencia en la instalacion de SIAF sobre Linux pueden escribir a ivancp [AT] latindevelopers.com