Archive for the ‘Desarrollo Software’ Category

Articles

Swift, aplicaciones para iPhone y iPad

In Desarrollo Software,iOS,Noticias del Software,OS X,swift on noviembre 3, 2014 por racar

wwdc14

En la conferencia anual de Desarrolladores de Apple (WWDC 2014) se anunció la llegada de Swift, un nuevo lenguaje de programación para las plataformas OS X (mac) e iOS (iphone, ipad, ipod). Más allá del entusiasmo que nos causa querer utilizar lo más novedoso de la plataforma para crear nuestras aplicaciones, ¿Por qué usar otro lenguaje de programación? ¿Por qué cambiar si con objetive-c podemos construir de antemano grandiosas aplicaciones?

El Hardware y las exigencias del mercado de apps

Cada año fabricantes de hardware como Intel y AMD salen al mercado con procesadores  más potentes. En medio de la batalla por mejorar el rendimiento, en la última década han lanzado al mercado procesadores multinúcleo capaces de realizar ejecución de instrucciones de manera simultánea, lo que se traduce en multiplicar la velocidad de ejecución de las aplicaciones. Los dispositivos móviles de última generación como el iphone y ipad, ya vienen equipados con procesadores multinúcleo que los hacen realmente rápidos.

Para obtener el máximo provecho de estos avances del hardware, el software que se ejecuta en procesadores multinúcleo debe ser construido de forma especial. Los lenguajes tradicionales como objetive-c, si bien permiten construir aplicaciones que manejen este tipo de procesadores, no son ideales para hacerlo.

Swift, un lenguaje funcional

Para suplir ese “vacío” que llega con el procesamiento en paralelo, Apple apeló a Swift como lenguaje alternativo de desarrollo. En este sentido, Swift sigue la filosofía de los lenguajes funcionales.

Pero más que un lenguaje funcional, Swift reúne varias características que lo hacen muy conveniente, a la hora de crear apps para nuestros iphone/ipad:

  • Sintaxis moderna, incorpora características que lo hacen atractivo para el programador.
  • Mantiene las características de un lenguaje orientado a objetos y añade las características de un lenguaje funcional.
  • Mejora el manejo de colecciones e inicialización de variables, asignación de valores, etc.
  • Maneja concurrencia de procesos.
  • Minimiza el código repetitivo, mejora el manejo de colecciones y funciones.
  • Es modular: permite definir funciones simples que pueden ser combinadas en varias formas.
  • Es escalable: puede ser usado en pequeños o grandes proyectos, o en proyectos multiplataforma.

Más opciones para crear iOS/OS X apps

Contar con otro lenguaje de programación en el ecosistema nos beneficia porque tenemos alternativas para construir aplicaciones. Con una herramienta más para experimentar y crear, podemos imaginar formas eficientes de hacer los programas o descubrir formas más productivas de hacerlos.

Desde el punto de vista de un cliente que contrate el desarrollo de una app o de un usuario de la misma, las ventajas no están a simple vista. Pero indudablemente se benefician directamente al contar con aplicaciones rápidas, más estables, mejor blindadas contra fallos y entregadas en menor tiempo.

Para iniciar con Swift, es necesario descargar la versión 6 de Xcode.

Nota: Este articulo fue publicado originalmente en Nubelo.

 

Referencias:

– Libro oficial de swift en itunes (gratuito)

Presentación oficial:

Anuncios

Articles

eGovernance y Cloud Computing

In Cloud Computing,Computación en nube,Desarrollo Software,eGovernance,Project Manager on febrero 1, 2013 por racar

Casa de Nariño

Casa de Nariño (Photo credit: Enzo Molinari)

El eGovernance, o más conocido acá en Colombia como “Gobierno en Línea”, tiene el objetivo de acercar, mediante las tecnologías de la información, a los ciudadanos con el gobierno central, fomentando de esta manera la transparencia.

El programa del gobierno se ha centrado principalmente en el G2C (Goverment to Consumer) en el sentido que a impulsado nuevas formas de interacción con el ciudadano, y eso está bien, sin embargo el eGovernance tiene la capacidad de transformar la nación en una sociedad de la información que pueda ir más allá.

Esta transformación incluye contar con sistemas que, ya no solamente sirvan como medio para interactuar con el ciudadano, si no que sirvan para tomar decisiones y administrar el estado (G2G – Goverment to Goverment). El gobierno central tiene sistemas de información del tipo G2G, conozco algunos, pero falta mucho por hacer. En ese orden de ideas, ¿Que ventajas tiene usar el paradigma “Cloud Computing” en la construcción de sistemas eGovernance G2G? Estos son algunos puntos a favor:

  • Licencias y soporte: En el cloud computing se paga por el uso del recurso, a eso súmele que puede utilizarse software libre desde el sistema operativo, servidores y frameworks de programación. Esto reduce el costo del desarrollo de sistemas.
  • Genera empleo: Al utilizar software libre el gasto de licencias se traslada al soporte lo que se traduce en ofrecer trabajo a mano de obra local del área IT.
  • Escalabilidad: La escalabilidad es transparente, la plataforma en la nube se puede ajustar para soportar la demanda dinámicamente. No se invierte en comprar infraestructura IT ya que esta a cargo del proveedor.
  • Pérdidas de información: La información no se perderá ya que está alojada y propagada en la red. El recurso en sistemas de respaldo se traslada a la seguridad informática, lo que se traduce también en empleo de mano de obra calificada.
  • Manejo de desastres: En caso de desastres, el sistema siempre estará disponible para ayudar con la recuperación. Los sistemas no se afectan por desastres.
  • Amable con el medio ambiente: Los sistemas cloud computing se están optimizando constantemente para mejorar consumo de energía y re utilizar recursos.

Articles

Good bye Aptana

In Desarrollo Software,Rails,RIA on agosto 17, 2012 por racar Etiquetado:

vim logo

vim logo (Photo credit: Wikipedia)

Eclipse es un IDE fantastico pero Aptana (su derivado) es lento para editar código en el front-end. Existe una forma muy simple para instalar Vim (el editor de texto) como comentan en este post de stackoverflow, utilizando una “distribución” de vim llamada janus https://github.com/carlhuda/janus que instala varios plugins y es la forma más rápida de iniciar con vim. Resumo las instrucciones para instalar vim y janus:

1. Instalar vim:

brew install macvim (homebrew –> gestor de paquetes de osx)

2. Instalar janus invocando el script de instalación.

curl -Lo- https://bit.ly/janus-bootstrap | bash

3. Configurar el editor. El plugin NerdTree permite navegar por el directorio y abrir archivos para editarlos, si quiero ver el “Tree” con la tecla F2 y que solo despliegue los directorios de la ruta actual, copiamos esto en el archivo de configuración de vim (también podríamos cargarlo por defecto y no con F2, cuestión de gustos):

vi ~/.vimrc

map <F2> :NERDTreeToggle <CR>

4. Para ejecutarlo le damos la ruta al directorio del proyecto o vamos hasta ella y ejecutamos:

mvim (equivalente a vim en linux)

Y con esto es suficiente para iniciar, Janus tiene plugins que soportan Git, CoffeeScript, Sass, Haml, entre otros.

La experiencia de Yehuda Kats con vim:

http://yehudakatz.com/2010/07/29/everyone-who-tried-to-convince-me-to-use-vim-was-wrong/

El resultado:

P.D: Seguro que Uncle Bob me regañaría por no usar un IDE… :s

Articles

En la nube con Amazon Web Services (AWS). Parte I – Introducción.

In Amazon Web Services,Cloud Computing,Computación en nube,Desarrollo Software,EC2 on diciembre 29, 2011 por racar Etiquetado:

Cloud

Image via Wikipedia

Actualmente ha surgido una explosión de servicios en la nube y la competencia se pone cada vez mejor. Google AppEngine salió del beta a finales de año, Heroku, amplió su portafolio y ahora ofrece soporte para varios lenguajes incluido java y phyton; CloudFoundry (de vmware) ya dispone también de su servicio en beta, y esta bastante prometedor; los menos visibles (para mi) Oracle, IBM y Microsoft también se han subido al tren y están promocionando con fuerza sus soluciones. Además de SalesForce, engineyard, cloudbees, y un etc que desconozco.

La estrategia de cada competidor es diferente. Servicios como Google AppEngine, CloudFoundry, Heroku, ofrecen una plataforma (PaaS) con más o menos robustez que brinda una serie de herramientas al programador/administrador del servicio para que despliegue (o administre) las aplicaciones en ambientes de producción sin mucho dolor. Literalmente con estas plataformas es posible desplegar las aplicaciones con una línea de comando.

Al contrario las antes mencionadas, la solución Cloud de Amazon (EC2) ofrece una infraestructura menos “elaborada” dejando al programador la tarea de armar el entorno a su necesidad. EC2 es de los primeros servicios que apareció y es el que más ha tomado fuerza por su flexibilidad y confiabilidad. Al cumplir más tiempo en el mercado, ha demostrado su valía con muchos casos de éxito e incluso es utilizada por otros servicios tipo PaaS (como CloudBees o Heroku).

La unidad básica utilizada para desplegar servicios en EC2 es llamada AMI (Amazon Machine Image)  y es una imagen en blanco de algún tipo de sistema operativo soportado por Amazon: Linux (en todos sus sabores)  o Windows. AMIs hay por montones, estas pueden ser creadas y compartidas. Es así como se pueden encontrar AMIS pre configuradas con lo que podamos necesitar: servidores, bases de datos, aplicaciones, SDKs, etc. Entre tantas opciones suele uno confundirse así que es mejor consultar primero al creador del AMI para asegurarnos que la elección es adecuada.

Para construir nuestra propia instancia con lo que queramos desde cero es necesario acudir al proveedor del sistema operativo para consultar que imágenes mantiene en EC2. Para este caso voy a utilizar Ubuntu por lo que recomiendo este sitio para encontrar AMIS: http://alestic.com/

Alestic permite ubicar AMIs provistas por canonical, y otros proveedores de Ubuntu.

Las AMIs son listadas por zonas, esto es porque Amazon permite lanzar instancias en regiones separadas para que estén más cerca a los usuarios finales, para minimizar el riesgo de fallos en una región especifica o para cumplir requerimientos específicos de una zona geográfica en particular.  Por ahora lo importante es escoger el AMI y tener en cuenta la zona horaria porque la necesitaremos cuando lancemos la instancia por la consola web. Un identificador del AMI es algo como esto: ami-a562a9cc y es a través de este que podremos buscar el AMI  para trabajar en la consola de administración web de EC2.

En la segunda parte de este post mostraré la consola de administración web de EC2, veremos cómo lanzar la instancia y configurarla para desplegar una aplicación de prueba.

Articles

Java vive y dará la pelea.

In Desarrollo Software,Java,Noticias del Software,Rails,Software Process Improvement on noviembre 4, 2011 por racar

Duke, the Java Mascot, in the waving pose. Duk...

Image via Wikipedia

El mes que pasó, en la Java One, se dio el lanzamiento de la version 7 de java y se anunció la 8, animándome un poco a presentar el early upgrade de la recién salida versión 7, encuentro  dos cosas que me llaman la atención: que los cambios son significativos (de hecho java 8 esta proclamada como una revolución), y que dichos cambios están influenciados por el extraordinario éxito de los lenguajes dinámicos con que disponemos para programar actualmente en la plataforma. Hoy por hoy sobre la plataforma java es posible construir programas escritos en una variada gama de lenguajes funcionales y dinámicos: groovy, jruby, scala, jphyton. ¿En que momento llegaron a competirle a java en su propia VM? ¿Que causó esta disrupción? Bueno, he aquí un análisis resumido de la posible respuesta:

En el principio de los tiempos (en la JVM) solo se compilaba java…. los lenguajes de programación dinámicos, de alto nivel y orientados a objetos ya sea Python o Ruby, no tenían la influencia actual porque eran considerados “peligrosos” por el Status Quo corporativo. Debido a su característica dinámica resulta más difícil detectar bugs  y los errores se detectaban “in run time”; también son débilmente tipados y los todo poderosos IDES no pueden realizar sugerencias de autocompletado precisas y no pueden hilar eficientemente los trazos del stack de ejecución, sobretodo en las closures. Estas propiedades de los lenguajes dinámicos no permiten hacer debuggers eficientes.

Pero algo cambio:

Primera singularidad: Agile manifesto y extreme programming.  A finales de los 90’s, un grupo de revolucionarios llegó con ideas nuevas; hastiados de la burocracia corporativa que impuso la separación entre los managers/arquitectos y los “mortales” (desarrolladores), se fueron lanza en mano contra la metodología en cascada. El manifiesto ágil fue una proclama de mejores formas de construir software y trajo consigo las practicas que revolucionarían la profesión: el extreme programming. XP trajo varias practicas, entre ellas destaco dos: Test-Driven Development y Continuous integration. El primer golpe a la burocracia corporativa en torno al desarrollo de software se había dado.

Segunda singularidad: La filosofía “Getting Real” y el nacimiento de Rails. Casi 5 años después, en el 2005 aparece la máxima expresión de la metodología de desarrollo ágil de software, evitando la metodología predicativa formal esta se enfoca en crear aplicaciones útiles, innovadores (con alto valor creativo) y sencillas a partir de entregas pequeñas y continuas. Rails había nacido y trajo consigo totalmente integradas las practicas de XP y varias practicas mas: estructura robusta de testing, estructura fija de configuración sin XML, filosofía DRY o favorecer el re uso evitando las tareas repetitivas, estructura MVC y toda una serie de herramientas (ActiveRecord p. e.). Con esto, los desarrolladores se enfocan en crear la lógica del negocio y la parte creativa/innovadora de las aplicaciones. Con TDD y C.I. ya no se necesita el debugger y la fase de compilación. El segundo golpe, aun más fuerte.

La filosofía agile, va en contra del status quo corporativo y revoluciona o resiste la tendencia burocrática que favoreció los lenguajes estáticos como Java, también fomenta las practicas como TDD y continuos integration que derriban la teoría de la necesidad de un compilador y un debugger para detectar errores. Además de todo esto, añaden alta productividad al fomentar la automatización de tareas de desarrollo.

Cualquier desarrollador encuentra atractivas las ideas (y frameworks) detrás de los lenguajes dinámicos. Sin embargo Java ha respondido al cambio y después de un letargo, esta adaptándose al futuro en su versión 7 (coin) y sobretodo en la 8 (lambda). Java vive y dará la pelea!!.

Articles

Desarrollo de aplicaciones en ambientes regulados

In Desarrollo Software,Project Manager,Sistemas de Informacion Financiera,Software Process Improvement on octubre 15, 2011 por racar

IBM Z10 Mainframe Complex

Image by pchow98 via Flickr

El sector financiero y la banca requieren, como es obvio, de un componente importante de auditoria y control que se debe aplicar a cada uno de los proyectos de desarrollo. Demostrar que los desarrollos cumplen con los estándares de seguridad y calidad supone un enorme esfuerzo y agrega “overhead” a todo lo que se pretende implantar en producción. Adicionalmente varias personas deben validar los procesos, probarlos, documentarlos y certificarlos cuando son concluidos.

A esto hay que sumarle que, para el negocio financiero esto supone un gasto de operación, no es algo que le retribuya directamente como es el caso de sus inversiones. Lo único importante es tener cuanto antes el sistema “online”  y sin fallas ni excusas para que lo demas marche bien.

Para una corporación financiera la inversión en tecnología es más un gasto que una inversión, por dos razones: la cantidad de funcionarios involucrados en los proyectos y por los presupuestos abultados que se manejan en ellos.  

A que viene todo esto, bueno, que automatizar el proceso de gestión, configuración y entrega del software supone enormes beneficios: reduce la cantidad de esfuerzo y permite realizar auditorias mas confiables y precisas de lo que se va a instalar en ambientes de producción. Adicionalmente reduce los tiempos de entrega y mejora la calidad.

Actualmente, de la mano de las metodologías “agilistas”, contamos con varias técnicas que nos ayudan a automatizar: Continuous Integration, Test Driver Development, Configuration Management (Version Control Systems, Build Automatization, Dependencies Management).

Articles

Características de los Sistemas Informáticos Financieros

In Desarrollo Software,Sistemas de Informacion Financiera on marzo 14, 2011 por racar

Reflected finance

Image by Simon Aughton via Flickr

El desarrollo de software tiene un reto interesante al momento de abordar los requerimientos del sector financiero. Las organizaciones financieras son muy dinámicas, constantemente cambian su carácter, se expanden, se fusionan, amplían sus productos, etc, esto sumado a que continuamente sus procesos internos son regulados con nuevas normas o estándares definidos por entes de control externos.

Este dinamismo se refleja en su estructura tecnológica e informática, y hace que al momento de emprender los desarrollos encontremos una serie de características recurrentes:

  1. Gran cantidad de sistemas legados, cada área tiene sus propias aplicaciones muchas veces en diversas plataformas, DB o tecnologías.
  2. Gran cantidad de datos. El creciente numero de clientes y operaciones, y la complejidad del negocio hace necesario mantener y procesar gran cantidad de datos en las DB.
  3. Limitaciones políticas y técnicas. La confidencialidad de la información y lo sensible de esta hace que los métodos de intercambio de información sean limitados y deban ser blindados.
  4. Procesos que demandan gran cantidad de “músculo” en las plataformas como por ejemplo los procesos de cierre, en los que el procesamiento es en batch sobre toda una base de datos.
  5. Se requieren diferentes latencias de integración. La periodicidad de los procesos es muy variable: diario, semanal, quincenal, mensual, trimestral, semestral, anual lo que hace difícil la sincronización de varis subsistemas.
  6. Se favorece la integración basada en mensajes.
  7. Los desarrollos demandan conocimiento con suficiente profundidad del negocio particular de los procesos.
  8. Diferentes requerimientos dependiendo del nivel del negocio. (Front office, middle level y back office).  Existen diferentes niveles de “profundidad” que deben mostrar y procesar la información de manera contextualizada.
  9. Sistemas activos todo el tiempo, no deben caerse.
  10. Las formas típicas de integración, o las favoritas son: archivos planos, email y recientemente WS y SOA
  11. Dependencia de los usuarios finales a reportes y programas (macros) en Excel, para procesar información. No existen alternativas o sustituto al Excel.