MultiTouch video.

Octubre 29, 2007 :: Posted by - Emilio Torrens :: Category -

Nuevo video en channel 9 de la tecnología MultiTouch desarrollada por Microsoft Research

Ejecutar Metodos con System.Reflection

Octubre 26, 2007 :: Posted by - Emilio Torrens :: Category - ,

Cargar dll, ver sus propiedades y ejecutar sus métodos es realmente sencillo en .NET gracias System.Reflection, en este namespace incluso encontraremos System.Reflection.Emit que nos permitirá generar código IL en tiempo de ejecución.

Para ejecutar un método de una librería que carguemos en tiempo de ejecución seria algo así:

public static object Run()
  {
      Assembly As = Assembly.LoadFrom("MyLibrary.dll");

      Type tipo = As.GetType("MyNameSpace.Class");

      if (tipo == null)
          throw new Exception("No existe la clase en la Libreria");

      MethodInfo method = tipo.GetMethod("MyMethod");

      if (method == null)
          throw new Exception("No existe el metodo en la clase");

      if (method.IsStatic)
          return method.Invoke(null, new object[] {"Param1","Param2"});
      else
          return method.Invoke(
              Activator.CreateInstance
                      (tipo), new object[] { "Param1", "Param2" });
  }

En este ejemplo tanto los parámetros como los resultados son objects, esto puede crear algún problema si le pasamos al método un tipo de parámetro que no espera, o si nos devuelve un tipo que nosotros no esperamos.

La solución esta en los Interfaces, si al crear las dll que tenemos pensado usar con Reflection hacemos que las clases implemente un interface podremos ejecutar los métodos con parámetros y resultados tipados:

public interface IMyInterface
 {
     DateTime MyMethod(string par1, string par2);
 }

 public static DateTime Run()
 {
     Assembly As = Assembly.LoadFrom("MyLibrary.dll");

     Type tipo = As.GetType("MyNameSpace.Class");

     if (tipo == null)
         throw new Exception("No existe la clase en la Libreria");

     if (tipo.GetInterface("IMyInterface") == null)
        throw new Exception("La clase debe implementar IMyInterface");

     IMyInterface i = (IMyInterface)Activator.CreateInstance(tipo);

     return i.MyMethod("Par1", "Par2");

 }

Second Life .Net Developers User Group

Octubre 25, 2007 :: Posted by - Emilio Torrens :: Category -

Parece ser que ya existe una comunidad de desarrolladores de .NET en second live, el Second Life .Net Developers User Group

Se definen como una grupo de profesionales que quieren intercambiar ideas, información, proyectos etc … y se reúnen cada Sábado.

Aquí dejo una "foto" de la ultima reunión.

Para mas información ir a la web o contactar con:

Tori Lukas  

Tori Lukas

Born:
Located: Phoenix, Arizona, USA
Languages: English & VB.Net
Bio

Listas Genéricas y Predicados

Octubre 24, 2007 :: Posted by - Emilio Torrens :: Category - ,

Podemos usar predicados para realizar algunas operaciones de búsqueda sobre las listas genéricas, eso hará que nuestro código sea mucho mas legible y elegante.

Un predicado es un método que comprobara si el objeto que le pasamos cumple con la condición.

Los métodos que podemos usar con predicados son:

Find, FindLast, FindAll, TrueForAll, RemoveAll (Podeis ver lo que hace cada uno en la ayuda de MSDN ya que el funcionamiento del predicado es igual para todos)

Pongo un ejemplo con el FindAll, que será el que mas usemos, y sirve para buscar todos los elementos de la lista que cumplen el criterio, en este caso separamos letras y números.

       static void Main(string[] args)
        {
            string s = "ABCDEFGHIJKLMÑOPQRSTUVWXYZ1234567890";

            List<char> list = new List<char>();
            list.AddRange(s.ToCharArray());

            List<char> NumberList = list.FindAll(IsNumber);
            List<char> LetterList = list.FindAll(IsLetter);

        }

        public static bool IsNumber(char c)
        {
            return Char.IsNumber(c);
        }

        public static bool IsLetter(char c)
        {
            return !Char.IsNumber(c);
        }

El tema de los predicados y las listas genéricas da mucho juego vale la pena pegarle un vistazo …

Test de compresión HTTP

Octubre 24, 2007 :: Posted by - Emilio Torrens :: Category - ,

Activar compresión en IIS es relativamente sencillo, y extremadamente fácil en Apache. Una vez hecho, si queremos comprobar que todo ha ido bien y que beneficio obtenemos con el cambio podemos utilizar un servicio que nos ofrece port80 software.

Ejemplo:

Métodos Anónimos

Octubre 24, 2007 :: Posted by - Emilio Torrens :: Category - ,

Aprovechando el ejemplo del post de Listas y Predicados pondré un ejemplo de métodos anónimos.

Los métodos anónimos son una novedad de C# 2.0 y son la manera de pasar un bloque de código como parámetro.

Pongo el mismo ejemplo de buscar en una Lista letras y números, la búsqueda de números con un método con nombre y la de letras con un método anónimo:

static void Main(string[] args)
{
     string s = "ABCDEFGHIJKLMÑOPQRSTUVWXYZ1234567890";

     List<char> list = new List<char>();
     list.AddRange(s.ToCharArray());

     List<char> NumberList = list.FindAll(IsNumber);
     List<char> LetterList = list.FindAll(
     delegate(char c) { return !Char.IsNumber(c); });

}

public static bool IsNumber(char c)
{
     return Char.IsNumber(c);
}

Otro ejemplo puede ser el pasarle al evento de un control el código directamente

private void Form1_Load(object sender, EventArgs e)
        {
            this.button1.Click += delegate { this.Close(); };
        }

Hay muchas posibilidades, pero hay que ir con cuidado ya que creo que hace el código mas difícil de leer.

¿Cual es la connection string de … ?

Octubre 23, 2007 :: Posted by - Emilio Torrens :: Category -

Con este sitio ya no volveremos a tener que buscar en internet la connection string adecuada.

El sitio ya es antiguo, pero me acorde de el el otro día buscando la conection string para Oracle Client sin usar el oranames.

Eliminar elementos de una colección usando foreach

Octubre 23, 2007 :: Posted by - Emilio Torrens :: Category - ,

Si tienes la necesidad de eliminar elementos de una colección que te estas recorriendo con un foreach y te encuentras con el error "Colección modificada; puede que no se ejecute la operación de enumeración." puedes usar este truquillo.

 private void CleanCodigos(ref ICollection<string> Codigos,                                ICollection<string> CodigosEliminar)
    {
        foreach (string Codigo in new ArrayList(Codigos))
        {
            if (CodigosEliminar.Contains(Codigo))
                Codigos.Remove(Codigo);
        }
    }

La idea es hacer una copia de la colección en un ArrayList que queda referenciada a la colección original y se recorre una y elimina de la otra

Explicación visual de SQL Joins

Octubre 23, 2007 :: Posted by - Emilio Torrens :: Category -

Un artículo en Coding Horror que me ha gustado mucho que explica de forma intuitiva y gráfica los joins en SQL.

 A Visual Explanation of SQL Joins

PLINQ (PFX) o LINQ en paralelo.

Octubre 22, 2007 :: Posted by - Emilio Torrens :: Category - ,

Microsoft esta trabajando para sacar a la luz PLINQ también conocido como Parallel LINQ. Tecnología que añade a LINQ mediante extension methods la potencia de la ejecución multihilo de forma transparente.

 

Más información:

• PLINQ is coming up soon

• Programming in the Age of Concurrency – Anders Hejlsberg and Joe Duffy: Concurrent Programming with PFX