Me mudo de blog noviembre 4, 2007
Posted by eugenioserrano in 1.add a comment
Bueno, despues de varios meses sin escribir nada, un poco debido a que he estado muy ocupado, y otro poco a que wordpress funciona muy lerdo para mi pobre conexion de internet, arranco este nuevo blog, con hosting propio.
La direccion es:
http://www.eugenioserrano.com.ar
Mi proveedor de hosting es http://www.dattatec.com/, que por 30 pesos argentinos, algo asi como $ 9,50 (dolares) al año me da el sercvicio de hosting, con 2 bases SQL 2005. Estoy muy contento con el servicio que me prestan.
El sistema de blog que estoy utilizando se llama BlogEngine.Net esta realizado en ASP.Net usando C#, es open source y se puede bajar gratuitamente de CodePlex.com, aqui dejo la dirección completa: http://www.codeplex.com/blogengine
Bueno, ahora con motor de blog propio ya no tengo excusa para no escribir.
GetType e Interfaces en Visual Basic.Net marzo 9, 2007
Posted by eugenioserrano in General.2 comments
Debido a una pregunta que me hizo mi amigo Ezquiel Jadib, de como se traduciria una linea de C# a Visual Basic me he decidio a escribir esta entrada ya que casi no hay informacion al respecto.
La pregunta que me hizo mi amigo es muy simple:
¿ Cómo se traduce esta linea de codigo de C# a VB.Net, teniendo en cuenta que i1 e i2 son interfaces ?
bool result = (i1.GetType() == i2.GetType());
Yo le dije rapidamente, pues asi…
Dim result As Boolean = (i1.GetType() Is i2.GetType())
A lo que me respondio tambien muy rapidamente.. Jeje, ya lo probe, no compila…
Y efectivamente no compila debido a que el metodo GetType se hereda de System.Object, pero las interfaces no tienen dicho metodo, y las variables i1 e i2 estan declaradas como interfaces no como clases.
Recordemos que por otro lado se puede usar la Insturcción GetType ( type ) pero, es para obtener el tipo de un tipo y no de una variable.
La cuestión es que despues de probar un poco encontramos que haciendo un Cast la cosa funciona:
Aqui hay un ejemplo completo:
Public Interface IFoo1
Sub Foo1()
End Interface
Public Interface IFoo2
Sub Foo2()
End Interface
Public Class Foo1
Implements IFoo1
Public Sub Foo1() Implements IFoo1.Foo1
End Sub
End Class
Public Class Foo2
Implements IFoo2
Public Sub Foo2() Implements IFoo2.Foo2
End Sub
End Class
Y luego…
Dim a As IFoo1 = New Foo1
Dim b As IFoo1 = New Foo1
Dim c As IFoo2 = New Foo2
If DirectCast(a, Object).GetType Is DirectCast(b, Object).GetType Then
Debug.WriteLine(“A Implements the same interface that B”)
End If
If DirectCast(a, Object).GetType IsNot DirectCast(c, Object).GetType Then
Debug.WriteLine(“A Doesn’t implements the same interface that C”)
End If
¡El ASP.NET AJAX 1.0 ya está listo! enero 29, 2007
Posted by eugenioserrano in ASP.Net.2 comments
Ya está disponible para su descarga, en forma totalmente gratuita, el framework para crear soluciones web más interactivas, personalizables y más eficientes.
Aqui hay varios links para aprender a usarlo ya mismo !
Desarrollo de Aplicaciones WEB con AJAX y ASP .NET 2.0
Desarrollo de aplicaciones con Microsoft Atlas
AJAX y Clientes Ricos
Cómo Hacer Técnico: Uso de Ajax en la Plataforma ASP .net
MDCD: AJAX y su integración con las plataformas de desarrollo
MSDN How To
Estoy impresionado con LogMeIn enero 20, 2007
Posted by eugenioserrano in Sin categoría.43 comments
Le gustaria poder acceder a su pc desde cualquier lugar y en cualquier momento pero no tiene una ip publica ? Los routers y proxies le hacen la vida imposible ? Pues eso es cosa del pasado. Estoy impresionado con LogMeIn, solo hay que instalar un programa de 3 mb en el equipo y listop, ya podemos acceder a nuestro equipo sin preocuparse por tener IP publica, firewalls, routers, etc….
Realmente impresionante.
Saludos,
Eugenio
MVP por cuarto año enero 1, 2007
Posted by eugenioserrano in General.7 comments
Hoy he recibido un mail por parte de Microsoft donde me informan que he sido reconocido nuevamente como MVP (Profesional muy valorado), por mis colaboraciones a la comunidad durante el año 2006.
Es la cuarta vez consecutiva que recibo este premio y mentiría si diría que no me llena de alegria y orgullo este reconocimiento por parte de la empresa mas importante de software del mundo. Si quiere conocer mas sobre el programa MVP, haga click aquí:
http://mvp.support.microsoft.com/Default.aspx
Y aqui 2 excelentes posts en castellano de mi MVPLead Fernando Garcia Loera donde explica que es ser MVP y como hacer para intentar ser uno:
http://blogs.msdn.com/mvplead/archive/2005/10/31/487534.aspx
http://blogs.msdn.com/mvplead/archive/2005/11/08/490532.aspx
Saludos,
Eugenio
Cooperator 1.3.0.1100 (Final) Liberado diciembre 30, 2006
Posted by eugenioserrano in Cooperator Framework.2 comments
Hola Amigos:
Es un agrado para mi informarles que hemos liberado la versión final (con código fuente incluido) de Cooperator Framework.
Pueden bajarla de aquí:
http://www.codeplex.com/cooperator/Release/ProjectReleases.aspx
La demora se debia que teniamos que terminar algunos trámites para el registro de propiedad intelectual.
Estamos a su disposicion para el que quiera preguntar lo que sea. Pero nada mejor que el codigo fuente para ver como funciona la cosa.
Eventos Microsoft en Córdoba, Arg. (Ene 2007) diciembre 26, 2006
Posted by eugenioserrano in Córdoba.add a comment
Viernes 5 de Enero de 2007, 18 hs
Technight: Microsoft Robotics – Lego Mindstorms NTX & Windows Vista – Speech Recognition
Temario:
Microsoft Robotics – Lego Mindstorms NTX
Uno de los productos más novedosos que Microsoft ha presentado este año es Microsoft Robotics Studio November 2006 CTP. Este producto permite introducirnos en algunos de los conceptos básicos para la programación de robots. En esta sesión veremos las características principales de este producto y desarrollaremos (en vivo) una aplicación práctica “persiguiendo a .Net 2.0”; un pequeño proyecto para controlar un robot con código Net.
Duración: 90 minutos.
Orador: Bruno Capuano – Avanade
Windows Vista – Speech Recognition
Con el reconocimiento de voz del sistema operativo Microsoft® Windows Vista™, es más fácil utilizar la voz para controlar aplicaciones y para navegar por el nuevo Sistema Operativo. La tecnología Speech Recognition (reconocimiento de voz) permite controlar el ordenador hablando. Al hablar, el software decidirá de forma inteligente si tiene que convertir su voz en un texto o si ha dado un comando que requiere llevar a cabo una acción. En esta sesión, veremos las características principales de esta nueva tecnología y cómo podemos aprovecharnos de esas capacidades desde el mundo Net.
Duración: 90 minutos.
Orador: Bruno Capuano – Avanade
Lugar: Raona
Avellaneda 240 B Alberdi Norte
Córdoba X5000KFB
Argentina
Haga click aqui para registrarse a este evento.
Optimizando aplicaciones diciembre 24, 2006
Posted by eugenioserrano in General.add a comment
Aprovechando para pulir los últimos de detalles antes de liberar la versión final de Cooperator Framework, estuve estos días optimizando un proceso que ya tenemos en producción desarrollado sobre nuestro Cooperator y que lee y escribe intensivamente en la base de datos.
Para la optimización use estas 3 herramientas.
1) SQL Profiler: Con el pude ver las conexiones abiertas por la aplicación, a que Stored Procedures estaba llamando en cada caso, cuantas lecturas/escrituras se hacian en cada operación, etc.… Ver más.
2) CLR Profiler: Es una herramienta que básicamente chequea como actua el Garbage Collector y como es el ciclo de vida de los objetos dentro de nuestra aplicación. Muy buena, también me permitió ver que objetos tenía mas cargados, que tipos eran más usados, etc.. Ver más.
3) Enterprise Performance Tool: Aunque no funciona del todo bien en Windows Vista, la utilicé para “medir”, cuales son los métodos que más tardan en ejecutarse, cuales son los métodos más llamados, etc.. Ver más.
Recomiendo revisar los procesos con esas 3 herramientas ya que se puede ajustar muchísimas cosas que de otra forma no se pueden ver. Yo en mi caso, ajustando tanto las librerías de clases base de Cooperator, como el código de mi aplicación logre bajar a más de la mitad el tiempo en que se ejecutaba el proceso y a la vez consumir menos recursos.
Por ejemplo con la herramienta de rendimiento de Visual Studio 2005, me di cuenta que estaba llamando más de 1.000.000 de veces a un determinado método. Bueno después de cambiar algunas cosas logre reducir notablemente ese caso particular poniendo una colección en un diccionario de generics y preguntando si tal objeto estaba en el diccionario… Es impresionante como caminan los diccionarios en .Net 2,0 !
Saludos,
Eugenio
Cuando Debug no es igual a Release diciembre 24, 2006
Posted by eugenioserrano in General.1 comment so far
¿ Usted cree en las brujas ? Hay algunos dias que me hago esa pregunta …
Les cuento de un error de por más interesante que me estaba dando una aplicación que lee y escribe datos intensivamente sobre una base de datos SQL Server y que me motivó a escribir esta entrada en mi blog.
Es un error súper extraño y gracioso a la vez. Antes que nada, mostremos el stack del error:
Stack Trace
at System.Data.SqlClient.SqlTransaction.Zombie()
at System.Data.SqlClient.SqlInternalTransaction.ZombieParent()
at System.Data.SqlClient.SqlInternalTransaction.CloseFromConnection()
at System.Data.SqlClient.TdsParser.Deactivate(Boolean connectionIsDoomed)
at System.Data.SqlClient.SqlInternalConnectionTds.InternalDeactivate()
at System.Data.SqlClient.SqlInternalConnection.Deactivate()
¿¿¿¿ System.Data.SqlClient.SqlTransaction.Zombie() ????
Pues sí, y sinceramente jamas habia visto este error ni nada parecido !!
Está bien que era sábado cerca de las 12 de la noche, pero el Zombie en ese caso debería ser yo y no tenía porque serlo ADO.Net, a no ser que las brujas existan…
Lo peor de todo esto es que este error sucedía solamente cuando compilaba mi aplicación en Release y no en Debug !
Con Debug funcionaba todo perfectamente tal cual estaba programado.
En otro caso, aleatoriamente me daba: referencia no establecida a instancia de objeto. Empecé entonces a revisar todo el proceso paso a paso para ver si mis objetos eran Thread Safe, si mis colecciones están trabajando correctamente, etc.. Pero como en Debug la aplicacion funcionaba correctamente era evidente que por mas que me pase horas y horas recorriendo paso a paso mi aplicacion no iba llegar al problema.
Busqué el error del “Zombie” en internet y prácticamente no encontré ninguna información acerca del mismo, y en la ayuda nada de nada…
Termine apagando mi equipo y me fui a hacer un poco de vida familiar antes de irme a dormir.
Hoy domingo mi pequeña hija me despertó tempranito y aproveche para ponerme a estudiar el misterioso caso del Zombie que tenía en mi Pc.
Después de un par de horas de revisar mi código buscando sin éxito algún problema me puse a revisar las opciones de compilación de cada proyecto ya que era muy extraño que en Debug funcionara y en Release no.
Al fin encontré como solucionar el problema, y era que en Release, uno de mis ensambles tenía en la opción Generar Información de Depuración = None, mientras que otros tenían pdb-only. En Debug esto es por defecto Full.
¿ Conclusión que saco ?
Hay que usar para todos los proyectos que forman parte una aplicación la misma configuración avanzada de compilación. Esto es: None para todos, ó pdb-only para todos, ó Full (Debug) para todos, ya que de lo contrario obtendremos resultados inesperados.
Bueno, con eso mi aplicación quedó andando (y muy rápido), pero si alguien me puede explicar este extraño comportamiento se lo agradeceré….
Aquí paso las ventanas tanto en Visual Basic como en C# de cómo cambiar esta configuración.
Cooperator en CodePlex diciembre 20, 2006
Posted by eugenioserrano in Cooperator Framework.add a comment
Amigos:
Hemos subido nuestro framework a codeplex, el sitio de hosting para proyectos de open source de Microsoft.
http://www.codeplex.com/cooperator
En muy pocos dias subiremos el código fuente alli para que puedan descargarlo
Saludos,
Eugenio


