Diego's profileZonaDiegumPhotosBlogListsMore Tools Help

Blog


    July 29

    [Serie] Enterprise 2.0: Parte 4- Siempre "Casi Listo"

     Continuando  con esta saga que inicié meses atrás sobre la Web reescribible y cómo las organizaciones pueden sacar tajada de ella, en esta entrega te voy a contar cómo son los ciclos de desarrollo de software dentro de este paradigma tecnológico. Lo que vamos a ver te va a sorprender no tanto por la perspectiva de quienes desarrollan el software para la Web 2.0/Enterprise 2.0 sino por la de quienes lo consumen

    Empecemos por revisar un caso real: una traductora me comentaba el otro día que uno de los softwares más usados entre sus colegas, está por dejar de ser una aplicación que se distribuye en CD y se instala. A partir de ahora los traductores van a empezar a pagar un derecho de uso (similar a la licencia que pagaban cuando compraban el CD) pero no van a tener que instalar nada. En cambio, van a poder entrar a un portal web y someter el documento a traducir (normalmente un .doc, un .pdf, un XML, etc) en forma completamente on line. El beneficio de este cambio se puede medir en al menos tres aspectos

    • Más espacio en disco disponible, ya que no hubo que instalar nada localmente
    • No hace falta contar con un equipo pulenta en recursos (RAM, CPU, etc) ya que la traducción ahora se hace al otro lado de la nube
    • Como un navegador web estándar es lo único que hace falta tener para ejecutar la aplicación, la aplicación no nos condiciona a un determinado sistema operativo

    Esta profesional me comentaba que las aplicaciones de traducción suelen trabajar con lo que se llama "memoria de traducción", que sirven para evitar traducciones literales de localismos como puede ser en Argentina "estar en el horno" (expresión usada para significar que se está en problemas), o en Chile "al tiro" (por "inmediatamente"). Estas expresiones, traducidas literalmente entre idiomas, no producen cosas con demasiado sentido por lo que los traductores deben elegir una expresión más adecuada. Bueno, las memorias de traducción ayudan a poner esto en práctica porque pasan a ser "diccionarios" de expresiones poco convencionales que van a ser de gran ayuda para evitar la intervención manual del traductor humano

    Acá viene lo interesante de esta historia: en la versión desktopstand alone de la aplicación, la memoria de traducción la iba llenando uno a medida que iba encontrando traducciones literales incorrectas, por lo que cada nuevo usuario tenían su memoria vacía. Por ende el arranque era lento (y ni que contarte si ya habías logrado una memoria lo suficientemente madura y robusta y una vuelta se te corrompe el archivo donde se persiste: no, no creo que los traductores acostumbren a tomar backup frecuente -no lo hacemos nosotros que se supone que somos los que recomendamos hacer siempre eso, no vamos a esperar que lo hagan ellos-)
    Bueno, con la versión web que se viene la memoria de traducción va a pasar a ser algo compartido -una clara aplicación del reaprovechamiento de la inteligencia colectiva que te comentaba en la parte 1 de esta serie smile_teeth-. En consecuencia, la versión web de la aplicación va a ser mejor cuanto más usada sea

    Señoras y Señores... Cambió todo

    Andá a competirle a un servicio tan liviano y a la vez tan incrementalmente poderoso. De vuelta el efecto red: cada nuevo traductor que usa este servicio, a la par que se beneficia él porque no van a tener que pagar el costo de crear su memoria, beneficia al resto porque retroalimenta la memoria de traducción compartida
    Patadón al tablero, no? Te imaginás el quilombo que podrías hacer vos también si a tu aplicación la pensás para beneficiarse del efecto red?
    Esto de ofrecer aplicaciones que no se instalan pero que están siempre ahí, en la nube de Internet se apoya en un par de técnicas:

    • Software as a Service (SaaS o software como un servicio)
    • Desarrollo Ágil (Agile Development)

    Software as a Service (SaaS). Es el mecanismo de distribución del software que te conté que usaban estos traductores del ejemplo más arriba: no se instala nada. Todo está hosteado en el proveedor (quizás, en un host que el proveedor a su vez paga por)
    Lo cómodo para el usuario consumidor de software como un servicio es que él o ella no sufre impacto (no debería, bah) ante cada upgrade de versión que el proveedor realice. La última versión está siempre "instalada" para él

    El word y el excel de Google, al que recientemente le añadió su powerpoint es un clarísimo ejemplo de SaaS, por el que más de uno supuso "esto va a hacer puré a Microsoft". Las realidades están a la vista (y conste que no dije "a la Windows Vista" smile_tongue). Hasta el momento el negocio central (core business) de Microsoft giraba en torno del sistema operativo Windows (desplegado en el 90% de los escritorios y aunque no tengo el número exacto, también es el más desplegado en servidores). Eso más el Office, la suite de productividad y colaboración. Pero si con SaaS y su modelo browser-enabled el sistema operativo deja de ser relevante (todavía es temprano para decir que eso es real: los navegadores no son full compatibles entre sí, pero es de creer que van camino a serlo -máxime porque el mercado va cerrando filas en torno a dos de ellos: el Internet Explorer y el Mozilla Firefox que entre ambos se engullen el 95% de la pizza-), la posibilidad de correr las aplicaciones principales de la suite Office en formato SaaS podrían obligar a Microsoft a cambiar copernicanamente su modelo de negocio (mirate esta nota de lo que podría ser un posible naufragio)

     

     
    Market share de los navegadores, todavía claramente liderado por el Internet Explorer
    aunque el crecimiento del Mozilla Firefox es lento pero persistente

    La industria informática está viviendo en estos días un momento de disrupción similar al que se vivió cuando IBM inventó la PC. Estoy haciendo ficción con esto que voy a decir pero al empleado de IBM que inventó la PC, si aún sigue laburando ahí, le deben dar todos los meses el galardón al "empleado pelotXXX del mes": su inventó, capitalizado en manos de empresas más ágiles como la joven Microsoft de aquellos tiempos (te hablo de más de treinta años atras), sumió a IBM en una crisis tan profunda que recién se iba a recuperar en la segunda mitad de los 90 cuando, inteligentísimamente, asumió la realidad y se reconvirtió en una empresa que provée ya no tanto hardware y software sino sobre todo servicios de consultoría tecnológica (y consultoría de negocios en general a través de la adquisición de Price Waterhouse o las alianzas estratégicas con Accenture y DMR, entre otras)

    Microsoft estos últimos años se ha venido adecuando a las nuevas demandas tecnológicas para no ceder liderazgo -para no perder más liderazgo smile_tongue-, reconvirtiendose en una empresa multi negocios (al incursionar en el segmento hogareño de entretenimientos con su XBOX, su Windows Media Center, su iPod Zune, etc; en el terreno de los servicios para empresas con su división Microsoft Consulting Services -MCS-

    También lo está haciendo en el terreno de Web 2.0, como te voy a contar más adelante

    En lo q SaaS respecta, a mediados del año 2006 lanzamos (hablo en primera persona del plural porque fui parte del equipo que trabajó en eso) un portal de guías para arquitectos de aplicaciones distribuidas como un servicio. Los que van capitaneando la vanguardia son Gianpaolo Carraro, Eugenio Pace y Frederick Chong, quienes han ido lanzando una serie de artículos abordando las problemáticas -ahora las voy a comentar- de este tipo de aplicaciones y las distintas formas de encararlas. Pero también han liberado en Febrero pasa el LitwareHR, una aplicación SaaS de referencia que pone las guías en práctica (orgullosamente para nosotros sudacas, el LitwareHR se logró gracias al esfuerzo conjunto con una empresa sudamericana)

    No obstante, desarrollar aplicaciones SaaS no es para cualquiera. Las problemáticas de SaaS son duales: para el lado consumidor de SaaS tendremos que preocuparnos de algunas, y respecto del lado servidor de SaaS tendremos que ocuparnos de otras totalmente diferentes. Por ejemplo, si el consumidor de una aplicación SaaS estaba abocado a montar su Arquitectura Orientada a Servicios (Service-Oriented Architecture o SOA) y ya había invertido unas buenas lucrecias en eso... qué rol le cabe a la aplicación SaaS en medio de esa orquesta? Cómo se maneja el login, de manera que el usuario no tenga que logonearse en varias aplicaciones? Qué pasa con sus datos que el consumidor ingresó, y que quedan hosteados en el proveedor, si discontinúa el servicio? (por ejemplo, en el caso del traductor en línea, toda la contribución que un usuario hizo a la memoria compartida... la pierde!? Uff, si es así estábamos mejor cuando estábamos mal y teníamos que instalar el software stand alone)

    Pero para el proveedor de la aplicación SaaS la cosa no viene más fácil: cómo lograr una aplicación que sea configurable en forma múltiple por varios inquilinos (tenants), conservando la forma en que cada uno deseó hacerlo? Hablemos un cachito de Escalabilidad (Scalability): qué hacemos, metemos a todos los tenants en el mismo servidor o mejor ponemos un servidor para cada uno para que no se peléen? La modalidad "uno para cada uno" es cara y desaprovecha recursos, pero es más fácil de lograr. Lo que pasa es que si un servidor se cae, ese tenant fue. En cambio si la arquitectura de la aplicación SaaS prevé una granja de servidores, se cae un servidor y el resto de la granja se hace cargo de levantar al muerto hasta que el servidor esté up and running de nuevo (los principios detrás de esto son anteriores a SaaS y tienen que ver con tolerancia a fallos -fault tolerance-, degradación suave -graceful degradation- y failover -la capacidad de reconocer que el servidor que venía ejecutando una tarea no está disponible y por ende reasignarle el resto del trabajo a otros-; esto último se puede hacer en forma proactiva mediante los llamados balanceadores de carga -load balancers-, que se paran en la entrada de la granja (farm) para recibir todos los requerimientos y se lo pasan al servidor que esté menos ocupado)
    Y respecto de los datos? Estamos seguros que los tenants no van a querer adaptar ninguno-ninguno-ninguno? Por ejemplo, qué pasa si un tenant nos dice "quiero lanzar una promo para aquellos clientes míos que tengan más de cuatro hijos, no tienen celular en la casa y ganan entre tanto y tanto". Cómo sabemos de ante mano, según el tenant, qué datos habrá que modelar?
    Gianpaolo, Eugenio y Fred se están ocupando de investigar todo esto y en el portal de SaaS que te comentaba están dejando sus conclusiones


    Los cuatro niveles de maduración de SaaS
    (Fuente: http://msdn2.microsoft.com/en-us/architecture/aa479069.aspx)

    Desarrollo Ágil (Agile Development). Te comentaba recién de la ventaja de SaaS, del punto de vista del consumidor, de no tener que instalar el software en su propia infraestructura. Para el proveedor de SaaS esto también es un beneficio, porque se libera así de tener que estar distribuyendo diversas versiones a sus distintos clientes y comprarse así, para mañana, la obligación de dar soporte a versiones dispares. Porque creéme que no es tan fácil obligar al cliente a migrar siempre a la última versión: hay quienes migran a lo pavote pero son los menos; la mayoría es más conservadora porque no quiere ser la rata del laboratorio. Por ende, es cuestión de tiempo, vas a tener clientes en versiones distintas -casi tantas como las que fuiste liberando- y vas a estar condenado a dar soporte a todas. Los clientes se van a migrar luego de negociaciones muy duras y lo peor es que, si bien vos preparás tu aplicación para migrar fácil de la versión n a la n+1, tus clientes van a estar en la versión m<n. Creéme que migrar de m a n+1 ya no será tan sencillo y quizás tengas que intervenir manualmente convirtiendo datos y archivos de configuración
    Entonces con SaaS, este lazo desatado del compromiso entre proveedor y consumidor ha ido adoptando una modalidad de liberación de versiones de software más dinámica, frecuente


    A lo largo del tiempo, liberación de versiones del sistema operativo Microsoft
    Windows
    , comparado con la liberación de versiones de la aplicación
    Flickr
    (Fuente: http://www.oreilly.com/radar/web2report.csp)

    Ante todo debo decir que el Desarrollo Ágil no es una consecuencia de Enterprise 2.0. Esta forma de desarrollar software privilegiando la frecuente integración de los componentes que los desarrolladores iban terminando en una forma iterativa e incremental, usando al usuario como un miembro fundamental del equipo de desarrollo (un aliado, por así decir, alguien que no sólo provée dirección sino que se compromete a probar, frecuentemente, las versiones que se van liberado al mismo ritmo) ha estado dando vueltas de un largo tiempo antes de empezar siquiera a hablar de Web 2.0

    Uno de los beneficios sustanciales del Desarrollo Ágil es que, si algo debe cambiar (sea porque el usuario se dio cuenta mejor de lo que quería una vez que vio algo más o menos andando, sea porque el negocio demanda un golpe de timón y a poner foco en otra cosa) el feedback permanente del usuario lo va a poner en conocimiento de los desarrolladores en forma inmediata. Justamente en la piedra basal que los gurúes del Desarrollo Ágil, pusieron al firmar el Manifiesto Ágil incluyeron como principio "los cambios de requerimientos son bienvenidos, incluso con el desarrollo bastante avanzado" (aunque, la verdad? Le quisiera ver la cara a Kent Beck, a Ward Cunnigham y a Ken Schwaber -tres ilustres firmantes del Manifiesto- si veinte días antes del final del proyecto el usuario les dice "estuve pensando... todos estos últimos tiempos... y la verdad que llegué a la conclusión de que lo que necesitamos es otra cosa... me gustaría tirar todo y empezar de nuevo" smile_tongue)

    Como sea, hace unos meses estrenamos en el portal de Arquitectura MSDN, una sección para Desarrollo Ágil, con el padrinazgo de Peter Provost (gurú del Desarrollo Ágil en Patterns and Practices) donde vas a conocer un poco más del asunto. Porque Desarrollo Ágil no es una metodología en sí sino una filosofía de trabajo. Pero después hacés doble click y te aparecen varias metodologías concretas (entre las que descollan especialmente eXtreme Programming -XP- y SCRUM) que ponen en práctica -cada una a su modo, ojo- los principios del Desarrollo Ágil

    Así y todo, no es un lecho de rosas. Sólo por mencionar una de las contras del Desarrollo Ágil a tener en cuenta es que, aunque el usuario al principio va a estar muy pilas y colaborador, al cabo de un tiempo se va a ir agotando porque él no puede descuidar su día a día -y, después de todo, tu aplicación distribuida en forma paulatina no le resuelve TODOS sus problemas; ese switching de contexto cansa y se va a notar). Es muy probable que, llegado el momento, el usuario te diga "loco, yo no pertenezco al equipo de Desarrollo" (en otras palabras, lo que te estaría diciendo es "metete tu filosofía ágil sabés dónde, no?)

    Otro de los inconvenientes -no digo que sea una contra del Desarrollo Ágil- sino tan sólo una circunstancia que lo afecta, es que implica un cambio cultural en las políticas de la organización de dimensiones copernicanas. A los gerentes que toman decisiones de negocio le gustan las cosas claras, no te van a bancar que les digas "yo te voy a ir tirando muestritas gratis, esto de a poco va a ir saliendo, con el correr del tiempo lo vamos a ir terminando". Es factible que te paren en seco y te digan "vos me traés una carta GANTT donde vea todo el timeline del proyecto, cuándo sale el módulo de Pagos, cuándo empezamos a probar el de Morosos, cuando se termina la carga incial de datos, etc, y entonces yo te libero la guita para el proyecto. Si no, haceme el favor, tomatelá de acá que ya bastantes problemas tengo". No es imposible hacerle cambiar la forma de pensar a este tipo de gerentes, pero si lo lográs, mejor que todo después te salga bien porque si inicialmente no se ven esos resultados parciales que se prometían... En fin, suerte macho smile_embaressed

    Seguramente la cosa pase por aplicar un proceso ágil sin que los de la gerencia lo perciban smile_tongue. Para soltar este tópico te invito a recorrer el laboratorio de Patterns and Practices de la mano de sus anfitriones, Peter Provost y Eduardo Jezierski

     

    El Imperio Contraataca. Microsoft no es ajeno a toda esta movida que sin duda alguna le obligó a replantear el modelo de negocio que venía liderando y que ahora corre el riesgo de perder (ocurra o no, es claro que ya nada es como fue). Microsoft viene impulsando desde años, frente a la dicotomía Desktop o Web Browser, una tercera alternativa conocida como Smart Client (por "Cliente Inteligente"). El Smart Client es una aplicación de escritorio más liviana que las stand alone, ya que no contiene toda la lógica de negocio sino que consume servicios disponibles en la nube (Internet). Preferentemente se basa en el framework .NET, y para eso toda la energía del gigante de Redmond -en lo que respecta a herramientas de desarrollo y guías de arquitectura- ha cerrado filas detrás de esa estrategia

    Visual Studio es el entorno que permite agilizar el desarrollo de éste y otros tipos de aplicaciones (años luz por adelante de tratar de hacerlo con el Notepad, ni se te ocurra). Las guías las aporta el comité de Patterns and Practices, que desde hace años vienen escribiendo unos libros de arquitectura desde distintas perspectivas (seguridad, acceso a datos, distribución de la lógica en capas, etc). Ultimamente están proveyendo unos aceleradores del desarrollo conocidos como Software Factories, que son unas extensiones a Visual Studio que, si desarrollar software fuera cortar árboles, es como pasar de un hacha a una motosierra (perdón por la comparación poco feliz en tiempos en que deberíamos todos reflexionar por los desastres venidos y por venir como consecuencia del ataque a la naturaleza que por acción u omisión hemos venido llevando a cabo)
    Entonces decía, la propuesta de Microsoft es "Software más Servicios" (Software + Services) para el consumidor (no uno o el otro). Hay un artículo muy interesante de Michael Platt, uno de los arquitectos top del equipo de Arquitectura de Microsoft, que comenta al respecto las oportunidades que se abren

    Hay algo innegable en mantener una parte local de la aplicación (en la expresión "Software + Services" sería el Software, en tanto que Services hace referencia a lo que está disponible más allá de la nube) que es el aprovechamiento de los recursos locales (memoria, discos, pero sobre todo la CPU) que siempre han tendido a abaratarse y por ende no hay un gran dilema con eso de "es mejor no instalar nada y ejecutar todo remoto"

    Por ejemplo, si la aplicación de traducción se instala localmente y se nutre de una memoria compartida (a la que, a la vez, contribuye a alimentar) distintas modalidades comerciales pueden estar disponibles. Por mencionar una, si se corta el contrato entre el traductor y la empresa que ofrece el servicio, al menos el aporte del traductor a la memoria queda almacenado localmente, de modo que pueda importarse a otra aplicación de traducción similar que el traductor contrate en un futuro

    Yo personalmente no compro mucho eso de que es por necesidad de abaratar el costo de las compus (mediante poca memoria, CPU barata, disco con poca capacidad) porque en la práctica el abaratamiento del hardware siempre llegó solo en cada ciclo en que por el mismo dinero se podía ahora comprar una PC con -a veces- cuatro veces más capacidad de disco que lo que se podía comprar por esa plata el año anterior, el doble de memoria, dos CPUs en lugar de una, tarjeta wireless incorporada, aceleradora gráfica incorporada, etc. Quiero decir, el baseline de los equipos es cada vez más sofisticado por precios similares, entonces de dónde la necesidad de hostear todo afuera (si hasta incluso las supercomputadoras -conocidas como Clusters, Computadores de Alto Rendimiento o HPC, High Performance Computing- hace 15 años atrás eran tan caras que sólo los gobiernos y las empresas de más alto revenue los podían tener; hoy en cambio estos equipos son más potentes que nunca y los más básicos están al alcance de una PyME)

    Admito que hay otras motivaciones para ir todo a Servicios que me estoy pasando por alto: la libertad de dejar todos los datos de uno en la web hace que nos podamos desplazar de un equipo a otro y que todo siga estando ahí. Qué modelo se va a imponer en el futuro dependerá de cómo cada uno de estos factores conmovió al consumidor
    Otra motivación para darle masa a los Servicios, como decía Gianpaolo en uno de sus artículos sobre SaaS, es tercerizar la administración del host en alguien que entiende y que se va a hacer cargo mejor que uno

    Microsoft puso en práctica "Software + Services" mediante Windows Live, un conjunto de aplicaciones individuales que pueden o no tener lado cliente. Definitivamente Microsoft no ataca a estas tendencias sino que claramente las acompaña (el asunto es si las podrá liderar con la claridad con que lideró la evolución de la industria hasta el momento)

     
    Software + Services en acción:
    Windows Live es un conjunto de utilidades de diversa índole,
    disponibles para usuarios de Windows. Tenemos chat (instant messaging o mensajería
    instantánea, como se lo llama hoy), correo electrónico, antivirus, blog con editor, etc
    Todo instalando una mínima parte en forma local. El resto queda del otro lado de la nube
    Por ejemplo, el blog de
    Windows Live Spaces tiene un lado cliente en su Windows Live Writer


    Así se veía el Windows Live Hotmail viejo, hasta que -sin que vos tengas que instalar
    nada- Microsoft lo renovó por esta versión que ves abajo



    En un primer estadío se permitía a los usuarios volver a la versión previa (sobre todo si
    sus navegadores no aceptaban AJAX como tecnología -lo que degradaba notoriamente la
    experiencia de usuario enriquecida por la nueva versión-)

     

    Okay, suficiente por hoy. En la próxima entrega vamos a ver cómo la Enterprise 2.0 revolucionó la forma de exponer y vender productos a escala global. Hasta entonces!

    Esta serie se compone de

    July 15

    Llegando a Newhalem (un Finde en North Cascades)

     Es  verano acá en el norte y hay que vivirlo a pleno. Las fotos que te muestro acá son del finde que nos pasamos en el Parque Nacional de las Cascadas del Norte (estado de Washington). Queda a poco más de dos horas de casa

    En la foto, el río Skagit corre a mis espaldas, casi llegando a Newhalem, el pueblo contiguo al parque

    El álbum de fotos completo lo vas a encontrar acá: North Cascades 2007 (click)

    July 14

    [Serie] Enterprise 2.0: Parte 3- Que No se Retove el Usuario

     Ya  al hacer la crítica sobre el libro de Dave Platt "Por Qué el Software Apesta", comentaba que las aplicaciones que no ofrecen una buena interfaz de usuario, corren el riesgo de no ser ni siquiera olvidadas sino algo peor que eso: pueden ser ignoradas por los clientes. Al respecto hay una frase muy popular de Douglas Martin (la dijo en 1989 y mirá lo vigente que es!)

    "Preguntas acerca de si diseñar es necesario o factible no están considerando bien el punto: diseñar es inevitable. La alternativa a un buen diseño es un mal diseño. No es un 'no diseño'."
    Douglas Martin, "Book Design: A Practical Introduction" (1989)

    Claro: con la formación computina que todos tenemos, salida de la facu en edad adolescente (precisamente en la edad del pavo) y aterrizada en la edad adulta en los primeros años de experiencia laboral, cuando se nos empiezan a otorgar las primeras grandes responsabilidades, decime en qué momento aprendemos de cómo hacer buenos diseños de interacciones para usuarios!

    Yo tengo una regla del pulgar para no hacer malos diseños de interfaz ni de experiencia de usuario: llamá a un diseñador en serio. No me estoy haciendo el chistoso, que quede claro. Hay veintiun mil aspectos (arquitectura de la información, usabilidad, familiaridad de las interfaces, navegación, ...) para los cuales podremos tener cierta idoneidad pero no tenemos formación. En ese sentido, al menos yo, no quiero bastardear los pergaminos de alguien que sí de veras se formó para garantizarle al usuario una buena experiencia

    En cambio sí puedo hacer mi aporte contando el estado del arte en tecnologías para la composición de buenas fachadas de aplicación que faciliten la puesta en práctica de diseños hechos por un profesional en el tema. Allá por Septiembre del 2005 había posteado sobre la dicotomía cliente delgado / cliente grueso y cómo en cada caso había algo que ganar y algo que perder. Y comentaba que con el tiempo, ambas partes de la discusión habían ido tomando del otro aquellas cosas que hacían a la diferencia, de modo tal que el usuario no acuse tanto recibo de la decisión tomada en lo que al tipo de lado cliente respecta

    La cosa no se va a resolver a todo o nada, sino que cuando convenga se usará el navegador como cliente, cuando convenga se usará alguna aplicación de escritorio. La distancia entre ambos es cada vez menor en cuanto a capacidades, tecnologías usadas, etc. La diferencia fundamental cada vez más pasa por si se quiere distribuir fisicamente al cliente (de manera de aprovechar recursos locales) o si se usa como un servicio, vía la web, accediendo a datos igualmente distribuidos y por ende manteniendo una bajísima dependencia de la estación cliente

    Las tecnologías que permiten hoy lograr Aplicaciones Internet Enriquecidas (Rich Internet Applications o RIA) son:

    • AJAX (Asynchronous JavaScript and XML). La historia creo que la conté varias veces: todo empezó con un agregado al Internet Explorer 5, que permitía invocar a un servidor web usando, claro, el protocolo HTTP pero para recibir a cambio una respuesta XML en lugar de HTML (en realidad, bueno, podía recibir cualquier cosa, pero lo esperable era XML). La clase capaz de hacer esa invocación se llama XMLHttpRequest y generalmente trabaja en forma asíncrona, con vos indicándole qué función JavaScript llamar cuando la respuesta HTTP esté disponible. Pero ojo, también podés indicarle a XMLHttpRequest que llame en forma sincrónica (aunque, esperablemente, el browser se va a bloquear hasta que le llegue la respuesta y en eso no va a variar de la forma tradicional, por así decir "Web 1.0", de usar la web que consistía en ir al servidor para buscar una nueva página)
       

       
      Parecen iguales pero no son!! Podemos decir que la versión de la izquierda del
      Windows Live Messenger se distribuye en la versión Software as a Service (SaaS),
      ya que no requiere instalación alguna en el equipo cliente, que accede al mismo
      a través del navegador. En cambio, la versión de la derecha está distribuida bajo
      el paradigma Software + Services, donde el puesto cliente sí aloja parte del
      software, que no obstante va a consumir servicios disponibles en la red (por
      ejemplo, recuperar la lista de usuarios conectados, enviar un mensaje a un usuario
      dado, etc). Esta segunda alternativa, claro, hace un mejor aprovechamiento de
      características locales como el envío y recepción de audio y video, entre otras
      facilidades no presentes en la versión SaaS
       

      Office Outlook Web Access (OWA). Una cuasi réplica del Outlook (incluso con la ventana
      emergente de los recordatorios) completamente lograda en el navegador
       

      Google Docs and Spreadsheets. Completamente dentro de un navegador y haciendo uso de AJAX
      puro, Google logró una aplicación SaaS que nos permite cargar formulas en celdas, aplicarles
      formato y otras propiedades mediante un click con el botón derecho del mouse; también crear
      gráficos de barras, tortas, etc. Simplemente probalo

      Lo cooooooooooool de AJAX es que, al recibir sólo un XML con datos puros (no todo el HTML que mezcla datos con la forma visual de mostrarlos), puede luego, vía DOM, alterar la página sin cargarla toda de nuevo (en la forma "Web 1.0" perdías la página actual y por ende había que hacer malabares -vía cookies, vía el manejo de tu sesión HTTP en el servidor web para no perder el contexto, el estado del caso de uso que estabas codificando -por ejemplo imaginate un wizard paso a paso de una agencia de viajes donde elegis el vuelo, el hotel en otro paso, el auto en otro paso, etc... tenés que ir arrastrando todo lo que ya venías eligiendo!-)
      En ese sentido, AJAX una masa. Ahora, tiene sus contras también. Veamos:
       
      -No está aún soportado en forma uniforme en Internet Explorer, Mozilla, Safari, Opera y otros. De hecho algunos browsers ni lo tienen soportado. Por ello, para evitar este escollo de que tu aplicación AJAX funque en algunos browsers y no en otros (lo que te diezmaría la chance de sacarle provecho a Enterprise 2.0) es que uses AJAX indirectamente a través de frameworks como la Yahoo! UI Library, el Google Web Toolkit o ASP.NET AJAX. Todos ellos le elevan el nivel de abstracción a la API básica, encapsulando así la lógica de detección de browser y posterior adaptación al mismo. El approach de Yahoo es JavaScript puro. El de Google es muy novedoso: vos programás en Java, por ejemplo con Eclipse, y el tipo te compila el Java y te deja cross-browser AJAX! En realidad, a mí personalmente no me gusta mucho el enfoque de Google (por primera vez en esta serie los voy a criticar) porque, si ya sabés Java, todo bien. Pero si tenés que aprenderlo para poder usar AJAX... estás jodido: Java es más difícil que JavaScript!! JavaScript es conocido por los que desarrollan con PHP, Ruby, .NET y la lista sigue. Cuántos de todos esos conoceran Java? No, Google, respetuosamente, ahí la chingaste. Ahora, el enfoque de Microsoft no es mucho mejor que el de Google: si programás en ASP.NET está todo bien, y si no, está todo mal. No obstante, es claro que Google y Microsoft, ponen el foco en un target de desarrollador (Java y .NET respectivamente) y le dan todo a ese público objetivo. Si lo miramos así, no se ve tan mal. Lo que sí, ASP.NET AJAX, no es homólogo al Google Web Toolkit sólo que en lugar de Eclipse es Visual Studio. ASP.NET AJAX implica ASP.NET en la lógica de lado servidor(o sea, no JavaScript) y JavaScript del lado cliente (o sea, no C# ni Visual Basic; un modelo más predecible: Google en el caso era Java a ambas márgenes -aunque se previó un mecanismo de introducción de JavaScript "as is" pero sólo para casos especiales-). Me parece que gana más el desarrollador .NET con ASP.NET AJAX que el desarrollador Java con Google Web Toolkit
      -Más contras de AJAX: JavaScript en general ejecuta lento. Si consumís demasiado XML, etc, usa mucha memoria también y lamentablemente las implementaciones actuales de los browsers más populares como Firefox o Internet Explorer a menudo pierden esta memoria (eso se llama memory leak: el sistema operativo no recibió la memoria de vuelta pero el browser tampoco la puede direccionar porque perdió los punteros a la misma). Esto se suele manifestar cambiando de una página a otra en el navegador, y cuando la memoria perdida es demasiada hay que matar el browser y reabrirlo (suena fácil decirlo, no? Te agarra en medio de la carga de datos de un caso de uso y me cache en Dié). Qué hacer ante esto? La lógica: usar AJAX razonablemente, combinando adecuadamente con lógica de ejecución de lado servidor (JSP, PHP, ASP.NET, etc)
      -La última contra de AJAX y seguimos: al hacer todo en una misma página, si en un dado momento el usuario está tan satisfecho con la info que tiene en la página que la quiere bookmarkear, la URL sigue siendo la misma del momento de cargar la página, antes de ejecutar todo el AJAX que se ejecutó. Con lo cual el bookmark no le va a permitir abrir la página en el estado que el desea. Aunque parezca un tema menor que no se va a dar... nosotros developers no conocemos bien a todos los usuarios no técnicos (que si les hacemos un mano a mano nos revientan a trompadas porque son muchos más). El usuario no sabe de AJAX ni de nada. No sabe si la URL era la del principio, la del medio, la del final, ni pretendamos que lo sepa (leé "Why Software Sucks" y lo vas a entender mejor)
       
      Un buen balanceo de lógica en el cliente y en el servidor, con AJAX, está hoy haciendo maravillas

    • Mashups. Otro mecanismo novedoso de lograr interfaces copadas es el conocido como mashup (algo así como purecito). Consiste en hacer interfaces de usuario re-usables, con su funcionalidad embebida incluído (por re-usables entendé robables en el buen sentido: lo que te contaba en Elogio del Choreo). La idea es que los que re-usen tu pedacito de página web puedan extenderla a los fines que ellos precisen (es decir, que ganen ellos porque se ahorraron de hacer todo lo que vos ya hiciste, y que ganes vos porque al usarla te terminen derivando clientes o alguna otra forma que te de la oportunidad de revenue)
      Quizás el ejemplo más exitoso de mashup lo aporta, nuevamente, Google con sus Google Maps. Google Maps es una aplicación de mapas en línea que permite obtener direcciones para ir de un sitio a otro, ver vistas satelitales, alejar, acercar, etc. Los consumidores de su mashup puede embeber la vista gráfica del mapa (mediante AJAX), añadiendole hitos, referencias señaladas en el mismo. Así, te vas a encontrar que cadenas de café, pizza, videoclubes, etc exponen en el mapa de tu localidad las ubicaciones de sus sucursales, y eventualmente te dicen (usando para eso el mashup) cómo llegar desde donde vos estás
      La versión "Web 1.0" de los mapas ciertamente es olvidable, por cuanto cada acción del usuario implicaba un requerimiento HTTP al servidor web que cargaba la página completa
       


      Antes de que surgieran los mashups, las aplicaciones que embebían mapas eran aburridas como
      chupar un clavo: cualquier desplazamiento que se quisiera aplicar al mapa implicaba cargar la
      página web completa (scrollear hasta el mapa, etc). Un embole

       

      Esta inmobiliaria española, le tirás un barrio y te muestra un mapa de la zona con las casas para
      comprar o alquilar, con sus metros cuadrados, su precio, etc. Además, cada vez que te parás
      en el mapa sobre una de las propiedades de interés, con DHTML te la destaca en un recuadro
      como el chalet de Fuentelarrena que se ve en la foto

      Los mashups vienen teniendo un éxito rotundo y es gracias a lo que se puede hacer con ellos que la Web 2.0 se ganó el mote de Web Programable, por cuanto los mashups ponen sobre la mesa todas estas tecnologías nuevas como AJAX, JSON, REST, servicios web, etc
      Existen catálogos de mashups para que revises si algo de todo eso te puede servir para chorear (y ayudar así a tu víctima del despojo)
      Un par de lugares para tener a mano
      -WebMashup
      -ProgramableWeb (no tan bien organizado como para encontrar rápido las cosas)
      Respecto de esta tecnología, valen los mismos comentarios que te hacía en Elogio del Choreo: al tomar algo provisto por otro corrés el riesgo de que momentaneamente no esté disponible, haciendote quedar para el traste a vos. Eventualmente, si estamos hablando de nivel "Enterprise 2.0" y no apenas "Web 2.0", te convenga tener algún acuerdo con el proveedor para salvaguardarte de eso

    • Gadgets/Widgets. Tienen cierto parentezco con los mashups pero no son exactamente eso, porque los mashups tienen la gracia de que pueden ser combinados y eventualmente mutados por el consumidor. En cambio los gadgets cuando están presentes, son más autónomos respecto de lo que los rodea
      Se trata de miniaplicacioncitas que cumplen un fin específico (decir el estado del tiempo, la cotización del dólar, quién de tus contactos del messenger está conectado, jugarte al backgammon, al space invaders... la lista es larga!)
      Los gadgets no son exclusivos de la web: los hay también para el escritorio. El precursor fue Mac OS X (el sistema operativo de las Apple) que los llamó Dashboard Widgets. Para programarlos no había que saber C, ni Java ni nada raro: con HTML, JavaScript, CSS (lo cubro en un rato), una imagen en formato PNG y alguna que otra cosita más, bastaba. Son para el escritorio pero se programan con tecnologías de la web, fabuloso!
       

       
      Gadgets de Windows Live: los elegís de una paleta disponible on line y cada vez que te logueás
      te arma la página con el collage que vos elegiste. En este ejemplo tengo un gadget que me
      presenta algunas news de MSNBC, otro que me tira el estado del tiempo en la ciudad que yo
      le configuro, otro que me pasa headlines del mundo del espectáculo y, a la derecha, un gadget
      que me trae mis correos de Hotmail!! Para tu tranquilidad: tenés que estar autentificado en
      Windows Live para que realmente entre a tu correo (ya te habías asustado eh?)

       

      Un gadget de Windows Vista (y por ende bajo el paradigma Software + Services)
      Permite elegir un idioma orígen, uno destino, cargar una frase y consume un servicio
      web que responde lo que la sentencia quiere decir en el idioma destino

       
       
      Un gadget de Spaces Live, capaz de suscribirse a un orígen de datos estilo RSS y mostrar su
      contenido. En el ejemplo, mi propio blog está haciendo eco de las 10 novedades más recientes
      de
      MSDN Architecture

      Windows Vista incorpora su versión de gadgets de escritorio (acá hay una intro interesante para desarrollarlos, que es muy similar al desarrollo de gadgets para Mac OS X)
      Así como hay catálogos de mashups, hay catálogos de gadgets pero en este caso, al revés que con los mashups, va a depender de dónde los quieras desplegar: en otras palabras, un widget de Apple Mac no te va a correr en Vista ni viceversa. Y respecto de la web, existen gadgets para Windows Live, que no se pueden usar en tu págine en Google, etc
      Echate un vistazo en
      -Microsoft Gadgets (para Windows Vista y Windows Live)
      -Apple Dashboard WIdgets (para Mac OS X)
      -Google Desktop Gadgets (requiere un desktop que provée Google; hay una controversia que viene en aumento con ciertas facilidades que Google ofrece en este escritorio, ya que potencialmente -previa autorización del usuario que podría aprobar sin pensarlo bien- habilitaría a Google a indexar info del disco duro del usuario y subirla a sus servidores y que potencialmente quede al alcance de otros... smile_omg)

    • Cascading Style Sheets (CSS). Junto con HTML, JavaScript y DOM (Document Object Model), CSS constituye lo que se conoce como Dynamic HTML (DHTML). Puntualmente esta tecnología se creo con el propósito de ayudar a separar la estética de la semántica (o, en otras palabras, la forma del contenido). Ahora podíamos definir clases de estilo (especificando lo que queramos: color de frente, de fondo, tamaño, fuente de texto -font-, posición absoluta o relativa, características varias de los bordes de una tabla, etc). Estas clases después se asignan a los markups del <BODY> un documento HTML y voilá: el navegador aplica los estilos a estos markups y presenta el documento formateado
      El valor de hacerlo así, desacoplado, y no meter estilos directamente en los atributos de nodos interiores al <BODY> es que, mañana podríamos querer cambiar los estilos solamente, y deberíamos editarnos todos los HTML involucrados. En cambio así sólo se toca el archivo .css (vinculado adecuadamente a todos los HTML mediante un link en el <HEAD> del documento
       
      <link rel="stylesheet" type="text/css" href ="/estilos/pastel.css"/>
       
      y asunto cocinado
    • eXtensible StyLesheeT (XSLT). Originalmente se creó con la misma finalidad que CSS: para aplicar estilos a semántica pura, y de ahí el nombre. Pero en realidad esta tecnología es algo mucho más ambicioso: sirve para transformar un documento XML (de la gramática que sea), en otro (también de la gramática que sea, comunmente XHTML -un dialecto de HTML completamente compliant con XML, ya que el HTML original no era XML puro sino su antecesor: SGML-)
       

       
      Tomando como base el XML del ejemplo de REST presentado en Elogio del Choreo, en lugar de
      usar JavaScript para producir HTML podemos crear una transformación XSLT que produzca el
      mismo resultado

      El problema con XSLT es su complejidad, lo que atento en parte contra su adopción masiva: acordate lo que decía Cwalina sobre diseñar APIs fácil de entender y empezar a usar si querías adopción masiva; bueno, acá tenés un ejemplo de lo que pasa si no tenés en cuenta eso
      Ni siquiera en el uso básico, para el que había sido creado, de transformar documentos REST en XHTML con estilo, le pudo ganar a CSS

    • Otras tecnologías alternativas, que no voy a cubrir, son OpenLazlo (que habilita la creación de HTML a partir de XML y JavaScript procesado por un servlet Java); formatos de video como Flash Video (FLV) o el flamante Silverlight, eXtensible Application Markup Language (XAML, un dialecto XML que permite definir la interfaz de usuario y asignarle eventos a los controles)

     

    No Pensé Que Se Trataba de Cieguitos
    Para terminar el post, te quiero contar que en los tiempos que vendrán, será más y más obligatorio (quiero decir, incluso penado por la ley en caso de no cumplir) ofrecer experiencias de usuarios alternativas para personas con discapacidades (cortos de vista, ciegos del todo). Parece que exagero pero no: el Comité organizador de los Juegos Olímpicos de Sydney en 1999 desestimó un reclamo de habilitar el portal de los Juegos para lectores de pantalla (aplicaciones que interpretan lo que se está desplegando, sea para pasarselo a otro componente que lo recita verbalmente, lo presenta en paneles Braile, etc). El argumento era que proveer esta facilidad iba a costar más de dos millones de dólares (U$ 2.300.000)... Perdieron el juicio por discriminación que se comieron: tuvieron que pagar quince mil dólares de multa (U$ 15.000) más el costo de hacer todas las adaptaciones
    No te esperes que haya sido un caso aislado, esto -duele decirlo pero es lo correcto- va a ser cada vez más mandatorio porque no podemos excluir a gente que tuvo menos suerte que el resto de nosotros con la Naturaleza
    Afortunadamante existen un montón de técnicas y recomendaciones que ayudan a no tener que trabajar en paralelo (para videntes y no videntes): vos hacés la página para videntes en una forma tal que puede degradarse suavemente (graceful degradation, por ejemplo sustituyendo el CSS por uno más básico, sin tocar el contenido semántico) en dispositivos para gente con discapacidades y otros como el caso de los teléfonos celulares
    Respecto de estos últimos: tené en cuenta que no todo el stack de tecnologías que te mencioné está masivamente disponible (AJAX, etc... fuiste)
    Veamos todo esto con la lente Enterprise 2.0, no con la mera Web 2.0: la venta de teléfonos celulares y otros dispositivos móviles se dispara año sobre año. Un dato: a principios del 2006 el número de teléfonos móviles dando vueltas por el mundo era de dos mil millones (2.000.000.000), el doble de las PC conectadas a Internet. Eso sí: apenas un 28% de esos celulares se conectaba a Internet. Pero es cuestión de tiempo: vos no sabés cómo vienen los adolescentes -que mañana serán adultos- con el celular (si hasta en los colegios empezaron a prohibir el uso). Parece como una molestia, algo innecesario, desarrollar aplicaciones que degraden suavemente a teléfonos móviles, no? Pero esos celulares están prendidos todo el tiempo, seguramente más tiempo que la PC. Y andan todo el tiempo en la calle. No seas gil: no dejés plata tirada en la calle smile_wink

     

    Esta serie se compone de

    July 09

    Bellevue 5KM

     Hacía  mil que no corría (miento: diez mil que no corría) y el otro día Marcelo (un amigo originario de Brasil) me dijo que se habían anotado para correr en la categoría de 5km de la tradicional competencia Bellevue Seafair (que en realidad es una media maratón y una maratón)


    Con Marcelo (de negro), Michael (haciendo la V de la victoria ya que llegó primero -de nosotros,
    aclaro-), Maira (a la derecha, y un aplauso que fue su primera carrera) y otros amigos todos
    ellos de Brasil

    La verdad es que no me disgustó cómo corrí (discreto: 25 minutos 36 segundos), haciendo más de un año que no competía. Un detalle que debo precisar es que como nabos que somos arrancamos un minuto dos segundos tarde... porque nos fuimos a la largada de la media maratón y hasta que llegamos a la largada correcta ya estaban descolgando el cartelito!!

    A ver si retorno a las lides (ya voy dudándolo). De ahí, eso sí, nos fuimos a un brunch en Kirkland (sacrificada la vida, ché)

    Gracias, Celine, por la pic

    July 08

    Tofler

    (El siguiente manuscrito fue encontrado en un baño de una Universidad. El titular de este blog deslinda toda responsabilidad de su contenido smile_shades)

     Resién  bengo de dar el tofler, un esámen para entrar a la unibersidal yanki. Consiste en una serie de pregunta de matesmática qe prosedo a publicar acá en emisión espesial para que el que qiera rendir el tofler ya conosca cómo biene la mano (e sotro serbisio gratis a la comunidás)

    La primera pregunta también era de matemástica (antes había puesto matesmática pero creo qe la h estaba en el lugar incorrecto) y planteaba calcular el resultado de la sigiente ecuasión:

    Qisás sea difísil pa lo gringol pero no para mí porqe el dó aparese dó bese (balga la rendundansia) así qe se puede tachar qedando

    Si todas las cuentas ban a ser así me ban a tener que dar el diploma unibersitario nada más de rendir el tofler! El ejersisio que le segía resaba de la sigiente manera

    I acá el truqito era el mismo q en el anterior, sólo qe en lugar de despejar el dó se despejaba la n (claro, ai gente qe si le cambiá una letra por un número é como qe los largés solos en Parqe Chás y les digás "llamame al selu cuando sálga"

    La cosa es qe el desarroyo segía porque al salir la n que multiplicaba a si, queda si multiplicando a x, i eso asta el más inorante sabe qe da sei (a, porqe ademá é de inglés, é)

    En el terser desafío la tónica canbiaba: ya no era ni de tachar número ni letra. Desía "espandir la sigiente espresión"

    Lójico: a un burro le tirás eso y palmó aí, porqe si abía logrado resolber lo dó primero seguro qe ba a qeré sacá todo tachando palito (alguno son tan bestia qe una bes qe aprenden ha cer una cosa no les pidá nada distinto porqe los matás, los). El punto es qe esto secsámene se asen por conputasión, entonse cuando te piden espandir lo qe en realidá qieren ber es a ber qé tan bueno só con el buord (el buord es el prosesador de teqtos). Bueno, yegó la ora de debelar el misterio: el resultado espandido da

    Despué benía uno qe sí me tomó de sorpresa:

    Acá sí qe no supe para dónde rajá. Entonse cobré coraje i me dispuse a aser una cosa qe en esto paíse del primer mundo és como robá un banco de lo grabe qe lo ben. Desidí copiarme de algún conpaniero. Lo qe pasaba es qe los qe tenía a la bista tenían otro tema distinto. Pero justo uno de los ejersisios era parecido, sólo que en lugar de un 5 era un 8. Entonse el buchón qe me estaba copiando ya lo tenía resolbido. Mirá qe ejersisio raro qe era qe la respuesta era un ocho aplastado

    Cuestión qe me la jugé por la misma y metí un sinco aplastado yo tanbién, resultando

    I el último ejersisio fue el qe más me sorprendió porqe yo me pensé qe la complejidá iba a cer cresiente pero el último me paresió el más fasilón. Claro: admitamo qe no ai jente bocho como yo qe si les mesclá cosa de número y letra se marean. Pero para mí fue regalado. Pedían "allar x en el sigiente cuadrado"

    En realidá el enunsiado puso triángulo pero yo ago la fés de rata porqe si tiene dó lado no puede ser otra cosa qe un cuadrado (ya si tubiera tré é sun cubo). Cuestión qe mi respuesta a allar eqi no se iso esperá:

    La semana qe biene me dan la nota, qe descuento qe ba a cer un ésito i me ba a dar el pase a la unibersidá