3ENGINE

Programación y otros cachivaches

Etiqueta: programacion

Página 7/21

Tecnologia

Patrones de diseño software: resumen


Unos artículos relacionados con los patrones de diseño software que dan un repaso rápido y general son estos dos:

Patrones de Diseño UML (I)
Patrones de Diseño UML (II)

Luego hay otros dos artículos, tambien sobre patrones de diseño software, pero centrados en Java:

Los Patrones de Diseño Java EE (I)
Los Patrones de Diseño Java EE (II)

Estos artículos contienen dos diagramas muy útiles. Los pego aquí:

Patrones de diseño software

Patrones de diseño software




Tecnologia

Cómo escribir facilmente un fichero Log en .NET Framework


Si necesitamos que nuestra aplicación en .NET escriba en un fichero Log, ¿para qué inventar la rueda? podemos hacer uso de las clases estáticas Trace y Debug del espacio de nombres System.Diagnostics. La primera clase generará salida sólo si compilamos la aplicación en modo Debug.

Estas dos clases comparten uno o varios listeners (agentes de escucha) por donde se escribirá la salida:

  • TextWriterTraceListener para escribir en un fichero físico.
  • EventLogTraceListener para escribir en el visor de eventos.
  • ConsoleTraceListener para escribir en la consola.

Por defecto Debug y Trace tienen un DefaultTraceListener.

DefaultTraceListener se puede eliminar con el elemento <clear>o <remove> en el fichero de configuración o llamando al método Clear en la propiedad Listeners de la clase Debug o Trace.

Los métodos mas importantes de Debug y Trace son:

  • WriteLine para escribir una linea de mensaje en los listeners.
  • WriteLineIf para escribir una linea de mensaje en los listeners si se cumple la condición.
  • Indent para añadir una sangria a la salida.
  • Unindent para eliminar una sangria.
  • Assert para comprobar una condición; si esta es false, muestra un cuadro de mensaje con la pila de llamadas.
  • Flush para vacíar el búfer.

Ejemplo 1. Por defecto DefaultTraceListener escribe en la ventana de resultados.

Debug.WriteLine("Esto es un mensaje en debug");
Trace.WriteLine("Esto es un mensaje en trace");
Debug.Flush();
Trace.Flush();

Si compilamos el ejemplo 1 como Release comprobaremos que no se produce la salida de Debug:

escribir facilmente un fichero Log en .NET Framework

Ejemplo 2. Anulación de DefaultTraceListener y redirección de la salida a la consola y a un fichero Log.

Debug.Listeners.Remove("Default");
TextWriterTraceListener logFile = new TextWriterTraceListener("c:/MiFicheroLog.log");
Trace.Listeners.Add(logFile);
ConsoleTraceListener logConsole = new ConsoleTraceListener();
Trace.Listeners.Add(logConsole);
Debug.WriteLine("Esto es un mensaje en debug");
Trace.WriteLine("Esto es un mensaje en trace");
Debug.Flush();
Trace.Flush();

Ejemplo 3. Una buena idea es hacer uso de la clase System.Diagnostics.Stopwatch cuando necesitamos dejar constancia en un Log de la duración de un proceso.

Trace.WriteLine("Inicio del proceso");
Stopwatch sw = Stopwatch.StartNew();
MiProceso();
sw.Stop();
Trace.WriteLine("Duración del proceso: " + sw.Elapsed.ToString());

Tambien se puede añadir o eliminar TraceListeners mediante el .config de la aplicación. De este modo no es necesario recompilar la aplicación.

Ejemplo 4. Anulación de DefaultTraceListener y redirección de la salida a un fichero Log.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <remove name="Default" />
        <add name="myListener"  type="System.Diagnostics.TextWriterTraceListener" initializeData="c:/MiFicheroLog.log" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

Referencias:
DefaultTraceListener (Clase)
[VS2010] “Hola Mundo” con Moles




Tecnologia

Cómo obtener la MAC con .NET Compact Framework


Queria obtener la MAC usando el .NET Compact Framework pero no existen ninguna función o clase en la librerias que permita esto. Como tampoco es posible hacer uso de WMI con .NET Compact Framework no queda otro remedio que llamar a la API ‘iphlpapi.dll’. Por suerte existen unas librerias llamadas Smart Device Framework de OpenNETCF Consulting que simplifican esta tarea. Tenemos suficiente con las Smart Device Framework Community Edition (Free).

El codigo de ejemplo para .NET Compact Framework 2.0 lo podeis bajar de aquí VerMac

Referencias    http://arjunachith.blogspot.com/2007/08/retrieving-mac-address-in-compact.html




Tecnologia

Identificar tablas y columnas en una base de datos Oracle


Para obtener información de las tablas de Oracle existen los catálogos. Como por ejemplo DBA_TABLES, USER_TABLES, DBA_TAB_COLUMNS, que contienen datos estadísticos.
Estos datos no pueden actualizarse en tiempo real porque penalizarías mucho el rendimiento general de la base de datos. La clausula Analyze permite actualizar esos datos.

Ejemplo de uso. Para obtener el nº de columnas por tabla del OWNER ‘SA’

SELECT TABLE_NAME, COUNT(COLUMN_NAME)
FROM DBA_TAB_COLUMNS
WHERE OWNER='SA'
GROUP BY TABLE_NAME
ORDER BY TABLE_NAME;

Ejemplo de uso. Para obtener el nº de filas por tabla del OWNER ‘SA’

SELECT TABLE_NAME, NUM_ROWS 
FROM DBA_TABLES
WHERE OWNER='SA'
ORDER BY TABLE_NAME;