28 ene 2015

[Eventos] Foro de Arquitectos

Buenas de nuevo,

Después de un tiempo son postear nada, he sacado un rato para compartir notas e impresiones del evento de foro de arquitectos realizado el día 26/01 en el parque empresarial de La Finca en las oficinas de Microsoft y que ha servido como entrada al evento que todos los desarrolladores, arquitectos y frikis de .net estamos esperando, el dotnet spain conference que se celebrará los días 27 y 28 de febrero en la escuela politécnica superior de la universidad de Alcalá. Si no has comprado tus entradas aún estas a tiempo de conseguir una, dejo a continuación la web de inscripción dónde se pueden encontrar más datos sobre el evento.

dotnet spain conference (http://www.desarrollaconmicrosoft.com/dotnetspain2015)


En cuanto a las sesiones propias del foro, decir que, han escuchado la opinión de los que solemos asistir a estos eventos y se han reducido el número de charlas, lo que ha permitido incrementar la duración de las mismas pudiendo de esta manera entrara en detalles de implementación y de código que es lo que de verdad nos gusta a los teckys.

A continuación comparto algunas de las notas de las diferentes sesiones, incluyo datos de los ponentes e información asociada a la charla si me ha sido posible encontrarla.

#1 Sesión: CQRS/ES - Cambiando tu forma de pensar

Ponentes
Roberto González (Spenta) @robertogg
Luis Ruiz Pavón (Plain Concepts) @luisruizpavon


Uso de CQRS/ES sin usar un framework de terceros.

Inicios es CQS(Command Query Separation), separara las consultas de las escrituras, CQRS se basa en este principio, todos los métodos son tipo void, a excepción de las consultas que serán las que devuelvan datos.

No es una arquitectura, es un patrón.

Gran cantidad de usuarios compitiendo por el mismo conjunto de datos, (eje: reservas en un avión, en un cine, lotería…).

Beneficios
-Aislamiento (Escritura de Consultas)
-Agilidad-Pruebas-Mantenimiento (Una vez creada la arquitectura es más fácil insertar nuevos comandos)
-Escalabilidad (Por la naturaleza de sus escenarios)

La UI lanza un comando contra la implementación de un dominio, la implementación genera un evento que supone una actualización en la BBDD y la interfaz consulta la BBDD para refrescar la información necesaria.

El uso de la cache es fundamental, el event-handler refrescará la cache, que será el origen de datos de las vistas.

CQRS propone el uso de 2 modelos de datos claramente diferenciados, uno optimizado para la escritura y otro para la lectura. Estos modelos pueden ser de diferente naturaleza (BBDD, Gestor documental, Caché…).

Consistencia Eventual (10 personas leen de una BBDD y reciben información dispar, por falta de sincronización).

Comandos
-Directivas para ejecutar una acción
-Se pueden rechazar
-0:n eventos como resultado
-Un manejador por comando
-Se pueden encolar (incrementa y potencia la escalabilidad)
-Deben ser inmutables, solo se pueden asignar valores en su construcción

Eventos
-Acción producida en dominio
-No se pueden rechazar
-Nomenclatura en pasado

Event Sourcing
-Capturar todos los cambios que se producen en la aplicación como una secuencia de eventos en el orden en que suceden
-No modelo entidad/relacion o modelo de objetos
-Todo el historial de cambios en lugar del "last-know good state"
-Casa con DDD y CQRS
(Se podrían recrear las decisiones de un cliente a la hora de añadir o eliminar elementos en su carrito de la compra)

Event Store
-Base de datos para el almacenamiento de nuestros eventos: Mejor una BBDD documentan (tipo JSON), y no una Entidad-Relación
-GetEventStore (http://geteventstore.com)
-NEventStore (http://neventstore.org) el código está en GitHub, gratuito y mantenido por la comunidad
-Base de datos relacional (JSON)
-Base de datos documental

Para reconstruir la entidad es necesario volver a obtener todos los eventos, podrían conllevar tiempo la ejecución de miles de cambios, para ello: DataSnapshot.

Cada x eventos guardamos el estado actual de nuestra aplicación. (Caché) y podemos hacer un replay de eventos desde ese momento.

Documentación
-Slides: http://www.slideshare.net/luisruizpavon/foro-arquitectos-de-microsoft-2015-cambiando-tu-forma-de-pensar
-Código: https://github.com/robertogg/loteriaes

#2 Sesión: Fuentes de datos e integración de aplicaciones

Ponentes
Unai Zorrilla (Plain Concepts) @_unaizc_
Quique Martínez (Plain Concepts) @quiqu3


NotOnlySQL
-Documentales
-Clave/Valor (Caché), es posible utilizarlo en lugar de un sistema de BBDD relacional. Redis en ASP.NET
-Grafo
-Orientado a objeto

Evitar olas, y movernos aplicando las arquitecturas según convengan al problema a modelar.

Ej: Pensar en la tasa de escritura, de lectura, procesamiento por map reduce, procesamiento por query ad-hoc…. (para tomar medidas de un molina de viento, estructurara el documento de formar que las inserciones se hagan cada 10.00 minutos, reduciendo así la tasa de escritura)

Redis Cache, servicio de Azure para el almacenamiento de clave/valor. Podríamos utilizarlo como servidor de sesiones de ASP.NET (sesión en toda la granja de servidores)

#3 Sesión: Caché en Azure a fondo

Ponentes
Fernando Escolar (tokiota) @fernandoescolar

Almacenamiento reducido y de acceso rápido

Implementación de outputcaché (caché disponible en los navegadores web):
-HTML5: CacheManifest. Agregar atributo manifest dentro del tag html: ..appcache y agregar link al text/cache-manifest
-ASP.NET MVC OutputcacheAtributte
-WebForms directiva <%OutputCache%>
Implementación de HttpRuntimeCache:
-Webforms: accesible desde código. HttpRuntime.Cache.Get, Insert…. Implementar lock(locker - debe ser private static readonly){…implementación de caché…}, otra opción es el uso de monitores.
-MemoryCache que funciona igual que el HttpRuntimeCache, pero no es específico de entorno web permitiendo su uso, por ejemplo, en aplicaciones Winforms.

Tipos de datos almacenables
-Datos de referencia, que son prácticamente de sólo lectura
-Datos de actividad, escritura-lectura, su ciclo de vida suele ser el de la sesión de un usuario en una web
-Datos de recursos, de las mismas características que los anteriores pero que cambian con mucha más frecuencia

Cache-aside pattern: patrón de implementación del uso de caché. (Verificar-Insertar-Obtener-Devolver)

Tener en cuenta que cuando un objeto cae en caché puede que no sea consistente. Habrá que implementar, si aplica, procedimientos de verificación de caché

Servicios de caché en la nube - Azure
-AppFabric (old)
-Cache In-Role (roles de azure que dedican parte o toda su existencia en el uso y gestión de caché)
-Azure Cache Services
-Virtual Machine
-Redis (es el gestor de cache state of the art)

#4 Sesión: Rendimiento y monitorización en aplicaciones en la nube

Ponentes
Luis Fraile (Visual Studio Anywhere) @lfraile

Pruebas de carga
-Rendimiento: ¿Cómo de rápido funciona mi aplicación?
-Carga: ¿Cómo respondo ante una carga esperada?
-Stress: ¿Cuándo rompe?
-Capacidad: ¿Cómo puedo crecer en el futuro?

Estrategia Pruebas
-Definir qué es lo que queremos probar
-Preparación del entorno de pruebas (instalación de herramientas, datos reales…)
-Diseño de casos de pruebas
-Configuración de la monitorización y scripting
-Smoke test (pruebas de las pruebas para verificar que todo es correcto)
-Establecer línea base
-Ejecución de pruebas de rendimiento, modificándolas hasta dar con una configuración adecuada
-Ejecución de pruebas de carga
-Informe de resultados

Beneficios Cloud Load Testing
-No se necesita infraestructuras propias
-Solo se pagan mientras se usan (pago por usuarios virtuales)
-Todos los proyectos de pruebas son compatibles
-Mucha mayor escalabilidad
*en cloud loadtesting aún no se admite el uso de plugins programados

Documentación
-Slides: http://www.slideshare.net/lfraile/validando-la-escalabilidad-de-la-arquitectura


#Bonus: Innovation Lab

Como bonus incluyo algunas fotografías de una de las salas que se encuentran en la planta baja del edificio de Microsoft en el parque empresarial de La Finca, concretamente un Innovation Lab, esto solo me hace pensar en que a algunas empresas aún les queda mucho que aprender…



Photo Gallery by QuickGallery.com

22 oct 2014

[Eventos] Prepara tu negocio para un mundo Multi-Plataforma con Visual Studio

He asistido esta semana al evento "Prepara tu negocio para un mundo Multi-Plataforma", evento patrocinado por Microsoft y en el que han participado ponentes del propio Microsoft, PlainConcepts, Kabel y TOKIOTA que han sido galardonados como partner revelación 2014.

Antes de comenzar indicar que el hashtag que se ha utilizado para el evento ha sido: #MSMobileDevSpain

El evento se ha desarrollado en cuatro sesiones que paso a comentar a continuación y en las que trato de haceros un breve resumen de los temas y conceptos que se han tratado en cada una de ellas.

#1 Sesión: Mobile Cross-Platform Development with Visual Studio (Michael Koester)

Sesión con la que comenzó el evento y que trataba de poner las bases sobre los conceptos de movilidad, diversidad y la importancia de la nube y de la conectividad de los elementos móviles con nuestro negocio
Diferentes aproximaciones del mundo multiplataforma
El fenómeno mobile tiene un mayor escalado que la explosión del uso de Pcs en los 80 o el uso actual de redes sociales
La diversidad en este mundo es la norma por lo que hay que tenerlo en cuenta a la hora de desarrollar aplicaciones (por tamaño, plataforma…)
El verdadero reto pasa por conectar toda la diversidad con el mundo del Back-End, los datos, la infraestructura…
Tres conceptos fundamentales a tener en cuenta: el cliente (mobile), el Back-End (cloud) y la forma en la que vamos a construir esas aplicaciones (agile)
Decisiones en el desarrollo, ¿Aplicaciones nativas o aplicaciones web?, y ¿Por qué no hibridas?
El dilema se plantea en formato gráfica entre una gran experiencia de usuario o una experiencia para el desarrollo (cómo el poder realizar despliegues más rápidos)
Microsoft aporta soluciones a través del uso de Xamarin y CORDOVA
The DevOps Cycle: Concepto que trata de unificar el desarrollo con las operaciones, tratando de evitar "guerras" del estilo: "tu código no funciona bien", "mi código funciona pero tu infraestructura no es buena"

mkoster@microsoft.com

#2 Sesión: Construyendo aplicaciones nativas multiplataforma con Xamarin (Pablo Peláez & Javier Cantón)

Para los que no sepáis de que va Xamarin, dejo el enlace a la web: Xamarin. La charla comenzó por parte del CEO de PlainConcepts, Pablo Peláez, hablando sobre la historia de Xamarin, cómo nacio el concepto, el producto y su tecnología. La charla se centró en la experiencia de PlainConcept con esta tecnología utilizando alguna demo para tratar de mostrar las capacidades de Xamarin

En Xamarin se trata básicamente de utilizar C# para realizar aplicaciones nativas en Android y IOS
Según la experiencia de PlainConcepts, a nivel de negocio es mejor desarrollar aplicaciones nativas con respecto al resto. Las aplicaciones hibridas por el hecho de estar embebidas son más lentas y suelen ser más caras en cuanto a tiempos de desarrollo, que las aplicaciones nativas. Las aplicaciones nativas se monetizan antes que con aquellas que son híbridas
Se hace referencia a GenyMotion (emulador android), mucho mejor que el que viene por defecto en Visual Studio para realizar emulaciones Android utilizando Xamarin
Se realiza una demo utilizando Xamarin y conectando con un servicio WCF (para seguir con el concepto de conectar la diversidad con nuestro Back-End). En primer lugar se crea una clase proxy que conecte con el servicio, para ello se realiza a través de la herramienta svcutil. La inicialización del servicio se realiza a mano y por código (endpoint, binding…)
Según PlainConcepts: La reutilización del código desarrollado es del 50% en proyectos medios. Hace que sea competitivo ya que se puede desplegar en múltiples plataformas de una manera más sencilla
Implementar PLC (Librerías portables para la reutilización de código) es una opción muy recomendable
MVVMCross para multiplataforma es ideal para aplicar el patrón MVVM
Xamarin tiene una curva de aprendizaje, alta
Una vez que la curva de aprendizaje no es un problema la productividad crece y genera equipos más competitivos
El licenciamiento es un pero a tener en cuenta debido a sus actuales costes
Xamarin Form aún está verde para algunas cuestiones de aplicaciones que vayan más allá de meras pruebas de concepto

jcanton@plainconcepts.com
pablo@plainconcepts.com

#3 Sesión: Aplicaciones escalables con Back-End en Windows Azure (Miguel Ángel Castejón)

Esta sesión trató de exponer las diferentes soluciones con las que cuenta Azure a la hora de implementar nuestras aplicaciones, haciendo foco en Windows Azure Web Sites y Mobile Web Services

Por orden de importancia y situación se tratan los conceptos de: Web Sites, Cloud Services, Virtual Machines, Mobile Services
Overview
Azure Web Sites (PaaS)
No configurable a bajo nivel
No hay acceso a máquinas ni se puede instalar nada
Es un servicio sobre el que desplegar web sites
SSL, Integración con DA
Azure Virtual Machines (IaaS)
Scripting para aprovisionamiento
Igual que máquinas virtuales on-premises pero en la nube
Tener máquinas para aprovisionar en desarrollo es una propuesta interesante
Azure Cloud Services (PaaS)
Acceso a máquina pero no administrables pues se puede perder la configuración
Algo más complejo que un web site pues admite cierta personalización
Windows Azure Web Sites
Infraestructura gestionada por Azure
Bajo coste
Sencilla y flexible
Demo de aprovisionamiento y despliegue de Windows Web Sites
Todas las acciones a realizar desde el portal se pueden realizar desde Visual Studio, posibilidad de despliegue desde Visual Studio y posibilidad de depuración del código subido a producción
Necesario el SDK de Azure
Cada Windows Azure Web Site tiene la posibilidad de definir varios slot que podrían emular los diferentes entornos (desarrollo, preproducción, producción…)
A través de SWAP se podría hacer la promoción de los entornos
Rollback a través de Deployment History
Mobile Web Services
Backend para aplicaciones móviles
Muy rápido y sencillo (poco configurable)
Basado en API REST
Data: Windows Azure SQL con Dynamic Schema (basado en análisis de las estructuras JSON que recibe)
Push Notifications: Envío de notificaciones de tipo Push a las apps

mascastejon@kabel.es

#4 Sesión: Cross Services for Cross-Platform Dev (Juan Bacardit)

Con esta sesión finalizó el evento, y a todos los presentes nos supo a poco, la ronda de preguntas fue extensa y es que los conceptos que se trataron fueron bastante atractivos y todos ellos aterrizados a través de pequeñas demos. Sin duda TOKIOTA tiene merecido el premio como partnert revelación.

Azure para la gestión de la configuración de aplicaciones bajo el paraguas de servicios de TFS
Team Member Desktop, Team Collaboration Environment, Pre-Production
Visual Studio Online
Nuevas características para Skateholders
Team rooms con notificación de eventos
Swaping de entornos
Builds

@juanbacardit

27 sept 2014

[Azure] Azure Princing Calculator

En estos días he tenido que realizar diferentes simulaciones para dar solución a diferentes problemas y casuísticas que requerían el aprovisionamiento de servicios en la nube.

Microsoft ha mejorado su servicio de princing y disponen de una calculadora bastante extensa en la que puedes realizar multitud de configuraciones de todos y cada uno de los productos de su amplio portfolio, de esta forma, puedes hacerte una idea de la inversión a realizar en base a las infraestructuras que deseas aprovisionarte.

Link: http://azure.microsoft.com/es-es/pricing/calculator/


15 sept 2014

[Microsoft DirectX] Diseño de juegos 3D

Buenas,

Os dejo una más que interesante guia inicial y aproximación, de diseño de juegos con Micorosft DirectX y un poco de C++.

Los pasos son bastante claros y se puede seguir más o menos del tirón.

¿El requisito?, algo de tiempo y una máquina con Windows 8 montado.

Link: http://www.codeproject.com/Articles/818239/Developing-D-Games-for-Windows-with-Cplusplus-and

Un saludo.

7 ago 2014

[Visual Studio 2013] Ya esta disponible la Update 3

Desde hace unos días ya tenemos disponible una nueva update para Visual Studio 2013, en este caso la Update 3 (descargable desde el gestor de actualizaciones del propio Visual Studio 2013 y desde la web, Link: http://www.visualstudio.com/es-es/downloads/download-visual-studio-vs#d-visual-studio-2013-update).

Hay disponible un video en channel 9 dónde se desgranan las nuevas características incluidas (Link: Visual Studio 2013 Update 3)

La mayoría de características aplican al contexto de las aplicaciones de Store.

Por destacar alguna característica fuera del contexto mencionado, contaremos con un editor para JSON que nos va a colorear la sintaxis y nos va a permitir que sea más intuitivo:




29 jul 2014

[LIBROS] Set de libros de diferentes tecnologías Microsoft

A través de la Microsoft Virtual Academy se exponen una serie de libros (descargables en diferentes formatos: PDF, EPUB...) de diferentes productos de Microsoft así como de guías en el desarrollo de aplicaciones de negocio.

28 jul 2014

[LIBROS] Construcción de aplicaciones con Microsoft Azure

Como primer post, y de cara al verano, un libro que si bien no es del rollo "50 sombras de Grey", puede ser una lectura interesante para coger energías y aclarara conceptos de desarrollo de aplicaciones en la nube con Microsoft Azure.

Link: Building Cloud Apps with Microsoft Azure