Ir al contenido principal

Entradas

Mostrando las entradas con la etiqueta c#

C# Dibujar Arbol Binario Graphviz

Para continuar con Graphviz , esta vez desde C#, en este pequeño ejemplo, voy a implementar una forma simple de dibujar un Arbol Binario usando Graphviz y en especifico, Dot. Como base para entender el funcionamiento general de Graphviz, hace tiempo hice un post hablando mas en detalle del proceso usando Java ( Usar GraphViz en Java ) Para que este ejemplo funcione, es necesario tener instalado GraphViz con la carpeta "bin" de GraphViz como parte de la variable Path de Windows (esto para poder invocar Dot.exe usando solo el nombre del binario, el mismo caso que para los ejecutables Javac o Java en el Path ) Para no entrar en los detalles del codigo de un Arbol Binario, he tomado como base el ejemplo publicado en Code Project ( http://www.codeproject.com/Articles/18976/A-simple-Binary-Search-Tree-written-in-C ) TBinarySTree bt = new TBinarySTree ( ) ; bt . insert ( " Bill " , 3.14 ) ; bt . insert ( " John " . 2.71 ) ; Dicho ejemplo resu...

Averiguar el Id de Proceso en C#

No es raro que necesitemos identificar de forma única algún elemento de nuestros programas, en este caso me toco definir una llave para usar en un servidor de cache (memcached) que fuera la misma durante el tiempo en el que se ejecute un programa, pero que también sea diferente por cada proceso, la solución mas clara es utilizar el PID, valor que identifica a un proceso en el sistema operativo al menos en un periodo de tiempo. para averiguar este valor desde C#, y cualquier lenguaje de la .NET Framework basta con usar la siguiente instrucción. var PID = Process.GetCurrentProcess().Id;

log4net apagar NHibernate Logging

cuando NHibernate escribe en tus archivos de log, miles y miles de lineas de mensajes de depuración, que al final te resultan inútiles, y solo ocultan otra información que es realmente importante. aqui dejo este pequeño segmento de xml, que permite parametrizar el nivel de detalle para el logging de NHibernate. Configuracion Basica < log4net > < appender name = " FileAppender " type = " log4net.Appender.FileAppender " > < file value = " C:\logfile.txt " /> < appendToFile value = " true " /> < layout type = " log4net.Layout.PatternLayout " > < conversionPattern value = " %date [%thread] %-5level %logger [%property{NDC}] – %message%newline " /> </ layout > </ appender > < root > < level value = " DEBUG " /> < appender-ref ref = " FileAppender " /> </ root > ...

C# Como Descargar Archivos

A medida que nos van surgiendo los programas, nos encontramos con una cantidad variada de necesidades, una de las mas comunes es la Descarga de Archivos, cuando uno aprende a programar generalmente se enfoca en aprender a manejar archivos en el disco duro local, pero no esta de mas tener a la mano el pequeño fragmento de código que te permite bajar un archivo de Internet. no es muy complicado, pero si muy poderoso. namespace WebFileDownload { class Program { static void Main ( string [ ] args ) { var cliente = new WebClient ( ) ; cliente . Proxy = null ; cliente . DownloadFile ( " http://www.google.com/robots.txt " , " robots.txt " ) ; System . Diagnostics . Process . Start ( " robots.txt " ) ; } } }

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) {        ...

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. 

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 aplicac...

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)         {       ...

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 ventaj...

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

Analizador Lexico C# hecho a mano

Este ejemplo muestra como implementar un analizador léxico simple en C#, usando el DFA como base para construir el autómata en código. El lenguaje que reconoce el analizador léxico esta formado por los elementos básicos de una calculadora de números naturales, los operadores básicos, +, -, /, * ademas detecta y reporta errores léxicos y también espacios en blanco (\t,\n,\r, )  Proyecto original en Visual Studio 2008

C# DataGridView sin DataSource

Esta aplicación demuestra como utilizar el control DataGridView sin tener un origen de datos asociado, permite editar matrices y guardar o abrir desde archivos de texto (csv), ademas permite elevar al cuadrado cada elemento de la matriz (numérico). Descargar código fuente en Visual Studio 2008

Agregar Controles en Tiempo de Ejecucion a un Form en C#

Este ejemplo demuestra como agregar controles de forma dinámica a un formulario en c#, el codigo fuente esta montado en un proyecto de visual studio 2008, la aplicación permite agregar un numero arbitrario de botones a un panel y ademas maneja el evento de cada botón agregado. Descargar código fuente ( version de este ejemplo para java )