2008-03-24

Frase célebre

Hace mucho que no posteo nada, asi que voy a usar una frase célebre de relleno:

Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter

Eric Raymond

Z

2008-03-03

El eslabón que faltaba entre el .NET Framework y los browsers: Volta

Hace un mes, mas o menos, mi amigo Johnny me había comentado al pasar sobre un compilador de MSIL a Javascript que estaban haciendo en Microsoft, pero no le di mucha importancia. Pensé que era uno de esos proyectos locos que solo servían como prueba de concepto o similar... hasta que lo vi.

Microsoft Volta es un proyecto (todavía en estado alpha o, a lo sumo, pre-beta) de Microsoft Live Labs para poder desarrollar aplicaciones web multicapa sin tener que preocuparse por aprender nuevos lenguajes, lidiar con problemas para hacer javascript cross-browser y varias otras cosas.
En cierta manera se puede ver como la respuesta de Microsoft al Google Web Toolkit, aunque todavía bastante menos maduro y obviamente, usando .NET en vez de Java.

Un ejemplo de lo que nos permite hacer Volta es hacer el diseño en HTML de una página, codificar todo su comportamiento desde cualquier lenguaje que trabaje con el .NET Framework y finalmente, el compilador de Volta generará todo el código y las assemblies necesarias para correr todo lo que se quiera correr desde el cliente, y las clases que deban ser ejecutadas desde el servidor serán llamadas de forma transparente, sin tener que agregar nada aparte de un atributo en la clase, indicándolo.

Nota antes de intentar usar esto: para poder crear nuevos proyectos de Volta, es necesario tener instalado Visual Studio 2008 y el Tecnology Preview de Volta. Tener en cuenta que es una de las primeras versiones que salen fuera de Microsoft como preview y aún contiene varios bugs y limitaciones.

Nota sin mucho sentido: como todavía no hay version del Copy Source as HTML para Visual Studio 2008, los ejemplos que voy a mostrar los voy a pegar como imágenes. Perdón por eso, pero hacer que se vea bien el codigo posteado en blogger es una tarea bastante ardua y no tengo muchas ganas de perder tiempo en esto :D

A continuación les muestro una aplicación de ejmplo que hice, la cual consiste en un simple Chat:

Mi idea era la siguiente: hacer una página que tenga 2 textboxes, uno para el nick y otro para el mensaje a escribir, un boton para enviar el mensaje y un div donde se vaya escribiendo el texto del chat.

Para empezar, creé el html de la página:
1

Una vez hecho esto, codifiqué la clase que representa esta página y obtuve los controles desde código manejado para poder usarlos:
2

En el evento Click del boton de la página hice que se llame al método _btnSend_Click, el cual se encarga de llamar al metodo AddMessage de la clase ChatState, la cual es la encargada de mantener el estado del chat, y luego agrega el nuevo texto al div donde se muestra la conversación:
3

Para poder mostrar también lo que el resto de la gente escribía en el chat, necesitaba poder pedirle al servidor que me actualice el contenido del div, por lo que creé un Time que se de dispare cada 5 segudos y llame al metodo UpdateChatBox, el cual se encarga de pedir las nuevas lineas agregadas al chat usando el método GetResponse de la clase ChatState y mostrarlas:
4

Como se habrán dado cuenta, la gran mayoría de todo este código debería correr en el cliente, excepto tal vez por la clase ChatState, la cual debería ejecutar en el servidor, conservando el estado de la conversación. Para hacer esto lo único que hay que hacer es ir a la clase ChatState, hacer click derecho sobre el nombre, ir a Refactor y hacer click en Tire-split to run at origin. Haciendo esto, se le agregará el atributo RunAtOrigin, lo que le indica a Volta que ese código debe ser ejecutado en el servidor y no en el cliente:
5

Finalmente, tocando F5 se dispara el browser elegido para debug (se puede usar IE o Firefox) y... listo! Estamos debuggeando nuestra aplicación volta!

Aca muestro un ejemplo de la aplicación funcionando:
6

Código del ejemplo: aca.
Hasta aca llega el post de hoy. Cuando haga algo mas veo de postearlo.

Z

2008-02-24

Me tomo en whisky y empiezo a nombrar especies?

La idea nombrada en el título de este post es lo único que me viene a la mente sobre el momento en que los científicos nombraron "Caballito de mar" al caballito de mar.

Se me ocurren dos posibles conversaciones:
Cientifico A: ... estás loco. Nadie va a ser tan boludo. Esta bien que la mayoría de la gente es bastante ignorante. Pero supongo que de esta si se darán cuenta.

Científico B: Vos haceme caso. La gente del populacho son un grupo de ovejas decerebradas. Vos decile que este bicho inerte es un caballo y lo van a comprar como billete del gordo de navidad...


O bien, la otra posibilidad:
Luego de haberse tomado 2 ginebras, 5 fernet y 4 whiskys...

Cientifico A: Che, encontré un animal de 15cm de largo, con caparazón ocificado, cabeza tupular, carente de dientes y ninguna extremidad...

Cientifico B: Un caballo!


Basado en una reflexión original de Luis Piedrahita

Hasta la próxima!
Z

2008-02-21

Somos el único animal suficientemente idiota...

Se dice que la estupidez humana no tiene límites, ya que somos el único animal suficientemente idiota para tropezar 2 veces con la misma piedra. Básicamente, intentar dos veces lo mismo y esperar distinto resultado

Ayer confirme mi humana estupidez.

Hace ya unos meses había tratado de utilizar la salida VGA de la notebook desde OS X sin mucho éxito. En el camino, casi destruyo la instalacion de mi máquina ya que me quedó lockeada una resolucion fea y no se veía nada en la máquina. Finalmente pude zafarla y volver a hacerlo andar.

Ayer volví a hacer lo mismo esperando tener éxito esta vez (iluso...). Obviamente, volví a destruir la configuración de la resolución de la maquina. El problema es que esta vez de tantas cosas que toque, dejé al sistema imposible de bootear. Por suerte pude levantar la particion desde el DVD de instalacion de OS X, guardar todos los datos importantes en un Pendrive y finalmente... reinstalar :(

Conclusión: me terminé durmiendo a las 3.30 de la mañana mientras reinstalaba todo.... por boludo.

Hasta la próxima!

Z

2008-02-07

Un pequeño paso para el hombre, un gran salto para el desarrollo .NET en OS X: La nueva version de Mono incluye el MonoDevelop para Mac!

Gente, desde hace unos dias, el paquete de instalación de Mono para OS X incluye una pequeña sorpresa: MonoDevelop!

Finalmente los usuarios de OS X tenemos un entorno de desarrollo decente, con completado de codigo y toda la bola para .NET!

Screenshot:
MonoDevelop en OS X

Hasta la próxima!
Z

PD: pese a que ya no va a ser necesario, voy a ver si le programo una interfaz en GTK# o similar al ZSense para poder correrlo en OS X sin depender de Windows.Forms

2008-01-20

Intellisense de bolsillo (y multiplataforma): ZSense!

Dado que la gran mayoría de mis amigos están disfrutando de sus vacaciones, ya sea en la costa, el sur o en el exterior, este fin de semana fue bastante aburrido: me quedé en casa practicamente sin hacer nada. Todo parecía seguir asi hasta que me vino una idea a la cabeza...

Desde que instalé OS X en la laptop estoy queriendo desarrollar aplicaciones .NET usando el port de Mono que hay para OS X. El gran problema que tengo es que al no haber port de MonoDevelop (o al menos, no hay sin tener que recompilar medio universo y bajar nosecuantas librerías extra...) termino levantando una VM con Windows XP y el Visual Studio. No pido tener un IDE que se integre con el debugger ni mucho menos, sino que pido algun editor que tenga IntelliSense para no tener que estar programando con la ayuda abierta constantemente.

Aqui es donde aparece la idea que me vino el día de hoy: lo que hay que hacer es tener el IntelliSense dentro de una aplicacion hecha en .Net, asi, cuando quiera desarrollar, la puedo usar como referencia.

Sin mas presentación, les entrego a... ZSense!

Este es un proyectito bastante chico que hice hoy (pero planeo seguir mejorando con el tiempo) que recibe una linea de código con tipos de .Net y va mostrando en una lista las opciones disponibles para seguir escribiendo la linea.

Esta primera versión tiene algunos detalles ásperos: el tipo inicial debe estar escrito entre comillas dobles. Por ej, una linea válida sería: "System.Int32".GetHashCode().CompareTo(System.Int32)
Como pueden ver, la manera de indicar que sobrecarga de un método se quiere usar es escribiendo el tipo de dato de cada parámetro, separados por comas.

Si se quieren usar mas assemblies aparte de las predeterminadas, se pueden cargar en la lista de la izquierda.

Para mas detalle, vean el código! (si, ya se... hay unas cuantas cosas que podrían estar mejor - como el parsing - pero lo quería sacar andando rápido. Ya tendré tiempo para mejorarlo).

Les dejo aca la versión inicial. En un rato lo subo a Codeplex asi voy dejando ahi las últimas actualizaciones.



ZSenseMultiPlatform
Screenshot, corriendo el mismo ejecutable en OS X con Mono (todavía hay algunos problemas, pero anda...) y en Windows con VMWare Fusion


Un saludo!

Z

2008-01-18

Problema con parametros de tipo string de longitud 0 en Oracle usando System.Data.OracleClient

Haciendo unas pruebas para una migración a Enterprise Library, nos encontramos con un problema (no se si intencional o no) utilizando las clases de acceso a datos contra Oracle que trae .NET Framework 1.1.

Supongamos que uno quiere hacer la siguiente consulta:

SELECT * FROM Countries WHERE Country_id = :c_id



Si usamos el siguiente código, la aplicacion generará una excepcion por tener un parametro de tipo string con longitud 0:
using (IDbConnection conn = new OracleConnection("Password=hr;Persist Security Info=True;User ID=hr;Data Source=localhost"))
{
    conn.Open();
    using (IDbCommand command = conn.CreateCommand())
    {
        command.CommandType = CommandType.Text;
        command.CommandText = "SELECT * FROM Countries WHERE Country_id = :c_id";
 
        IDbDataParameter param = command.CreateParameter();
        param.ParameterName = "c_id";
        param.DbType = DbType.AnsiStringFixedLength;
        param.Value = String.Empty;
        command.Parameters.Add(param);
        using (IDataReader reader = command.ExecuteReader())
        {
            DumpReader(reader);
        }
    }
    conn.Close();
}


El error es: Parameter 'c_id': No size set for variable length data type: String.

Para solucionar esto tenemos dos opciones:

1. Usar la librería provista por Oracle para .NET para acceder a los datos. Esta librería maneja de forma correcta los Strings vacios. (al menos es asi usando la última version de la librería. Me falta confirmar que con versiones anteriores tambien funcione)

2. Enviar DbNull.Value como valor del parametro, en vez de String.Empty. En otro blog leí que Oracle maneja de la misma manera tanto a los strings vacíos como a los NULL. Sin embargo yo no estoy 100% seguro de que esto sea asi, asi que de tener confirmación o refutación de esto, por favor haganmelo saber! De todas maneras, mi recomendación es usar ODP.Net

Hasta la próxima!

Z

2008-01-11

Como reconocer a un buen programador?

Dejo aca el link a un post que apareció en Slashdot sobre como reconocer a un buen programador. Muy interesante...

http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/

Si el sitio no responde intentenlo mas tarde, ya que fue recientemente slashdotted (sitio caido debido a haber aparecido en slashdot)

Z

2008-01-05

Conversor de Cbr a Cbz

Hace unos dias me baje unos comics de X-Men y la mayoría estaban con formato Cbr (formato para comics, comprimido con rar). El problema es que el programa que uso en OS X para abrir comics suele tener problemas con algunos archivos comprimidos con rar. Sin embargo, esto no sucede con su contraparte en formato zip (archivos Cbz). Por lo tanto, hice un pequeño programa en C# que agarra todos los archivos CBR en un directorio y los recomprime usando ZIP, creando asi la version CBZ de los mismos. Les dejo aca el programa y el fuente por si a alguien le es útil o le interesa.

Z

2007-12-28

Nombres de versiones

Éste es un mal que afecta a, por lo menos, el 97% de los desarrolladores: siempre que pensamos que una versión "supuestamente" cerrada es la final, aparece una nueva corrección que contradice la suposición anterior. De esto se desprende la siguiente nomenclatura para los entregables:

Producto_1.0.zip
Producto_1.0.Final.zip
Producto_1.0.FinalArreglado.zip
Producto_1.0.FinalFinal.zip
Producto_1.0.FinalUsarEste.zip
Producto_1.0.LOS.ANTERIORES.NO.SIRVEN.zip
Producto_1.0.LOS.ANTERIORES.NO.SIRVEN.FIXED.zip

Y la lista continua...

2007-12-21

jPod: Toxic Meetings

Cita extraida del libro jPod, de Douglas Coupland:

Here’s my theory about meetings and life; the three things you can’t fake are erections, competence and creativity. That's why meetings become toxic. They put uncreative people in a situation in which they have to be something they can never be. And the more effort they put into concealing their inabilities, the more toxic the meeting becomes. One of the most common creativity-faking tactics is when someone puts their hands in prayer position and conceals their mouth while they nod at you and say, "Mmmmmm. Interesting." If pressed, they’ll add, "I’ll have to get back to you on that." Then they don’t say anything else.


La proxima vez que le mandes una invitación a una reunion a alguien... pensalo dos veces. Puede ser que por ésto, ese alguien muera un poquito por dentro :)

2007-12-18

Heladera último modelo: Instalando Leopard en la Laptop

Después de unas semanas usando Mac OS X 10.4.10 (Tiger) decidí que era hora de ir un paso mas allá e instalar Leopard (10.5).

Haciendola corta, les comento lo que hice:

1. Instalar Tiger.

2. Una vez que esta instalado, upgradearlo a Leopard (obviamente, no formatear en el proceso). Yo usé el DVD de ToH RC2 que esta dando vueltas por la red.

3. Una vez que esta todo andando, instalar el PC EFI, que nos permitirá instalar las actualizaciones de OS X sin usar un kernel patcheado, sino que el original de Apple (vanilla). Pueden ver como hacerlo aca. (usar la ultima version. Yo use la 8.0)

4. Usar el system update y actualizar todo (ahora si, sin miedo gracias al PC EFI)

5. Para los drivers de video, usar estos archivos.

6. Para usar teclado en español, usar este layout.

7. El resto, veanlo del post anterior.

Un saludo!

Z

PD: Hoy salió un DVD llamado IATKOS que, al parecer es una recopilacion mas bonita para instalar Leopard desde 0, con PC EFI y toda la bola. Si alguien la prueba, comenteme que onda.

2007-12-06

Abajo las PCs, arriba las heladeras: Usando Mac OS X en una Hackintosh

Por algun motivo, el cual nunca sabré, me volvió a picar el bichito de curiosidad sobre instalar una versión hackeada de OS X en mi ThinkPad T60p para ver que era eso que siempre asocié mas a un electrodoméstico que a una computadora, y aún asi tanta gente me recomendaba.

Esta vez, baje una versión un poco mas actualizada del sistema: Mac OS X Tiger 10.4.10 (la última vez habia bajado la 10.4.8).

A diferencia de lo que se puede leer en posts anteriores, una vez instalado el sistema operativo (siempre hablando de mi disco externo) no fue necesario entrar en modo consola y borrar extenciones o cosas similares: todo anduvo relativamente bien. Recalco el relativamente ya que el sistema recien instalado se parecía mas a un XP recien instalado que a la felicidad computacional la cual me habían comentado: la resolución era de 1024x768, no habian drivers de video, sonido o wireless. Aunque sea, OS X reconoció las particiones NTFS donde tengo Windows XP instalado y las montó (como solo-lectura). Lo que no tuve problemas para usar out-of-the-box fue la placa de red, a la cual le conecté el cable e instantaneamente recibí IP.

Bueno, manos a la obra. Para poder usar esto necesitaría, como minimo, poder escuchar música, tener red sin depender de un cable, escribir en mis particiones NTFS (donde tengo todo lo que uso diariamente) y por último, pero no menos por eso, tener una resolución decente con aceleración de video por hardware.

1. El sonido: esto fue bastante fácil, ya que la primera busqueda que hice en InsanelyMac (sitio indispensable para cualquiera que desee tener su Hackintosh. www.insanelymac.com) pude encontrar el driver. Pueden bajarlo desde aca.

2. Red inalámbrica: las cosas empezaban a ponerse feas en este punto. Por lo que estuve leyendo en los foros, no existen drivers para la placa de red inalámbrica que traen las Thinkpad T60p y similares. Hay gente desarrollandolos, pero el proceso es lento y parece que todavía falta bastante hasta que podamos hacer uso de el. Por suerte para mi, hace un tiempo me compré un MSI USB Wireless Stick. En la página de MSI no dicen nada de un driver para OS X. Sin embargo, buscando por internet me enteré de que el stick es practicamente igual a otro Ralink o algo asi... La cosa es que ese si tiene driver y funciona a la perfección!. Dejo aca el driver para bajarlo.

3. NTFS: Esto fue probablemente lo mas facil de todo. Dado que abajo del OS X hay un BSD, parece que resulta bastante facil portar muchas aplicaciones hechas para Linux hacia el sistema operativo de Mac y una de ellas es FUSE, herramienta que permite cargar drivers para filesystems (como el de NTFS) en espacio de usuario. Teniendo Mac-FUSE y el driver NTFS-3G para Mac, ya estaba solucionado el asunto de las particiones.

4. El video: La correcta configuración de la placa de video fue, por mucho, lo mas complicado que tuve que hacer para tener funcionando el sistema operativo. El gran problema gran es que la T60p trae una ATI FireGL V5250 como placa de video, la cual no posee drivers para Mac. La única esperanza era encontrar drivers para la x1700 que, basicamente es la misma placa, pero con otro ID. Tampoco hay drivers. Después de mucho tiempo, mucha investigación y edicion de archivejos en hexa, pude armar el driver que necesitaba, modificando unos drivers hechos para la X1600 (creo) que aparecieron en InsanelyMac. Para los que lo necesiten, dejo aca para bajar las extensiones que hay que agregar/sobreescribir, para que puedan tener la placa de video funcionando con aceleración por hardware y 1680x1050 de resolución. Una vez reemplazadas, hay que ir a la consola y modificar los permisos y ownership de estos archivos (que tienen que estar en /System/Library/Extensions).
Para modificar los permisos hacemos: chmod -R 755 ExtensionAModificar
Para modificar el ownership hacemos: chown -R 0:0 ExtensionAModificar
Finalmente, hacemos: touch /System/Library/Extensions para avisar que cambio el directorio y listo! Tenemos el video andando.

Si haciendo algo con drivers o similar llevan a la maquina a un estado que no pueda terminar de arrancar, presionen F8 al arranque y cuando le pide las opciones para booteo pongan: -v -s -f y los va a llevar al modo consola, donde pueden volver todo al estado anterior.

Con esto finalice la instalación de drivers. Lo que quedaba por hacer era empezar a instalar soft y a ver que se podía hacer. En este momento ya van 3 días desde que lo instalé y, la verdad, no dan ganas de volver!!!

Software que les recomiendo:
- Vmware Fusion: versión de Vmware para OS X, con el feature Unity, el cual permite "sacar" ventanas de la maquina virtual y usarlas como si fuesen una ventana mas de OS X. Muy groso!
- Adium: cliente multiprotocolo de IM. Esta muy bueno, pero todavía estoy decidiendome si uso solo ese, o el Messenger para Mac (que es medio feucho) y el iChat para GTalk.
- VLC: excelente reproductor multimedia. Dale una feta de jamon y te la saca como audio y video. Se banca cualquier cosa.
- Firefox: en general, uso Safari como browser, pero alguno sitios como Blogger o GMail o Managerzone no andan del todo bien o con todos sus features ahi, asi que el viejo y querido lobo de fuego viene al rescate.

Software que NO les recomiendo, pero que es necesario:
- Microsoft Office 2004: anda lento, mal y es horrible. Sin embargo, necesito el Word para editar varios documentos en el laburo y la integración que tiene Entourage (version Mac del Outlook) con Exchange es un poco mejor que la de las herramientas que trae OS X (tal vez no el mail, pero el address book no lo pude hacer sincronizar con exchange sin Entourage). Otro gran problema es que no hay Universal Binaries de Office 2004, por lo que es bastante mas lento que el resto de las aplicaciones. Por suerte, dentro de un mes ya sale Office 2008. Esperemos que sea bastante mejor que éste.

Bueno, con esto cierro el post (que, de hecho, fue escrito desde OS X, usando internet inalámbrica, mientras escucho musica en el iTunes :D). Cualquier duda consultenme y voy a hacer lo posible en darles una mano.

Z en la heladera, digo, OS X :D

2007-11-21

Windows Vista me destruyó la PC 2 veces en menos de 2 días y otra vez… vuelvo a XP

El domingo, luego de instalar una actualización que se bajó de Windows Update, mi PC dejó de funcionar. Restauré una imagen de Ghost que tenía creada, pero se ve que algo malo tenía, porque no andaba Windows Update y tiraba algunos errores, por lo que decidí reinstalar. El lunes estuve todo el dia instalando Windows Vista y bajando drivers. Una vez que estuvo todo andando, abrí los updates y bajé todo lo que había para actualizar y… reinicie. Esa fue la última vez que Windows Vista pudo arrancar.

Teniendo mas ira que un ejercito de vikingos en puerta de vírgenes, decidí contar hasta 10, pensar en la tumba de quien no terminó de probar los updates y agarrar la imagen de Windows XP.

Otra vez en el viejo y querido OS lanzado en 2001 por Microsoft, espero terminar mis idas y venidas por Vista y XP, al menos hasta que salga el SP2 de Vista.

PD: Encontré para usar con XP un programa que simula (y muy bien) el Exposé (o como se escriba) de OS X. Lo pueden conseguir en http://www.reflexvision.net/

Z

2007-11-08

Post descolgado: Para los fanas de DragonBall y nostálgicos del Lemmings… LBZ3D!

Gente, les dejo aca un excelente jueguito de pelea en 3D basado en los personajes de DragonBall Z… hechos lemmings!

Es medio exigente con la placa de video, pero el juego esta muy bueno: HomePage

Z

2007-11-05

Copy as HTML en Visual Studio

Para toda la gente que tenga un blog o similar y tenga que pegar código, le recomiendo que use el CopySourceAsHtml y a olvidarse de los problemas de Blogger, Word 2007 o Live Writer cuando pegás un pedazo de código!. (Gracias Mariano!)

Lo pueden bajar de aca.

Z

Accediendo dinamicamente a WebServices

Hoy estábamos viendo con uno de los chicos del laburo que necesitaba poder acceder a distintos WebServices (desconocidos para el en tiempo de compilación) y queríamos encontrar una forma cómoda de hacerlo.

Después de buscar un poco, encontramos una solución que pareció bastante piola: usando el WSDL del WebService, generar la clase proxy en runtime y usar los WebMethods por Reflection. Está claro que no es la solución óptima en términos de velocidad, pero con unas clases helper que hice, resulta muy cómodo para usar.

El siguiente código lee el WSDL y genera la nueva clase en runtime:




try

{

    //Get the web service description

    Uri uri = new Uri(wsdlUrl);

 

    WebRequest webRequest = WebRequest.Create(uri);

    System.IO.Stream requestStream = webRequest.GetResponse().GetResponseStream();

    ServiceDescription sd = ServiceDescription.Read(requestStream);

    string sdName = sd.Services[0].Name;

 

    //Create the ServiceDescriptionImporter

    ServiceDescriptionImporter sdImporter = new ServiceDescriptionImporter();

    sdImporter.AddServiceDescription(sd, String.Empty, String.Empty);

    sdImporter.ProtocolName = "Soap";

    sdImporter.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;

 

    CodeNamespace codeNamespace = new CodeNamespace(DefaultNamespace);

    CodeCompileUnit compileUnit = new CodeCompileUnit();

    compileUnit.Namespaces.Add(codeNamespace);

 

    //Import the ServiceDescription

    ServiceDescriptionImportWarnings warnings = sdImporter.Import(codeNamespace, compileUnit);

 

    if (warnings == 0) //No warnings

    {

        CSharpCodeProvider codeProvider = new CSharpCodeProvider();

        codeProvider.GenerateCodeFromNamespace(codeNamespace, new StringWriter(), new CodeGeneratorOptions());

 

        //Compile the assembly

        string[] assemblyReferences = new string[2] { "System.Web.Services.dll", "System.Xml.dll" };

        CompilerParameters param = new CompilerParameters(assemblyReferences);

        param.GenerateExecutable = false;

        param.GenerateInMemory = true;

        param.TreatWarningsAsErrors = false;

        param.WarningLevel = 4;

 

        CompilerResults results = codeProvider.CompileAssemblyFromDom(param, compileUnit);

        Assembly assembly = results.CompiledAssembly;

 

        Type[] types = assembly.GetExportedTypes();

        //Get the generated Type

        return new DynamicProxyClass(types[0], GetMethodNames(sd.PortTypes[0].Operations));

    }

    else

    {

        throw new Exception(String.Format("Importing has warnings: {0}", warnings.ToString()));

    }

}

catch (Exception ex)

{

    throw new Exception("Couldn't generate proxy class (see inner exception)", ex);

}



Acá se puede ver que lo que devuelvo es una DynamicProxyClass. Esta clase lo que hace es wrappear la clase generada y exponer solo los métodos del WebService, sus tipos de retorno y sus parámetros.

Si les interesa jugar con esto, dejo para bajar el código completo de la solución.


Z

2007-10-08

C# 3 y Linq – Parte 2

Les dejo la segunda parte del artículo, donde se ven más ejemplos y una implementación de Linq hecha sobre una clase propia.

Lo pueden bajar de acá.

¡Hasta la próxima!

Z

C# 3 y Linq – Parte 1

Hace unos meses, con Ariel Neisen y Javier Argüello hicimos un artículo explicando los nuevos features incluidos en C# 3 y Linq para publicar en la revista .Code. El artículo ya había sido enviado, sin embargo hace unos días nos enteramos de que la publicación de la revista fue suspendida (aparentemente for good). Como el artículo ya estaba hecho, decidí publicarlo en el blog.

La primera parte hace una introducción a las nuevas herramientas del lenguaje y a Linq. La pueden bajar de acá.

En un rato estaré publicando la segunda parte.

¡Hasta la próxima!

Z

2007-09-03

SvnBridge: TFS a través de un cliente de SubVersion

Gente, para quienes tengan que usar TFS en sus proyectos, pero estén acostumbrados a herramientas para control de versión menos invasivas como el SVN o CVS, les recomiendo el SvnBridge: un programita que pone un mini-server de SVN en la maquina local, que lo único que hace es wrappear los comandos de SVN a otro server de TFS. Yo lo estoy usando para subir las cosas a Codeplex. Parece funcionar un poco lento, aunque no se si es por el server de TFS o este programa. Muy bueno

Pueden obtener el código fuente desde acá: http://www.codeplex.com/SvnBridge

Saludos!

Z