domingo, 17 de noviembre de 2013

Programación en 3 Capas

La arquitectura de 3 o N capas no es más que la evolución lógica de la programación Cliente/Servidor, la cual a su vez fue una evolución de un modelo monocapa, en la cual inicialmente se embebía dentro del programa ejecutable los datos junto con el proceso.
La arquitectura Cliente/Servidor es el primer intento exitoso de organización del desarrollo del código, separando de manera clara los datos de la aplicación.
La idea general de las capas es proporcionar un alcance bien definido en las tareas que ejecuta cada una de ellas,  logrando con esto independencia entre los diferentes niveles de ejecución.
En otras palabras,  a la capa cliente no le debe interesar aspectos técnicos de la base de datos, como el tipo de archivos en que se guardan los datos,  la concurrencia, como se leen los datos físicamente, etc.  que son parte de la capa de base de datos.
 
Si en un momento determinado se cambia el motor de la base de datos, no debería afectar la ejecución de la aplicación, ya que la capa de cliente, no conoce y no accede a los datos físicamente, solo puede ver (alcance) algunas funciones de conexión que no deben cambiar si se cambia el motor de base de datos.
Las aplicaciones Multicapa y en nuestro caso de 3-Capas se refieren a aquellas donde el software está diseñado de tal forma que existen al menos tres separaciones claras, la capa de presentación, la capa de lógica del negocio y la capa de bases de datos.

 

CAPA
DESCRIPCIÓN
Presentación
La capa de presentación hace referencia a la interface con el usuario que puede ser visual en ambientes gráficos como los formularios (Forms), en aplicaciones tipo consola en comandos de texto e incluso en dispositivos de interfaz humana como un control remoto,  comandos de voz, etc.
Lógica de Negocio
La capa de lógica de negocio se refiere a los procedimientos que se realizan en la aplicación, como los cálculos de intereses,  creación de una factura, decidir a qué información tendrá acceso un usuario, entre otros.
Bases de Datos
En esta capa se almacenan los datos,  se encarga de recibir las peticiones desde la capa de lógica y retornan los datos correspondientes.

 

Cada capa es susceptible de ser dividida a su vez en más capas, así por ejemplo la capa de base de datos puede dividirse en la capa de persistencia y la capa de datos, dando lugar a más capas, obteniendo aplicaciones MultiCapas - N-Tiers


Cuando hablamos de aplicaciones multicapa en necesario tener cuidado en no confundir MultiCapa con MultiNivel, dos conceptos diferentes que en nuestro medio se utilizan indiscriminadamente, La arquitectura de programación en 3 capas se refiere a la separación clara de las funcionalidades dentro de la aplicación, es decir la separación lógica de la aplicación, de tal forma que una capa solo sólo tenga acceso a la siguiente.
Un ejemplo de esto se evidencia en que la capa de presentación la cual solo puede acceder a funciones (CRUD) y no directamente a la base de datos.  así mismo los procedimientos del CRUD tiene acceso a la base de datos pero no a la capa de presentación, de esta manera si se cambia el motor de la base de datos, solo bastará cambiar las funciones de conexión que utiliza el CRUD pero no las funciones directamente.
La gran ventaja de esta separación radica en la facilidad del mantenimiento del software, dividir las tareas de mantenimiento, la asignación de cada capa a un líder especifico para su control y dado que cada capa tiene una API especifica, es posible desarrollar una capa con solo conocer el API a la cual tiene acceso, permitiendo desarrollos y mejoras simultáneamente.
Aunque las aplicaciones se diseñen en arquitectura de 3 capas, la implementación puede estar en uno, dos o tres niveles, Si en un solo computador se ejecuta la Presentación, la lógica y la base de datos, se llamaría una aplicación de un Nivel.
Si por el contrario en un computador se ejecuta la capa de presentación y de lógica y en el segundo computador se ejecutan los datos, se denominaría de dos niveles, y finalmente si en cada computador se ejecuta solo una capa, se denominaría de 3 Niveles.

¿Cuándo utilizar varios niveles?

Las aplicaciones multinivel no reemplazan las otras arquitecturas, simplemente cada una tiene un nicho especifico  y es importante definir cuando es necesario utilizar una u otra arquitectura.

CRITERIO DEL NÚMERO DE USUARIOS
Nivel
No. Usuarios
Descripción
Dificultad de
implementación
1 Nivel
1 usuario
Las aplicaciones que utilizará un solo usuario requieren un solo nivel, los dos caso más comunes hoy en día corresponden a las aplicaciones que corren desde un CD o DVD directamente, como una enciclopedia.
 
Las aplicaciones que corren en dispositivos móviles que utilizan almacenamiento local, como agendas, notas, etc.  ya que solamente un usuario tendrá acceso a los datos y no requieren red para su funcionamiento.
Las aplicaciones desarrolladas en un nivel son usualmente sencillas de implementar, ya que no deben considerar aspectos como concurrencia, ni infraestructura adicional para su funcionamiento, además existen conexiones directas a las bases de datos o almacenamientos de datos que no exigen complejas configuraciones.
2 Niveles
1-100 Usuarios
Las aplicaciones de dos niveles así estén construidas en 3 capas se corresponden a aplicaciones Cliente/Servidor, las cuales son excelentes para un numero moderado de usuarios y dada su arquitectura para redes locales LAN.
Las aplicaciones de 2 niveles requieren redes bien estructuradas, para lo cual podrían necesitar personal especializado para la administración de la red.
N-Niveles
50- > 2000 Usuarios
Cuando el número de usuarios va en aumento, las ventajas como la escalabilidad que ofrecen los 3 niveles es el ideal
Las aplicaciones multinivel son complejas en su implementación, requieren personal altamente especializado y grandes recursos de hardware para soportar de manera adecuada la gran cantidad de usuarios.


CRITERIO DE ACUERDO A LA CONECTIVIDAD
Nivel
RED
Descripción
1 Nivel
SIN RED
Es ideal para aplicaciones que no requieren conexión a redes para su funcionamiento.
2 Niveles
RED LOCAL LAN
Las aplicaciones de 2 niveles son ideales para trabajar en redes locales, las cuales cuentan con conectividad mínima de 100mbps.
N-Niveles
RED WAN
INTERNET
Para uso en redes como Internet que tienen limitaciones en la velocidad de transferencias y en la estabilidad de conexión.

 
CRITERIO DE ACUERDO A LAS PLATAFORMAS
Nivel
HARDWARE
Descripción
1 Nivel
1 solo equipo
Cuando la aplicación correrá en un solo equipo, como los dispositivos móviles como celulares inteligentes o tabletas o en un solo computador de escritorio.
2 Niveles
Varios equipos homogéneos
Para trabajar en redes LAN donde las plataformas de hardware son homogéneas, Ej. todos los equipos son Windows.
 
Ya que la lógica de negocio estaría dispersa en cada plataforma, es difícil hacer mantenimiento a esta capa de forma eficiente.
N-Niveles
Plataformas Heterogéneas
Cuando se van a conectar gran variedad de dispositivos, como celulares, tabletas, equipos de escritorio, etc. 
 
Dado que la lógica del negocio está centralizada es más fácil su administración y se ve reflejada en todo los dispositivos, así por ejemplo si se cambia la forma de cálculo de la comisión de ventas en la capa de lógica de negocio, este cambio se verá reflejado en todos los dispositivos automáticamente.


¿Ventajas de la separación en N-niveles?

Existen grandes ventajas en la separación por capas y por niveles,  de ahora en adelante hablaremos de aplicaciones en 3 capas como una aplicación de 3 capas y 3 niveles.
Enumeraremos algunas ventajas de este modelo, sin embargo en un próximo articulo detallaremos mejor el concepto y el uso de los middleware.

1.       Escalabilidad: Con la arquitectura de 3 capas y 3 Niveles es posible crecer en el número de usuarios sin traumatismos, ya que en cualquier momento es posible instalar un segundo servidor de lógica o un tercero y así crecer el número de usuarios sin afectar el rendimiento.
2.       Confiabilidad: El hecho de permitir el uso de varios servidores de lógica de negocio, permite que el sistema pueda tolerar la caída de uno o varios de ellos y la aplicación utilizará el siguiente servidor que esté activo.
3.       Balance de Carga:  Con este esquema es posible definir cual servidor ejecutará la tarea, repartiendo la carga de trabajo entre los diferentes servidores disponibles.
4.       Centralización de la lógica: Dado que la lógica de negocio está centralizada en el servidor, es posible hacer mantenimiento centralizado afectando a todos los clientes de forma inmediata.
5.       Seguridad: Al estar centralizado y en forma remota es posible implementar mejor la seguridad tanto en la ejecución de los accesos de usuarios.

 

Mg. Gustavo Enríquez
http://www.hyper-soft.co

domingo, 10 de noviembre de 2013

¿Aplicaciones WEB o Aplicaciones sobre INTERNET?

WEB no es INTERNET.

Un error muy común en estos días es pensar que Internet y WEB es la misma cosa, si bien es cierto que la Web domina el ciberespacio, no lo es todo.
 
La Web es uno de los mayores inventos después de la imprenta y su papel fue igual al de Johannes Gutenberg,  que aunque no creo la imprenta le dio un uso apropiado a la tecnología de la impresión, entregando a la humanidad una nueva forma de compartir la información de los libros.
 
a finales de los 80s, Tim Berners-Lee, creó una nueva forma de publicar información y una nueva forma de leer y navegar por esos océanos gigantes de datos sin ahogarse, su impacto en las nuevas generaciones es tan fuerte, que incluso las conexiones neuronales de los jóvenes es muy diferene a las personas de generaciones anteriores, siendo evidente en las tomografias tomadas al cerebro.

¿Qué es Web?

En informática, la World Wide Web (WWW) o Red informática mundial comúnmente conocida como la web, es un sistema de distribución de documentos de hipertexto o hipermedios interconectados y accesibles vía Internet. Con un navegador web, un usuario visualiza sitios web compuestos de páginas web que pueden contener texto, imágenes, vídeos u otros contenidos multimedia, y navega a través de esas páginas usando hiperenlaces.

La web se desarrolló entre marzo de 1989 y diciembre de 1990 2 3 por el inglés Tim Berners-Lee con la ayuda del belga Robert Cailliau mientras trabajaban en el CERN en Ginebra, Suiza, y publicado en 1992. Desde entonces, Berners-Lee ha jugado un papel activo guiando el desarrollo de estándares Web (Wikipedia)

¿Qué es Internet?

Internet es un conjunto descentralizado de redes de comunicación interconectadas que utilizan la familia de protocolos TCP/IP, lo cual garantiza que las redes físicas heterogéneas que la componen funcionen como una red lógica única, de alcance mundial. Sus orígenes se remontan a 1969, cuando se estableció la primera conexión de computadoras, conocida como Arpanet, entre tres universidades en California y una en Utah, Estados Unidos.
 
Existen muchos otros servicios y protocolos en Internet, aparte de la Web: el envío de correo electrónico (SMTP), la transmisión de archivos (FTP y P2P), las conversaciones en línea (IRC), la mensajería instantánea y presencia, la transmisión de contenido y comunicación multimedia —telefonía (VoIP), televisión (IPTV)—, los boletines electrónicos (NNTP), el acceso remoto a otros dispositivos (SSH y Telnet) o los juegos en línea, entre otros.

¿Qué es un Aplicación WEB?

En la ingeniería de software se denomina aplicación web a aquellas herramientas que los usuarios pueden utilizar accediendo a un servidor web a través de Internet o de una intranet mediante un navegador. En otras palabras, es una aplicación software que se codifica en un lenguaje soportado por los navegadores web en la que se confía la ejecución al navegador.

Las aplicaciones web son populares debido a lo práctico del navegador web como cliente ligero, a la independencia del sistema operativo, así como a la facilidad para actualizar y mantener aplicaciones web sin distribuir e instalar software a miles de usuarios potenciales. Existen aplicaciones como los webmails, wikis, weblogs, tiendas en línea y la propia Wikipedia que son ejemplos bien conocidos de aplicaciones web.


Algunas de las desventajas en el desarrollo de aplicaciones WEB corresponden a la cantidad de recursos de máquina que consume, en general por el uso del navegador, que consume memoria, el renderizado de cada página también toma tiempo de proceso.
 
El uso del Servidor con software adicional como el Tomcat o el jboss que interpretan las instrucciones hace relativamente lento el proceso de navegación.
 
Otra desventaja es la gran variedad de tecnologías y protocolos que se deben utilizar, así que en una sola aplicación están presentes el Html, el javaScript, CSS, todo esto en un modelo AJAX,  Tomcat o JBoss, entre muchos otros. 


¿Qué es una aplicación sobre Internet?

Una aplicación sobre internet se denomina a aquella pieza de software que utiliza los protocolos y la tecnología de redes de internet para su funcionamiento, pero que no requiere de navegadores ni servidores web para su implementación.
 
Esta tecnología es poco usada debido a la complejidad del desarrollo y la imposibilidad de algunas tecnologías de trabajar sobre redes desconectadas.  Pero con el advenimiento de los dispositivos móviles comenzó una explosión de aplicaciones sobre internet, mayormente por la poca capacidad de procesamiento de los celulares y tabletas y el alto costo en recursos que implica el navegador.
 
Es así como Facebook para dispositivos móviles no es una aplicación WEB sino una aplicación sobre internet,  para el uso de vozip sobre celulares existen aplicaciones como Skype, que no requieren navegadores.
 
Por otra parte uno de los grandes retos de la programación sobre internet es la posibilidad de ejecutar procedimientos remotamente, un funcionalidad aparentemente sencilla que lleva decadas de de ensayos de tecnologías y planteamientos de diferentes estandares.
 
En una nueva entrada de este blog analizaremos las diferentes tecnologías, pero podremos mencionar los WebServices, Rest-Full, RPC, DCom, Corba entre otros.
 
En Delphi es posible crear tanto aplicaciones WEB como aplicaciones sobre internet, sin embargo la gran fortaleza de Delphi en su versión XE5 es la capacidad de crear aplicaciones sobre Internet con una ventaja adicional, aplicaciones sobre internet, nativas (código binario nativo para cada plataforma), que permite implementar el Cliente que reemplaza al navegador Web, el Servidor que reemplaza al Servidor WEB utilizando cualquiera de las tecnologías que existen en el mercado, y utilizando al 100% los recursos de cada plataforma en la cual se ejecuta.
 
Además de todo esto Delphi proporciona una forma diferente de ejecución de procedimientos remotos denominada DataSnap, la cual es mucho más eficiente, rápida y segura que los otros estándares.
 
Adicionalmente de la ejecución de procedimientos remotos, también es posible compartir Objetos, mensajes, Datos en forma de datasets, con lo cual es posible crear fácilmente Middleware de Datos, Objetos, Mensajes y Procedimientos.
 
 
Como la única tecnología que se utiliza es Delphi,  la seguridad de la información es extremadamente alta, y la utilización de los recursos de máquina es bastante baja, de tal suerte que se pueden crear aplicaciones seguras y rápidas.
 
Mg. Gustavo Enríquez

 
 
 
 
 
 
 

jueves, 7 de noviembre de 2013

Del BDE a la Nuebe en 4 Pasos

Les presentamos la estrategía para llevar sus aplicaciones tradicionales realizadas en Delphi hacia la nube en tan solo 4 simples pasos.  Lo más importante es que en cada paso podemos seguir siendo productivos.

Es importante señalar que migrar una aplicación realizada en versiones anteriores a Delphi XE, puede ser un proyecto que podría tomar bastante tiempo y lo más importante puede ser muy costo, y lo peor de todo es que hasta que no se complete todo el proceso de migración no puede salir a la venta.

En este momento hay plantear una estrategia para llegar a los dispositivos móvile como celulares y tabletas, pero manteniendo compatibilidad con las versiones ya existentes de nuestros programas tradicionales.

Les presentamos el Middleware HyperBase y los componentes HBX,  los cuales permiten de forma fácil y flexible llevar sus aplicaciones tradicionales realizadas desde Delphi 7 hasta la nube, en cuatro simples pasos,  permitiendo que en cada uno de ellos sea posible seguir con el software en producción.

De esta forma la transición se realizará en 4 estapas más pequeñas y el mismo software puede seguir produciendo beneficios que ayudaran a financiar las etapas posteriores.

les invitamos a ver los siguientes videos donde les presentamos cómo realizar este proceso.





martes, 5 de noviembre de 2013

¿Lenguajes de Programación Interpretados o Compilados?


¿Lenguajes de Programación Interpretados o Compilados?
En esencia un lenguaje de programación interpretado requiere de "otro programa" llamado interprete, que se encarga de leer el código del programa y decirle a la máquina que instrucciones debe ejecutar, todo esto proceso en tiempo de ejecución.

Anteriormente este proceso se realizaba línea por línea, como el caso de las primeras versiones de Basic,  dada la ineficiencia de este procedimiento, se crearon las máquinas virtuales, las cuales "compilan" el código fuente completo y generan un código intermedio, optimizando en gran medida varios problemas que el modelo anterior presentaba.
Por otro lado un lenguaje compilado, pasa por un programa compilador, que evalúa todo el código fuente y genera un ejecutable binario, el cual está en el idioma nativo de la máquina, es decir está codificado directamente para que el procesador o en su defecto las librerías del sistema operativos directamente ejecuten las instrucciones.
El proceso de compilación se realiza en tiempo de diseño,  después de compilado un programa genera un código objeto, el cual no requiere de ningún otro programa para su ejecución.
Según Wikipedia y otras fuentes de internet estas son algunas de las ventajas y desventajas de los lenguajes interpretados. 

Ventajas de los lenguajes interpretados
·         Portabilidad: Esta es la principal ventaja que presenta este tipo de lenguajes, porque puede ser compilado en y para cualquier plataforma o sistema operativo.

·         Compatibilidad: al ser interpretado por el sistema operativo, es la máquina virtual o framework el que se encarga de que las intrucciones sean ejecutadas por el software y el hardware.

·         Independencia de plataforma.

·         reflexión y uso reflexivo del evaluador (ej. una función eval de primer orden)

·         Generación funcional de primer orden, y órden sin necesidad de especificar metadata.

·         Posibilidad de generación de código in-situ, sin necesidad de recurrir a una compilación (ie. Spring)

·         Tipos Dinámicos

·         Facilidad en la depuración (es más fácil obtener información del código fuente en lenguajes interpretados)

·         Pequeño tamaño del programa (puesto que los lenguajes interpretados tienen flexibilidad para elegir el código de instrucción)

Desventajas de los lenguajes interpretados

·         Velocidad: Es el aspecto más notable y el cual se debe evaluar a fondo al crear software con este tipo lenguajes.

·         Portabilidad: es una desventaja también. Exceptuando el caso de Java, se ha hecho un excelente trabajo en cuanto a la portabilidad ya que  existe para casi todas las plataformas, por no decir todas, actuales. El .NET framework, lamento decir que en la actualidad, se encuentra ciento por ciento probado solo en Windows.

·         Máquina virtual:  Requiere el uso de máquina virtual.

·         Problemas de versiones en librerías y conflictos en las instalaciones

·         No usa el 100% de los recursos: Por ser independiente a la máquina, no aprovecha el 100% de las posibilidades que ofrece la arquitectura de hardware como la GPU y la CPU.


 Hoy en día estos conceptos han cambiado, ya que Delphi y C++ de embarcadero han implementado en su lenguaje características presentes en los lenguajes interpretados, sin perder ninguna de las ventajas del ser compilado. 
Para desmentir estos que ya se han convertido en mito,  revisemos algunas de las desventajas que Wikipedia y algunas páginas web alegan como ventajas de los lenguajes interpretados.
·         Portabilidad: Esta es la principal ventaja que presenta este tipo de lenguajes, porque puede ser compilado en y para cualquier plataforma o sistema operativo. 

R./ Delphi es un lenguaje que se puede compilar en forma nativa (binaria en código de máquina) para las plataformas que soporta actualmente como Windows 32 y 64 bits, MAC OSX, IOS (IPhone,  IPad) y Android, en poco tiempo estará disponible para Windows Phone, BlackBerry y Linux versión server.  

Con una ventaja adicional, todo se realiza desde el mismo IDE de desarrollo de Delphi, así se puede mantener un código único y compilarlo en cualquiera de las plataformas requeridas. 

·         Compatibilidad: al ser interpretado es la máquina virtual o framework el que se encarga de que las intrucciones sean ejecutadas por el software y el hardware. 

R./ Porque dejar el trabajo a otro programa? el pretender mantener la compatibilidad no permite el uso del 100% de los recursos del sistema, en especial de la CPU, GPU y la memoria. 

Delphi por su parte genera código nativo especifico para cada plataforma, sin la necesidad de máquina virtual, lo que hace el código más compacto, eficiente y mucho más rápido en tiempo de ejecución. 

Una ventaja adicional es la seguridad que representa no exponer el código fuente, que eventualmente puede ser modificado por algún usuario experto. (hacker). 

·         Independencia de plataforma. en teoría los lenguajes interpretados son independientes de la plataforma, sin embargo dependen de la disponibilidad de la máquina virtual en cada una de las plataformas. 

R./ La independencia de la plataforma está sujeta a la instalación de la máquina virtual en cada una de las plataformas para las cuales esté disponible, y dichas máquina virtuales pueden llegar a ser de tamaños de varios gigabytes, presentando incompatibilidad de librerías y de versiones.  lo cual redunda en costos de soporte y tiempos de instalación y actualización. 

Delphi genera ejecutables compactos, que no requieren ningún tipo de maquina virtual, el código es autónomo en cada una de las plataformas para las cuales esté disponible. 

·         reflexión y uso reflexivo del evaluador (ej. una función eval de primer orden) 

R./ En Delphi se ha implementado el uso del RTTI (Run-Time Type Information), funcionalidad que permite obtener la información necesaria del código en tiempo de ejecución, y por supuesto implementar la funcionalidad de Reflection disponible en los lenguajes Interpretados. 

·         Generación funcional de primer orden, y órden sin necesidad de especificar metadata.

R./ Aplica la misma respuesta del punto anterior 

·         Posibilidad de generación de código in-situ, sin necesidad de recurrir a una compilación (ie. Spring). 

R./ Efectivamente es muy difícil generar código in-situ en un lenguaje que no ha sido diseñado para eso, sin embargo es extremadamente sencillo embeber lenguajes de script dentro de la aplicación, para aquellas posibles oportunidades donde se pueda requerir. 

De hecho existen librerías como la DWS que implementa pascal interpretado dentro de un ejecutable, igualmente está FastScript de FastReport y por supuesto es fácil embeber PHP, Java y otros lenguajes interpretados, ya que están diseñados para ser embebidos. 

Es posible también desde Delphi ejecutar funciones escritas en los lenguajes interpretados, como desde algunos lenguajes ejecutar funciones escritas en Delphi. 

·         Tipos Dinámicos:  Los lenguajes interpretados tienen la posibilidad de crear tipos dinámicamente en tiempo de ejecución. 

R./ En Delphi están implementados los Generics, el RTTI y los DinArrays, además el manejo de estructuras de datos es bastante fuerte y por si fuera poco, la programación orientada a objetos está muy bien diseñada, cosa que no ocurre en otros lenguajes interpretados.  así que los tipos dinámicos es un tema que está más que solucionado. 

·         Facilidad en la depuración (es más fácil obtener información del código fuente en lenguajes interpretados). 

R./ Delphi tiene uno de los mejores depuradores que hay en el mercado, incluso es posible depurar y hacer deploy en otros entornos, así desde el IDE de Delphi se puede compilar y depurar aplicaciones corriendo remotamente en un MAC, un IPhone o un Android. 

Incluso si no se tiene MAC para compilar y depurar sus aplicaciones en OSX o IOS, es posible contratar servicios en la nube para tales fines, los cuales tiene tarifas por horas. 

·         Pequeño tamaño del programa (puesto que los lenguajes interpretados tienen flexibilidad para elegir el código de instrucción) 

R./ En la práctica esto no es tan cierto, es posible que para instalar una pequeña aplicación sea necesario instalar todo el framework o librerías que pueden llegar a pesar varios Gigabytes. 

Con Delphi puede seleccionar si hacer el Deploy todo en un solo ejecutable o dividirlo en librerías, dos métodos disponibles, aunque en la práctica casi el 90% siempre eligen un solo ejecutable que no depende de ninguna librería para su ejecución.
Como podemos apreciar, no existen objeciones con respecto al lenguaje Delphi,  cumple tanto las ventajas de un lenguaje compilado como las ventajas de un lenguaje interpretado.  Hasta el día de esta publicación, es el único lenguaje dentro de lo que he conocido que tiene estas características.
Creo sin miedo a equivocarme, que los dos lenguajes comerciales más robustos hoy en días son Java como lenguaje interpretado y Delphi como lenguaje compilado. 

Espero sus comentarios.

Mg. Gustavo Enríquez