| José's profilejms.netBlogListsNetwork | Help |
|
jms.netSobre tectnologías .Net y algo más November 14 Nuevos posts en el otro blogOctober 27 Nuevos Posts en www.jose-selesan.com.arSeptember 12 Nuevo BlogDesde hace un tiempo dejé de publicar posts acá para hacerlo en mi nuevo blog, que también tiene dominio propio: http://www.jose-selesan.com.ar
Saludos June 01 FxCop como herramienta de aprendizajeSiempre dije que FxCop es una excelente herramienta. Siempre dije también que no solo sirve para revisar que nuestro código cumple con ciertas reglas sino tambien como herramienta de aprendizaje. Y digo esto, porque cada vez que FxCop detecta una regla violada, brinda suficiente información sobre por qué existe esa regla, cómo corregirla y cuándo puede omitirse. Así, uno va descubriendo cómo debe hacer las cosas, y siempre entre esas explicaciones se filtra algo que uno no sabía.
Además, cuando se está empezando a trabajar con una nueva versión del Framework .Net, resulta muy útil para descubrir y aprender ciertas cosas que fueron mejoradas con respecto a la versión anterior. Hoy por ejemplo corrí el FxCop sobre una pequeña herramienta que escribí hace un par de semanas y descubrí (porque el FxCop me lo dijo) que para declarar eventos con parámetros personalizados (algo que herede de EventArgs) en C# ya no es necesario definir un delegado, sino que se puede usar una versión genérica de EventHandler, que como tipo genérico tiene la clase que deriva de EventArgs. Lo ilustro con un ejemplo:
Para poder generar un evento llamado ImportProgressChanged, en C# 1.1 necesitaba hacer algo así:
public class ImportProgressEventArgs: EventArgs
{
public int Progress;
}
public delegate ImportProgressChangedEventHandler(object sender, ImportProgressEventArgs e);
Y en la clase que dispara el evento:
public event ImportProgressEventHandler ImportProgressChanged;
Ahora, con C# 2.0, no es necesario declarar el delegado, por lo que la declaración del evento queda así:
public event EventHandler<ImportProgressEventArgs> ImportProgressChanged;
Y el código del manejador del evento sigue igual, con un parámetro de tipo object y otro de tipo ImportProgressEventArgs.
Cada vez estoy más convencido que los Generics son la mejor incorporación en la última versión del Framework .Net.
Algunos links:
- La página oficial de FxCop: http://www.gotdotnet.com/team/fxcop/
- La explicación de la regla que indica que hay que usar Event Handlers genéricos: http://www.gotdotnet.com/team/fxcop/docs/rules.aspx?version=1.312&&url=/Design/UseGenericEventHandlerInstances.html
- EventHandlers Genericos en MSDN: http://msdn2.microsoft.com/en-us/db0etb8x.aspx
- Un completo post sobre el tema: http://blogs.effectivexaml.net/DaveWheeler/2005/04/new-and-improved-events.html
May 05 Con cuál lenguaje empezarCreo que la pregunta qué más veces escuché (que me hicieron a mí y que vi en foros y listas) es: "¿Qué lenguaje es mejor para empezar con .Net, C# o VB.Net?". Como profesional, la respuesta que debo dar es que cualquiera de los dos lenguajes permite obtener los mismos resultados, incluso sin diferencias de rendimiento, ya que ambos compiladores generan el mismo código MSIL. Es obvio que para un programador de Visual Basic 6, será más facil comenzar con VB.Net, mientras que a un programador de C++ o de Java, le conviene empezar con C#.
Sin embargo, en estos días, mientras observaba codificar en VB.Net a programadores de Visual Basic 6, me dí cuenta de un gran problema: muchos programadores que trabajan en VB.Net no tienen un conocimiento profundo del framework y de la sintaxis de VB.Net, ya que cuentan con el namespace Microsoft.VisualBasic que contiene una serie de módulos (incluso los módulos me parece que son algo incorrecto desde el punto de vista de POO) con la implementación de la mayoría (sino todas) las funciones del viejo Visual Basic. Así, un programador de VB.Net se encuentra escribiendo:
dim cadena as String = "Hola Mundo"
dim pos as Integer = InStr(cadena, "Mundo")
Cuando en realidad debería estar escribiendo:
dim cadena as String = "Hola Mundo"
dim pos as Integer = cadena.IndexOf("Mundo")
¿Cuáel es el problema de esto? Que si ese desarrollador mañana tiene que escribir codigo en C#, va a tener un problema, porque no va a encontrar la función InStr. Por otro lado, un programador que ingresó al mundo .Net con C# y está acostumbrado a escribir cadena.IndexOf(...), cuando tenga que escribir código VB.Net va a escribir cadena.IndexOf(...), y el impacto en el cambio de lenguaje va a ser mínimo.
Así que muchachos, programemos en C#, que además nos deja el código más prolijo.
April 19 ATLASEn estos dìas he estado probando un poco el nuevo framework ATLAS (http://atlas.asp.net). Este framework es la propuesta de Microsoft para incluir Ajax en los sitios de ASP.Net 2.0. En general le veo unas cuantas similitudes con el ya mencionado MagicAjax. En particular, uno de los controles es UpdatePanel, que al igual que su equivalente en MagixAjax, permite que todo su contenido pueda ser actualizado sin hacer postback.
Lo bueno, es que además del UpdatePanel, tiene un montón de controles más, incluso la posibilidad de hacer invocaciones a WebServices directamente desde el lado del cliente. Por ejemplo, hay un control que se llama UpdateProgress que simplemente permite definir contenido que se va a mostrar mientras se está ejecutando código del lado del servidor (por ejemplo, un mensaje de "Espere" junto con un gif animado). En este aspecto, me gusta más que la implementación de MagicAjax, que muestra a la fuerza un cartelito de "Loading" en la esquina superior derecha, sin posibilidad de personalizarlo.
Algo que me gustó mucho son los Extenders, que funcionan de manera similar a los de Winforms. Por ahora hay solamente dos: AutoCompleteExtender y DragOverlayExtender. El AutoCompleteExtender permite definir el nombre de un método de un WebService y qué control extiende (un TextBox) y hace que mientras se escribe algo en el textbox, le pasa el texto escrito al método del WebService y muestra el resultado en un panel debajo del TextBox. Es decir, parecido a un ComboBox pero que se llena dinámicamente con los datos que trae de un webservice. El DragOverlayExtender agrega funcionalidad de Drag and Drop a partes de la página.
Y todo sin postback. March 27 1000 visitasBueno, hoy el blog alcanzó las 1000 visitas. Está bien, hay sitios que tienen esa tasa por hora, pero no me quejo, ya vamos a crecer...
Gracias a los que leen este humilde espacio de tecnología y demás.
José |
||||||
|
|