Friday, June 27, 2008

Mejoras a XTE

He subido un nightybuild de XTE para codeplex. El próximo release será la versión 1.0. La intención de esta liberación es de mostrar un pedacito de las posibilidades de edición en runtime que tendrán la aplicación y que actualmente están en proceso de refactorización.

Explorador de Arboles (Tree Explorer)

Implementación de arboles de expresiones mutables (inspirado en MetaLinq), + adelante un post específicamente sobre esto.

Interfaz de edición similar a la que ofrece Visual Studio.

 

Graficador de funciones (Function Landscape)

Visualización para funciones que devuelvan Single (float).

Navegabilidad a través de los ejes (Para poner el inicio de las coordenadas en la posición del mouse: Click Derecho).

Zoom.

Compiladores de expresiones

CSharpExpCompiler

Expression<Func<int,int>> exp = (x) => x + x

CSharpXExpCompiler

int (int x) => x + x

He dividido estas funcionalidades en tres ensamblados de manera que será mas fácil reutilizar los componentes. En particular la librería XTE.Lib tiene una interesante cantidad de métodos extensores que a más de uno podrían serles útiles.

Wednesday, June 18, 2008

IntellSense Bug

Four days ago while I was working on LINQ I found an error of VS2008's IntellSense. After notifying it at the Microsoft Connect site, I was ready to post a comment  about this issue. Before we see how to reproduce this error I have to say that I can see it because I read Jon Skeet's C# book in the morning.

By definition, it is possible to have an extensor method of extensible type T and a static method in T that have the same signature. We should remember that an extension method is pure sintactic sugar, the this modifier makes the method get tagged with System.Runtime.CompilerServices.ExtensionAttribute if it complies with the other rules, thus, this is just a simple method.

It's in this situation where IntellSense gets confused. Let's reproduce it.

 public class A
{
public static void Method(A obj){Console.WriteLine("instance");}
public static void Foo() { }
}

public static class AHelper
{
public static void Method(this A obj) { Console.WriteLine("extension");}
}

static class Program
{
static void Main()
{
A objA = new A();
objA.Method();
Console.Read();
}
}

At the second instruction of Main method, if you activate the IntellSense's engine after you type the punctuator (".")  you will see how the Method doesn't have the expected icon, and neither does the tooltip beginning with "(extension)":



Once finnish the writing the name we could see how its now recognized as an extensions method by IntellSense:



If we erase the static method of the class, the extension method is redeemed.


See you soon bloggers :)

Bug en IntellSense

Hace como 4 días mientras trabajaba con LINQ le encontré un fallo al IntellSense de VS2008. Tras notificarlo en el sitio Microsoft Connect me dispongo a comentarlo en este post. Antes de empezar a ver como reproducir este error del IDE de C# debo decir que pude percatarme de el por haber leído en la mañana el capitulo sobre el tema en el libro de Jon Skeet sobre C#.

Por definición es posible tener un método extensor de tipo extensible T y un método estático en T que tengan la misma firma. Recordemos que un método extensor es puro azúcar sintáctico, el modificador this hace que se marque un método que cumpla las características con el atributo  System.Runtime.CompilerServices.ExtensionAttribute, a los efectos es un método como otro cualquiera.

Es en esta situación donde IntellSense se confunde. Vamos a reproducirlo:

 public class A
{
public static void Method(A obj){Console.WriteLine("instance");}
public static void Foo() { }
}

public static class AHelper
{
public static void Method(this A obj) { Console.WriteLine("extension");}
}

static class Program
{
static void Main()
{
A objA = new A();
objA.Method();
Console.Read();
}
}

En la segunda instruccion del metodo Main, si usted activa el motor de IntellSense luego de haber escrito el punctuator (".") vera como el metodo Method no tiene el icono esperado, tampoco el tooltip comienza con "(extension)":



 


Una vez terminado de escribir el nombre del método podemos ver como ya es reconocido por IntellSense como método extensor:



Si borramos el método estático de la clase el método extensor quedaría reivindicado:



Hasta otra bloggers :)

Friday, June 06, 2008

XTE New Version


He subido nuevos cambios a XTE, podeis verla en CodePlex.
En los proximos dias seguire comentado las mejoras y nuevas features.
Estare encantado de oir cualquier clase comentarios sobre la solucion!
Os dejo otra captura, esta vez mostrando una funcion entera que utiliza operaciones bitwise:






Blogged with Flock

Wednesday, June 04, 2008

He leido: C# 3.0 Design Patterns

C# 3.0 Design Patterns



El viernes llego
a mis manos este magnífico libro sobre patrones. Un regalo para mi cumpleaños
que fue el sábado 31!(y dale con mi cumpleaños).



Debo reconocer que al inicio del año quería escribir acerca de este tema en el
mundo .NET. Con la premisa de poner ejemplos de el uso de patrones en las
clases más importantes del framework. Por lo que cuando lo vi me dio una
especie de melancolía creativa. Ciertamente la sensación se esfumo tan pronto
como empecé a revisar el índice.



Si no sabes de patrones deberías leerlo, si sabes también. Estoy al tanto de la
existencia de otros libros sobre Patrones en el mundo .NET. Este es diferente, además
de estar ligado a C# 3.0 los ejemplos están actualizados con el día a día en
internet y .NET. En conclusión, un libro que deberías tener en la sección de
arquitectura de tu biblioteca.



Por último
recalcar en la importancia de los Patrones. Si bien es cierto que los conocimientos
de algoritmia dotan al programador de una serie de armas para atacar problemas
variados. En un nivel similar de importancia se encuentran los patrones de diseño,
conociéndolos:



  • Modelaras tu solución
    incorporando criterios que han probado su utilidad y que son los
    suficientemente flexibles para que pongas tu granito de arena.
  • Podrás
    comunicarte con otros programadores de una manera mucho más efectiva.





Blogged with Flock

Monday, June 02, 2008

Presentando XTE Alpha

Ciertamente la idea de poner un programa aun incompleto no me hace mucha gracia, pero dado que pase gran parte de mi veinte cumpleaños haciéndolo (bastante geek verdad?) y estoy bastante satisfecho del código escrito hasta ahora me apetece compartirlo en mi blog.



El programa es acerca de los arboles de expresiones presentes en C# 3.0: manipularlos y optimizarlos para su uso en distintos escenarios. Todo de manera visual.



La idea de hacer este programa me surgió mientras leía los ejercicios que propone Octavio Hernández en su libro C# 3.0 y LINQ.



El viernes publico la primera versión beta para que lo probéis.



Si quereis descargarlo, mirad el primer release en CodePlex: http://www.codeplex.com/xte/



Aqui les dejo dos capturas:



Tree Explorer



Function LandScape