Category Archives: Informática e Internet

La tecnología nivela el campo: La Hora de los Más Chicos

umbrellaID-10023846

En el libro “El Arte de la Guerra” de Sun Tzu, el capítulo “Configuraciones de Terreno” contiene un párrafo muy relevador:

“Si podemos avanzar y el enemigo también puede avanzar, se llama ‘accesible’. En la configuración ‘accesible’, primero ocupa las alturas y el lado yang (soleado), y mejora las rutas para transportar provisiones. Luego, cuando nos trabemos en batalla, será ventajoso”.

Sun Tzu, en este párrafo, destaca a la vez que el terreno alto y soleado ofrece ventajas innegables al ejército que las ocupa, y que las posiciones niveladas no ofrecen ventajas diferenciales a ninguno de los contrincantes, y por lo tanto, el resultado de la batalla no está garantizado, sin la intervención de muchos otros factores cuyo orden de magnitud y combinación son tales que puedan desbalancear el resultado en favor del lado poseedor de los mismos.

Este párrafo es muy relevante respecto al panorama actual de tecnologías, redes sociales y software open source. Justamente, todas estos elementos dan lugar a un campo de batalla que presenta un terreno accesible, es más, totalmente nivelado, por lo tanto, el terreno es a la vez accesible y sin puntos elevados, por lo tanto, no hay lugares altos y a la vez, todos los sectores son lados yang (soleados).

En este contexto, la ventaja juega claramente a favor de los players más chicos, las PyMES, las empresas regionales, y definitivamente no juega a favor de las multinacionales, ni siquiera de las empresas nacionales más grandes.

Esta ventaja es concreta y posible, pero no puede realizarse si “los más chicos” no toman las medidas necesarias para hacer de estas ventajas una realidad.

Esas medidas necesarias implican un plan estratégico y una implementación de tal estrategia.

Tanto el plan estratégico como su implementación requieren claramente de una Arquitectura Empresarial y de un sistema de plataformas técnicas de negocios capaz de dar soporte a tal arquitectura, todos ellos alineados con el plan estratégico mencionado.

Saludos, GEN

Las redes sociales no aumentarán sus ventas por si mismas: debe alinear su arquitectura empresarial a su estrategia de negocios

BuildingID-10076694

Es interesante analizar brevemente como, en su gran mayoría, las empresas usan las redes sociales, las plataformas técnica de negocios y demás tecnologías para lograr sus objetivos de negocios.

A simple vista, el grueso de las empresas no sacan buenas calificaciones en esta área. Es más, resulta inclusive frustrante como espectador (y me imagino que para las mismas empresas debe ser aún más frustrante!) ver como el uso que hacen de estas tecnologías es correcto desde el punto de vista técnico, pero muy deficiente desde el punto de vista de estrategia de negocios.

Si bien es cierto que cada caso de cada empresa admite un análisis profundo para identificar los drivers de semejantes fallas sistemáticas, se destaca una falla por encima de todas las demás, en particular por su presencia generalizada en todo tipo de industrias, orígenes y tamaños de organización: fallas a nivel de arquitectura empresarial (en general, el caso más frecuente de falla es “Ausencia de una Arquitectura Empresarial”).

Sin una arquitectura empresarial que comande y guíe el despliegue de plataformas técnicas de negocios alineadas con las estrategias de negocios de la organización, las empresas seguirán obteniendo el mismo orden de resultados frustrantes provenientes del empleo de Twitter, Facebook, Youtube, Pinterest, Google Search, Google Maps y el combo que tenga ganas de agregar a esta lista.

Mientras las organizaciones no amplien las perspectivas y horizontes que orientan a los equipos de negocios que definen las arquitecturas empresariales vigentes, es poco probable que se perfilen cambios drásticos favorables en este sentido.

Saludos, GEN

 

Windows 8 is a reimagining of Windows, from the chip to the interface (*)

Windows 8 Start
Windows 8 Start

It is clear to me that MSFT has understood that the platform where most people work and spend their time is the Cloud: Facebook and Salesforce.com are just shades of the one and only new platform.

Devices like smart phones and tablets have grown so big as viable tools because of this twist.

MSFT is shifting its business and product strategy to give proper answers to what the users like and want to do: Office365, Office Web Apps, SkyDrive, Windows Azure, SQL Azure, Windows Phone 7 & Mango, Windows 8.

No other company has understood this so well in the way MSFT has done and is doing.

The Windows 8 architecture is oriented towards HTML5 and JavaScript development, so.

The way I read this is very simple: Web standards for the dev toolset is the way to leverage phones, tablets, game boxes or PCs.

It seems to be a counter intuitive strategy, against what other players are doing: iOS and Android promote development toolset segregation by platform.

I read that as follows: Google and Apple do not care about the customers’ needs and the dev companies’ needs, all they care is about “closing the field” to their own economic advantage.

If you want to get a glimpse of what MSFT wants to achieve, you may check Disney’s Tron Legacy Digital Book Site: it is just HTML5, JavaScript and IE9’s new architecture, a peek into what IE10 and Windows 8 will provide.

http://disneydigitalbooks.go.com/tron/

Kind regards, Gastón

(*): BTW, the title phrase belongs to Julie Larson-Green, corporate vice president, Windows Experience, MSFT.

En ingeniería, la forma sigue a la falla, y no a la función

Cracked Glass

Cracked Glass

La reciente salida de servicio de Amazon Web Services (AWS) puso de manifiesto como afectó a algunos clientes mientras que otros no se vieron afectados, ya que diseñaron sus soluciones On The Cloud con una combinación adicional de redundancia y eliminación de puntos únicos de falla.

Este evento destaca claramente que el problema no está en la madurez de las soluciones Cloud disponibles en el mercado, si no más bien en una visión simplista de como las organizaciones deberían implementar este tipo de soluciones.

Dicho de otra manera, en vez de decir “Creo en Cloud Computing”, deberíamos decir “Le creo a Cloud Computing”.

Si realmente “le creemos a Cloud Computing”, deberíamos aplicar los mismos principios de diseño de disponibilidad de la solución Cloud que contratamos, a la hora de determinar que componentes, dependencias e interacciones nos asegurarán un diseño fault-tolerant.

Como complemento de estas ideas, incluyo dos posts que me parecen interesantes:

http://gigaom.com/cloud/how-to-design-your-service-for-failures-in-the-cloud/

http://www.techrepublic.com/blog/networking/how-innovative-design-allowed-one-cloud-company-to-withstand-amazons-recent-outage/3995

Saludos, GEN

List of improvements supported by Mango (Windows Phone 7.5)

  • Threads. Switch between text, Facebook chat and Windows Live Messenger within the same conversation.
  • Groups. Group contacts into personalized Live Tiles to see the latest status updates right from the Start Screen and quickly send a text, email or IM to the whole group.
  • Deeper social network integration. Twitter and LinkedIn feeds are now integrated into contact cards, and “Mango” includes built-in Facebook check-ins and new face detection software that makes it easier to quickly tag photos and post to the Web.
  • Linked inbox. See multiple email accounts in one linked inbox. Conversations are organized to make it easy to stay on top of the latest mail.
  • Hands-free messaging. Built-in voice-to-text and text-to-voice support enables hands-free texting or chatting.
  • App Connect. By connecting apps to search results and deepening their integration with Windows Phone Hubs, including Music and Video and Pictures, “Mango” allows apps to be surfaced when and where they make sense.
  • Improved Live Tiles. Get real-time information from apps without having to open them. Live Tiles can be more dynamic and hold more information.
  • Multitasking. Quickly switch between apps in use and allow apps to run in the background, helping to preserve battery life and performance.
  • Internet Explorer 9. A browser based on the powerful Internet Explorer 9 and including support for HTML5 and full hardware acceleration.
  • Local Scout. Provides hyperlocal search results and recommends nearby restaurants, shopping and activities in an easy-to-use guide.
  • Bing on Windows Phone. More ways to search the Web, including Bing Vision, Music Search and Voice so it’s easy to discover and decide.
  • Quick Cards. When searching for a product, movie, event or place, see a quick summary of relevant information, including related apps.

Windows Azure: Para comprender la solución, hay que entender el problema

Tal como señala el título, es conveniente revisar el problema en cuestión, su naturaleza y características, para poder comprender mejor porqué un determinado diseño o arquitectura representa una solución razonable a dicho problema.

Es frecuente que, cuando me veo en la necesidad de explicar un concepto complejo, encuentro útil recurrir a una analogía de la vida cotidiana para facilitar dicha explicación.

En este caso, voy a recurrir a la analogía de un automóvil como un ejemplo de sistema que guarda determinadas relaciones con un sistema informático.

A muchos de nosotros nos ha pasado aprender que, en un automóvil, muchas cosas distintas pueden fallar y dejarnos sin solución. Algo similar sucede con los sistemas informáticos: muchas partes distintas del sistema pueden fallar y dejarnos sin solución.

En un automóvil, al igual que en un sistema, es grave cuando la pieza o parte que falla se caracteriza por ser un punto único de falla: es alguna pieza o parte crucial del automóvil o del sistema que, si falla, nos deja completamente sin solución, por la simple y sencilla razón que el sistema solo cuenta con una pieza de ese tipo!.

En este punto, es conveniente hacernos la pregunta de rigor:

¿ Cómo podemos diseñar un sistema para que sea fault-tolerant ?

Antes que nada, es útil tener una definición operativa de fault-tolerant, aunque no sea una definición académica.

Un sistema fault-tolerant es aquel que es capaz de seguir brindando su servicio a pesar que un determinado subconjunto de sus partes ha fallado.

La solución general de diseño para un sistema fault-tolerant es conceptualmente sencilla: redundancia.

El sistema debe evitar puntos únicos de falla a través de diversas redundancias en sus partes, aunado con un sistema de monitoreo del grado de salud de cada parte o componente del sistema, y con la capacidad de redireccionar la provisión de la función afectada por la falla hacia una pieza redundante equivalente ante la detección del problema.

Para poder seguir con este análisis, debemos orientar nuestra atención a un subconjunto importante de quality attributes (QAs) de un sistema informático.

En este punto solamente me concentraré en los QAs que son relevantes para esté análisis, dado que hay otros QAs que son importantes en general, pero no forman parte de nuestro scope.

Los QAs en cuestión son:

Performance

Escalabilidad

Seguridad

Disponibilidad

El orden de presentación no es relevante, más bien es práctico.

Vamos a dar algunas definiciones operativas de estos conceptos, aunque no sean académicas.

Performance es la capacidad de completar una tarea en un intervalo de tiempo y con un consumo/ocupación de recursos conveniente desde el punto de vista económico.

Escalabilidad es la capacidad de poder atender cantidades crecientes de solicitudes concurrentes de ejecución de una tarea, conservando la performance dentro de un umbral cercano al nivel nominal (el necesario para realizar una sola tarea), de tal forma que mantiene o conserva la conveniencia económica.

Seguridad es la capacidad de garantizar que en un sistema al que acceden muchas personas distintas, cada persona solamente tiene acceso a la información estrictamente necesaria para cumplir con sus objetivos y responsabilidades, ni más, ni menos.

Disponibilidad es la capacidad de un sistema de seguir adelante con la provisión de sus servicios básicos a pesar que un determinado subconjunto de sus partes o piezas ha fallado.

El orden o grado de disponibilidad de un sistema se mide en %, de tal forma que cuanto más cercano al 100% es la disponibilidad del sistema, más conveniente desde el punto de vista económico-financiero es el mismo.

Una forma práctica de entender el orden o grado de disponibilidad es como el cociente entre la cantidad total real de tiempo de operación del sistema durante un intervalo de tiempo (por ejemplo, un año) y la cantidad total nominal de tiempo de operación del sistema durante el mismo intervalo de tiempo, expresado en %.

Un sistema fault-tolerant debe ser capaz de conservar estos cuatro QAs dentro de un nivel económicamente conveniente, a pesar que un subconjunto de sus partes o piezas ha fallado.

Para comprender el problema y su solución, veremos alternativas de fallas cruciales y como la conservación de los niveles aceptables de los QAs mencionados informan cómo debería ser el diseño.

Veamos la escalabilidad. Una forma sencilla de mantener la escalabilidad es usar un server más grande y veloz, con más capacidad de procesamiento, más memoria, más discos, etc.

En realidad, esta no es una brillante idea, dado que estamos permitiendo que exista un punto único de falla.

Esta opción, llamada Scale Up, no es buena, más bien es mejor la opción que permite escalar con un conjunto de servers, llamada Scale Out.

Los clusters de servers con Network Load Balancers (NLBs) apuntan a la opción Scale Out de servers de aplicación.

Sin embargo, los clusters y los NLBs no resuelven el problema de una falla en el servicio de repositorio de datos (en general, bases de datos).

Para ofrecer una solución útil y a la vez, coordinada con el Scale out de servers de aplicación, es necesario tener un diseño que permita un Scale Out de servers de bases de datos que actualice en forma concurrente y distribuida y que soporte failover automático, es decir, la capacidad de detectar que el server primario no responde y es necesario redireccionar la provisión del servicio a un server secundario que ya está actualizado con la misma información, en forma concurrente.

Desde el punto de vista de la seguridad, es más fácil dar seguridad a un esquema Scale Up que a un esquema Scale Out, pero la combinación seguridad + escalabilidad del Scale Out es mucho mejor que la combinación del Scale Up.

En el caso del orden o grado de disponibilidad, es importante considerar como afecta a este factor las paradas programadas y las no programadas.

Es fácil de comprender que se puede hacer mucho por mitigar el impacto que tienen las paradas programadas sobre la disponibilidad, en particular si aumentamos el grado de redundancia de tal forma de tener servers adicionales para hacer las paradas programadas con rotación de servers en operación.

Windows Azure ofrece todas estas capacidades, incluyendo failover automático a un site remoto (ante una catástrofe que afecte al site en su conjunto), más provisión elástica de capacity, más costos variables según consumo.

Windows Azure, una solución Platform as a Service

Windows Azure se presenta como una solución Platform as a Service.

Es conveniente describir brevemente las diferentes opciones de soluciones Cloud para comprender mejor que es Platform as a Service, comparándolas contra el esquema tradicional de IT propio, y entre sí.

En el esquema de IT propio, la empresa tiene la responsabilidad de proveer y mantener todas las partes que componen el stack de soluciones, desde los servers, hasta las aplicaciones de negocios, y todas las tareas y gastos de mantenimiento de cada uno de los componentes del stack de soluciones.

En la primer opción Cloud, Infrastructure as a Service, los servers, storage y network son provistos como un servicio, por lo tanto, la empresa paga en forma variable por el consumo realizado del servicio provisto.

La empresa debe hacerse cargo de las inversiones, gastos y tareas de mantenimiento del resto de los componentes del stack de soluciones, desde el OS en adelante.

En la segunda opción Cloud, Platform as a Service, los servers, storage, network, OS y Application Stack son provistos como un servicio, por lo tanto, la empresa paga en forma variable por el consumo realizado del servicio provisto.

La empresa debe hacerse cargo de las inversiones, gastos y tareas de mantenimiento del resto de los componentes del stack de soluciones, en este caso, las aplicaciones.

En la tercer opción Cloud, Software as a Service, el stack completo de soluciones, desde los servers hasta las apliciones, es provisto como un servicio, por lo tanto, la empresa paga en forma variable por el consumo realizado del servicio provisto.

Soluciones como Hotmail, Google Docs o Salesforce.com son claros ejemplos de SaaS.

En todos estos casos, parte de los principales beneficios de la provisión de partes del stack de soluciones como un servicio son de tipo económico-financiero.

El elemento principal del beneficio económico se centra en la ventaja que los proveedores de estos servicios, debido al tipo de arquitecturas de
virtualización que utilizan, y a la posibilidad de vender en todo el mundo, pueden prorratear los gastos fijos y semifijos en una cantidad mucho mayor de elementos que lo que puede hacer una empresa promedio.

Por ejemplo, un administrador de servers es prorrateado en miles de servers virtuales, dado que puede atender ese orden de magnitud de servidores.

El elemento principal del beneficio financiero se centra en la capacidad de retrasar la necesidad de erogar una determinada cantidad hasta el último momento, directamente cuando se consume el servicio, en vez de tener que hacerlo por anticipado.

Esto redunda en un Valor Actual Neto menor, lo que indica que es una mejor opción de inversión, para la misma provisión de servicio.

Para redondear el concepto, es conveniente destacar cuales son las audiencias objetivo a las que apuntan cada una de las opciones Cloud, para poder comprender en forma más completa la propuesta de valor de Windows Azure.

La opción Infrastructure as a Service, o IaaS, tiene por audiencia objetivo al sector de IT de una empresa, que puede concentrar sus tareas en la administración de los componentes OS y Application Stack.

La opción Platform as a Service, o PaaS, tiene por audiencia objetivo al sector de desarrollo de aplicaciones de una empresa, dado que tiene una plataforma de desarrollo que le permite desarrollar y hacer testing en forma local, además de contar con un conjunto completo de herramientas de desarrollo.

La opción Software as a Service, o SaaS, tiene por audiencia objetivo al sector de usuarios de una empresa,  dado que cuenta con las aplicaciones que necesitan para las operaciones diarias hosteadas en La Nube.

¿ Porqué considerar Windows Azure para mi aplicación ?

CloudEl proceso de análisis necesario para determinar si una aplicación dada puede ser llevada a La Nube es complejo, por lo tanto, acá solamente intentaré comentar brevemente los puntos principales que formarían parte de tal tipo de análisis.

Para poder focalizar mejor, plantearé el análisis en forma de un breve cuestionario o checklist de evaluación para Cloud.

¿ El negocio al que mi aplicación atiende tiene una demanda predecible pero cambiante de requerimientos de procesamiento y/o almacenamiento a lo largo del mes/trimestre/año ?

Un ejemplo permitirá ver más claramente lo destacado de esta pregunta. Supongamos que mi aplicación calcula sueldos, o costos. Durante unos pocos días en el mes, la aplicación tendrá un pico de demanda importante de procesamiento y almacenamiento, para luego hacer muy poco el resto del mes.

En forma similar, aparecen picos adicionales en los meses de pago de aguinaldos y de vacaciones (para el caso de sueldos), que se suman al pico propio del mes.

En el caso de una aplicación de costos, se presenta un pico adicional al comienzo del año fiscal, en que aparece la demanda adicional del cálculo de los costos presupuestados, que se ha de sumar al pico propio del mes.

Es evidente que la demanda es predecible, pero es muy cambiante: un pico importante de demanda en un intervalo corto del mes, para luego entrar en una meseta de demanda también bastante predecible.

Si mi aplicación (y el negocio que atiende) tiene este tipo de característica de demanda predecible pero cambiante, Cloud podría ser una alternativa a evaluar.

¿ El negocio al que mi aplicación atiende tiene una demanda no predecible de requerimientos de procesamiento y/o almacenamiento a lo largo del mes/trimestre/año ?

Supongamos que tenemos una aplicación que presupuesta costos y precios de servicios de organización de eventos, como casamientos, cumpleaños, reuniones de negocios, etc.

La empresa cuenta que una variedad de proveedores de servicios de catering, música y entretenimientos, decoración, filmación, etc., que le permite vender servicios muy diversos, de volumen y ocurrencia muy diversa y poco predecible, desde un cumpleaños para 50 personas, un casamiento para 300 personas, o una reunión de ventas para 2000 personas. En general, en verano hay alguna caída esperable del negocio, por lo tanto, el departamento de venta posee un plan que compensa durante el resto del año.

El mismo plan de ventas también contempla que algunos eventos se contratan y luego se cancelan por diversas razones, por lo que el departamiento asume un porcentaje de sobreventa para compensar por este efecto. En una semana dada se superpone una cantidad variable de eventos, con características y tamaños también poco predecibles.

Si mi aplicación (y el negocio que atiende) tiene este tipo de característica de demanda poco predecible, Cloud podría ser una alternativa a evaluar.

¿ El negocio al que mi aplicación atiende tiene necesidades de un nivel de disponibilidad de tres 9s (un mínimo de 99,9% de disponibilidad), a un precio razonable ?

Mi negocio opera 24 horas al día, los 365 días del año, y para poder operar, necesita una aplicación que esté igualmente disponible para poder atenderlo.

En este contexto, una disponibilidad de 99,9% implica que en un año entero de operación, solamente son “tolerables” un total de 8 horas y 42 minutos sin servicio, por todo concepto, ya sea paradas programadas (mantenimiento, updates, hot fixes, service packs, etc.) como no programadas (incidentes).

El beneficio se multiplica si esta disponibilidad se puede obtener a un precio razonable.

Si mi aplicación (y el negocio que atiende) tiene este tipo de requerimiento de nivel de disponibilidad a precio razonable, Cloud podría ser una alternativa a evaluar.

¿ El negocio al que mi aplicación atiende requiere un business continuity plan tal que la arquitectura de la aplicación debe ser distribuida, flexible y fault-tolerant ?

El proceso de Business Continuity Management brinda un marco de referencia para asegurar la resiliencia de nuestro negocio ante cualquier eventualidad, es decir, cualquier evento adverso.

Este proceso implica una serie de pasos, el primero de los cuales es “Entender las vulnerabilidades de mi negocio”.

Esto implica que la capacidad de poder ejecutar las operaciones del negocio no pueden verse afectadas por ningún factor, como por ejemplo, que la aplicación que soporta a mi negocio posea puntos únicos de falla en su arquitectura.

Aún si se considerase hostear dicha aplicación en La Nube, no sería prudente que toda la capacidad de ejecución de la aplicación esté concentrada en La Nube, porque, de ser así, si el evento adverso implica un impedimento en el acceso de Internet, no tenemos disponibilidad de la aplicación por falta de acceso, aunque el servicio hosteado en La Nube esté operando en forma normal.

Esto implica que la arquitectura de Cloud a elegir debería permitirnos, de ser necesario, diseñar una sola aplicación que parte de la misma puede ejecutarse On-Premises, y otra parte en La Nube, y que cosas como la seguridad federada de las diversas partes de la aplicación sea a la vez sencilla de administrar, configurar y mantener, y por su parte, altamente segura y confiable.

Si mi aplicación (y el negocio que atiende) tiene este tipo de requerimiento de arquitectura, derivado de un conjunto de requerimientos de mi Business Continuity Plan, Cloud podría ser una alternativa a evaluar. Es importante destacar que no todos los proveedores de servicios de PaaS (Platform as a Service) ofrecen el mismo nivel de beneficios en este aspecto, destacándose Windows Azure por sus ventajas respecto de otros proveedores.

¿ El negocio al que mi aplicación atiende requiere de escalabilidad elástica de procesamiento y/o escalabilidad elástica de almacenamiento, ya sea almacenamiento elástico en un modelo de datos relacional, como almacenamiento elástico de file system ?

Este tipo de requerimiento es bastante más complejo de lo que parece, dado que involucra muchos elementos, como por ejemplo, que la arquitectura de la plataforma Cloud a elegir sea capaz de escalar en forma fluida y continua, en vez de hacerlo en saltos, y a su vez, que el proceso de procurement y allocation de escalabilidad elástica debe ser sencillo, flexible y dinámico, como así también razonable desde el punto de vista económico-financiero.

Si mi aplicación (y el negocio que atiende) tiene este tipo de requerimiento de escalabilidad elástica, Cloud podría ser una alternativa a evaluar.

Para redondear este breve análisis, vale la pena destacar que un análisis completo para determinar si una solución dada es candidata para Windows Azure, suele involucrar una cierta cantidad amplia de aspectos, como económico-financieros, de arquitectura, de negocios, legales, y otros, por lo tanto, sería recomendable encarar un proyecto para realizar dicha evaluación.

Antes de lanzarse a llevar a cabo dicho proyecto, es conveniente indicar que tendría sentido tal proyecto para el caso que en una evaluación preliminar, en la aplicación en cuestión se han identificado como probables varios de los puntos destacados en este post, y no solamente uno o dos.

Negocio de las Tablets: Hace falta más de dos para bailar este Tango

 Las tablets no surjieron de la nada con el iPad. Hace ya bastante tiempo (parece milenios atrás!) que empresas como Microsoft apostaron fuerte a esta tecnología, y desarrollaron sistemas operativos específicos (Tablet PC), dispositivos específicos, y hasta aplicaciones específicas para sacar provecho de la plataforma (OneNote, aunque no lo crean!).

Lamentablemente, en ese entonces el mercado no se materializó!. La estrategia de negocios de la Killer App, super exitosa en los 70s y los 80s, para las Tablets no alcanzó.

Es razonable pensar y argumentar que este bien podría ser un negocio cuya cadena de valor necesita diversos jugadores cruciales, y probablemente, hasta ahora estaban faltando algunos de esos eslabones.

Steve Jobs supo “ver” que esos jugadores cruciales ahora están:  El “vió” que las Tablets, sin contenido, tan sólo son unos lindos aparatitos.

Ahora, una pregunta que vale la pena hacer es:

¿Qué Modelo de Negocios para Tablets “suma” o incorpora a las Redes Sociales?

Frente a esta pregunta, me dá la impresión que es Facebook y no Apple la empresa que “ve” por donde pasa la cosa: su reciente oferta de publicar como libro los posts de los usuarios.

A esta propuesta, bastaría agregarle una oferta de edición digital del mismo libro, con opciones de skins a elección del comprador, disponibles a la venta en una tienda digital global (deliberadamente no uso otro nombre, para evitar que Apple me demande!).

El “dueño” de los posts podría habilitar de antemano si permite o no la compra digital de sus posts, con la opción de aplicar determinados filtros a que porciones de sus posts permite (o no) hacer público para la venta. De más está decir que el “dueño” debería cobrar parte de lo recaudado en concepto de regalías de autoría.

Volviendo al tema que “las Tablets sin contenido carecen de sentido”, es importante destacar que el contenido más dinámico e interesante es aquel que es generado desde las comunidades y/o que está orientado a las comunidades existentes en las Redes Sociales.

Las Redes Sociales le permiten al ser humano expresar y desplegar una dimensión fundamental de nuestra naturaleza, y es la necesidad del ensayo lúdico para prepararnos para la vida (necesidad que compartimos con otros animales!).

Como esta necesidad está fuertemente condicionada por el entorno en el que nos movemos, cuanto más “tuneado” esté el contenido para un entorno en particular, más y mejor nos ha de servir para tener éxito en dicho entorno. Las comunidades generan y consumen contenido “tuneado” para el entorno en el que interactúan.

De la misma forma que en muchas especies animales, donde la manada sigue al animal Alfa (en general, suele ser macho, pero en algunas especies, es hembra Alfa), en la comunidades, la tracción en la generación de contenido es alentada y energizada por los Alfa de dicha comunidad, los impulsores de ideas.

Los fabricantes de Tablets y sus socios de negocios deberían dar más espacio formal en la cadena de valor a las comunidades, en una posición similar que lo hacen con los estudios de cine, las empresas periodísticas y las empresas de Gaming.

Design Patterns (DPs) as a way for abstraction

 

As an application architect, when we face any application project, we can’t escape the client/middleware/server curse.

Even if we try the monolithic one-tier architecture, we still have all sorts of servers to deal with (like database servers, to name just one example), as well as middleware to deal with (data access layers, also just to give an example).

This curse has many implications and potential consequences to us and to our design.

What type of architecture should we propose, so today’s design does not compromise tomorrow’s changes?

How do we design, so there is a balance between flexibility and sound architecture?

How to design in such a way that our architecture can attain solidness without rigidness?

Well, the very short version of the answer to all these questions is: abstraction!

Great!, but how do we ‘put’ abstraction into our design?

And what is abstraction anyway, in terms of OO application architecture?

To start with, the need to apply abstraction as a way to solve this design problem is the main reason why we use Object Orientation in the first place.

We use Object Oriented Design in combo with Object Oriented languages just to be able to apply abstraction.

When it comes to Application Architecture, abstraction means to express our design in vague terms, instead of clearly cut-off terms.

We could make our design more flexible to future, unforeseen changes if the design itself was expressed and implemented in vague terms, instead of clearly cut-off terms.

To express our design in vague terms allows us to delay design, implementation and deployment decisions, and this is a really important tool for an architect.

But if it all comes to delaying a design, implementation or deployment decision, we could just use (very) late binding and that would be it!

Well, even though late binding is a practical solution to delay a decision to the very last moment, it does so at the expense of a marked degradation of performance.

So, what could we do?

How do we grab abstraction and delay decisions, without compromising performance and sound design?

Enter Design Patterns.

Design Patterns help us, like no other design tool, to separate software use from software implementation.

DPs help us design our solution as a layered expression of the problem domain.

The closer the component or software layer is to the actual users of the software, the closer is the design of that software layer to be expressed in conceptual, functional terms (that is, implementation independent).

The infrastructure components can also designed by this very same principle, if we consider what is "functional" when it comes to infrastructure.

For instance, if we have to implement an infrastructure component that provides e-mail services, e-mail accounts, server names, e-mail protocols, recipients, sender, etc., are "functional" requirements of any e-mail service, even though it is more implementation-specific than customer id, or product id.

DPs help us mainly at the ‘thinking’ level.

With DPs in mind, we ‘think’ our designs and architectures from an entirely different perspective.

DPs, in terms of conceptual design, help us realize that ‘Simple Is Beautiful’.

All software that we design is a component in this layered solution, and it is at least a client of another component.

Any component that we design should be thought as a services provider to its clients.

This is true to all software that we design, even the user interface layer: it provides user interface services to the users, its clients.

Each of the services provided by a given component must be thought and designed in functional terms, instead of implementation terms: what service does it provide, and not how is this service provided?

From this perspective, the most important part of each service provided by a component is the public interface of the service, the contract between consumer and provider.

Each and all components that we design, as a consumer of any service, must be thought and designed only in terms of the service that they consume and not in terms of the component that they consume from.

That is, the client should only care about the interface or contract of the service, and disregard completely the component that provides the service.

The GoF book maxim that states this design principle is: Program to an interface, not an implementation (page 18).

This principle gives us many benefits in terms of design flexibility and solid architectures.

Any given Design Pattern and design principle that we use must be thought in such a way that it maximizes the aforementioned benefits of abstraction.

 

DPs como una forma de abstracción

 

Como arquitectos de aplicaciones, cuando enfrentamos un proyecto de desarrollo de una aplicación, no podemos escapar a la maldición cliente/middleware/servidor.

Aun en el caso que usemos la arquitectura monolítica de una única capa, todavía tenemos que lidiar con todo tipo de servers (tal como servers de base de datos, por mencionar un ejemplo), al igual que con diversas capas de middleware (como la capa de acceso a datos, por nombrar un ejemplo).

Esta maldición nos plantea diversas implicancias y consecuencias tanto a nosotros como a nuestro diseño.

Qué tipo de arquitectura debemos proponer, de tal forma que el diseño de hoy no comprometa los cambios del día de mañana?

Cómo diseñar, de tal forma que haya un balance entre flexibilidad y una sólida arquitectura?

Cómo diseñar de tal forma que nuestra arquitectura pueda adquirir solidez sin rigidez?

Bueno, la versión muy corta de la respuesta a todas estas preguntas es: abstracción!

Genial!, pero como ‘introducimos’ abstracción en nuestro diseño?

Y que es abstracción al fin, en términos de una arquitectura de aplicaciones OO?

Para empezar, la necesidad de aplicar abstracción como forma de resolver este problema de diseño es la razón principal por la que usamos Orientación a Objetos en primer lugar.

Usamos Diseño Orientado a Objetos en combinación con lenguajes Orientados a Objetos con el solo propósito de aplicar abstracción.

En relación con la Arquitectura de Aplicaciones, abstracción implica expresar nuestro diseño en términos ambiguos, en vez de usar términos claramente definidos.

Nosotros podríamos hacer nuestro diseño más flexible a cambios futuros no previstos si el diseño en si estuviese expresado en términos ambiguos, en vez de términos claramente definidos.

El expresar nuestro diseño de esta forma nos permite retrasar decisiones de diseño, de implementación y de despliegue de la aplicación, y esto resulta ser una herramienta muy importante para un arquitecto.

Pero si todo se reduce a retrasar una decisión de diseño, de implementación o de despliegue, podríamos usar (very) late binding y listo! Bueno, si bien late binding es una solución práctica para retrazar una decisión hasta el ultimo momento posible, lo logra a expensas de una degradación de la performance.

Por lo tanto, que podríamos hacer? Cómo poder alcanzar la abstracción y retrasar las decisiones a la vez, sin comprometer la performance ni un sólido diseño?

Es aquí donde entran los Patrones de Diseño en escena (muy, pero muy, libre traducción de la versión en ingles, pero que linda y correcta suena!!!).

Los DPs nos ayudan, como ninguna otra herramienta de diseño podría hacerlo, al separar el uso del software de la implementación del mismo (esto es, separar uso en el cliente de implementación en el componente server, nuevamente, traducción libre, con la libertad que solo el propio autor de la idea puede tener).

Los DPs nos ayudan a diseñar nuestra solución como una expresión estratificada del dominio de problema (OK, no te gusta mi traducción, entonces te desafío a traducir layered, a ver si te la bancas?)

Cuanto más cerca esta la capa de software de los verdaderos usuarios del mismo, tanto mas cerca esta la misma de ser expresada en términos conceptuales, funcionales (esto es, independientes de la implementación).

Los componentes de infraestructura pueden ser diseñados también de acuerdo con este mismo principio, si consideramos que significa ‘funcional’ cuando se trata de infraestructura.

Por ejemplo, si tenemos que implementar un componente de infraestructura que provee servicios de e-mail, en tal caso cuentas de e-mail, nombres de servers de mail, protocolos de mail, receptores, remitente, etc., son requerimientos ‘funcionales’ de cualquier servicio de e-mail, aun cuando resultan ser mas dependientes de implementación que un ‘customer id’ o un ‘product id’ (otra vez mas, libre pero me parece correcta la traducción, digo: bueno, viejo, yo lo escribo y lo traduzco como mejor me parece! so what?).

Los DPs nos ayudan en la forma como ‘pensamos’ un diseño (nuevamente, … mejor me callo!)

Teniendo los DPs en mente, ‘pensamos’ nuestros diseños y arquitecturas desde una perspectiva totalmente diferente.

Los DPs, en términos de un diseño conceptual, nos ayudan a descubrir que ‘Lo Simple es Bello’.

Todo software que diseñamos es un componente en esta solución en capas, donde como mínimo, cada componente es cliente de otro componente.

Cada componente que diseñamos debería ser pensado como un proveedor de servicios de sus clientes.

Esto es cierto para todo software que diseñemos, inclusive para la capa de interfase de usuario: la misma provee servicios de interfase de usuario para los usuarios, sus clientes.

Cada servicio provisto por un componente dado debe ser pensado y diseñado en términos funcionales, y no en términos de implementación, por lo que la pregunta es: que es lo que el servicio provee, en vez de como debe ser provisto el servicio?

Desde esta perspectiva, lo más importante de cada servicio provisto por un componente es la interfase pública del mismo, el contrato entre consumidor y proveedor.

Todos y cada uno de los componentes que diseñamos, como consumidores de un servicio, deben ser pensados y diseñados solo en términos del servicio que consumen y nunca en términos del componente del cual consumen.

Esto es, el cliente solo debería interesarle la interfase o contrato del servicio, y no tener en cuenta para nada el componente circunstancial que provee el servicio.

La máxima del libro GoF que destaca este principio de diseño es: Programe para la interfase, no para la implementación (pagina 18, del original en ingles).

Este principio nos aporta muchos beneficios en términos de flexibilidad de diseño y de arquitecturas sólidas.

Cualquier DP dado y principio de diseño que usamos debe ser pensado de tal forma que maximice los beneficios ya mencionados de la abstracción.