Nueve meses después de la aparición de las anteriores versiones hoy se estrenan Mono 2.6 y MonoDevelop 2.2, herramientas clave para el desarrollo de aplicaciones .NET sobre Linux y Mac OS (además de Windows, por supuesto).

Entre las novedades más destacadas de la plataforma Mono 2.6 se encuentran la implementación de WCF, el soporte para LINQ to SQL, el nuevo Soft Debugger, la integración de los frameworks ASP.NET MVC, ASP.NET AJAX y Microsoft Dynamic Language Runtime, y la inclusión preliminar de algunas características de C# 4.0 como los parámetros con nombre y los parámetros opcionales.

MonoDevelop 2.2 también se presenta con muchas novedades, entre las que destacan el soporte oficial para Windows y Mac OS, el soporte para múltiples runtimes .NET (multi-targeting), las muchas novedades en cuanto a edición de código (plantillas de código, formateo y generación de código, selección de bloques, …), la enorme ampliación de las opciones de refactorización, y las extensiones para el desarrollo con ASP.NET MVC, Moonlight, IPhone (MonoTouch) y Python.

En definitiva, una buena noticia para el mundo del desarrollo bajo la plataforma .NET en cualquier sistema operativo.

Os animo a probar estas herramientas.

http://www.mono-project.com/Release_Notes_Mono_2.6
, , , ,

La empresa Red Gate, muy conocida por ser la desarrolladora de uno de los mejores profilers para .NET (ANTS Profiler) y también por ser la actual dueña del famosísimo .NET Reflector, está ofreciendo de forma gratuita el libro Illustrated C# 2008, de Daniel Solis.

Entre los contenidos de este libro podemos encontrar una completa referencia técnica del lenguaje C#, que abarca desde los conceptos más básicos hasta temas más avanzados como LINQ o el desarrollo de aplicaciones multihilo y programación asíncrona.

Para descargar gratis el libro en formato PDF podéis acceder a la oferta de Red Gate o utilizar el siguiente enlace directo [descarga gratuita].

Un libro más para la colección.

, , , , ,

El pasado miércoles Scott Guthrie nos sorprendío en su blog anunciando que la nueva plataforma ASP.NET MVC pasaba a estar disponible bajo una licencia open source, concretamente MS-PL, la cual permite la libre modificación y redistribución del software sin restricciones en cuanto a la plataforma.

Existen dos alternativas a la hora de instalar este framework. La primera de ellas es descargar el instalador independiente de ASP.NET MVC desde la web de descargas de Microsoft, y como segunda opción también se puede optar por descargar el llamado Microsoft Web Platform Installer (V2), que integra en un sólo instalador el stack completo y gratuito de Microsoft para el desarrollo y publicación de aplicaciones web (la plataforma compuesta por .NET Framework, ASP.NET, MVC, Ajax, jQuery…, el servidor IIS 7.0, la base de datos SQL Server 2008 Express, y las herramientas de diseño y desarrollo Visual Web Developer Express 2008 y Expression Web 2). El código fuente también se puede descargar desde la web de descarga de Microsoft para ASP.NET MVC.

Por su parte Miguel de Icaza, la cara más visible del proyecto Mono [el otro lado open source de .NET] no ha tardado en anunciar la compatibilidad total del framework ASP.NET MVC con la plataforma Mono e incluso la integración de ambas y la disponibilidad de una extensión de MonoDevelop para el desarrollo con ASP.NET MVC. Bravo una vez más por el software libre y por la rapidez de reacción de las comunidades que están detras de estas herramientas.

En la siguiente entrada publicaré algunos recursos que pueden ayudar enormemente a conocer mejor la plataforma ASP.NET MVC.

, , , , , , ,

Scott Guthrie, responsable en Microsoft de tecnologías como ASP.NET y Silverlight, acaba de publicar en su blog un documento sobre ASP.NET MVC al que puede resultar interesante echar un vistazo.

Se trata del primer capítulo del libro Professional ASP.NET MVC 1.0, publicado recientemente por la editorial Wrox, donde a modo de tutorial paso a paso se detalla la construcción de una aplicación web completa (llamada NerdDinner) utilizando esta tecnología.

El contenido de este “capítulo” de 185 páginas es realmente completo, comentando todo el proceso de construcción de la aplicación, desde la creación del proyecto en Visual Studio, pasando por la creación del modelo, la base de datos, los controladores y vistas, las master pages, los procesos de autenticación y autorización, las partes AJAX, … hasta las pruebas unitarias y el despliegue de la aplicación.

Encontraréis más información y los enlaces de descarga en la entrada de su blog. Si queréis descargar directamente el PDF podéis hacerlo desde estos enlaces: Libro y Código fuente y Pruebas Unitarias.

Edito 06/05/2009: A partir de ahora el libro también puede consultarse de forma online en la siguiente dirección [Libro Online: Professional ASP.NET MVC 1.0].

, , , , , ,

Voy a comenzar este tutorial de Python para programadores presentando un poco las diferentes versiones, distribuciones y herramientas disponibles para el desarrollo de aplicaciones en este lenguaje.

En primer lugar hay que destacar que actualmente existen dos ramas del lenguaje: Python 2.x y Python 3.x (también conocido como Python 3000 o Py3K). La diferencia entre ambas no la marca simplemente algunas mejoras y el número de versión sino las importantes diferencias entre ellas que hacen que incluso se haya perdido la compatibilidad hacia entre versiones. De ahí la importancia de la elección entre Python 2.x o 3.x. Se pueden consultar algunas de las diferencias más importantes entre Python 2.x y Python 3.x en su web de documentación.

En cuanto a las distribuciones disponibles tenemos aún más alternativas. La distribución original y más extendida es CPython, que compila código para su propio runtime incluido en la instalación. Sin embargo, existen otras muchas implementaciones del lenguaje sobre otras plataformas, aunque hay que considerar en cada caso sus diferencias con CPython. Por nombrar las más interesantes:

  • Jython, implementación del lenguaje Python para la plataforma Java. Diferencias entre Jython y CPython.
  • IronPython, implementación del lenguaje Python para la plataforma .NET. Diferencias entre IronPython y CPython.

Le toca el turno a los entornos de desarrollo (IDEs) para Python. Existen algunos buenos IDEs comerciales para Python, como Wingware o Komodo, pero me voy a centrar en otras alternativas gratuitas y/o open source que son igualmente válidas, si no mejores.

En primer lugar podemos encontrar algunos IDEs completos como IDLE (incluido con la propia distribución de CPython, bastante básico) o PyScripter. Sin olvidar por supuesto que podemos utilizar nuestro editor de texto favorito (Vim, Emacs, Notepad++, …) para la edición de código y ejecutar las aplicaciones desde la línea de comandos.

Pero dado que esto pretende ser un tutorial de Python dirigido a programadores Java y .NET, existe otra alternativa más interesante para el desarrollo con Python, y consiste en utilizar algún plugin Python para nuestro propio IDE Java o .NET. Así, las opciones más extendidas son:

  • Netbeans + Python. Extensión de Netbeans que permite el desarrollo de aplicaciones Python sobre Netbeans. Esta extensión se encuentra aún en desarrollo por lo que su funcionalidad y estabilidad podrían no ser aún las deseadas.
  • Eclipse + PyDev. Plugin de Eclipse para el desarrollo con Python y Jython. Incorpora las opciones típicas: completado de código, coloreado de código, refactorización, depuración y muchas otras.
  • Visual Studio + IronPython. Implementación de Python para la plataforma .NET. Incluye integración con Visual Studio para poder aprovechar las características de este IDE en el desarrollo de aplicaciones Python.
  • SharpDevelopr + IronPython. En la última versión del fantástico IDE SharpDevelop se incluye soporte para el desarrollo con IronPython.
  • IronPython Studio. IDE completo desarrollado sobre la plataforma Visual Studio Shell, es decir, IDE construido sobre la base de Visual Studio pero completamente independiente de éste último.

En mi caso particular, he elegido la distribución de CPython versión 2.5 y utilizaré Eclipse y PyDev como entorno de desarrollo. Los motivos son simples, es ésta la versión de Python que soporta por ahora Google App Engine, que será el servicio de hosting Python que utilizaré durante las pruebas.

En la siguiente entrada de la serie detallaré la instalación y preparación del entorno de desarrollo indicado (Python 2.5 + Eclipse + PyDev).

, , , , , , , ,

Muchas cosas han pasado desde que allá por verano del año pasado se presentara la primera versión alfa de MonoDevelop 2.0, el IDE para .NET más prometedor en Linux y Mac, y aprovechando que hace unos días se ha publicado la primera beta creo que es un buen momento para repasar cómo ha ido madurando este entorno de desarrollo.

Veamos las principales novedades que nos traerá MonoDevelop 2.0, previsto para finales de marzo de 2009.

Gestión de Proyectos

En este apartado se ha dedicado un gran esfuerzo para conseguir la máxima compatibilidad con Visual Studio. Para ello, se ha pasado a utilizar MSBuild como modelo por defecto. Además, se ha modificado la estructura de los proyectos introduciendo los llamados Solution Folders para agrupar proyectos y Workspaces para agrupar soluciones relacionadas pero independientes. Otras dos novedades importantes son la posibilidad de establecer propiedades específicas (policies) para cada proyecto o para cada solución, y el soporte para múltiples versiones del framework de .NET (un proyecto se podrá compilar para la versiones de .NET 2.0, 3.0 ó 3.5).

Edición de código

Con MonoDevelop se presenta un nuevo editor de código totalmente nuevo que introduce muchas mejoras respecto al anterior, entre ellas el soporte para C# 3.0, nuevas opciones de refactorización, la agrupación de código (code folding), la búsqueda incremental, los esquemas de colores (personalización del resaltado de sintáxis), la transparencia de las ventanas emergentes o incluso el soporte para comandos del editor vi. Además, se ha integrado el editor de XML de SharpDevelop, con lo que la edición de este tipo de documentos se ha mejorado también en gran medida.

Depuración de código

En esta segunda versión por fin tendremos un depurador de código integrado con el propio IDE. Se proporciona soporte para dos depuradores distintos, MDB para aplicaciones .NET y GDB para aplicaciones nativas. Cualquiera de los dos proporciona las características típicas de este tipo de IDEs: depuración paso a paso, inspección de variables, pila de llamadas, evaluador de expresiones, puntos de ruptura (breakpoints). etc.

Desarrollo Web

Al igual que ocurre con la gestión de proyectos, se ha trabajado mucho para maximizar la compatibilidad de los proyectos web ASP.NET con Visual Studio 2008 y Visual Web Developer 2008. Además, se ha mejorado mucho el completado de código para ASP.NET y HTML, se ha añadido la llamada Path Bar (muestra de forma jerárquica la etiqueta actual dentro del documento) al estilo de la mostrada por Visual Studio y se ha añadido una ventana de Outline con la estructura del documento. Por otro lado, se ha añadido también soporte para el recien estrenado Moonlight 2.0, cuyos proyectos son también compatibles con los de Silverlight 2.0 en Visual Studio.

Nuevas herramientas

También se han añadido al IDE algunos elementos nuevos. Así, por ejemplo, en la versión 2.0 de MonoDevelop podremos encontrar un visor de ensamblados, un analizador de métricas de código, y soporte para nuevos lenguajes como Vala.

Otras mejoras

Además de todas las novedades comentadas, en MonoDevelop también se ha mejorado el editor de GTK# y algunas opciones para el control de versiones.

En definitiva, comprobamos que MonoDevelop 2.0 será un entorno de desarrollo mucho más maduro que la versión anterior, mucho más compatible con su homólogo Visual Studio 2008 y con muchas aportaciones interesantes para el desarrollo en .NET sobre Linux. Esperemos a la versión definitva para ver si aún nos espera alguna sorpresa más.

, , , ,

Y si ayer hablábamos de nuevos recursos para el desarrollo de aplicaciones de escritorio hoy le toca el turno a las aplicaciones web, que también están de enhorabuena con la aparición de las nuevas versiones de Moonlight y JavaFX.

Tal como anunció ayer en su blog Miguel de Icaza, Moonlight estrena por fin su versión 1.0. Por aportar un poco de información, Moonlight es una implementación open source de la tecnología Silverlight de Microsoft para sistemas Linux. Se trata de un proyecto de Novell en el que también colabora Microsoft aportando los tests de pruebas de Silverlight y proporcionando de forma gratuita Microsoft Media Pack para los usuarios de Linux (conjunto de codecs que permiten la reproducción de medios compatibles con Silverlight [wmv, wma, mp3, etc...]). Moonlight 1.0 está basado en Silverlight 1.0, se ejecuta sobre el propio motor javascript del navegador y se distribuye en forma de plugins para Firefox 2 y Firefox 3. En la entrada publicada por Miguel de Icaza podéis encontrar mucha más información sobre la nueva versión e incluso un poco de historia del proyecto para quien esté interesado. Añadir además que Novell ya se encuentra trabajando en la próxima versión, Moonlight 2, que según el roadmap del proyecto debe ver la luz en septiembre de 2009 (aunque la primera beta debería aparecer en mayo). Esta segunda versión estará basada ya en Silverlight 2 y se ejecutará sobre un motor de ejecución .NET (Mono) y no sobre Javascript como la actual.

Por otro lado JavaFX, la tecnología de Sun que pretende competir con Silverlight/Moonlight (de Microsoft/Novell) y Flash/Flex (de Adobe) dentro del campo RIA (Rich Internet Applications), también estrena su versión JavaFX 1.1, cuya principal novedad es el soporte para la gran mayoría de los dispositivos móviles y proveedores de servicios actuales. Debo reconocer que no conozco demasiado esta plataforma, pero destaco el hecho de ejecutarse sobre el propio runtime de java, ya instalado en millones de equipos, lo que está haciendo que consiga muchos adeptos. Cabe también mencionar, que al igual que en el caso de Moonlight, Sun también tiene previsto publicar este mismo año su segunda versión de JavaFX 2.0, que incluirá mejoras en el lenguaje y aumentará el conjunto de componentes disponibles para el desarrollo.

En fin, la batalla por el pastel RIA está en pleno auge, ya veremos dónde acaba y quién es el vencedor.

, , , , , ,

Índice de secciones

  1. Introducción
  2. Conceptos generales
  3. Proceso de desarrollo
  4. Interfaz de usuario
  5. Representación del tablero
  6. Ejecución de movimientos
  7. Legalidad de movimientos
  8. Generación de movimientos
  9. Evaluación de posiciones
  10. Técnicas de búsqueda
  11. Búsqueda avanzada
  12. Descargas

Una breve introducción a NChess

NChess es un programa de ajedrez sencillo escrito en C# con el que se pretende ilustrar algunas de las técnicas básicas utilizadas para el desarrollo de este tipo de software.

Como espero que se vaya viendo en los apartados teóricos, en NChess se han implementado muchos de los métodos más conocidos para la representación interna del tablero, la ejecución de movimientos, la generación de los mismos, la búsqueda de soluciones mediante árboles y la evaluación de posiciones. Poco a poco, iremos comentando cada una de estas fases del ciclo de ejecución de un juego de ajedrez, centrándonos en los detalles más importantes y dejando al propio estudio el resto de la implementación.

NChess en un proyecto aún en desarrollo y su estado actual no es el apropiado para publicarlo para su descarga, sin embargo, a medida que vayamos avanzando en la descripción teórica se irá publicando gran parte del código. Por lo demás, en cuanto adecente un poco el código actual e implemente algunas de las características que tengo pendientes publicaré en esta misma página el código completo de NChess.

Funcionalidad actual del programa:

  • Actualmente, el programa tan sólo permite jugar partidas individuales con piezas blancas.
  • El tablero se representa gráficamente en pantalla y permite mover mediante el método click&click (Click en la pieza a mover seguido de click en la casilla destino).
  • Antes de comenzar una partida se puede seleccionar la profundidad máxima hasta la que se permite “pensar” a la máquina.
  • Durante el juego, están accesibles las opciones de cancelar la patida y deshacer movimientos.
  • Además, durante los turnos de la máquina, se va mostrando la profundidad actual de la búsqueda, la mejor combinación encontrada hasta el momento y la evaluación actual de la posición.
  • Durante las primeras jugadas, el programa utiliza un pequeño libro de aperturas que puede consultarse mediante el menú principal. El programa indicará el nombre la apertura jugada, si corresponde.
  • NChess dispone también de un editor de posiciones y la posibilidad de guardar dichas posiciones o comenzar una partida a partir de ella.

Descarga del programa ejecutable y del código fuente (NO DISPONIBLE POR EL MOMENTO):

[Fichero: NChess v0.1 (Ejecutable)]

Para el correcto funcionamiento de este programa es necesario tener instalado el Microsoft Framework .NET 1.1 Para ello puede acceder a la web de descarga de Microsoft pulsando aquí.

[Fichero: NChess v0.1 (Fuentes en C#)]

El zip descargado contiene el proyecto completo de Visual Studio .NET 2003 y todos los fuentes necesarios para compilar el programa.

, , , ,

Buscando entre antiguos proyectos de Visual Studio me he encontrado con una implementación en C# que hice hace tiempo del autómata celular más famoso de la historia: el Juego de la Vida de Conway (Conway’s Game of Life) [en este enlace de la Wikipedia encontraréis información sobre el tema].

Las reglas básicas son muy sencillas. El juego consiste en una matriz de células que cambian de estado (activa o inactiva) de acuerdo a una serie de condiciones, que en su versión original son 2:

  1. Una célula inactiva con exactamente 3 células vecinas vivas pasa a estado activo.
  2. Una célula activa con 2 o 3 células vecinas activas permanece activa, mientras que en caso contrario pasa a estado inactivo [o permanece inactiva].

Estas reglas ejecutadas de forma indefinida sobre la matriz de células dan lugar a una serie de comportamientos y patrones con los que resulta bastante entretenido experimentar.

Juego de la Vida en C#

Juego de la Vida en C#

Y aprovechando que estoy empezando a publicar entradas sobre Inteligencia Artificial he creido interesante retocar un poco el viejo código (utilizando delegados de C# para los distintos conjuntos de reglas, y un objeto BackgroundWorker para la ejecución de las reglas en segundo plano) para todo aquel que quiera experimentar un poco con este divertido juego.

Descargar: Juego de la Vida en C# (Game of Life in C#)

, , , , , ,

Otra de las decisiones que he tomado este año con respecto al blog ha sido ampliar su temática introduciendo algunos temas más específicos que los tratados hasta el momento.

Así, a partir de ahora ire publicando en este blog algunos artículos sobre uno de los temas que más me interesan dentro del campo de la informática actual: la Inteligencia Artificial. Y en principio no me pongo límites, pretendo tratar desde conceptos básicos hasta temas complejos, intentando llegar [siempre que sea posible] a la implementación de cada sistema o técnica y no quedándonos en una mera descripción teórica [algo muy común en las páginas con documentación sobre este tema].

A modo de introducción, enumero a continuación algunos de los campos y técnicas de la Inteligencia Artificial que iran apareciendo por este blog en próximas entradas:

  • Aprendizaje Automático [Machine Learning]
  • Procesamiento de Lenguaje Natural [Natural Language Processing (NLP)]
  • Minería de Datos [Data Mining]
  • Videojuegos [Game IA]
  • Búsqueda Avanzada de Soluciones [AI Search Techniques]
  • Ingeniería del Conocimiento [Knowledge Engineering]
  • Lógica Difusa [Fuzzy Logic]
  • Sistemas Expertos [Expert Systems]
  • Algoritmos Genéticos [Genetic Algorithms]
  • Redes Neuronales [Artificial Neural Networks (ANN)]
  • Árboles de decisión [Decision Trees]
  • Etc…

En breve, publicaré las primeras entradas sobre Inteligencia Artificial.

, , ,