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

lunes, 23 de septiembre de 2013

¡Opa! ¿Y este framework?

Opa Up and Running

El framework Opa para JavaScript es más que un framework. En realidad, es un lenguaje + una librería, pero con un objetivo bastante ambicioso: Opa intenta cubrir con mismo lenguaje el desarrollo del lado cliente, servidor y el acceso a base de datos.

Según la introducción del proyecto en su repositorio de GitHub (traduzco):

Opa es un framework avanzado para JavaScript, compuesto de dos partes:

  • Un compilador para el lenguaje Opa, que presenta una sintaxis de estilo JavaScript pero con muchas mejoras;
  • Una librería JavaScript, que se usa en tiempo de ejecución.

Siguiendo la tradición de recorrer "Raros lenguajes nuevos", lo que más me interesó de Opa es el lenguaje mismo, y ese objetivo ambicioso, así que veamos algunas características:

Opa es open source (la librería con licencia MIT y el compilador GPL 3) y se autodefine como un lenguaje "full stack" ya que cubre todas las capas, y promete soportar aplicaciones seguras y escalables.

Las aplicaciones terminan ejecutándose sobre Node.js y usan MongoDB para el manejo de datos.

Soporta nativamente HTML5 y CSS y trata de automatizar la comunicación cliente/servidor con Ajax/Comet, y brinda un modelo de programación orientado a eventos y no-bloqueante (básicamente, respeta el modelo JS, pero subiendo el grado de abstracción).

Una de las promesas más atractivas de Opa es que se puede programar sin pensar (a priori) en la distinción entre cliente y servidor. El compilador analiza y distribuye el código, haciéndose cargo de toda la comunicación. Posteriormente, sin embargo, uno puede optimizar algunas situaciones utilizando los modificadores client y server.

Veamos el clásico "Hola, Mundo" en Opa:

Server.start(
   Server.http,
   { title: "Hola, Mundo"
   , page: function() {<h1>¡Hola, Mundo!</h1> }
   }
)

El programa se corre (habiendo instalado el compilador y las herramientas, obviamente) con el comando: opa hola.opa -- y la aplicación puede navegarse en http://localhost:8080

Algo interesante de Opa es que a pesar de compilar a JS (algo ya recurrente) es un lenguaje de tipos estrictos, aunque no hace falta declararlos porque se utiliza inferencia. Sin embargo, el compilador informa de cualquier tipo de violación y es bastante inteligente al sugerir incluso las opciones para solucionarlas.

Veamos un ejemplo más, con acceso a datos. Este ejemplo de los tutoriales cuenta clics y los almacena en una tabla:

import stdlib.themes.bootstrap

database int /counter = 0;

function action(_) {
    /counter++;
    #msg = <div>Thank you, user number {/counter}!</div>
}

function page() {
    <h1 id="msg">Hello</h1>
    <a class="btn" onclick={action}>Click me</a>
}

Server.start(
    Server.http,
    { ~page, title: "Database Demo" }
)

Como puede notarse en el ejemplo de arriba, el HTML queda completamente embebido como parte del lenguaje, sin necesidad de usar comillas para los literales, que además soportan interpolación sencilla. 

Obviamente, como Opa está basado en Node, también es posible usarlo en Linux, FreeBSD, OS X y Windows, y estando disponibles todos los fuentes, es posible compilarlo en otras plataformas también.

También tiene instrucciones para desplegar fácilmente aplicaciones en plataformas como Heroku, Cloud Foundry y otras, y existen packs para varios editores como SublimeText, Emacs, Vim, Eclipse, GEdit y otros.

Esto es una brevísima introducción porque realmente hay mucho por investigar en este interesante lenguaje. Si alguien profundiza, me encantaría que me cuente. Lo mismo haré por mi lado.

Y casi me olvido: como pueden ver en la ilustración más arriba, hay un libro publicado por O'Reilly.

miércoles, 29 de agosto de 2012

Libros gratuitos sobre Python

Libros de Python

A principios de este mes comenté sobre un sitio en GitHub con libros gratuitos de JavaScript, que en el ínterin creció de 11 a 25 títulos (cubriendo también más HTML5).

La misma gente de Revolunet (una compañía francesa de diseño web) amplió ahora la idea a una lista similar con libros gratuitos de Python.

Hay libros de nivel inicial, intermedio y avanzado, incluyendo varios iniciales para aprender a programar en general, basados en Python, que siempre me pareció una excelente opción de primer lenguaje, sobre todo para niños y adolescentes, porque es simple y directo en el arranque pero no tiene techo.

Los libros intermedios son en general para programadores Python que quieren entrar en detalles del lenguaje o frameworks, y los títulos avanzados son interesantes porque entran en temas complejos, basándose en Python para resolverlos, como Computer Vision, procesamiento de lenguaje natural, sistemas complejos, o probabilidad y estadística.

Casi todos los libros están en inglés, excepto (por ahora) un par en francés. 

También, varios de los libros son proyectos colaborativos y abiertos, algunos incluso publicados y actualizados como blogs, a lo largo de mucho tiempo (como en el caso de Python Module of the Week) con lo que quizá encuentren traducciones disponibles que a mi se me escaparon, o pueden colaborar en ese espacio.

Entre los libros hay dos que me gustan mucho, volviendo al tema de enseñar a chicos:

Snake Wrangling for Kids, justamente orientado a enseñar a programar a chicos, y que usa bastante los gráficos de tortuga provenientes del Logo, otro gran lenguaje. El libro es una guía de la que uno puede salirse, pero hay muchas ideas buenas. El libro está disponible para Python 3 o 2.7, y para Linux, OS X y Windows, con lo que incluso se puede reunir un grupo de jóvenes multi-plataforma (como mis dos hijas y yo).

Making Games with Python and PyGame es una buena continuación porque requiere un mínimo de conocimiento de programación y Python, pero rápidamente se mete en algo que los chicos amamos: programar juegos.

Espero que aprovechen todo este material, aprendan mucho, y sobre todo, enseñen nuestro arte a la próxima generación.

miércoles, 15 de agosto de 2012

Libros gratuitos sobre Arquitectura de Aplicaciones Open Source

Arcquitectura Open Source

La arquitectura de software es un terreno interesantísimo que más allá de que uno pretenda o no ser Arquitecto como perfil profesional, es importante para todo desarrollador, porque tiene que ver con la estructura de lo que construimos y con cómo tomamos las decisiones respecto a ella. Como en el caso del diseño de un producto, no es algo que se pueda evitar, cuando uno no dedica tiempo a la arquitectura, el producto final tendrá muy probablemente una estructura deficiente o endeble, pero no dejará de tenerla.

De todas maneras, este es un terreno que siempre pareció de cierta sofisticación, y que por lo tanto no ha generado mucho material libre y gratuito, salvo últimamente, de la mano de sitios web como InfoQ ó High Scalability, que publican informes detallados o algunos libros breves.

En este caso se trata de un esfuerzo conjunto, coordinado por Amy Brown y Greg Wilson como editores, y una larga lista de colaboradores, que compila, en dos volúmenes, reseñas de la arquitectura de aplicaciones de código abierto, explicadas por expertos en el tema, a veces coautores o parte del equipo del proyecto. En algunos casos se cubren familias o ecosistemas de aplicaciones, en lugar de productos individuales.

Todo el material está disponible de manera gratuita en el sitio web, bajo licencia Creative Commons Attribution 3.0 Unported, pero para quienes prefieran leerlo en Kindle u otro dispositivo electrónico, está disponible una versión paga cuyos derechos se donan íntegramente a Anmesty International.

Los dos tomos están en inglés, y cubren unas 25 aplicaciones populares cada uno.

Algunos ejemplos del Volumen I son: Asterisk (la plataforma de telefonía), Audacity (el editor de audio), Eclipse, el file system distribuido de Hadoop, mecanismos de integración continua, el ecosistema LLVM, Mercurial, Python Packaging, Selenium WebDriver y otros.

Algunos ejemplos del Volumen II son: Arquitectura Web Escalable y Sistemas Distribuidos, Ingeniería de Actualizaciones de Firefox, el compilador Glasgow Haskell, Git, el Dynamic Language Runtime y la familia de lenguajes Iron (IronPython, IronRuby, etc), MediaWiki, Moodle, nginx, PyPy, Twisted, ZeroMQ y otros.

La cantidad de material es impresionante y los temas están muy bien cubiertos, a gran nivel de detalle técnico.

martes, 14 de agosto de 2012

¿Podrá Ward hacerlo de nuevo? Conozcan el Smallest Federated Wiki (+videos)

Ward Cunningham

Ward Cunningham es una especie de leyenda viviente. Es uno de los pioneros de los patrones de diseño, miembro prominente de la comunidad Smalltalk, colaborador de Kent Beck en la definición de Extreme Programming (XP), firmante del Manifiesto Ágil, co-inventor de las tarjetas CRC (clase-responsabilidad-colaboración) e inventor de FIT y fundamentalmente, la wiki.

Así es, Ward inventó muchas cosas que están dentro del ámbito de nuestra profesión, el desarrollo de software, pero la wiki, que fue pensada inicialmente para construir documentación de manera colaborativa entre desarrolladores, llegó mucho más allá, y es uno de los hitos que ha transformado nuestra cultura, a partir del impacto de Wikipedia, siendo en gran parte responsable de todo el movimiento crowdsourcing.

Pero Ward no se queda quieto y sigue permanentemente experimentando y buscando formas mejores de hacer las cosas. Su último proyecto vuelve sobre los pasos de la wiki, causalmente, y se llama Smallest Federated Wiki (la más pequeña wiki federada).

Como verán, en su página personal de GitHub hay una larga serie de videos explicando el concepto, que pone foco en hacer que la wiki sea aún más sencilla de editar, aprovechando capacidades de los navegadores modernos y HTML5 como drag & drop, uso de JSON como soporte, etc, para permitir una edición más fluida, pero también la "federación" de contenido. Esto significa que se puede tomar contenido de una wiki y ponerlo en otra, pero no es solamente una forma de réplica, sino más bien algo similar a los "forks" de GitHub, donde cada copia es libre de crecer de manera independiente, sin afectar a su fuente original, pero pudiendo contribuir cambios seleccionados, si la fuente los acepta.

La mejora manera de entender el modelo, que tiene un lado servidor que se encarga del almacenamiento de las páginas y la colaboración entre servidores similares, y un lado cliente, que permite editar y modificar el estado, y federar el contenido de manera visual.

La documentación para usuarios finales de cómo utilizar el lado cliente está disponible -por supuesto- como un wiki federado.

Por supuesto todo el código es abierto y está en GitHub. La implementación de referencia del servidor (hay algunas otras en marcha) está escrita en Ruby utilizando Sinatra, mientras que la parte cliente está escrita en CoffeeScript.

A continuación, el primero de los vídeos para despertar su curiosidad (en inglés; ~2 minutos). Recomiendo ver el resto de la serie, que sigue aumentando con el tiempo.

lunes, 6 de agosto de 2012

Libros: aprendiendo JavaScript con recursos gratuitos (+video)

Libros de JavaScript

JavaScript es el lenguaje ubicuo que todos tuvimos que aprender en algún momento, y que en los últimos años mejoró en cuanto a implementaciones, frameworks y técnicas generales de programación, a la vez que se posición fuertemente también del lado del servidor, evolucionando de un lenguaje que la mayoría evitaba a algo que la comunidad aprecia cada vez más.

Sin embargo para muchos todavía queda muchísimo por aprender, y a pesar de que hay una cantidad importante de recursos, suelen estar desparramados por la web. Reconociendo este tema, la gente de Revolunet (una compañía francesa de diseño web) decidió compilar esta lista creciente de libros (algunos PDF, otros en línea) sobre JS, Node, CoffeeScript y otras variantes que están disponibles gratuitamente. Por ahora los títulos están en inglés, pero la lista, que está alojada en GitHub, seguramente siga creciendo y aparezcan traducciones o títulos en otros idiomas.

Actualmente hay disponibles 11 títulos:

Libros Gratuitos de JavaScript 

De postre les dejo un video (en inglés; 25 minutos aprox) de Addy Osmani (una autoridad en JS, autor de dos de los recursos mencionados) hablando sobre cómo estructurar aplicaciones JS pequeñas, medianas y grandes (algo que es una consulta usual para los que se adentran en este terreno).

miércoles, 25 de julio de 2012

Firefox OS: ¿hace falta otra plataforma para móviles? ¡Tal vez si!

Firfox OS

En julio del año pasado la fundación Mozilla anunció el arranque de un nuevo proyecto llamado "Boot to Gecko" (B2G), en referencia a la idea de un sistema operativo orientado a móviles que iniciara directamente Gecko, el motor visual detrás de Firefox.

Semejante idea, en un mundo de dispositivos dominado por iOS y Android, en el que aún a Microsoft le está costando entrar, parece disparatada, pero Mozilla no tiene como objetivo necesario ganar mercado, sino impulsar mayor adopción de estándares web en el terreno de mayor crecimiento actualmente, que son celulares y tablets.

La característica fundamental del nuevo sistema operativo, actualmente conocido como Firefox OS (aunque encontrarán más referencias aún a B2G) es que está basado en un kernel de Linux, una capa de abstracción para el hardware (llamada "Gonk") y por encima el motor del navegador Gecko, soportando HTML, CSS y JavaScript que es sobre lo que corren todas las aplicaciones. Y esto significa todas, como la aplicación principal del teléfono, la lista de contactos, portada, etc.

El entorno de ejecución sobre el que corren las aplicaciones se llama Gaia, y para los que quieran probarlo, pueden obtenerse los builds nocturnos de Gaia clonando la cuenta de GitHub (git://github.com/mozilla-b2g/gaia; los builds corren en Mac OS, Linux y Windows). Hay un guía completa sobre el tema, llamada Gaia Hacking, en la Wiki de Mozilla.

Básicamente Gaia ofrece a los desarrolladores la posibilidad de producir aplicaciones web con el stock estándar de HTML5, más un API JavaScript que les da acceso a características especiales del dispositivo.

El otro factor importante es qué nivel de adopción se pueda esperar de esta plataforma, y en ese sentido es alentador ver que el sistema (inicialmente apuntando a hardware muy económico basado en Snapdragon) está siendo adoptado para próximas ofertas de varias operadoras europeas como Deutsche Telekom, Etisalat, Smart, Sprint, Telecom Italia, Telefónica y Telenor. De hecho, en una conferencia de febrero de este año en España, Telefónica y Mozilla mostraron una versión preliminar del sistema corriendo en dispositivos Galaxy II de Samsung, que vienen nativamente con Android. Otras organizaciones soportando directamente el proyecto son Adobe y Qualcomm (más información en esta gacetilla de prensa).

Como es recurrente en todo proyecto de Mozilla, absolutamente toda la plataforma es abierta, permitiendo a los operadores o fabricantes implementar una capa mínima que provee acceso a sus recursos propietarios. Más allá de eso, todo el diseño del sistema está alineado a respetar los mismos estándares web que se impulsan en los navegadores de escritorio, unificándolos aún más, y con un claro objetivo de que otros jugadores de la industria como Apple, Google o Microsoft sigan adoptando ese camino.

miércoles, 18 de julio de 2012

Monkey Square: desarrollando el ecosistema Open Source en .NET

MonkeySquare.org

Un grupo conformado por algunos de los sospechosos de siempre en el ambiente .NET han formado esta organización sin fines de lucro para evangelizar y apoyar activamente el desarrollo de proyectos y plataforma de código abierto alrededor de .NET.

Hay algunos ex-Microsoft como Phil Haack (actualmente en GitHub), Joseph Hill, cofundador de Xamarin con Miguel de Icaza, Dale Ragan, cofundador de Moncaí (una Plataforma como Servicio basada en Mono), e incluso un empleado activo (hiper-activo, en realidad) de Microsoft como Scott Hanselman.

Entre otras cosas, esta organización es actualmente la responsable de la conferencia MonoSpace 2012, que se realizará del 17al 19 de octubre en el Microsoft NERD Center (no, el nombre no es chiste) de Cambridge, Massachusetts. Los interesados en la conferencia puede acceder a todas las presentaciones de la edición del año pasado en InfoQ.

No hay muchas más noticias por ahora, pero parece un movimiento interesante. 

viernes, 13 de julio de 2012

Video: BrowserID - otro mecanismo de Identidad en la web

NewImage

Mozilla Persona es la implementación en en FireFox de BrowserID, un nuevo Identity Provider impulsado por Mozilla Identity misma junto a otros interesados.

Como en otros casos, este es otro mecanismo de Single-Sign-On para la web, y aunque todos lo plantean como el mecanismo único para identificarse, en la práctica sigue habiendo mucha fragmentación porque no todos los sitios (o navegadores) soportan todos los protocolos, que sin embargo, son generalmente interoperables (en esta interoperabilidad, casualmente, se basan las herramientas que genera en este espacio la nueva empresa de mi amigo Mati Woloski, Auth10; a quien menciono por ser de las personas que más saben de este tema sobre la Tierra).

 Lo cierto es que Mozilla agrega a este nuevo protocolo, basado en certificar la identidad utilizando una cuenta cualquiera de email, el soporte dentro del navegador, para poder brindar una experiencia de usuario mejorada. Como siempre, los desafíos son que otros navegadores adopten el modelo (cosa en la que no tengo enormes esperanzas), y que muchos sitios comiencen a soportar el mecanismo (o más probablemente, que productos como Auth10 o Janrain Engage) agreguen soporte para este nuevo proveedor.

Para los interesados en el tema, hay documentación para desarrolladores y un completo post de Lloyd Hilaiel, del equipo de BrowserID, explicando todo el mecanismo.

NewImage 

Y finalmente les dejo un video corto demostrando como funciona:

lunes, 2 de julio de 2012

ASP.NET MVC ya es completamente Open Source (+ video)

Open Web Stack

Este post debería haber salido hace bastante tiempo atrás, durante el lapso en que este blog estuvo silencioso, pero -nobleza obliga- hay gente conocida que trabajó mucho por esto y vale la pena comunicarlo para los que todavía no estaban al tanto.

El equipo de ASP.NET MVC avanzó un paso muy grande en su impulso hacia el código abierto a fin de marzo pasado al publicar el stack completo de MVC 4, incluyendo Web API, Web Pages (o Razor, el motor de rendering de vistas) con contribuciones externas, bajo licencia Apache 2.0.

Como detalle interesante, el código del stack completo está alojado en GIT dentro de CodePlex (que hace tiempo soporta GIT y Mercurial además de TFS y SVN). Esto implica que los curiosos sólo necesitan hacer un:

git clone https://git01.codeplex.com/aspnetwebstack.git

Desde el anuncio, Microsoft avanzó hasta la publicación en junio de las "release candidates" de MVC 4 (incluyendo ya un montón de contribuciones de la comunidad) y Visual Studio 2012. MVC 4 también incluye otros paquetes abiertos como jQuery,  jQuery Mobile,  jQuery UI, Modernizr, Knockout y JSON.NET.

Otro detalle interesante es que MVC no está atado a Visual Studio ni a .NET, y también corre en Mono. Casualmente, Miguel de Icaza (líder del proyecto Mono) fue el primero en contribuir con un pull request.

Dejo para el final un video (en 6 partes, ~80 minutos, en inglés) de Scott Guthrie presentando MVC 4. El video tiene un tiempo, pero es de lo mejor que encontré, presentado por la persona que está directamente detrás del proyecto, y uno de los mayores impulsores del código abierto dentro de Microsoft. No por casualidad, ahora que Scott está a cargo de la experiencia de desarrollo de Azure, todos los SDK y herramientas son también abiertas.

viernes, 29 de junio de 2012

JetBrains + Nemerle = una dupla poderosa (+ video)

La gente de JetBrains, los cerebros a propulsión detrás de IntelliJ IDEA, ReSharper y toda una familia de IDEs especializadas, anunció recientemente la contratación del núcleo del equipo de desarrollo de Nemerle, uno de esos "raros lenguajes nuevos", completamente abierto, que revisé en este blog un año atrás.

Como explican en el anuncio, la incorporación se decidió en reconocimiento al increíble trabajo de Nemerle en la implementación del lenguaje y sus características de meta-programación, inferencia de tipos, etc. El foco del equipo estará por o tanto en el proyecto N2, un framework para desarrollo de lenguajes, un área a la que JetBrains se dedica muy especialmente y con evidente éxito.

Para que se den una idea sobre lo que genera esta gente, les dejo un video fresquito de una sesión sobre este lenguaje presentada por Igor Tkachev, del equipo de desarrollo, durante la reciente Norwegian Developers Conference en Oslo, a principios de junio (dura menos de media hora y está en inglés).

Da la impresión que el contacto y la posibilidad de fusión surgió a partir de esta época, así que puede ser un video para la historia (al menos para el equipo de Nemerle y JetBrains).

lunes, 25 de junio de 2012

Se vienen PyCamp y PyCon Argentina (+ video)

La infatigable comunidad Python de Argentina está organizando dos de sus eventos más populares.

PyCamp 2010

PyCamp 2012, el cyber-campamento más entretenido que se pueda imaginar, será del 6 al 9 de julio (aprovechando el fin de semana largo) en la localidad bonaerense Verónica.

El PyCamp, como su nombre lo indica, se hace en el contexto de un campamento, y todos los participantes deciden al empezar una disposición de espacios en los que la gente puede presentar, plantear un debate, proponer una actividad de desarrollo conjunto, etc.

También hay amplio espacio para charlar, comer asado, jugar un picadillo y tomar mate. El evento es totalmente relajado, en compañía de otros programadores de profesión y corazón.

Si quieren saber quienes van, pueden ver la lista de interesados, que incluye una columna indicando si ya depositó la plata ($500 por la estadía completa). También se pueden ver algunos de los temas propuestos de antemano (que igual se votan al llegar), y por supuesto, la lista de recomendaciones de cosas para llevar.

NewImage

Y para quienes tienen alergia a los mosquitos o le molestan los ruidos de los grillos, más tarde llega la PyCon Argentina 2012, que será en Quilmes, la capital argentina de la cerveza y las conferencias geek (los quilmeños están comprometidos a hospedar anualmente una conferencia de este tipo, y ya empezaron el año pasado con Smalltalks 2011).

La PyCon será del 12 al 17 de noviembre en la Universidad Nacional de Quilmes. En este caso la entrada es libre y gratuita, pero hay que registrarse, ya que los cupos son limitados.

Como siempre, asistirán invitados del exterior como:

 Habrá varias actividades como los Sprints/Hackatón (Lunes 12 al miércoles 14), Tutoriales y Talleres (el jueves 15), Charlas y Eje Científico (del viernes 16 al sábado 17).

Lamento llegar un poco tarde con el aviso, pero el llamado a propuestas vence el 30 de junio (el próximo sábado).

Les dejo como cierre el video promocional que la comunidad produjo para promocionar sus actividades, donde pueden ver mucho de lo que hacen, desde los camps hasta la conferencia nacional (~4 minutos y medio que valen la pena).

viernes, 9 de marzo de 2012

Lindo proyecto para despuntar el vicio

Markdown

En las últimas semanas un grupo de colegas y amigos, liderados por Matias Woloski y Lito Damiani e incluyendo a unos cuantos compañeros de Southworks, lanzaron un proyecto de código abierto muy interesante, que es a la vez una herramienta muy útil y una gran idea para practicar JavaScript, Node y varios temas interesantes de programación en un entorno compartido.

El proyecto se llama MarkdownR y esta es la descripción (en mi traducción rápida al español, con links agregados):

MarkdownR es un editor colaborativo de markdown construido sobre share.js y corriendo en Node.js sobre Windows Azure que permite...

  • editar un archivo markdown en colaboración y ver los cambios que hacen los demás en tiempo real
  • abrir y guardar sobre el almacenamiento de blobs de Windows Azure
  • abrir y guardar en GitHub utilizando su API y OAuth
  • copiar y pegar imagenes desde el portapapeles que se guardan automáticamente en el almacenamiento de blobs (sólo funciona en Chrome por ahora)

MarkdownR surgió de programadores de Southworks durante su tiempo libre entre proyectos y se plantea también como una herramienta de aprendizaje. La calidad del código es la de una prueba de concepto. No hay pruebas (todavía), tiene defectos, no funciona en IE9 y no hace limpieza del HTML (así que si alguien agrega tags de script y rompe todo, que no se enoje).

El proyecto es completamente abierto (las contribuciones se aceptan como pull requests) y está alojado en GitHub, listo para clonar y jugar.

 

viernes, 17 de febrero de 2012

Se liberó la Beta de ASP.NET MVC 4 (+ video)

Para los lectores interesados en .NET, esta es una muy buena noticia. La nueva versión de ASP.NET MVC ya está en Beta, y al parecer bastante estable, siguiendo el estilo de este equipo, que se diferencia de otros de Microsoft en su ciclo de producto sumamente iterativo y muy basado en pruebas.

Otra particularidad de este equipo es que termina liberando (ya que no arrancan así durante el desarrollo, lamentablemente) el producto como código abierto. Scott Guthrie, padre de ASP.NET MVC y buena parte del viejo ASP.NET, confirmó que esta versión también será licenciada como código abierto (la actual tiene licencia Apache 2.0), ante la pregunta de Miguel de Icaza en Twitter, lo que implica que podrá utilizarse con Mono próximamente.

The Gu le contesta a Miguel

La versión Beta, que ya está disponible para descarga y puede usarse en paralelo con MVC 3, tiene las siguientes mejoras principales:

  • ASP.NET Web API - la versión final del modelo para servicios REST, evolución de la WCF Web API.
  • Plantillas de proyecto nuevas y mejoradas, con código HTML mucho más cuidado, código más prolijo del lado del servidor, y uso de rendering adaptativo para que se vea correctamente en múltiples dispositivos.
  • Nueva plantilla para sitios móviles - aunque la plantilla básica se adapta bien a teléfonos, esta nueva está específicamente pensada para ese escenario, incluyendo de entrada jQuery Mobile para mejorar la experiencia táctil.
  • Modos de Display es la característica que permite cubrir el escenario mixto en que la misma aplicación debe tener vistas especializadas para diferentes dispositivos, con el mismo código servidor y mínimos cambios en el código cliente, pero que implican una gran diferencia en la experiencia del usuario.
  • Recetas para generación de código - facilitan a los autores de paquetes NuGet utilizar generación para alterar la generación ante los comandos de agregado de vistas, controladores, etc.
  • Soporte para Tasks (tareas asincrónicas) en los controladores.

Probablemente una de las novedades más importantes es la inclusión de la Web API, que permite generar servicios que pueden exponerse incluso fuera de IIS, y mejora mucho las capacidades para construir aplicaciones RESTful. Dejo un video (en inglés, 70 minutos) de Daniel Roth, del equipo de MVC, demostrando sus capacidades principales.

miércoles, 15 de febrero de 2012

Bootstrap 2.0: de Twitter para el mundo

Twitter

El equipo de la interfaz web de Twitter publicó ya hace tiempo como código abierto y gratuito Bootstrap, un conjunto de herramientas para trabajar interfaces web de manera consistente y basada en los nuevos estándares.

Bootstrap está basado en HTML5, incluye hojas de estilo en cascada (CSS) y componentes en JavaScript que brindan muchísimas flexibilidad y consistencia para lograr páginas limpias y sencillas, que a primera vista resultan familiares y fáciles de usar, como este ejemplo (sumamente básico, pero ilustrativo):

Ejemplo de Bootstrap

Hace unos días los responsables de Bootstrap, que está alojado en GitHub y es uno de los proyectos más exitosos en el sitio, que recibe además múltiples aportes de la comunidad, liberaron la versión 2.0, que agrega un esquema de trabajo sobre una grilla de 12 columnas que facilita la ubicación de elementos que pueden reacomodarse en diferentes formatos de dispositivo, y permite crear elementos anidados, relativos, etc.

Otra novedad es que todo el manejo de hojas de estilo ahora está basado en LESS, un lenguaje dinámico que extiende y mejora CSS a través de manipulación en JS.

Un último detalle que me parece muy bueno es la posibilidad de configurar el conjunto de herramientas necesarias para un proyecto en particular y poder descargar el paquete mínimo necesario, pero con todas las dependencias y configuración perfectamente resueltas. Así se puede optar por incluir o no cualquiera de estas múltiples características:

Componentes

  • Scaffolding
    • Normalize and reset
    • Body type and links
    • Grid system
    • Layouts
  • Base CSS
    • Headings, body, etc
    • Code and pre
    • Labels
    • Tables
    • Forms
    • Buttons
    • Icons
  • Components
    • Button groups and dropdowns
    • Navs, tabs, and pills
    • Navbar
    • Breadcrumbs
    • Pagination
    • Pager
    • Thumbnails
    • Alerts
    • Progress bars
    • Hero unit
  • JS Components
    • Tooltips
    • Popovers
    • Modals
    • Dropdowns
    • Collapse
    • Carousel
  • Miscellaneous
    • Wells
    • Close icon
    • Utilities
    • Component animations
    • Responsive
    • Responsive layouts

Y también se pueden seleccionar los plugins de jQuery, como transiciones, modal dialogs, dropdowns, tooltips y muchísimas cosas más.

Finalmente también se pueden personalizar los valores básicos de una serie de variables de LESS que se toman como base inicial.

La mejor manera de conocer y valorar Bootstrap es mirar un poco el sitio y descargarlo para probar.

jueves, 9 de febrero de 2012

¿MacBook con teclado en inglés?

Argento Layout

Los lenguajes de programación, no importa de qué origen, están pensados para escribir con un teclado en inglés. Es cierto que se puede escribir código con cualquiera, pero siempre es más complicado al alejarse del clásico "US Layout". Por eso siempre busco computadoras con teclas en inglés, como en el caso de mi MacBook.

Pero claro, también tengo que escribir frecuentemente en español, como en este blog. Mac OS X tiene una serie de secuencias de teclas por omisión para ingresar vocales con tilde, diéresis, etc, pero la mayoría de nosotros estamos acostumbrados a teclear la tilde primero y después la vocal, etc. Como no encontré un esquema de teclado con las combinaciones que me gustaban, construí uno, y para ahorrarle tiempo a quien venga detrás, lo comparto con ustedes.

Argento Layout es un esquema de teclado (Keyboard Layout) para Mac OS X, pensado para computadoras con teclado en inglés (US) de fábrica, que facilita escribir en español.

Las combinaciones de tecla habilitadas son las vocales acentuadas (minúsculas y mayúsculas) que se logran pulsando la tilde (debe estar entre las teclas ";" y "return"), y adicionalmente pulsando la tilde y luego la "n" (mayúscula o minúscula) se obtiene la "ñ".

Como también escribo frecuentemente en inglés, mantuve un detalle importante: si se escribe algo diferente de vocal o "n" luego de la tilde, el caracter resultante es una comilla simple, no una tilde, lo que evita que un texto en inglés quede como:

I'm a coder (correcto)

...en lugar de:

I′m a coder (incorrecto - en inglés el caracter correcto para las contracciones es un comilla recta, no unan tilde)

Los interesados solamente deben copiar el archivo "Argento.keylayout" descargado dentro de la carpeta "~/Library/Keyboard Layouts" (~ indica su carpeta de usuario) si quieren tener el esquema disponible solamente para su perfil. Si quieren que esté disponible para todos, copien el archivo en "/Library/Keyboard Layouts" desde el directorio raíz.

Para poder usarlo hay que hacer "Logout" y "Login" nuevamente. Si quieren poder cambiar el modo de teclado, pueden modificarlo en las Preferencias de Teclado, y pueden dejar el icono disponible en la barra de menú para poder alternarlos fácilmente (como se ven en la imagen más arriba).

Espero que a alguno de ustedes le resulte útil.

 

miércoles, 8 de febrero de 2012

Aprendiendo Vim en un rato (+ video)

Vim

(post dedicado a los programadores anticuados como yo, y a los que me miran raro cuando me ven usar una Mac desde la línea de comandos)

Vim es uno de los editores más minimalistas, sólo superado por su antecesor Vi.

Una descripción rápida en español, provista por el sitio oficial dice:

¿Qué es Vim?

(Una explicación en seis kilobytes - versión completa en español en el sitio oficial)

Vim ("VI IMproved") es un "clon de VI", es decir, un programa similar al editor de textos "VI".

Vim no solo trabaja en modo de texto en cualquier terminal, sino que también tiene un interfaz gráfica para el usuario, es decir, menús y soporte para el ratón.

Disponibilidad: Vim está disponible para muchas plataformas y tiene muchas características añadidas en comparación con VI (véase http://www.vim.org/viusers.php). Vim es compatible con casi todos los comandos de VI - excepto con los errores(bugs) en VI. ;-)

Sistemas Operativos: Vim está disponible para muchos sistemas: AmigaOS, Atari MiNT, BeOS,DOS, MacOS, NextStep, OS/2, OSF, RiscOS, SGI, UNIX, VMS, Win16 + Win32(Windows95/98/00/NT) - y especialmente FreeBSD y Linux.

Copyright: El copyright está en las manos del autor principal y mantenedor, Bram Moolenaar.  Vim es un "programa-de-caridad" ("charity-ware"), es decir que se sugiere que hagas una donación a los huérfanos en Uganda(véase ":help Uganda ").

Fuentes: Vim es OpenSource y todos son bienvenidos para ayudar a mejorarlo!

En la mayoría de las distribuciones de Unix/Linux, incluyendo Mac OS X, Vim ya está instalado y disponible. En Windows hay que descargarlo, al igual que si uno quiere estar seguro de tener la última versión en cualquier otra plataforma.

La forma más sencilla de empezar a usar Vim es escribiendo desde la línea de comandos:

vimtutor

Este comando en realidad carga Vim con un tutorial (en inglés) ya abierto. En realidad es una copia temporal del archivo del tutoríal, de manera de poder editar y practicar sin perder nada. El tutorial lleva unos 20~30 minutos, y para quienes lo encaren, espero que no se asusten cuando comienza explicando cómo moverse por el archivo utilizando las teclas HJKL. A no desesperar: las flechas también funcionan, pero sobre todo para quienes son buenos tipeando (no es mi caso), poder moverse sin tener que quitar las manos de la parte principal del teclado termina siendo sumamente útil.

Para quienes quieran aprender un poco más y darle una chance a Vim, que seguirá estando cuando las interfaces estilo Minority Report pasen de moda, tienen más información en Vim University. Dejo debajo un video (en inglés; menos de 6 minutos en total) donde se explica cómo crear macros.

Como Vim está centrado en el teclado, presten atención a la esquina inferior derecha del video, donde se van mostrando las teclas que el autor pulsa (ya que la mayoría son comandos que no se ven en el editor). Espero que les de una idea de la relación simplicidad/flexibilidad de este editor.

viernes, 27 de enero de 2012

Ya llegó Ruby 3.2

Ruby On RailsYa se liberó una nueva versión de Ruby on Rails, uno de los más famosos frameworks para desarrollo web. De hecho, se liberó la 3.2 y casi inmediatamente la actual 3.2.1 resolviendo algunos temas menores aparecidos en cuanto la primer tanda de desarrolladores comenzaron a probar en masa.

Las características principales de la nueva versión son:

Modo de desarrollo y ruteo más rápidos

Mientras que las versiones anteriores de Rails re-evaluaban el código todo el tiempo durante el modo de desarrollo, la actual toma la idea de ActiveReload y solamente re-evalúa el código que haya sido modificado, acelerando mucho el ciclo de prueba-corrección-nueva prueba.

También se optimizó mucho la velocidad de resolución de rutas, incorporando el nuevo motor Journey.

Explicación de consultas

La nueva versión de ActiveRecord agrega un método explain que devuelve el detalle de resolución de una consulta, facilitando entender la forma en que el motor la resolvió para poder analizar la conveniencia de modificar índices o relaciones. De hecho, en el modo de desarrollo cualquier consulta que tarde más de cierto tiempo (medio segundo, por omisión) explica su resolución en la consola, como una medida de alerta que ya incluye el primer paso del diagnóstico.

Logging con etiquetas

La nueva versión de ActiveSupport brinda especial flexibilidad para poder dejar constancia en los logs de los dominios, usuarios, id de petición y otros datos que facilitan el análisis de operaciones o problemas en ambientes con muchos usuarios.

 

Los interesados en probar la nueva versión, pueden descargarla del sitio oficial. Como siempre, utilizando RVM se puede probar en paralelo con cualquier otra versión que tengamos instalada.

Si son usuarios de Mac (sobre todo si usan Mac OS Lion) ahorren tiempo leyendo las instrucciones del amigo Luis Petek sobre cómo sortear algunos detalles menores con ese entorno durante la instalación.

 

jueves, 29 de diciembre de 2011

El año del código abierto para .NET (+video: .NET en Chrome!)

OuterCurve Foundation

Se va terminando el año 2011 y mirando hacia atrás desde la perspectiva de la comunidad .NET somos varios los que vemos que este año fue sumamente importante para el código abierto en ese entorno. Y no estoy hablando solamente de Microsoft, ya que .NET ya tiene entidad independiente de su creador original.

Para los que tienen ganas de leer posts más largos y en inglés, recomiendo los de Phil Haack (hasta hace poco líder del ASP.NET MVC en Microsoft, ahora trabajando para GitHub) y Miguel de Icaza (el incansable líder del proyecto Mono).

Este post es un resumen breve del contenido que ellos exponen, con algunas apreciaciones personales.

El modelo Open Source fue algo que Microsoft, con su tradición de secretos y licenciamiento complejo, tardó muchísimo en incorporar. Y más complejo aún el modelo de Free Software, que implica tanto apertura como gratuidad de los productos. Sin embargo, desde hace años, con pioneros como IronPython, el DLR, y más tarde ASP.NET MVC, varios productos de la plataforma de desarrollo empezaron a producirse bajo esta premisa. Un punto culminante de esta iniciativa fue en 2008, cuando Microsoft anunció que comenzaba a incluir jQuery en Visual Studio, colaborando con el proyecto (de manera abierta, como cualquier otro) e incluso brindando soporte sobre el mismo.

Al entender la importancia del movimiento, Microsoft finalmente generó una Fundación llamada OuterCurve (originalmente se llamaba CodePlex, pero usar el mismo nombre que su sitio de alojamiento de código resultaba muy confuso), que como la Fundación Apache, permite resguardar los derechos del código y de los autores en un ambiente controlado. Muchos proyectos hoy existen bajo OuterCurve, aunque hay muchos también directamente en Apache.

Finalmente, este año Microsoft avanzó más en ese sentido, mejorando notablemente las condiciones de búsqueda e integración de código abierto propio o de terceros, a través de NuGet, el administrador de versiones para .NET, inspirado en Ruby Gems y similares. NuGet se integra en Visual Studio o puede usarse en la línea de comando, y permite buscar en un catálogo muy abundante actualmente de componentes abiertos, instalarlos en nuestros proyectos, incluyendo todas sus dependencias, e incluso automatizar tareas relativas a su instalación y uso, como declararlos en configuraciones, generar código u otros artefactos desde la consola, etc. NuGet también facilita mantener actualizadas, si es necesario, todas las versiones de estos paquetes.

Pero como decía al principio, .NET va más allá de Microsoft (y de Windows) desde hace tiempo, y la alternativa principal es el proyecto Mono, que como Miguel comenta en su post, tuvo un año increíble, lleno de novedades. La más importante para el proyecto mismo fue la venta de Novell a Attachmate y el posterior corte del equipo completo de Mono, que rápidamente se reincorporó como Xamarin, un reflejo directo de Ximian, la compañía original de Miguel y Nat Friedman que Novell adquiriese años antes.

Más allá de la reagrupación, que no redujo en lo más mínimo el impulso del proyecto Mono, a pesar de que el equipo de Xamarin se concentró en poner en el mercado MonoTouch y Mono for Android (productos comerciales que les permiten seguir sobreviviendo). Mientras tanto, el equipo de Mono (que excede también a Xamarin, como todo gran proyecto abierto) entregó este año una avalancha de tecnologías (más allá de varias versiones del runtime mismo de Mono y de MonoDevelop, su IDE), incluyendo:

  • .NET en el navegador (al menos en Chrome) a través de Mono corriendo en el Native Client de Google. De hecho, Google mostró Mono en Chrome en un evento reciente, del que dejo el video al final de este post. Aunque el año pasado ya se podía programar en mono y utilizar el compilador estático para ejecutar código dentro de Chrome, este año ya se puede ejecutar el compilador a demanda (JIT) de Mono.
  • MonoMac es una extensión de Mono para programar aplicaciones para Mac OS X en .NET, incluyendo el soporte para Cocoa y todo el entorno del sistema operativo. Se programa utilizando MonoDevelop y algunas herramientas nativas como los diseñadores de XCode.
  • MonoGame (ya comentado antes en este blog) es un port del entorno de desarrollo de juegos XNA de Microsoft, pero abierto y con mayor alcance en plataformas.
  • Sony PlayStation Suite es un framework de Sony para desarrollar juegos en diferentes dispositivos de su línea, completamente basado en Mono.
  • Phalanger es un compilador de PHP, actualmente basado en Mono, utilizando el DLR, que además de ser el motor PHP de mayor rendimiento, permite extender ejecutar cualquier aplicación PHP y extenderla con librerías o aplicaciones .NET.
  • CXXI es una tecnología puente entre C# y C++ que permite ejecutar código de una a otra plataforma, pero también heredar clases entre ellas, sobre-escribiendo métodos o no, o llamando a la clase base, todo de manera muchísimo más sencilla, segura  y multi-plataforma que utilizando COM.
  • Y hay bastante más (ver el post de Miguel para el detalle completo), pero como detalle final, Miguel descubrió que Microsoft mismo utilizó Mono para producir el juego Kinectimals para iOS. ¡Toda una ironía!

Dejo el video (en inglés) del evento de Google Client para que lo disfruten:

martes, 27 de diciembre de 2011

PhoneGap: un entorno para gobernar a todos (+ videos)

PhoneGap

El terreno del desarrollo de aplicaciones para móviles es cada vez más complejo. Incluso a medida que avanza el dominio de iOS y Android, hay una cantidad de dispositivos y sistemas operativos que aun son relevantes, y las variantes entre formatos, restricciones impuestas por las tiendas de cada fabricante y demás particularidades tienden a complicar la tarea enormemente.

En estos casos siempre han surgido intentos de proveer un único entorno que permita generar aplicaciones para diferentes objetivos, pero en general los resultados no son demasiado buenos porque suelen apuntar a un denominador común que usualmente es bajo y desaprovecha el potencial de muchas de las plataformas. No es el caso con PhoneGap, una plataforma que permite desarrollar aplicaciones nativas para múltiples dispositivos, a partir de su desarrollo en HTML5 (HTML, CSS y JavaScript).

PhoneGap es código abierto y gratuito y fue creado por una pequeña empresa llamada Nitobi que fue comprada en octubre por Adobe, que mantuvo el compromiso de mantener las características abiertas de la plataforma, delegando incluso la base de código a la Apache Software Foundation.

Desarrollando en HTML/JS, PhoneGap permite acceder a todas las API nativas de cada plataforma (salvo en casos ne que no existen) y el empaquetado posterior genera aplicaciones nativas y ajustadas a los requerimientos de los mercados de cada proveedor. Las plataformas cubiertas actualmente son:

  • iOS
  • Android
  • Blackberry (OS 4.6 hasta 6.0)
  • WebOS (de hp)
  • Windows Phone 7
  • Symbian
  • Bada (la plataforma de Samsung)

Y las APIs cubiertas cubren casi todo lo que cada tipo de dispositivo tiene disponible (muchos no tienen brújula o no soportan video, por ejemplo), incluyendo:

  • acelerómetro
  • cámara
  • brújula (si hay)
  • contactos
  • archivos (en los sistemas que lo permiten)
  • posición geográfica
  • media (audio/video)
  • red
  • notificaciones visuales, sonoras o vibrador
  • almacenamiento

Veamos un ejemplo rápido de cómo utilizar el acelerómetro en JS:

function onSuccess(acceleration) {
    alert('Acceleration X: ' + acceleration.x + '\n' +
          'Acceleration Y: ' + acceleration.y + '\n' +
          'Acceleration Z: ' + acceleration.z + '\n' +
          'Timestamp: '      + acceleration.timestamp + '\n');
};

function onError() {
    alert('onError!');
};

navigator.accelerometer.getCurrentAcceleration(onSuccess, onError);

Esta interfaz funciona en Android, iOS y BlackBerry OS 5.0 o superior. De manera similar puede accederse a casi todos los recursos de los dispositivos, y la funcionalidad es la mejor posible para cada uno de ellos, ya que no se reduce todo al denominador común, sino que hay soporte para toda la funcionalidad de las plataformas. Es importante entender que no hay magia y cada plataforma final mantiene sus requerimientos originales. Por ejemplo, para generar aplicaciones iOS es necesario trabajar en Mac OS, y para genera aplicaciones Windows Phone es necesario Windows; Android requiere en el SDK y Eclipse, etc.

Quedan a continuación un par de vídeos (en inglés) mostrando PhoneGap en acción para iOS y Android.

lunes, 14 de noviembre de 2011

MonoGame: XNA multi-plataforma

Mono Game

Como todos saben, soy bastante fanático de Mono, la implementación de código libre y abierto de .NET, liderada por Miguel de Icaza.

El año pasado se inició un proyecto llamado inicialmente XNATouch, cuyo objetivo era permitir portar juegos desarrollados en XNA (la plataforma para desarrollo de juegos en XBOX y Windows Phone) a iOS (iPhone, iPod y iPad). El proyecto avanzó bastante, cambió de nombre a MonoGame, y el mes pasado llegó a su versión 2.0, extendiendo el alcance de iOS a Android, Linux, Windows y Mac OS, y de paso, mudándose a GitHub.

El proyecto es muy interesante porque brinda un mecanismo sólido de desarrollo de juegos para múltiples plataformas, algo que es cada vez más requerido por quienes producen para esta industria, sobre todo en los ambientes móviles.

Como ejemplo, este es el código de arranque para ejecutar un juego desarrollado en XNA en iOS (utilizando MonoTouch):

using MonoTouch.Foundation;
using MonoTouch.UIKit;

using Microsoft.Xna.Framework;

namespace MonoGame.Samples.Storage
{
	[Register ("AppDelegate")]
	class Program : UIApplicationDelegate
	{
		private Game1 game;

		public override void FinishedLaunching (UIApplication app)
		{
			// Fun begins..
			game = new Game1();
			game.Run();
		}

		static void Main (string [] args)
		{
			UIApplication.Main (args,null,"AppDelegate");
		}
	}
}

Por ahora el framework soporta solamente juegos 2D, y el API de 3D es el foco principal de trabajo para la versión 3.0. Si está disponible el stack de networking suficiente para permitir jugadores simultáneos dentro de un mismo segmento de red, sin importar la plataforma en que estén ejecutando el juego.

Para quienes quieran ver el proceso en más detalle, recomiendo esta serie de 4 artículos de Alfredo Machin, en las que describe el proceso de migración de un juego XNA a Mac OS (utilizando MonoMac): Parte 1, Parte 2, Parte 3, Parte 4.