Materiales de la charla sobre desarrollo Full Stack

El pasado 17 de marzo estuve con los chicos del DotNetClub de la UAM hablando sobre desarrollo Full Stack en la Escuela Politécnica Superior.

Desde un punto de vista personal (y sesgado) discutimos la definición de stack, la importancia de conocer las diferentes partes del mismo, los diferentes modos de ver stacks, las piezas móviles con las que nos podemos encontrar, así como diferentes arquitecturas, utilizando comida italiana como ejemplo, raviolli, lasagna, risotto, pizza, panetone…

Las slides de la charla las tienes disponibles en SlideShare y a continuación.

Gracias por asistir!

Estuve en el Lambda World

Escribo estas líneas volviendo en tren desde Cádiz, una ciudad enigmática que me recuerda muchísimo a mi añorada Habana, tal vez porque la segunda se construyera basándose en la primera.

Cádiz, además de ser la ciudad que acogió la firma de la primera Constitución Española en 1812, ha acogido el pasado fin de semana el primer evento internacional de programación funcional celebrado en España, el Lambda World.

En este evento, ponentes de todas partes del mundo han venido a contarnos acerca de características de la programación funcional como mónadas, funciones puras, inmutabilidad, efectos secundarios, o sobre cómo llevar conceptos de programación funcional a programación orientada a objetos.

Para ello, hemos visto ejemplos en lenguajes como F#, C#, Java, Ruby, Swift, y, sobre todo, Scala. He aprendido muchísimo y aquí resumo algunos conceptos que me han llamado la atención y que me toca seguir estudiando.

La inmutabilidad, más complicada pero menos propensa a errores.

En programación orientada a objetos definimos clases con propiedades y comportamiento. Este comportamiento suele implicar un cambio en el estado del objeto.

Sin embargo, es justamente lo que queremos evitar en programación funcional, ya que trabajamos con objetos inmutables, con lo cual una vez creados, no cambia ninguna de sus propiedades.

Esto también se aplica a colecciones, y a los miembros de la misma, con lo cual la acción de añadir un objeto a una colección, o modificar un objeto de la misma requiere crear una nueva colección.

Con estos objetos inmutables lo que conseguimos asegurarnos que su estado no va a cambiar, y que no vamos a tener «sorpresas» cuando pasemos un objeto a un método que de repente modifique alguna de sus propiedades.

Sin embargo, aunque lenguajes como Swift, Scala o F# soportan inmutables por diseño, en el mundo clásico de la orientación a objetos, tanto para Java, C# o Ruby, es justamente al contrario, y queda de nuestra mano utilizar colecciones inmutables y definir manualmente nuestros objetos.

Las funciones puras no generan efectos secundarios, o casi

Otro concepto que se repitió bastante en el evento era el de función pura, que no es más que un método que recibe una entrada y devuelve una salida.

La magia de este concepto es que cuando lo combinamos con los objetos inmutables, conseguimos que para una entrada X tenemos la absoluta seguridad de que la salida será Y, SIEMPRE.

Esto nos permite, entre otras cosas, poder probar de manera rápida nuestras funciones si el lenguaje que estamos utilizando incorpora una consola REPL (Read Evaluate Print Loop), ya que una vez definida la función solamente tenemos que ejecutarla con los valores adecuados.

Los lenguajes funcionales no son algo solamente «académico»

Aunque los conceptos que nos muestren se acerquen bastante más a las matemáticas que a ensamblador, los ejemplos mostrados en aplicaciones móviles, sistemas cliente-servidor, arquitecturas funcionales y videojuegos, me dejaron bastante claro que la programación funcional está aquí para quedarse, y que ya estamos tardando, al menos, en aprender algunos de sus conceptos.

No tengo ni idea de lo que son las monads, creo.

Uno de los conceptos de programación funcional que se me escapa es el de las monads, que al parecer son tipos de datos con propiedades específicas, y uno de los ejemplos que veíamos en el evento era el del monad Either, que tiene dos tipos, Left o Right.

Con este monad podíamos definir el resultado de nuestra función, siendo Left un resultado de éxito, y Right una definición de un error, evitando flujos como captura de excepciones.

Este concepto tiene a su vez conceptos relacionados como monoids o functors… de los cuales tendré que leer, y mucho.

Podemos usar conceptos de programación funcional con lenguajes no puramente funcionales.

Conceptos como funciones puras u objetos inmutables son relativamente fáciles de implementar aunque los lenguajes no lo refuercen nativamente, sin embargo requiere un grado de disciplina mayor.

Sin embargo lenguajes como C# o Java van aportando cada vez más características de la programación funcional a su sintaxis, como las Lambdas y las colecciones inmutables. Aunque no es el escenario ideal para utilizar programación funcional, nos permite usar lo que ya sabemos.

Tenemos muchas maneras de empezar, aunque hay dos muy interesantes:

Por una parte tenemos lenguajes como Scala, en el que podemos desarrollar de la misma manera en la que lo veníamos haciendo hasta ahora, ya que soporta tanto tipos mutables como inmutables, e ir agregando características de la programación funcional a nuestros programas.

Por otra parte tenemos lenguajes F#, que nos permite lanzarnos al vacío, con una sintaxis que nos podría recordar cuando encadenamos la salida de distintos procesos en una shell de unix, que nos permite aprender programación funcional más «pura» y su interoperabilidad con C# nos permite agregar componentes funcionales a nuestro proyecto.

En resumen

Tenemos características como la inmutabilidad y las funciones puras que nos evitan sorpresas en nuestro código, podemos empezar migrando poco a poco a funcional o tirarnos a la piscina con lenguajes que solamente implementan este paradigma, y tenemos algo de soporte en nuestros lenguajes del día a día de algunos conceptos como las lambdas. Ha sido una experiencia muy enriquecedora, y espero veros en la siguiente edición de Lambda World

Vídeo y enlaces del hangout sobre programación funcional

El pasado 11 de marzo tuve la oportunidad de moderar hangout sobre algunas de las ventajas que nos aporta la programación funcional con experiencias en F#, Scala y Clojure con estos cracks

El vídeo del evento está disponible aquí:

Además, compartimos algunos enlaces sobre la diferentes herramientas, y he recopilado estos enlaces en la siguiente lista:

Haskell

F#

Scala

Clojure

La lista está disponible además en github , así que puedes contribuir y agregar tus propios enlaces mediante Pull Requests.

Nos vemos en el siguiente!

Hangout: Programación funcional #hablafuncional

Tengo el placer de invitarte a un nuevo hangout el próximo 11 de Marzo a las 20:00 (GMT+1) donde hablaremos de programación funcional tanto con F# como con otros lenguajes como Scala o Clojure, continuando la conversación de la pasada DotNetSpain Conference.

Esta vez, además, contamos con un panel de auténtico lujo, en el que repite (como no podía ser de otra manera) mi buen amigo Juan Quijano (@jc_quijano) como moderador, además de los siguientes invitados:

  • Alex Casquete (@acasquete): Coordinador del Meetup de F# en Barcelona.
  • Alfonso García (@alfonsogcnunez): Coordinador del Meetup de F# en Madrid.
  • Juanma Hernandez (@gulnor): Desarrollador de software con mucho interés en Clojure.
  • Javi Pacheco (@javielinux): Desarrollador Android y Scala en 47 Degrees.
  • Francisco Díaz (@francisco_dr): Desarrollador Android y Scala en 47 Degrees.
  • Juan Pedro Moreno (@juanpedromoreno): Desarrollador Senior Scala en 47 Degrees.
  • Juan M Gomez (@_jmgomez_): Desarrollador F#.

Durante un par de horas intentaremos responder a las siguientes preguntas (y todas las que tengas a través del hashtag #hablafuncional):

  • ¿Qué aporta (en general) la programación funcional?
  • ¿Cómo podríamos dar nuestros primeros pasos para pensar en funcional?
  • ¿Cuan sencillo resulta interoperar con otras plataformas, C# en el caso de F# y Java en el caso de Scala/Clojure?
  • ¿Qué requisitos adicionales tenemos para agregarlo a nuestro proyecto?

Inscríbete aquí: Programación Funcional con F# – Google Hangouts

Desde aquí un agradecimiento a todos por su interés en participar, a todos los que se han interesado vía Twitter, , en especial a Alex Campos por ponernos en contacto con los chicos de 47 Degrees para dar otra perspectiva a la programación funcional.

Nuevo hangout el próximo 10 de febrero: Experiencias del mundo real con Xamarin

Actualización: Aquí tienes el vídeo del evento:

Vuelven los hangouts en 2015! Tras el parón de navidades y la cuesta de enero volvemos con desarrollo móvil usando C# en otras plataforma no Microsoft. Veremos de primera mano algunas experiencias que han tenido nuestso invitados con proyectos y aplicaciones reales.

Además tenemos la suerte de contar no con uno, sino con dos miembros del equipo de desarrollo de Xamarin para darnos su visión desde el otro lado. Dos horas que seguro que se nos quedan cortas.

La cita es el próximo 10 de febrero a las 20:00 GMT+1 en Google Hangouts: https://plus.google.com/events/c8ojlcgbi8gtsseulj331hpu5eo.

Desarrollo móvil multiplataforma con Xamarin

Contamos con el siguiente panel para el debate:

  • Jose Miguel Torres: Desarrollador en Xamarin
  • Rodrigo Moya: Desarrollador en Xamarin y colaborador del proyecto Gnome
  • Francesc Jaumot: Desarrollador y CEO en Clibb
  • Josue Yeray: Desarrollador independiente y MVP de Microsoft
  • Javier Suarez: Desarrollador independiente y MVP de Microsoft
  • Juan Carlos Quijano: Desarrollador independiente
  • Un servidor, que no se pierde una

En esta ocasión nos acompaña una vez más Syncfusion, así que si vienes puedes llevarte una licencia de uno de sus productos de manera completamente gratuita.
Te esperamos allí!

Si no puedes asistir lo dejaremos grabado en cuanto finalice el evento.

Materiales del evento: «Tres Tecnologías Microsoft que no se dan durante la carrera»

El pasado viernes a la hora de comer pasé una hora con los chicos de UAM.net en la Escuela Politécnica Superior de la UAM hablando sobre las tres tecnologías Microsoft que, a mi entender, no se impartían en la carrera cuando yo era estudiante.

IMG_8990

Concretamente, en esta charla estuvimos hablando de:

  • Windows Phone, Windows 8 y el resto de las plataformas móviles
  • ASP.net MVC, Web API, verbos HTTP, APIs REST y otros lenguajes como Ruby o PHP
  • Características disponibles en Azure y qué otros proveedores nos podemos encontrar en el mercado

El vídeo

Como novedad, esta vez hemos grabado la charla y está disponible en Youtube:

Las slides

Las slides, como siempre, están disponibles a continuación:

El código

El código de los ejemplos utilizados, y que en el caso de la web es el que se despliega directamente a Azure Websites está disponible también en un repositorio de Github: 201501-demo-uam

Finalmente, los enlaces recomendados que estaban al final de la presentación los dejo aquí:

Preparar la charla ha sido un reto muy interesante, ya que era la primera vez que volvía a dar una charla en la escuela después de haber terminado la carrera, así que espero que a los asistentes (y los que la hayáis visto en diferido) os haya gustado.

Desde aquí mi agradecimiento a la organización por la posibilidad de volver a la EPS y la enhorabuena por conseguir mantener a la gente interesada en las tecnologías .NET. Nos vemos en el próximo evento!

Vídeos y material de «Lecciones aprendidas creando una red social» con MadridJS

Este jueves he podido compartir con los chicos de MadridJS así como varios alumnos del programa Ironhack, nuestra experiencia con javascript desarrollando una red social enfocada al desarrollo científico. Durante poco menos de una hora (y luego durante las cañas) repasamos herramientas, metodologías, y pruebas que hacemos en nuestros sistemas, así como las lecciones que hemos aprendido en el camino. En este artículo podrás encontrar el vídeo del evento, las slides de slideshare así como enlaces adicionales de temas que surgieron durante el mismo.

El debate fue muy interesante y personalmente he descubierto un montón de cosas nuevas para estudiar, gracias a todos los asistentes.

Vídeo

Slides

Enlaces adicionales de temas que surgieron en la charla:

8 preguntas (y respuestas) sobre ASP.NET vNext

Ayer, en las oficinas de Microsoft España estuve en una mesa redonda con el grupo de MSCoders Madrid, continuando la conversación del pasado hangout e intentando resolver las posibles dudas que genera la nueva versión de ASP.NET.

Entre todas las cosas que se plantearon, tomé nota de varias preguntas para intentar responderlas en esta artículo:

¿Qué compatibilidad tengo?

Por una parte hemos de distinguir dos elementos diferentes, el Full .NET CLR, que es como teníamos .NET hasta ahora, y el Core CLR, que es la nueva versión optimizada para web, multiplataforma, y que incluye las dependencias en nuestras aplicaciones.

Por su propia naturaleza, el Core CLR está más limitado (temas como el registro de windows o el acceso al event logger no son posibles con el mismo) pero si usamos el Full .NET CLR podremos utilizar muchas de las ventajas de las ventajas de la nueva plataforma sin perder compatibilidad con proyectos existentes.

¿Qué pasa con Webforms?

La tecnología detrás we WebForms sigue teniendo una dependencia muy fuerte con System.Web, y pese a que se ha anunciado cierto soporte por parte de vNext, lo más probable es que neceitemos el Full CLR para hacer uso de Web Forms, perdiendo las ventajas del Core CLR.

¿Seguro que requiere Mono?

De acuerdo con el equipo de desarrollo, la dependencia de Mono es, de momento, temporal, así comentan en el artículo de introducción a MVC5, Microsoft pondrá a disposición de los desarrolladores una versión del CLR que será independiente del proyecto Mono, como se comenta a continuación:

We will release a cross-platform runtime for Linux and Mac OS X. When released, this runtime will enable you to develop and run .NET apps on Mac and Linux devices. We will work closely with the Mono community on this effort. Until its release, you can use the Mono CLR for cross-platform development. 

¿Significa esto que Mono tal y como lo conocemos deja de existir?

No, además de desarrollo web, Mono permite hacer desarrollo de aplicaciones de consola, y de aplicaciones de escritorio en linux mediante GTK# y en Mad a través de Xamarin. De acuerdo con el artículo publicado en el blog del proyecto Mono la integración permitirá al proyecto avenzar en la parte común.

El resto de adaptación de APIs nativas, como puede ser una abstracción del registro de Windows, o el trabajo hecho hasta la fecha con WinForms, quedan fuera de .NET Core y la comunidad Mono seguirá trabajando en el soporte para los mismos.

¿Qué pasa con CoreCLR y Entity Framework, funciona?

La primera versión compatible con CoreCLR será a partir de Entity Framework 7, que supone un cambio tan radical sobre EF6 como el que hemos visto con ASP.NET, y que está actualmente en fase de desarrollo, como podemos ver en su wiki.

Lo que sí sabemos y podemos comprobar echando un vistazo a las issues reportadas en Github es que se está trabajando en ello, con lo cual podemos estar seguros que tendremos una versión de Entity Framework con CoreCLR.

¿Pero, si los ficheros ahora no pertenecen al proyecto, puedo ocultar carpetas del solution explorer?

En el estado actual de las herramientas, no. A partir de la CTP4 de Visual Studio 14 (ahora Visual Studio 2015) el fichero kProj no guarda registro de los ficheros, sino que se lee directamente el contenido de la carpeta.

Veremos qué ocurre con las siguientes Previews de la herramienta, ya que el soporte para el tooling es bueno, pero tiene aún cierto margen para la mejora.

¿Finalmente, puedo integrar Grunt como parte de mi proceso de release y publicación?

Sí, de hecho los chicos de Microsoft Open Tech tienen un artículo corto pero muy conciso sobre cómo podemos configurar grunt en nuestro TFS

¿Donde puedo encontrar más información?

Vídeo y materiales del evento: ASP.NET vNext: qué cambia y cómo nos afecta

Siguiendo la lína de Lo que viene con C# 6 nos juntamos nuevamente varios desarrolladores para compartir y debatir sobre las novedades de la última versión de ASP.NET vNext, que ya podemos denominar ASP.NET 6. En esta ocasión repetían Juan Quijano (@jc_quijano), Eduard Tomás (@eiximenis) y se sumaba a la conversación Luis Ruiz Pavón (@luisruizpavon). Se sumaba a nosotros como patrocinador, una vez más, SyncFusion, ofreciendo una licencia de Essential Studio para ASP.NET

Durante un par de horas estuvimos viendo algunas novedades de la herramienta, como son los diferentes CLR que tenemos a nuestra disposición y sus diferencias, la carga de dependencias a través de nuget, la configuración bajo demanda a través de ficheros JSON, la inyección de dependencias de serie, las nuevas maneras de routing, así como los ViewComponents y el nuevo Special K con los comandos multiplataforma, entre otras tantas cosas que darán de qué hablar en los próximos meses en cuanto a desarrollo de aplicaciones web en .NET.

Vídeo

El vídeo del evento está disponible en Youtube:

Slides

Las slides usadas están también disponibles, en este caso en SlideShare:

Numeritos

Como hice anteriormente, me gustaría compartir con vosotros algunas estadísticas del evento:

4 +1s en la página del evento
28 asistentes de máxima
46 personas han visto el evento, de acuerdo con su estatus en la página de Google Plus.
88 tweets (incluyendo retweets) con el hashtag #vienecsharp6, “oficial” del evento, de acuerdo con las estadísticas de Topsy
79 visitas a la página del evento, de acuerdo con las estadísticas de Karmacracy.
59 visualizaciones del vídeo en Youtube en este momento.

Enlaces

Además, os dejo algunos enlaces vistos durante el evento y usados para prepararlo:

Materiales del evento: Sevilla Mobility Day Strikes Back

El pasado sábado 26 de octubre con motivo de la segunda edición del Sevilla Mobility Day tuve la ocasión de dar una pequeña charla sobre las diferentes opciones de comunicación que tienen nuestras apps con el exterior:

IMG_5474

Slides

Las slides están disponibles a continuación en slideshare:

Demos

Por otra parte, las demos están disponibles en el siguiente enlace de Github:

https://github.com/rlbisbe/demos_charla_conectividad_wp

Enlaces

Y finalmente, la lista de enlaces que usé (entre otros) para preparar la charla:

Gracias los chicos de @cartujadotnet por la invitación, a CampusMVP por el patrocinio, al servicio técnico de Pebble por intentar echarme una mano, a mi querida Patrica Vasco (Patu) por ayudarnos con las fotos y en general a todos los que hicieron el evento posible.