AsgReport, ya se hace algo con el…
Saludos, como les habia dicho en el post anterior de AsgReport, Aqui esta la primera version visible de este programa. Como les habia dicho he utilizado en ocaciones la clase Fpdf para generar pDFs ,pero para ser sincero de verdad hay que estar de animos para hace algo con ella. Asi que he decidido en mi tiempo libre realizar un gui para hacer PDFs con esta clase. Claro que ahora estoy un poco lejos de lo que quiero (Manejo de datos, saltos automaticos, etc), pero ya esta la plataforma hecha, ahora es solo añadir opciones. Puedes ver un beta del recien nacido en http://adamix.net/asgReport/. En lo proximo publico un roadmap y la lista de feactures que tendra el producto final.
Por ahora solo tiene dos controles rudimentarios que son el label y la imagen, y el resize hay que hacerlo por la ventana de propiedades, pero genera pdf mas facil que con fpdf. En lo pronto le pongo campos dinamicos para que genere una clase que se pueda usar en algun proyecto. No doy opcion a descargar la clase ya que hasta ahora es un PDF sin muchas opciones, pero le gano a cualquiera que venga a hacer los mismo con fpdf pelado a codigo limpio. Al añadir una imagen por defecto se coloca el src a una imagen local, pero puedes poner cualquier imagen si sabes la ruta de internet. Nada, pruebalo y me cuentan que tal lo ven. http://adamix.net/asgReport/
Recursividad basica en c#
El concepto de recursividad es uno de los más complejos y díficiles de entender en la programación orientada a objetos. Lo trataré de explicar con algunas ideas y algún ejemplo.
En la vida hay muchos conceptos que se utilizan a si mismos para explicarse. Una rama de un árbol a su vez tiene ramas, que a su vez puede tener ramas y así sucesivamente hasta que aparecen ramas que solo tienen hojas.
Al igual que en este ejemplo, muchos algoritmos se explican en términos de sí mismos. Los algoritmos que poseen esta particularidad se denominan recursivos.
Al igual que la mayoría de los lenguajes de programación, C# permite definir métodos recursivos. O sea, métodos que se llaman directa o indirectamente a si mismos. Y ahora la gran pregunta que se hacen todos….
Cuando y como termina entonces el método recursivo?
Ya se que puede parecer un proceso infinito, pero la clave está en que en cada llamada el problema se “simplifica” de tal modo que llegará el momento en que no hará falta llamar nuevamente al método recursivo. Recuerda que la rama tiene ramas, que a su vez tiene ramas… pero llega el momento en que se llega a una rama que solo tiene hojas.
Cabe resaltar que la recursividad es una herramienta muy importante en la programación que en muchos casos permite expresar algoritmos de forma simple y legible. Veremos ahora un caso muy simple en que la recursividad hace nuestro trabajo mucho más fácil.
Factorial de un número
Los mátemáticos suelen decir que n! = n * (n – 1)! Sin embargo, en programación, dicho de esta manera la solución sería infinita, ya que siempre podemos restar 1 hasta el infinito negativo. Por tanto debemos definir el factorial de un número para los números mayores o iguales que cero. Por tanto, la función factorial es muy fácil de expresar en C# mediante la recursividad. Este sería el código:
static long Factorial (long n)
{
if (n>=0)
{
// caso base
if (n == 0)
{ return 1; }
else
{return n * Factorial (n - 1); }
}
else
{
throw new Exception(“Factorial de un negativo”);
}
}
Otra solución al cálculo de un factorial se puede expresar de manera muy simple utilizando un ciclo for.
//Factorial iterativo
static long Factorial (long n)
{
if(n<0)
throw new Exception(“Factorial de un número negativo”);
else if(n==0) return 1;
else
{
long result= 1;
//Seria multiplicar n * n-1 hasta que n = 0
for (int k = n; i >= 1; i –)
result = result * k;
return result;
}
}
Este ejemplo nos ilustra las principales reglas y pasos que debe seguir un método recursivo.
Ahora las 4 reglas de oro de la recursividad
1 – Caso base. Siempre tiene que haber al menos un caso base en que no se necesite la recursividad para resolver un problema.
2 – Toda llamada recursiva debe regresar hacia el caso base.
3 – Credibilidad. Asuma siempre que la llamada recursiva funcionará correctamente. Esto se fundamenta en la hipótesis de inducción, lo que quiere decir que no debemos preocuparnos por hacer el trozo de todos los largos caminos de llamadas recursivas, una labor que a veces ni uno mismo entiende.
4 – Nunca duplique el trabajo. No resuelva con una llamada recursiva por separado lo que ya ha sido resuelto en otra llamada.
Ahora ya tienes una idea de lo que significa que un método sea recursivo y como resolver algunos ejemplos sencillos con esta potente herramienta. Puedes practicar con algunos ejercicios sencillos como la sucesión de fibonacci, la suma de n números pares y otros ejemplos que se les ocurra. Trata de darle solución recursiva a problemas sencillos que hayas resuelto antes de modo iterativo.
Recuerda que en la programación, no se trata de leer muchos tutoriales y cursos, se trata de leer y escribir código.
En la segunda parte de este pequeño tutorial les comentaré sobre algunas técnicas y estrategias del ámbito recursivo como son “Divide y Vencerás” y “Backtracking” (Vuelta atrás) para resolver problemas un poco más complejos en los que la solución no se ve tan simple, así como algunos otros ejemplos y ejercicios resueltos.
Si tienen alguna duda o pregunta dejen un comentario.
Conoces el Pencil de Firefox…
A muchos de nostrostros que estamos en el mundo de la informatica y a lo que no estan tambien, nos surge muchas veces la necesidad de describir una interfaz, ya sea para un programa que estamos desarrollando una idea en mente ETC. Anteriormente cuando me solicitaban el diseño de una apliacion en la universidad, realizaba la pantallas en Visual Basic 6, lo cual tenia que estar haciendo print screen en cada pantalla para guardarla con imagenes. En repuesta a esto existe una extension de firefox… si del navegador web, que nos permite diseñar interfaces tipo win32 y guardarla directamente a imagen o en su formato para luego hacer alguna modificacion. No que instalar nada adicional solo activar este plugin en firefox y lo veras en herramientas. Algunas caracteristicas son:
- Multi Documento, puedes trabajar varias pantallas a la vez.
- Sorta deshacer, algo muy util si cometemos un errorcito.
- Funciones basicas con los controles, z-index, rotacion, alineacion….
- Multi plataforma.
- Puedes añadir objetos externos.
- y mucho mas.
AsgReport, reporteador PHP.

Reporte
En unos dias subo mas detalles, acerca de un reporteador que estoy desarrollando para php, explico en que consiste a ver si alguien me quiere acompañar en este proyecto.
No es para un cliente especifico, es solo para ahorrarme trabajo a la hora de realizar un software en php y sacar un reporte en PDF. basado en FPDF estoy realizando un GUI para dicha clase de producir PDFs, en algunos dias actualizo con mas detalles.
SqLite, base de datos lite que resuelve.
La informática acostumbra a sorprendernos, pero estas sorpresas son mejores si podemos utilizarlas para algo en nuestras vidas. Hago este comentario por como me sentí cuando descubrí SqLite.

sqlite edicion de tabla
Según la Wikipedia. SQLite es un sistema de gestión de bases de datos relacional compatible con ACID, y que está contenida en una relativamente pequeña (~500KB) biblioteca en C. SQLite es un proyecto de dominio público creado por D. Richard Hipp.
A diferencia de los sistemas de gestión de base de datos cliente-servidor, el motor de SQLite no es un proceso independiente con el que el programa principal se comunica. En lugar de eso, la biblioteca SQLite se enlaza con el programa pasando a ser parte integral del mismo. El programa utiliza la funcionalidad de SQLite a través de llamadas simples a subrutinas y funciones. Esto reduce la latencia en el acceso a la base de datos, debido a que las llamadas a funciones son más eficientes que la comunicación entre procesos. El conjunto de la base de datos (definiciones, tablas, índices, y los propios datos), son guardados como un sólo fichero estándar en la máquina host. Este diseño simple se logra bloqueando todo el fichero de base de datos al principio de cada transacción.
La biblioteca implementa la mayor parte del estándar SQL-92, incluyendo transacciones de base de datos atómicas, consistencia de base de datos, aislamiento, y durabilidad (ACID), triggers y la mayor parte de las consultas complejas.
Sqlite esta disponible en librerias prácticamente para cualquier base de datos, puedes usarla en diversos systema operativos, ya que solo depende de un archivo como si del mismo Access se tratase, pero sin los tantos problemas que este conlleva.
Puedes probarla desde ya, sin instalar nada adicional, con el programa SqLiteAdministrator y me cuenta que te parece. Puede ser usada en programas grandes para evitar guardar los archivos config en archivos planos. Es usada por versiones de Linux, Adobe, Firefox, yo y muchos mas. Anímate a probarla.
Si eres de lo que dices… ya esta Access, te dire que esto no es lo mismo, ya que el codigo que uses para conectarte a esta db no tiene nada que envidiarle a unas de las grandes y como acepta SQL Estándar no tendras que hacer muchos cambios si quieres migrar a otra. Mas tarde publico una comparativa de Access y SqLite para aclarar dudas.