ThumbOlly: Utilidad para generar galerías de imágenes de forma rápida y sencilla

Hoy os presento una nueva inutilidad, made in Ollydbg (bueno, quizás esta vez no sea tan inútil xD)

Se trata de ThumbOlly 

 ThumbOlly

 

Bien, esta inutilidad sirve para generar una imagen (en formato png) que contiene las miniaturas de todas las imágenes (bmp, jpg y png) de una serie de carpetas. Lo entenderéis rápido cuando muestre los ejemplos.

La aplicación es realmente simple, dos botones y a correr.

La primera vez que se ejecuta muestra una pantalla de parámetros que no tiene ningún misterio: Carpeta donde se va a guardar la foto resultante, color de fondo y tamaño: 

La aplicación es tan simple de usar como seleccionar la carpeta donde tenemos nuestras imágenes pulsando en el botón Carpeta e iniciar el proceso pulsado en el botón Inicar. No tiene más complicación:

Aquí algunos ejemplos de los resultados obtenidos:

Otro ejemplo más:

Último ejemplo:

 

He incluido dos descargas. Una utiliza el .NET Framework 2 y la otra el .NET Framework 4

Si utilizas Windows 8/8.1 te recomiendo la descarga del .NET Framework 4 

 

Estoy abierto a cualquier mejora que me indiquéis, ya bien sea vía comentario, Mensaje Privado de ZonaForo o por Twitter. 

 

Saludos.
mov eax,ollydbgInt 13h  

Descargar ThumbOlly (.NET Framework 2)
119 KB

 

Descargar ThumbOlly (.NET Framework 4) (Windows 8)
119 KB

 


Ollydbg ProSignature   

.NET Tutorial 63: Tres alternativas para generar Logs (‘propio’, ‘System.Diagnostics’ y ‘log4net’)

Hoy veremos tres formas de poder generar logs para nuestras aplicaciones.

Antes de empezar, decir que los logs pueden ser increiblemente valiosos a la hora de detectar problemas en nuestras aplicaciones. Gracias a los logs podremos ver que es lo que hace nuestra aplicación "en producción". Obviamente, el "nivel de detalle" lo pone el programador. Cuanto más detalle más información, pero también "más información" a examinar en el log.

1. Hágalo Vd. Mismo

Normalmente un log no deja de ser un fichero de texto, con información que escribimos. Una forma "rápida y sencilla" es montarse una rutina que precisamente hace eso, añadir a un fichero de texto lo que queremos guardar.

En este caso tenemos algo muy simple:


(Haz click para agrandar)

El código completo de esta clase la podéis encontrar aquí [vía pastebin]  

Como podéis ver, es una pequeña clase que tiene un método público llamado Write, el cual tiene dos argumentos: el nivel de log y los datos que se escriben en dicho log.

El nivel de log lo uso para diferenciar errores "criticos" de información "normal". De esa forma, si tengo que examinar el log con el bloc de notas, notepad++ u otra herramienta, puedo filtrar rápidamente los logs según su nivel.

Para usar este log en la alplicación es tan simple como definir el siguiente objeto:

private static MyLogClass Log;

Inicializaremos nuestro objeto de esta forma:

Log = new MyLogClass(@"c:temp", "Form1"); 

Y para llamarlo usaremos el método Write:

Log.Write(MyLogClass.LogLevel.Info, "Probando");

El resultado puede ser algo como esto:


(Haz click para agrandar) 

Como véis, es algo muy muy muy básico, pero que puede servir.

 

2. System.Diagnostics

El propio .NET Framework nos proporciona un namespace con el cual podermos hacer algo "similar" a lo explicado en el punto anterior, con la salvedad de que no tenemos que preocuparnos de la escritura del fichero. Este namespace es System.Diagnostics [vía MSDN]

System.Diagnostics nos propociona una serie de "listeners" [link MSDN]  con los cuales se pueden generar logs en ficheros de texto, en XMLs, en el evento de logs de Windows y en el evento de logs de IIS.

Básicamente, se usa el App.Config (o Web.Config para una aplicación Web) para definir nuestros "listeners": 

Nota: Todo lo que se hace en el App.Config / Web.Config se podría haber declarado en el código, pero en este tutorial uso un App.Config por cuestiones de comodidad.

Para usar estos listeners en nuestro código lo primer que hay que hacer es importar el namespace:

using System.Diagnostics;

Y para usarlo algo tan simple como esto:

Trace.TraceInformation("prueba");

Si en nuestra configuración tenemos desactivado el "autoflush" (autoflush="false") deberemos usar:

Trace.Flush();

despues de cada escritura en el log. 

Trace dispone de varios "niveles" de log:

TraceInformation
TraceWarning
TraceError

Cada uno de estos niveles sirve como en el caso anterior, para poder "filtrar" de forma rápida el fichero de log. 

Un ejemplo, usando un TextWriterTraceListener, podría ser este:


(haz click para agrandar)

 

3. Usando log4net

Llegados a este punto, veremos que vamos a dar un "salto de calidad" considerable sin apenas modificar el código.

log4net es un framework desarrollado por la Apache Software Foundation (si, los mismos que han desarrollado el servidor Apache, posiblemente el servidor HTTP más utilizado en el mundo)

La idea, al igual que el punto 2, donde usabamos System.Diagnostics, es tener un App.Config / Web.Config con una serie de "listeners".

En nuestro proyecto, añadiremos una referencia a log4net, normalmente via nuget.

Una vez añadida la referencia, en nuestro punto de entrada añadiremos esta línea para que log4net utilice nuestro App/Web/.config:

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

En un programa C#, esto normalmente se hace en el Program.cs

Para utilizar log4net en nuestras clases solo tendremos que hacer dos cosas:

using log4net;

Declarar un objeto de tipo ILog de esta forma: 

static readonly ILog Log = LogManager.GetLogger(nombre);  

aquí un ejemplo, para un formulario, de nombre "Form1":


(Haz click para agrandar)

Para usar nuestro log lo único que tendremos que hacer es lo siguiente:

Log.Debug("prueba");
Log.Info("prueba");
Log.Warn("prueba");
Log.Error("prueba");
Log.Fatal("prueba);

y listo 🙂

Al igual que en los casos anteriores, se utilizan "niveles" de log. De esta forma podremos filtrar de forma rápida la información (ver de forma rápida solo los errores, solo los warnings, etc).

Bien, los listeners los definimos en nuestro App/Web.config: 


(Haz click para agrandar)

Listado completo aquí [vía pastebin]  

Aunque yo solo he usado 7, existen muchos más. En la página de ejemplos de log4net encontrarás sus respectivas definiciones.

Bien, si has leído por encima este tutorial y has llegado hasta aquí, quizás estás preguntándote que ventajas supone usar log4net frente a los dos alternativas que vimos antes.

Pues te explico:

Sin tocar nada de código podrás hacer lo siguiente:

– Generar tus logs en bases de datos (Access, SQL Server, MySQL, Oracle, etc)

– Hacer "rollings" de forma transparente, por tamaño o por fecha

– Enviar los logs "en tiempo real" vía UDP, TCP/IP

– Definir el "nivel" de los logs generados, con lo cual puedes tener un log solo con errores, otro con información de depuración, otro con "warnings", etc.

– Enviar los logs a una dirección de correo vía SMTP

-etc.

Repito, todo esto sin tocar para nada tu codigo, solo añadiendo "appenders" y configurando el App/Web Config 

Como ejemplo de este tutorial se han creado estos logs:

El contenido es configurable con la opción layout del App.Config:


(Haz click para agrandar)

Aquí podrás encontrar información adicional sobre el layout

Pir último indicar que el appender "consola", no solo sirve para aplicaciones de tipo consola, tambíen sirve para imprimir el log en la ventana "Resultados" de Visual Studio:


(Haz click para agrandar)

 

Bonus Track

Como complemento, indicar que existen multitud de "visores de logs". Algunos de pago y otros gratuitos. Entre los gratuitos destaco Log2Console.

Desde su página de CodePlex podréis acceder no solo a las últimas versiones, sino también al código fuente. 


(Haz click para agrandar)

La verdad es que es una gozada tener un appender via UDP y estar ejecutando tu aplicación en un PC (llamemosle PC A)  

Desde otro PC (llamemosle PC B) puedo estar ejecutando Log2Console y ver en "tiempo real" los logs de la aplicación que se está ejecutando en el PC A.

Ahora imagina que el PC A está en Seattle y que el PC B está en Sacramento…sobrán las palabras

 

Saludos.
mov eax,ollydbgInt 13h  

Descargar Tutorial63 (Visual Studio 2010 / C# / log4net 2.0.3)
(3,79 MB .NET Framework 4)  

 


Ollydbg ProSignature