Mostrando las entradas con la etiqueta Mono. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Mono. Mostrar todas las entradas

domingo, septiembre 26, 2010

Manos, un framework ligero para aplicaciones web en .NET/Mono

Hace unos días platicando con @fcastellanos, me hizo notar un nuevo framework para el desarrollo de aplicaciones web para .NET/Mono, el framework es Manos.

Manos esta siendo desarrollado por el hacker de Mono Jackson Harper, quien comenta en su manifesto que le gusta desarrollar aplicaciones web y le gusta el lenguaje C#, pero no le gusta ASP.NET, cree que ASP.NET en general hace que las cosas sencillas sean muy complicadas y por eso decidió crear Manos y dejar a ASP.NET fuera de la ecuación.

Los objetivos de Manos es ser un framework:

  • Escalable y de alto rendimiento
  • Con un sistema "pipes" que permita conectarse y extender cualquier punto de la solicitud HTTP
  • Un sistema de rutas facil y simple, por medio de concordancia de texto y expresiones regulares
  • Auto conversion de parámetros en la ruta o post
  • Que funcione con HTML5 por omisión
  • Un sistema de plantillas basado en HTML
  • Linea de comando simple para la creación de aplicaciones, construcción y "hosteo" de aplicaciones, sin necesidad de IDEs
  • Basado en la reutilizacion de componentes, modular y facil de probar.
Si estuviese leyendo estos puntos y no sabría que se esta hablando de C# y .NET, pensaría que me están describiendo Rack y muy probablemente la combinación con Sinatra, pero no es así.

Estuve viendo los ejemplos y no puedo evitar pensar en términos de Rack/Sinatra, por ejemplo:

$ manos -init myapp # Crea un directorio con mi aplicación con jquery, algunos css y el modulo .cs

En nuestro modulo podremos escribir nuestra aplicación "Hola mundo" tan fácil como:

Get ("/", ctx => ctx.Response.Write("Hola mundo!"));

Lo compilamos, por ejemplo con Mono:

$ gmcs -target:library -out:myapp.dll myapp.cc StaticContectModule.cs

Y finalmente dentro del directorio ejecutamos

$ manos -server

Navegamos a localhost:8080 y nuestra aplicación debe de responder.

Increíblemente sencillo y facil, en el sitio de Github hay un ejemplo mas elaborado, junto con 2 tutoriales sobre Manos, tutorial1 y tutorial2.

Por cierto Manos es Open Source con licencia MIT X11, bastante permisiva.


lunes, febrero 15, 2010

Migrar aplicación de ASP.NET Webforms a Mono

Hace un par de días me preguntaron, que se necesita para migrar una aplicación de ASP.NET Webforms a Mono y ejecutarla en un ambiente Linux.

Primeramente hay que conocer que según la pagina de ASP.NET Webforms de Mono, ASP.NET Webforms 2.0, ASP.NET Ajax y algunos controles 3.5 están soportados. Pero esto no es suficiente para algunas aplicaciones, ya que es posible que usen controles de 3ros. que no funcionan o funcionan correctamente en Mono, otro punto importante es que hay que recordar que los ambientes Linux son sensitivos a minúsculas/mayúsculas y si nuestra aplicaciones tiene archivos cuyos nombres están indistintos en minúsculas/mayúsculas muy probablemente vamos a tener problemas.

La opción segura para saber si nuestra aplicaciones puede funcionar o no en Mono es ejecutar MoMA, una aplicación para Windows que analiza nuestra aplicaciones ASP.NET Webforms y nos puede decir si todo esta bien o hay algo que no esta soportado en Mono.

Si nuestra aplicación no tiene ningún problema de acuerdo al reporte de MoMA, el siguiente paso es determinar si nuestra base de datos, usualmente MSSQL, server va a seguir en Windows o si también se va a migrar a MySQL o Postgresql.

Obviamente si se decide migrar la base de datos hay dos tareas importantes a realizar, la primera es convertir el esquema de MSSQL Server a la base de datos destino; la segunda tarea es que si nuestra aplicación hace uso de ADO.NET y estamos usando directamente las clases del namespace System.Data.SqlClient, vamos a tener que reemplazar esos objetos por los correspondientes a la base de datos destino.

Para MySQL hay que descargar el Connector/NET, el cual es un librería 100% .NET para conectarse a bases de datos MySQL. Si vamos a usar Postgresql, hay que descargar el Npgsql, librería 100% .NET para acceder a Postgresql.

SI ya llegamos hasta este punto y queremos publicar nuestra aplicación para que los usuarios se puedan conectar a ella; para tal efecto podemos utilizar el servidor Apache y el modulo Mod_Mono, que permite a Apache "servir" aplicaciones .NET.

Adicionalmente si vamos a desarrollar aplicaciones directamente desde Mono, una buena opción es descargar el ambiente de desarrollo llamado MonoDevelop; de esta forma vamos a poder desarrollar, modificar y depurar nuestras aplicaciones.

Sobre como instalar Mono, MySQL, Postgresql y Apache en Linux, va a depender de nuestra distribución, pero generalmente todas cuentan con un sistema de distribución de aplicaciones de donde podemos elegir tales aplicaciones para instalar. Como dato adicional, Ubuntu y SuSe son distribuciones "amigables" con Mono, por lo tanto ambas son recomendadas.http://mono-project.com/


martes, febrero 09, 2010

Pinta, alternativa de Paint para Gtk

Hace unos días me entere de la aplicación Pinta, la cual esta una alternativa sencilla para el dibujo/edición de imagines, desarrollada en Mono, usando como modelo Paint.NET.

Al ser una aplicación Mono basada en GtkSharp y Cairo, es altamente portable, y por lo tanto puede ejecutarse en Linux y OSX.

Una aplicación como esta, me es muy útil para realizar pequeños retoques a imágenes, por lo que procedí a descargarla, pero en la pagina solo existían paquetes para Suse y Ubuntu, ademas de la aplicación en un archivo zip.

Por lo tanto para poder utilizarla en OSX la única forma era ejecutarla desde la terminal, no muy amigable que digamos. Debido a esto decidí crear un Bundle para poder ejecutarla desde mi folder de Aplicaciones.

Le envié el bundle a Jonathan Pobst el Bundle, y a partir de ahora ya es posible la aplicación para OSX e instalarla como "un ciudadano de primera clase".

Pinta apenas esta en su versión 0.1 y le falta mucho camino por recorrer en Linux y OSX, pero aún así esta bastante completa para ser versión 0.1.


viernes, marzo 21, 2008

Código fuente del ASP.NET MVC disponible

El día de hoy Microsoft publico el código fuente del ASP.NET MVC, tal y como lo había anunciado hace un par de semanas. Si e código fuentes esta disponible solo Microsoft va a poder publicar cambios al mismo, es decir, personas fuera de Microsoft van a poder descargar el código fuente, ver como funciona, inclusive corregir errores, pero los cambios no van a poder ser enviados a Microsoft.

La licencia nos permitirá usar internamente una versión modificada del ASP.NET MVC, pero no nos va a ser posible re-distribuir esos cambios, únicamente Microsoft puede distribuir la versión oficial del ASP.NET MVC.

El ASP.NET MVC, es otro paradigma para el desarrollo de aplicaciones Web, paradigmas que han sido implementados en Ruby, PHP, etc. con la ayuda de frameworks específicos para esos lenguajes.

Por cierto el ASP.NET MVC se ha reportado que funciona con Mono, aunque con algunos cambios en las configuraciones, pero posiblemente al tener el código fuentes disponible de; ASP.NET MVC, va a ser relativamente fácil indicarles a los programadores de Mono que falta o que no funciona correctamente para que se corrija en próximas versiones de Mono.


miércoles, febrero 06, 2008

Monodevelop en OSX

Ya en post anteriores había comentado que el equipo de Mono esta trabajando para mejorar el soporte de MWF y GTK# en OSX.

Uno de los objetivos es que ambos Frameworks trabajaran correctamente en OSX, el otro de los objetivos es que las aplicaciones se integraran con el sistema operativo, es decir que no se vieran "extrañas".

El trabajo aun esta en proceso, de hecho el día de ayer se libero una versión de pruebas para OSX.

Las mejoras visibles, sin entrar mucho en detalle son:
- Las aplicaciones MWF no "parpadean" cada vez que obtienen el "focus" o el "focus" es transferido a alguno de los controles de la forma
- Por primera vez se incluyó el ambiente de desarrollo Monodevelop 0.18, el cual corre - dentro de lo poco que lo probado - muy bien.
- Se incluye el programa MOMA que analiza aplicaciones MWF para determinar que clases de las que usa el programa aun no han sido implementadas, ademas de generar el reporte correspondiente.

viernes, noviembre 30, 2007

Video Cast 2

Por problemas al subir el video al sitio de video.google.com, aun no he podido publicar el segundo video cast, aun y cuando esta listo desde principios de esta semana, espero tener un poco de mejor suerte el dia de hoy y quede el video.

miércoles, noviembre 21, 2007

Video Cast 1, Introducción a nueva funcionalidad en .NET 3.5

El primer Video cast esta enfocado a la nueva funcionalidad introducida en .NET 3.5, específicamente se muestra como funciona:
- El acceso automático a propiedades
- La nueva inicialización de objetos

Las herramientas y librerías necesarias u opcionales se listan en este post.

El código fuente de ejemplo puede ser descargado de aquí. El archivo para este video cast es V1.zip
La liga directa al video esta aquí.


Creative Commons License


This work is licensed under a
Creative Commons Attribution-Noncommercial-Share Alike 2.5 Mexico License.

Anuncio de serie de Video casts sobre .NET y Mono

El motivo de este post es para anunciar una inquietud pendiente, he comenzado una serie de video casts con la intención de mostrar como trabajar con el .NET Framework y Mono.

Inicialmente los video casts van a estar hospedados en Google Video, aunque esto desafortunadamente reduce un poco la calidad de la imagen, así que seguiré buscando mejores formas de hacer esto, aunque en buena medida depende de la respuesta que obtenga de las personas que usen los video casts.

El código fuente de los video casts va a estar disponible en Google Code, el cual ofrece un repositorio Subversion, ademas de que en el manejo del codigo hago uso de algunas herramientas libres, las cuales las listo a continuación:
1.- Cliente Subversion, para windows recomiendo TortoriseSVN, en Linux y MAC existen varios
2.- NANT es una herramienta libre para compilar programas en .NET
3.- NUNIT de igual forma herramienta libre para ejecutar pruebas de unidad.

Mi ambiente de trabajo es bajo OSX Leopard, donde ejecuto Mono (actualmente la versión 1.2.6) y mi editor de código fuente es TextMate, pero eso no implica que el código de los video casts no se pueda usar en Windows con Visual Studio o con MonoDevelop.

El código fuente esta liberado bajo la licencia MIT, la cual es bastante liberal con lo que se puede hacer con el código fuente; los vídeos están liberados bajo la licencia Commom Creative para uso no comercial.

Creative Commons License

Dicho todo lo anterior, termino este post y comienzo a preparar el post para el primer Video Cast.

jueves, octubre 25, 2007

Mi primer parche para Mono, toma 2

Ok, mi primer parche para Mono fue aceptado, y debido a la funcionalidad del par de clases que fueron modificadas por mi, es muy probable que los usuarios de Mono cada vez que ejecuten/compilen sus aplicaciones, ejecuten el codigo que escribi ;)

Por otro lado cuando desarrolle el parche, realice un programa con un par de casos de prueba, solo para asegurarme que mi codigo funcionara y que funcionalidad original de los metodos que modifique tambien, el caso es que ese programa de prueba yo ya no lo ejecute en MS .NET, solo en Mono, pues resulta que mi programa de prueba descubrio un "Bug" en el .NET - de acuerdo a Gert quien reviso mi parche de Mono -, y ahora existe un reporte para Microsoft para que solucione el problema, el cual aparece en .NET 2.0 y .NET 3.5, aunque existe otro reporte previo a este problema, Microsoft lo cerro indicando que ya estaba solucionado, pues resulta que no.

Definitivamente para mi fue un buen ejercicio, por haber solucionado mi problema, haber contribuido a Mono, descubrir el problema en OSX, confirmarlo en Windows, desarrollar el parche en OSX, compilarlo y probarlo en Linux y finalmente confirmarlo solucionado en OSX ;)

Bueno ahora a otra cosa ...

miércoles, octubre 24, 2007

Reflection falla al invocar miembros con el attribute ParamArray en Mono

Trabajando en un proyecto con Monorail, el cual estoy desarrollando desde OSX con Mono, el motor de vistas Brail fallaba al compilar una de las vistas, este problema se me presento solo con Mono, ya que en MS .NET la vista funcionaba como debia.

Investigando el problema, me di cuenta que Brail invoca por medio de reflection a los metodos que se indican dentro de la vista, y es precisamente aqui donde Brail fallaba al ejecutar; el metodo en cuestion era el metodo Create de la clase DictHelper dentro del Framework de Monorail, el cual se le pasan parametros de la forma: "property1=value", "property2=value", etc, y el metodo regresa un objeto del tipo IDictionary, este metodo acepta parametros de la forma: Create(params string args).

Params es una palabra clave de C# que permite definir un parametro especial que acepte una cntidad indefinida de parametos, por ejemplo Create esta definido come se mostro arriba, pero la forma en como lo puedo llamar es: DictHelper.Create("p1=v1", "p2=v2", "p3=v3"), es decir le paso un arreglo de parametros. .NET cuenta con un attributo ParamArray, el cual puede ser utilizado desde cualquier lenguaje, lo que sucede una vez que el programa ha sido compilado .NET toma los parametros y los convierte en un arreglo de parametros para que pueda ser pasado al metodo.

El problema de Mono es que no implementa funcionalidad para llamar mediante reflection metodos que usen la palabra clave params, pude haber creado un "bug" para reportar el problema a los desarrolladores de Mono y ya, pero al final me decidi a tratar de implementar el soporte para esta funcionalidad.

Despues de analizar como Mono invoca metodos por reflection, me fue necesario modificar los archivos Binder.cs y MonoType.cs.

El parche y programa de prueba lo envie a la lista de Mono-devel, de momento estoy a la espera de que lo revisen y me digan si lo aceptan o no.

miércoles, octubre 03, 2007

Mas sobre la disponibilidad del codigo fuente de .NET 3.5

Con noticias en Slashdot como "Open.NET - .NET Libraries fo open source", a partir del anuncion de Scott, lo unico que se genera es confusion y discusiones sin sentido.

No, Microsoft no libera el .NET Framework como open source, libera el codigo para referencia, asi como los arhivos .PDB para propositios de depurar aplicaciones, como dije, el tener codigo fuente, no es la gran cosa, ya que con herramientas como reflector siempre se ha podido inspeccionar para tener mejor entendimiento, o bien se puede consultar la implementacion de alguna clase en el codigo fuente de Mono.

Aqui el unico punto importante es el acceso a los .PDBs para depuracion.

La apertura al codigo fuente de .NET, no es algo nuevo ya desde antes de la liberacion del .NET 2.0 se hablaba por parte de Microsoft de liberar el codigo fuente y los PDBs de Windows Forms.

Asi que las teorias conspiratorias sobre un plan maestro para eliminar Mono, publicadas en Slashdot, no tienen sentido; lo unico es que van tener que vigilar mas las contribuciones de codigo para evitar que se utilize el codigo liberado por Microsoft.

miércoles, septiembre 05, 2007

Era cuestion de tiempo

El dia de hoy tanto Scott Guthrie de Microsoft como Miguel de Icaza anunciaron el acuerdo de colaboracion para llevar Silverlight oficialmente a Linux/Unix.

Si bien Microsoft anteriormente yua habia colaborado en proyectos de codigo fuente abierto como Xen y PHP, al parecer es la primera vez que colaboraria en el area de escritorio (segun lo que espresa Miguel en su post).

El acuerdo consiste en implementar las especificaciones Silverlight 1.0 y 1.1 en el proyecto llamado Moonlight, al cual Microsoft le ofreceria el apoyo necesario para que se lleve a cabo, ademas de poner a disposicion los codecs binarios para audio y video para Linux/Unix.



Miguel comenta que Moonlight continuara siendo open source, lo unico que permanecera cerrado son los codecs de Microsoft, pero que Moonlight puede utilizar otros codecs que sean open source aunque no se puede asegurar en ese caso la compatibilidad con Windows.

Aunque el acuerdo al que se llego esta demarcado por lo dicho anteriormente, el esfuerzo del equipo Mono no se centra en solo ejecutar aplicaciones Silverlight, tambien se esta desarrollando herramientas para poder diseñar aplicaciones en Linux/Unix y MacOS, ya que la herramienta Expression Blend de Microsoft para el diseño solo va a estar disponible en Windows. Aqui es donde entra en juego "Lunar Eclipse" que aun esta en proceso de desarrollo.



Ahora solo resta esperar y ver cual es la reaccion de los "trolls" en sitios como Slashdot al respecto de este anuncio.

jueves, junio 21, 2007

Silverlight en 21 dias


No, no es el titulo de un nuevo libro para aprender Silverlight, es un interesante y largo post de Miguel de Icaza donde explica el estado y como es que se dio forma al proyecto Moonlight, que es la version libre de Silverlight.

El post es interesante en el sentido de que estan muy cerca de tener una version de Silverlight que se podra ejecutar en *nix, habla sobre las complicaciones tecnicas del proyecto, la coordinacion de los desarrolladores dispersos por varias regiones del planeta, y la posible extension del proyecto para llevarlo a otras areas de Linux.