Archivos para 25 febrero 2011

Aplicaciones para móviles – mobile apps

Mobile Apps

Esta vez quiero escribir un poco más acerca del mundo de las Aplicaciones para Móviles. Esta es una de las tendencias más importantes en el desarrollo de software para esta segunda década del milenio. Pienso que si alguien está interesado en entrar al mundo de los Mobile apps developers está en el camino correcto. El mercado demanda y está ávido de este tipo de aplicaciones. No obstante, tenemos que hacer algunas apreciaciones que me parecen importantes para especificar bien de qué estamos hablando cuando hablamos de mobile apps y en que se diferencia este enfoque de desarrollo en comparación al desarrollo de software tradicional para Web.

Cuando un usuario utiliza su teléfono celular o su tableta electrónica para navegar en Internet porque ahí encuentra muchos servicios útiles (la mayoría basados en la Nube) lo que está haciendo en realidad es “reemplazar” su computadora de escritorio o su Laptop por un celular o tableta que, aunque físicamente más pequeños, no hacen en este caso específico otra cosa que navegar en Internet.

De esa manera si yo accedo a un sistema de información de mi empresa, vía un usuario/contraseña, y vía un browser (navegador Web) probablemente a dicho sistema le es prácticamente indiferente (salvo alguna pequeñas cuestiones técnicas que no abordaremos en este post) si estoy accediendo a él con mi teléfono celular o con mi computadora de escritorio. Después de todo lo único que hago es acceder a un sistema que está en un servidor Web.

Claro, puede ser que dicho sistema sea completamente innovador, tecnológicamente muy avanzado y sumamente útil pero también es cierto que el Web developer que lo desarrolló se debió preocupar “relativamente poco” por el hecho de que el sistema sería accedido vía celular o vía una computadora de escritorio. Lo más importante para el developer era que el sistema sería accesado vía un navegador Web en Internet. El usuario no necesita instalar nada, ni en su teléfono, ni en su computadora, para poder acceder al sistema. Ejemplos de esto son por ejemplo cualquier de las aplicaciones de Salesforce las cuales pueden ser accedidas vía móviles también.

Siendo así, técnicamente hablando dicho Web developer no está desarrollando ninguna Aplicación Móvil, a pesar de que quizá a un usuario específico sólo le guste acceder a ella vía solo su celular. Lo que hizo el desarrollador fue realizar Desarrollo Web.

En cambio si el usuario tiene que bajar una app desde Internet, instalarla en su dispositivo móvil y luego usarla, entonces sí se trata de una aplicación móvil. Por ejemplo, como las aplicaciones de la Apple App Store. De hecho, estrictamente hablando podría ser que una Mobile app ni siquiera necesite Internet para funcionar. Por ejemplo, un app para celular de calculadora científica avanzada; o un app para tomar fotos y manipularlas en el celular. Ese tipo de apps comunmente no depende de que haya o no acceso a Internet.

Y listo; existen dos mundos: el desarrollo Web (que podría considerar aprovechar su acceso desde móviles), y el desarrollo de apps móviles (que podría considerar aprovechar el acceso a Internet). De hecho, existen también sistemas que son construidos pensando en ambas alternativas a la vez; lo cual, en mi opinión, es genial.

Una aclaración muy importante es que no pretendo hacer ningún juicio de valor en cuanto a qué tipo de desarrollo es mejor. Creo que ambos son excelentes rutas que un Developer puede tomar; ambas son muy valoradas en el mercado. Y ambos son mundos tecnológicamente interesantes, modernos y retadores. La otra importante aclaración es que en ambos casos el uso “en movilidad” puede ser fundamental. Es decir, podemos crear aplicaciones, en ambas alternativas, donde el usuario final (que es en realidad el que importa) use su aplicación de manera muy portatil vía sus dispositivos móviles (celular, tableta o laptop).

Viéndolo desde el punto de vista usuario, ambas podrían considerarse móviles (de hecho, lo son). Sin embargo, esta diferencia, aunque es introductoria y quizá algo obvia, me pareció muy importante hacerla como un primer post en este blog debido a que hay dos elementos que son fundamentalmente distintos en cada alternativa, y que iremos abordando poco a poco en este blog:

  • El modelo de ingresos que está detrás de las aplicaciones de cada caso
  • La tecnología subyacente y los conceptos técnicos deben conocerse para cada alternativa

Bien, entonces, manos a la obra; ¡a desarrollar tecnología pensando en movilidad!

, , ,

2 comentarios

Algunas razones de porqué elegiría Rails + Database.com + Heroku para una solución de Nube … Parte 2

En la primera parte de este post, había descrito las razones por las que yo elegiría Ruby on Rails para el desarrollo de un sistema Web. Al final, comentaba que me parecía que la base de datos ideal debería ser una basada en la Nube y que Xeround (MySQL cloud based) podría ser la opción idónea. Sin embargo, existe una fuerte alternativa. Se trata de Database.com, el producto de base de datos de Salesforce que también está orientada a aplicaciones en la nube (tal como lo es Salesforce).

Me parece que, aunque ambos productos son sólidos (Xeround y Database.com) y tienen las características adecuadas, existe una poderosa razón de mercado y de negocios que favorece la opción de Database.com. Este producto es el que Salesforce utiliza para sus aplicaciones CRM basadas en la nube y que utiliza también en su plataforma de desarrollo Force.com, la cual está ganando mucho momentum en los últimos meses.

Dicho de otro modo, una nueva aplicación de negocios que use Database.com estará íntimamente ligada desde el punto de vista técnico con los datos y las aplicaciones nativas de Salesforce (aunque uno podría usar Database.com sin depender de la plataforma Force.com). Y una integración natural con el líder del mercado en aplicaciones de negocios para la nube representa un potencial valor de mercado de una eventual futura aplicación de negocios. Inclusive existe también la posibilidad de alianzas estratégicas futuras no sólo con Salesforce sino con muchos otros proveedores de aplicaciones de negocios del ecosistema de Force.com.

4. Plataforma de desarrollo y deployment Heroku.com. Existen varios, y muy buenos, proveedores de servicios que ofrecen un óptimo deployment de una aplicación Ruby on Rails. Uno de los mejores es Heroku.com. Ofrece un medio ambiente y plataforma sólida para aplicaciones Ruby, una arquitectura Multi-tenancy natural, múltiples Add-on´s que pueden enriquecer y apalancar las aplicaciones desplegadas en Heroku, y una reputación excelente como proveedor de servicios Platform-as-a-Service (PaaS).

Aunque pudieran existir otros proveedores Ruby (Engine Yard, en particular), Heroku recientemente ha adquirido una enorme ventaja de mercado ya que fue comprada en enero del 2011 por Salesforce. Al margen de la ventajosa liquidez financiera que esto trae para Heroku, es también de esperar entonces que Heroku y Force.com vayan siguiendo rutas técnicas paralelas o con una integración mejorada. Dicho de otro modo, Salesforce está también apostando por el ecosistema Ruby on Rails, paso lógico dado que Apex (el lenguaje de programación usado en Force.com) es muy cerrado y no cuenta con una comunidad fuerte de Web developers (como Ruby) salvo por los que ya desarrollan en Force.com.

Conclusión: la arquitectura Ruby on Rails + Database.com + Heroku me parece la ideal para aplicaciones de negocio para la Nube. Su principal desventaja (creo que temporal) es que actualmente la integración RoR-Database.com no es factible con la versión 3 de Rails sino únicamente con una anterior. Ello debido a que el adaptador de la base de datos (ActiveSalesforce) no es compatible con Rails 3. Sin embargo esto deja de tener relevancia ahora que Force.com está apostando también por las APIs basadas en REST por lo que seguramente pronto veremos un adaptador REST (a febrero del 2011, existe incluso ya una versión alfa) en lugar del actual basado en SOAP.

(Nota relevante agregada el 22-mar-2011: Rails 3 & Force.com REST API)

Quizá en otro post comentaré de alternativas también sólidas como arquitectura de base para aplicaciones Nube. Sin embargo, la aquí expuesta es la que yo elegiría en definitiva.

, , , , , , ,

2 comentarios

Algunas razones de porqué elegiría Rails + Database.com + Heroku para una solución de Nube … Parte 1

Hace más o menos un par de meses (finales de diciembre del 2010) me vi inmerso por esos azares del destino en buscar cuál sería la plataforma idónea para desarrollar “from scratch” soluciones de negocio y procesos organizacionales bajo el concepto de computación en la Nube (Cloud Computing). Software-as-a-Service (SaaS) en su definición más pura. Lo más interesante del caso es que yo no tenía ninguna restricción; o sea, no tenía ninguna inversión tecnológica heredada que tuviese que “respetar” o con la que tuviese que interactuar; es decir, ¡el mundo ideal del Arquitecto de Software!

So.. me di a la tarea de investigar un poco el asunto y leer algo de material al respecto. Tenía que considerar muchos factores, no sólo técnicos sino también como estrategia de negocios e inversión futura. Simple y llanamente debía elegir en qué desarrollar un producto que mi empresa pudiese invertir y rentabilizar en el futuro. En este post explico la primera parte de las razones por las que elegí cierta tecnología. En la segunda parte continuaré comentando el razonamiento de mi decisión.

Mi elección:

He aquí algunas de las razones por las que seleccioné la tecnología descrita:

  1. Ruby es un lenguaje de programación orientado a objetos creado en Japón por Yukihiro Matsumoto, “Matz”, a principios de los años 90s; lo suficientemente maduro para demostrar que no es flor de un día pero lo suficientemente “moderno” y poderoso como lenguaje de programación. Es elegante, sencillo de aprender, tiene una comunidad de desarrolladores vibrante y ha sido definido por Marc Benioff, director de Salesforce, como el lenguaje de la Nube. Además, existen implementaciones Java (JRuby) para los developers que aún se sienten cómodos con Java pero quieren acceder a la elegancia de Ruby. Y finalmente, Ruby es también Open Source.
  2. Ruby on Rails (RoR). Es el framework de desarrollo Web que mayormente usa el lenguaje Ruby (aunque existen otros; Sinatra en particular) y es ampliamente conocido y aceptado por la comunidad Ruby. Rails es uno de los primeros frameworks de desarrollo en utilizar el patrón MVC (Model-View-Controller) que prácticamente se ha convertido en un estándar del desarrollo de aplicaciones para la Web. Sólido y maduro.
  3. Base de Datos: En este tema hay mucho por escoger. MySQL es muy bueno, es Open Source y es ampliamente aceptado por la comunidad de Web Developers. Por otro lado, Apache tiene una muy interesante iniciativa de base de datos (document-oriented) llamada CouchDB que también tiene ya proveedores en la Nube: Cloudant.com. Si consideramos que “la Nube” será nuestro pan de cada día, debemos privilegiar la decisión de una base de datos “de Nube”. Es por ello que la versión “Nube” basada en MySQL llamada Xeround sería nuestra primera opción; máxime que Xeround ya tiene un add-on para funcionar en la plataforma de Heroku.

Sin embargo, aquí es donde entra nuestra primera gran consideración en favor del mundo Salesforce, más específicamente, del mundo Force.com que es la plataforma de desarrollo de aplicaciones para la Nube de Salesforce. En la segunda parte de este post abordaré porqué me pareció importante integrarse con Force.com, vía su producto de base de datos Database.com y también terminaremos de justificar nuestra decisión completando el cuadro con la plataforma de desarrollo de Heroku.com.

¡Back soon!

, , , , , , , ,

1 comentario

El desarrollo de software Web. Un breve enfoque general.

Estamos en febrero del 2011 y las innovaciones tecnológicas del mundo Web siguen apareciendo a un ritmo vertiginoso. A veces resulta imposible no sorprenderse y “marearse” entre tantos nuevos conceptos, ideas, tecnologías y tendencias. ¿Cómo abordar todo este “buzzword”? ¿Cómo aplicarlo a nuestros negocios y organizaciones? Bueno, este es un intento de organizar las ideas generales; el macro de todo este asunto. Quizá es más bien un modo de organizar mis ideas personales respecto al actual estado tecnológico de las cosas en cuanto al desarrollo de aplicaciones para la Web. Para mi resulta fascinante pues estamos inmersos en un mundo de innovaciones constantes.

En síntesis, yo lo veo así:

  1. Desarrollo de software empresarial de misión crítica
  2. Desarrollo de interfases de usuario y experiencia Web
  3. Desarrollo de apps para móviles
  4. Desarrollo de aplicaciones sociales y de aprovechamiento de las redes sociales
  5. Maduración del estado del desarrollo de sitios y portales Web
  6. Desarrollo de infraestructura de colaboración y comunicación, entre aplicaciones y plataformas

¿Cómo juega todo lo anterior? ¿Cómo se define? ¿Qué tendencias existen en cada una de ellas? Quizá lo primero que debemos aclarar es que no existe ninguna jerarquía de ellas. Es decir, todas son importantes. Todas son sumamente interesantes. Todas merecen la pena de ser abordadas por buenos Developers e Ingenieros. Aunque podemos ir describiendo cada uno de los anteriores 6 frentes, quizá resulte más efectivo (al menos por ahora) asociar cada uno de ellos con empresas “ícono”, tecnologías propias y tendencias generales de cada uno. Lógicamente no intentaré ser exhaustivo (eso será tarea de posts futuros) y mencionaré únicamente algunas de las tendencias.

  1. Desarrollo de software empresarial de misión crítica (CRM, ERP, SCM, etc) : Computación en la Nube según el modelo Salesforce. Plataformas de desarrollo Force.com y Heroku, entre muchas otras. Lenguajes de programación: Ruby (y Ruby on Rails), Python, PHP, Java, .NET. Bases de Datos en la Nube: CouchDB, Database.com, MySQL on the Cloud (Xeround), entre varias.
  2. Desarrollo de interfases de usuario y experiencia Web: HMTL5, CSS3, AJAX, JQuery, Interfaces para móviles, formatos de presentación de imágenes (Deep Zoom – dzi), Javascript, etc.
  3. Desarrollo de apps para móviles: Programación Java para Android, Objective-C para Apple iOS (iPhone, iPad), y otros (Blackberry, WindowsPhone, etc.). Mercadeo masivo de estas aplicaciones vía distintos apps stores: Apple, Ovi, Blackberry, AndroidMarket con precios reducidos (típicamente entre 2 y 10 dólares, e incluso muchas gratuitas).
  4. Desarrollo de aplicaciones sociales: Aplicaciones para Facebook, Twitter, LinkedIn y otras redes sociales utilizando sus APIs y plataformas de desarrollo. Integración completa con la funcionalidad de estas redes sociales.
  5. Sitios y portales Web: En este caso la tendencia fuerte pero ya madura es la utilización de herramientas de Administración de Contenido, tales como WordPress, Joomla, Drupal, TYPO3 y muchísimas otras. Prácticamente no existen hoy día sitios Web basados en HTML estático ya que no se posibilita la gestión de contenido del sitio. Inclusive han madurado CMS de propósito específico como los de E-commerce, tales como Magento, OSCommerce y ZenCart, entre otros.
  6. Infraestructura de colaboración entre sistemas: Protocolo REST; JSON; APIs de las aplicaciones como una forma de colaborar con otras. Desarrollo de infraestructura de APIs, Apigee, etc.

Y sí; el desarrollo de software Web está cambiando el panorama completo del desarrollo de aplicaciones y la ingeniería de sistemas. Lo anterior conforma un brevísimo panorama 2011 sobre el conjunto de estrategias tecnológicas que debemos tener en mente ya las cuales deberíamos ir apostando en el corto plazo.

, , , , , ,

Deja un comentario

¿Computación “en la Nube”? – Parte 2: Una opinión desde el punto de vista empresarial

En mi pasado post, intenté dar una breve introducción con enfoque técnico acerca de la Computación en la Nube. Esta vez trataré de abordar el asunto con enfoque distinto; es decir, abordando el tema desde el punto de vista de sus posibilidades y beneficios de implementación en las empresas y organizaciones. De hecho, es importante que todos los que somos “tecnólogos” nos demos a la tarea no sólo de difundir estos conceptos en el mundo empresarial sino también debemos reconocer que aquí está la verdadera fuerza del concepto: precisamente en su utilización dentro de las empresas y organizaciones; no en la tecnología.

Computación en la Nube (Cloud Computing); podemos definirla como el conjunto de tecnologías computacionales que posibilita el mantener la infraestructura tecnológica de hardware y software de una empresa u organización directamente en Internet. Visto de esa manera podemos tener varios niveles de activos tecnológicos en la Nube:

  • La infraestructura tecnológica (servidores, discos, centros de datos, sistemas de respaldo, etc.)
  • La plataforma de desarrollo de software
  • Nuestros activos Web: sitio Web, portal de Internet, etc.
  • Software de oficina (ofimática) : Procesadores de texto, Hojas de Cálculo, Software de presentaciones, etc.
  • Aplicaciones de negocios: administración de clientes (CRM), gestión financiera y de negocios (ERP), etc.

Antes de entrar en detalle a cada uno de los niveles (posiblemente los abarcaremos en otros posts de este blog) debemos reconocer que el principal diferenciador de negocios de la computación en la Nube en relación con la forma tradicional de manejar los activos tecnológicos es que este concepto convierte una inversión de capital (activo) en gasto corriente (gasto). Esto se logra debido a que la empresa no compra los activos tecnológicos ni licencias de software sino que los alquila o renta por una cuota periódica, típicamente mensual.

En el sentido anterior, ya existe un beneficio financiero pues la empresa no tiene que desembolsar inversiones importantes de dinero para financiar la compra del activo, ya sea hardware o software. En vez de ello, la empresa lo alquilará y lo utilizará mediante una conexión a Internet de banda ancha. Siendo así, las inversiones se pueden realizar en otras actividades del negocio y no tanto en TI. Además, la computación en la Nube suele ser algo más barata (aunque no mucho) que la computación tradicional ante ejercicios de valoración financiera (ROI, TCO, etc.) de un proyecto Nube. Financieramente, existe también un gasto corriente real (el costo de alquiler) deducible de impuestos como cualquier otro gasto operativo de la organización.

Sin embargo, quizá aún más importante que el beneficio en la administración financiera, existe el beneficio de que los activos no se vuelven obsoletos. En el caso del Infraestructura tecnológica de hardware (servidores Web, centros de datos, etc.) esto es más evidente porque el proveedor simplemente mantiene actualizados y en funcionamiento los equipos.

Pero es en el software (plataformas de desarollo, aplicaciones de oficina, sistemas empresariales) donde está la mayor innovación de la computación en la Nube pues también en este software la empresa se mantendrá siempre actualizada y con la última versión del mismo; suponiendo claro está que el proveedor de software realmente utilizar el concepto de computación en la Nube. Por ejemplo, ¿cuántos hemos tenido que actualizar nuestra versión de Gmail para correo electrónico? Nadie, pues ya está permanentemente actualizado en la Nube. En cambio, ¿Outlook?

En este blog iremos comentando en otros posts las particularidades de cada nivel de computación en la Nube (infraestructura, plataforma, aplicaciones de oficina y sistemas empresariales de negocios). En este momento lo importante del concepto introductorio es que los activos computacionales no se compran ni se licencian sino que se alquilan y se accede a ellos vía Internet desde cualquier lugar del mundo.

, ,

1 comentario

¿Computación “en la Nube”? – Parte 1: Una opinión desde el punto de vista técnico

A veces me pregunto si toda este buzzword con respecto a la Computación en la Nube (Cloud Computing) no es más que un concepto tecnológico algo difuso pero, al fin y al cabo, un “refrito” (como sucede en muchas ocasiones) de conceptos antiguos del mundo de la Tecnología de la Información (TI). Pero mientras más lo pienso, veo que no; que esto es algo realmente nuevo; sobre todo desde el punto de vista tecnológico (y esto es lo esencial de este post) aunque desde el punto de vista negocios sí pueda parecerse a otras ideas ya exploradas (sobre esto me explicaré en la Parte 2 de este post donde abordaré el punto de vista empresarial del concepto).

Desde un punto de vista técnico simplista, el concepto de Computación en la Nube podría erróneamente resumirse como todo aquel sistema que funciona enteramente en Internet vía la Web y que se accede mediante un Navegador (browser) o algún otro dispositivo, incluyendo los móviles. Pero no; visto desde ese punto de vista el concepto no sería ni nuevo ni innovador pues existen sistemas que funcionan de esa manera casi desde el inicio de la popularización de las páginas Web por allá en el segundo lustro de la década de los 90s.

Además, si yo hospedo en un servidor de Internet un sistema o sitio Web que luego vendo o alquilo por una cuota, esto también sería considerado Computación en la Nube y eso existe ya desde hace varios años. Inclusive compañías grandes tienen sistemas que les pueden vender a sus clientes y que son instalados en servidores de Internet listos para ser usados vía Web.

Aunque la computación en la Nube incluye todo lo anterior, técnicamente hablando, eso aún NO es computación en la Nube, ya que estamos hablando de una instancia de la aplicación pero atendiendo a un solo cliente (uni-tenant). Si el proveedor de la solución cambia el software o actualiza la versión de software por una versión mejor y, suponiendo que quiere darle ese beneficio a todos los clientes que han comprado dicha aplicación, tendría que ir instalación por instalación a actualizar el software (o pedirle a cada cliente que ellos mismos hagan la actualización).

Entonces la palabra clave es Multi-tenancy. Esto quiere decir que el software funcionará con una sola instancia de la aplicación para muchos clientes. Todos a la vez. Multi-tenancy: Una instancia de la aplicación, quizá sólo una Base de Datos (elástica y escalable, pero una sola) atendiendo a muchos clientes a la vez. He ahí lo nuevo del Cloud Computing. Este es lo esencial; lo core del concepto: Arquitectura Multi-tenancy.

Ante un escenario así, ¿qué sucedería si el proveedor del software cambia de versión a una mejorada? Teóricamente, cambiaría únicamente la versión de producción de dicho software y ¡voilá!, todos los clientes que acceden a la aplicación tendrían la nueva versión sin tener que actualizarla o que el proveedor tenga que actualizar cliente por cliente. Por ejemplo, si Google cambia Gmail, automáticamente todos los clientes (usuarios) de Gmail obtienen las mejoras que Google le hace a dicho producto. Este mismo escenario es posible con aplicaciones empresariales (tanto de misión crítica como otras) o utilitarias, no sólo con correo electrónico.

El caso más conocido en el mundo es quizá Salesforce que es un CRM que nació y creció con el concepto de Cloud Computing. Así, las empresas que usan dicho CRM obtendrán las últimas versiones del software ya que están en un ambiente Multi-tenancy. Lógicamente, detrás de todo ello, existen complejas arquitecturas (que espero podamos ir comentando en este blog) y plataformas que deben (y de hecho, lo hacen) asegurar la escalabilidad, elasticidad de la aplicación, desempeño, seguridad, estabilidad, entre otros conceptos. Pero lo logran y he ahí lo novedoso del caso.

Así que, a seguir explorando el mundo del Cloud Computing.

, , , ,

1 comentario