Ir al contenido principal

Entradas

Mostrando las entradas de 2011

Borrar Archivos Viejos Script de PowerShell

Una de las tareas comunes en la administración de servidores es el hecho de tener que realizar de forma periódica un borrado de archivos de Log, de aplicaciones o de servicios como IIS, por ejemplo una politica puede ser "conservar los archivos de log por 6 dias", asi que tenemos que programar una tarea en el servidor para que cada dia (semana, hora, etc) se ejecute la limpieza. en este post les dejo un script de PowerShell que permite borrar todos los archivos con extensión ".log " en un directorio (y sus subdirectorios), que sean mas viejos que  un numero de dias especificado $pattern = $args [ 0 ] + '\*' $files = Get-ChildItem $pattern - include *. log - Recurse $days = $args [ 2 ] $count = 0 ; $date = Get-Date "Clean Old IIS Log Files Started $date" | Out-File $args [ 1 ] - append - noclobber if ( $files . count - gt 1 ) { foreach ( $file in $files ) { $mark = (( Get-Date ) - $file . Cr

C# Extraer Lineas de un Archivo con Expresión Regular

este pequeño fragmento de código nos permite recorrer un directorio de forma recursiva procesando uno a uno los archivos en dicho directorio para extraer lineas de estos archivos que encajen en una expresión regular definida. me resulto util para consolidar información de varios archivos de log de IIS, donde ademas tenia que extraer un segmento del texto encajado en la expresion regular (algo asi como /image.aspx/150 y necesitaba los codigos de las imagenes) private   static   void  Main( string [] args) {              var  salida =  new   StreamWriter ( ".\\out.txt" );              string  dir =  "." ;              if  (args.Count() > 0) {                 dir = args[0];             }              Regex  regExp =  new   Regex ( @"POST" );              string [] filePaths =  Directory .GetFiles(dir,  "*.log" ,  SearchOption .AllDirectories);              foreach  ( string  file  in  filePaths) {                  Console .Write

SQL Server SubString y RegExp

Entre mis tareas diarias me toco realizar un match entre información de diferentes archivos de log, para facilitar un poco el asunto decidí convertir todo a csv y cargarlo en mi instancia local de SQL Server. algunos de los campos que eran importantes para el proceso que estaba realizando estaban incluidos como parámetros en el QueryString de la request, por lo que me encontré con la necesidad de dividir un string, según un patrón por decir algo el query string de ejemplo showMap.aspx?id=123456&source=algo&destination=otracosa la funcion PATINDEX del TSQL te permite obtener la posicion de un patron dentro de una cadena y esto combinado con la funcion SUBSTRING  me permitieron tomar solo las partes del campo sin depender de una posición inicial fija, eso si, tuve que depender de una longitud fija, pero con un poco mas de trabajo se puede determinar la posición final también utilizando PATINDEX. por ejemplo, usando patindex para encontrar la posicion inicial del texto &

Logs IIS Extraer Request a un Script

Una de las tareas que tarde o temprano un administrador de servidores Windows tiene que realizar es la de extraer información de los archivos de Log de diferentes servicios, esto puede ser requerido para detectar errores, riesgos de seguridad y otro sin fin de causas, Si los servidores a tu cargo tienen una cantidad de trafico considerable te pueden encontrar con la sorpresa de tener 80 GB de archivos de Log, perfectamente distribuidos en un archivo diario ( de mas o menos 40 MB ) por lo que la extracción de ciertas request que resultan relevantes puede resultar complicado. al rescate aparece microsoft con una herramienta poderosa pero poco conocida, pareciera incluso un poco abandonada, sin mucha documentacion, pero justifica la inversión de tiempo para aprender a utilizarla. LogParser,  http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=24659 básicamente es una herramienta que nos permite ejecutar consultas al estilo SQL, sobre archivos planos (en diferen

Guardar Milisegundos con NHibernate

Hoy casualmente en el trabajo nos topamos con un comportamiento un poco extraño en NHibernate, con una propiedad de tipo DateTime, mapeado a un campo DateTime en una base de datos SQL Server, resulto que necesitábamos tener hasta los milisegundos almacenados y el problema es que nhibernate para "compatibilidad"  con multiples RDBMS, trunca hasta los segundos, por lo que despues de mucho buscar nos encontramos finalmente con la solución. agregar en el archivo hbm, donde esta definido el mapeo, el atributo type="timestamp" a la propiedad. por ejemplo <property column="CREATION_DATE" name="created" type="timestamp"> aunque en la base de datos se mantiene DateTime. y en la propiedad del objeto tambien se mantiene DateTime. 

Cargar JS De Forma Dinamica

El hecho de minimizar la cantidad de información que necesita transmitirse al usuario la primera vez que carga una pagina web hace mas agradable la experiencia para el usuario, todos hemos pasado por la desesperación de ver una pagina cargarse lentamente y francamente creo que son pocos los que esperan y somos muchos los que simplemente nos cambiamos a la siguiente pagina, en el ambiente tan competitivo que se vive hoy en día en internet, el cual no nos permite darnos el lujo de perder un visitante por un tiempo de respuesta deficiente en nuestras "landing pages" Lazy Loading tambien conocida como "On Demand Loading"  y algunos otros alias, es una idea que se viene manejando en los ORM desde hace tiempo, por ejemplo en una relacion Uno a Muchos, la data del lado de muchos no se carga hasta que efectivamente se intenta acceder a ella, por lo que no se realiza el costoso proceso de cargar todo el detalle, hasta que efectivamente se vuelve inevitable (necesario). e

C# Performance, Acelerando C#, Tip #1 List.Contains() vs Dictionary.ContainsKey()

Generalmente el rendimiento de una aplicación no se toma en cuenta hasta que este se vuelve inaceptable, es decir, si todo funciona y esta dentro de los limites aceptables,  pues nadie se pone a pensar en optimizar nada, por ahí dicen "no optimice demasiado pronto" pero esto no significa "no optimice nunca", para mi la optimización empieza desde el momento en el que se piensa la  solución, es inaceptable no considerar el rendimiento cuando se planea la forma de implementar una característica.  Hoy publico uno de los tantos casos con los que me ha tocado optimizar, es muy común y muchas personas no tienen presentes este tipo de consideraciones al decidir que método utilizar, es mas ahora con LINQ y la inferencia de tipos mucha gente se enfoca mas en usar querys LINQ para resolverlo todo, sin ponerse a pensar ni por un momento las implicaciones que esta "maravilla" tienen en el rendimiento final de una aplicación.  En esta publicación voy a presenta

Visual Studio 2010 copiar Html Resaltado

Una tarea que parece trivial pero que a la hora de necesitarla se nos hace difícil encontrar una forma rápida, muchas veces termino buscando un sintax highlighter online, pero siempre el formato varia segun cada pagina, finalmente me he tomado el tiempo para encontrar una herramienta mas uniforme y me tope con un plugin para visual studio 2010 que nos permite copiar el html exacto a la representación que estamos viendo en el editor de codigo (lo cual resulta maravilloso) http://visualstudiogallery.msdn.microsoft.com/d0d33361-18e2-46c0-8ff2-4adea1e34fef/ esta es solo una de las características de este plugin que por cierto se ve  muy atractivo, pronto vamos a seguir explorando las herramientas que tiene. ejemplo namespace  errorLoggingTest {      public   partial   class   _Default  : System.Web.UI. Page     {          protected   void  Page_Load( object  sender,  EventArgs  e)         {         }     } } awwww :)

Reporte de Errores con NLog en Asp.Net

Una de las características importantes para una aplicación web que esta corriendo en un ambiente publico es la capacidad de reportar de forma adecuada y con información significativa las condiciones de error que se produzcan, en esta entrada vamos a ver una forma simple de lograr este objetivo utilizando la librería NLog ( http://nlog-project.org/ ) básicamente tenemos que aprovecharnos de un evento que se puede interceptar en el Global.asax de nuestra aplicación luego invocar NLog para guardar la información relativa al error que se produjo.          private   static   Logger  logger =  LogManager .GetCurrentClassLogger();          void  Application_Error( object  sender,  EventArgs  e)         {              Exception  c = Server.GetLastError();             logger.ErrorException( "error en web application " , c);         } Luego de esto solo tenemos que asegurarnos de establecer una configuracion adecuada para NLog, ya sea para gurdar archivos de log o mand

ASP.NET Master Page cambiar propiedades con codigo (de forma dinamica)

Cuando utilizamos MasterPages para gestionar el contenido de nuestros sitios web, normalmente colocamos elementos relacionados con la plantilla del sitio. No es extraño el momento en el que tenemos que modificar alguna característica de la MasterPage solo en algunas de las paginas que la utilizan, por lo que se necesita poder acceder al Objeto del tipo MasterPage que representa a la plantilla de la pagina actual. simple pero a veces un poco escondido, todas las aspx que implementan una MasterPage tienen una propiedad "Master" que sirve para acceder a su MasterPage asi que podemos hacer cosas como public partial class About : System . Web . UI . Page { protected void Page_Load ( object sender , EventArgs e ) { Label b = ( Label ) Master . FindControl ( " miLabel " ) ; } }

Elmah, Manejo de Excepciones en ASP.NET

Una característica muy importante de un software es la capacidad que tiene para mejorar en el tiempo, ligado a esto tenemos la necesidad de llevar un registro de los eventos, muchas herramientas existen para llevar log's, pero son tan poderosas y flexibles que muchos usuarios nos perdemos en el poder de las mismas, abrumados por la cantidad de opciones, terminamos diseñando estrategias absolutamente erróneas de logging, por ejemplo archivos de Log ocupando todo el disco duro de un servidor en producción, o miles de correos electrónicos saturando las bandejas de todo el personal operativo. Elmah es un conjunto de módulos y handlers para ASP.NET que permiten integrar registro excepciones de una forma rapida, flexible y no menos importante modular, extensible y de codigo abierto con la calidad suficiente para entornos de producción (hay varios sitios por ahi que llevan bastante tiempo usando esta herramienta) entre las ventajas que tenemos, es que el manejo de errores se hac

AutoMapper, Mapeo Objeto a Objeto en .NET

Este ejemplo muestra como usar la librería  AutoMapper  para mapear objetos entre si sin tener que copiar de forma manual cada propiedad que nos interesa. en el video se muestra una proyección donde algunas de las propiedades del objeto destino son calculadas a partir de algunas de las propiedades del objeto origen.

agregar System.Web a Aplicación de Consola Visual Studio 2010

Cuando creamos una aplicación de consola en Visual Studio 2010 y nos encontramos con alguna librería que tiene alguna dependencia sobre System.Web nos encontramos con un error a la hora de compilar que indica que falta una referencia al mencionado assembly, el problema es que al buscar entre las referencias de .NET system.web no aparece, el problema es que las aplicaciones de consola se crean con el "target framework" configurado como ".net framework 4 (client profile)" el cual limita algunos assemblies, es suficiente con cambiar el target a ".net framework 4" para que sea posible agregar system.web

Animacion OpenGL con C# with OpenTK

empezamos con OpenGL desde C# 4 en Visual Studio 2010 usando la librería OpenTK teclas A y Z S y X D y C F y V básicamente es esta animación portada a C# http://rdebug.blogspot.com/2011/07/animacion-opengl-2d-lwjgl-funciones.html Descargar Codigo Fuente y Ejecutable

JOGL, Animacion TRIANGLE FAN, OpenGL 2D

otra animacion para la coleccion de opengl teclas A y Z C S y X F y V tecla arriba y abajo Descargar Codigo Fuente

Configurar JDeveloper para utilizar LWJGL

en este video se muestra como configurar JDeveloper para que pueda lanzar código que depende de librerías que a su vez tienen dependencias nativas como es el caso de LWJGL, JOGL, JOCL y muchas otras, básicamente el truco consiste en definir un parámetro extra en las opciones de lanzamiento de "java.exe" para que incluyan una configuración personalizada de la propiedad "java.library.path" para que esta apunte a la carpeta correcta, donde se incluyen las dependencias nativas de nuestras librerías.

Animacion OpenGL 2D LWJGL Funciones Senoidales en Coordenadas Polares

esta animación, realizada con la librería LWJGL para tener acceso OpenGL desde java, consiste de una serie de puntos que siguen una función senoidal en coordenadas polares de la forma R = SIN( a*T + offset ), la animacion permite personalizar el parametro a, el offset, ademas de la velocidad de giro, y el numero de puntos. teclas, A y Z agregar y quitar puntos S y X modificar el valor de "a", +0.1 y -0.1 F y V modificar la velocidad con la que cambia "offset" +0.001 y -0.001 C y B cambio de color de fondo y frente Q y W, cambio de la velocidad angular ( del angulo inicial ) Codigo Fuente y Ejecutables para Windows ( es posible ejecutar en otras plataformas, solo es necesario tener las librerias nativas de lwjgl para dicha plataforma y luego invocar java de la siguiente forma  java -Djava.library.path=pathNativas -jar  ejemplo.jar  )

LWJGL Animacion 2D OpenGL, Rectangulo con Edicion de Vertices

Este ejemplo muestra como utilizar la libreria LWJGL para realizar una animacion en 2D con OpenGL, esta animacion es simplemente un rectangulo en 2D al cual se le pueden re acomodar los vertices usando el raton, y cambiar los colores tanto de fondo como de relleno. Descargar Codigo Fuente

OpenGL 2D GL_TRIANGLES, Processing, Triángulos Girando

Animacion hecha con Processing usando OpenGL, en 2 dimensiones, básicamente una serie de triángulos girando sobre uno de sus vértices, centrados en el espacio de dibujo. ilustra el uso de beginShape( TRIANGLES ) que seria el equivalente de processing para gl_begin( GL_TRIANGLES ) , para dibujar los triángulos. permite agregar y quitar triángulos, cambiar los colores y los tamaños de los triángulos y también las velocidades y direcciones de giro. Descargar Codigo Fuente, Processing, Java y Binario para Windows

Animacion OpenGL 3D con Processing

siguiendo la vía de Processing hoy llegamos a Animaciones en 3D usando OpenGL, esta animación es básicamente una extensión de la anterior, círculos girando, la idea era hacer esferas girando pero debido a la complejidad de las esferas, la animación baja muy rápido de rendimiento cuando tiene 25 esferas en una escena, por lo que las esferas fueron reemplazadas por los siempre amigables y poco complejos cubos :P, aqui el video, la ventaja de usar Processing es que podemos desplegar la aplicacion para distintas plataformas, todo desde el entorno de Processing, en este caso, incluyo la version para windows 32 bits, en la distribución, pero al incluir el archivo fuente de Processing, se puede desplegar para cualquiera de las plataformas soportadas. en el paquete processing nos quita el dolor de cabeza de las dependencias, ya que incluye tanto los jars de JOGL ( la libreria que usa processing para soportar opengl ), tambien incluye las librerias nativas de JOGL (dll en el caso de windows) et

Animación 2D Círculos Girando en Processing

en este segundo intento de animación en Processing me he cambiado el ejemplo anterior a coordenadas polares, y en vez de hacer rebotar los círculos por la región definida por el espacio de dibujo he decidido hacer girar los círculos al rededor del centro del espacio de dibujo, al igual que le ejemplo anterior, la animación cuenta con opciones para agregar o quitar círculos con las teclas A y Z, cambiar el radio de giro G, el radio del circulo R, la velocidad y dirección del giro V, el color de fondo y frente B y C , y también una opción nueva, la de limpiar o no el espacio de dibujo entre cada frame con la tecla T, como se puede apreciar en el video. Descargar Código Fuente, Processing y Java

Animación 2D con Processing

En este mi primer acercamiento con Processing  voy a mostrar los conceptos básicos de animación en 2D, el uso de framerate, fill, background, ellipse, setup, draw y de una clase personalizada "ball" para llevar a cabo el resultado que se puede apreciar en el siguiente vídeo. Descargar Codigo Fuente  para Proccesing y Java

Animación en Pantalla Completa, Java2D

siguiendo la serie de publicaciones recientes, he llegado al uso de pantalla completa con java full screen exclusive mode api, ahora extendiendo en esta via, vamos a aprender como hacer una animación en pantalla completa con render loop activo, doble buffer con BufferStrategy , captura de pantalla, thread y manejo con el teclado. aqui un video que muestra el comportamiento de la aplicacion la aplicación permite controlar el radio del circulo con las teclas A y Z, controlar la velocidad del mismo con las teclas S y X, cambiar de direccion de forma aleatoria con la tecla D, cambiar de color de forma aleatoria con la tecla C, salir con la tecla ESC, y modificar la direccion girar en ambos sentidos con F y V Descargar Codigo Fuente

JFrame en Pantalla Completa

En algunas oportunidades es necesario tomar el control de toda la pantalla, para poder fijar la resolución a la que se desea trabajar, o acelerar el rendimiento gráfico de una aplicación exigente, Java provee esta capacidad a travez de su Api Full Screen Exclusive Mode en este pequeño ejemplo, se propone un extensión del ejemplo de captura de pantalla, para poder ingresar y salir del modo Pantalla Completa utilizando la barra de Menu del JFrame. try { GraphicsEnvironment gEnv = GraphicsEnvironment . getLocalGraphicsEnvironment ( ) ; GraphicsDevice gDev = gEnv . getDefaultScreenDevice ( ) ; setVisible ( false ) ; dispose ( ) ; setUndecorated ( false ) ; gDev . setFullScreenWindow ( null ) ; setSize ( new Dimension ( 400 , 300 ) ) ; setLocationRelativeTo ( null ) ; setVisible ( true ) ;

Capturar la Pantalla desde Java

En este pequeño ejemplo, se muestra como tomar una captura de pantalla desde java, colocar la imagen en un JPanel, y luego de forma opcional guardar la imagen en un archivo en formato PNG. en este programa se muestra el uso de la clase ImageIO con su metodo write para guardar la imagen, la clase Robot para tomar la captura de pantalla, la clase JFileChooser para obtener el archivo donde se desea guardar, y ademas la clase Desktop para lanzar la aplicación por defecto con la imagen guardada (visor de imagenes) Descargar Codigo Fuente

Interprete simple con Java CUP y JFLEX

En este post presento un interprete muy simple que puede ser usado como base para la construcción de algo mas complejo, la idea fundamental en ese, es ayudar a comprender el funcionamiento de Java CUP, un generador de analizadores sintácticos LALR para Java y JFLEX un generador de analizadores léxicos basados en tabla también para Java. El interprete consiste en una aplicación por consola que recibe como parámetro el path del archivo que se desea interpretar, y simplemente ejecuta las instrucciones del archivo en forma secuencial. El lenguaje permite describir operaciones matemáticas, en notación polaca usando la sintaxis siguiente: push 10 : para ingresar un numero a la pila print :  para extraer un numero de la pila y mostrarlo en pantalla add: suma los dos números mas arriba de la pila sub: resta los dos números mas arriba de la pila mult: multiplicación de los dos números mas arriba en la pila div: división de los dos números mas arriba en la pila Un ejemplo de arch

Memoria Dinámica en Java, Pila estructura de datos LIFO

Esta aplicación incluye una implementacion básica de una pila (stack) de enteros en Java utilizando memoria dinámica, una de las estructuras de datos mas utilizadas, las operaciones incluidas son pop para sacar el primer elemento de la pila, push para agregar elementos a la pila, top para obtener el valor del tope de la pila sin sacar el elemento, y size para saber el numero de elementos en la pila. Codigo fuente en Oracle JDeveloper 11g

Carga de datos a Oracle 10g desde archivo csv usando SQL*Loader

El proceso de carga de datos desde archivos de texto a base de datos es un elemento fundamental en la manipulación de información, puede darse como parte de la migración de un sistema o como parte de un proceso de integración entre sistemas, el conjunto de scripts que acompañan a este post demuestran como crear un usuario en el dbms, luego como crear un grupo de roles con permisos restringidos y la creación de otros usuarios apegados a dichos roles, ademas el proceso de carga de datos utilizando SQL*Loader a una tabla temporal, luego la ejecución de un script para crear el modelo entidad relación para estructurar los datos y finalmente la ejecución de un script que rellena el modelo entidad relación a partir de los datos almacenados en la tabla temporal. Los scripts son archivos por lotes de windows (bat), la única configuración necesaria es editar los scripts para configurar la contraseña del usuario SYS para las acciones que requieren privilegios. Descargar scripts + datos