jump to navigation

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.
1 comment so far

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 General.
24 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.

www.logmein.com

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. :P

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.

compilacion1.jpg

compilacion2.jpg

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