lunes, junio 07, 2010
lunes, mayo 31, 2010
Arquitectura de software, rol e integracion de aplicaciones
http://bit.ly/bfSKOR
El resumen de este documento fue posteado en
My Software Architecture Presentation
viernes, mayo 28, 2010
Habilidades de un arquitecto de software
La visión general de un arquitecto de software es un experto en tecnologías de desarrollo, sería el encargado de proveer soluciones tecnológicas óptimas para los problemas del negocio. Además se espera que esas soluciones se integren correctamente con los componentes y soluciones existentes y planeadas.
El arquitecto se tiene que comportar como un arqueólogo, con inventiva, innovación, capacidad de mediación, negociación y liderazgo.
Por lo tanto se pretende que sea especialista pero a su ver tenga una visión general de todas las etapas del ciclo de vida del desarrollo del software. Esto le permite al arquitecto controlar aspectos de calidad en el desarrollo desde el inicio hasta la implementación en ambiente productivo y su posterior mantenimiento
Joseph Hofstader agrega una visión del arquitecto desde el punto de vista de las habilidades de diseño. En la etapa inicial del proyecto debe tener una visión conceptual del mismo en base a los requisitos funcionales y las restricciones del negocio, en una etapa posterior se debe diseñar desde el punto de vista del modelo de dominio, puede ser horizontal o vertical, horizontal es aplicable a través de diferentes industrias y la vista de dominio vertical es aplicable a un industria en particular, se suele subestimar las habilidades para modelar dominios verticales, pero no es lo mismo el modelo de dominio para una empresa de banca, de telecomunicaciones, servicios o metalúrgica, está habilidad tiene que ser estimada por los CIOs y aprovechada para brindar valor agregado a los diseños de los sistemas de la compañía.
Existe otra clasificación de los roles difundida por el IASA [Akenine Daniel, 2008] que está relacionada con ciertas actividades que debe realizar un arquitecto clasificada en 3 niveles y 40 artefactos a generar.
- Nivel 1: Los arquitectos y los responsables del negocio crean estrategias juntos de cómo alinear las estrategias del IT con las del negocio. Estos principios y políticas tienen influencia en toda la organización. Ejemplos de entregables en este nivel son planes de desarrollo de software , visiones y estrategias
- Nivel 2: Los arquitectos crean artefactos que soportan la relación entre el negocio y la tecnología. A este nivel, los arquitectos intentan entender el proceso de la organización y como pueden mejorarlo usando las capacidades que provee el área de IT. Ejemplos de este tipo de artefactos son diagrama de procesos y de servicios.
- Nivel 3: Producen artefactos para el modelado técnico de la arquitectura, utilizan las mejores practicas de diseño posibles para crear buenas soluciones, tales como equilibrio entre costo y funcionalidad, escalabilidad, flexibilidad, seguridad y otros atributos de calidad. Dentro de este nivel están los modelos de aplicación, de datos, de dominio, de componentes, capas, objetos etc.
Habilidades blandas
Un arquitecto tiene que tener la habilidad de manejar relaciones inter personales entre los miembros de su equipo, los líderes de los proyectos, los clientes y usuarios manejando una adecuada comunicación y lenguaje acorde con cada perfil de interlocutor. Es un error común hablar con lenguaje excesivamente técnico con un analista funcional o líder de usuario cuando en realidad se debería expresar en términos de procesos de negocio e interfaces de usuario y que valor agregado otorga el sistema al negocio.
Debe tener la habilidad de bajar a un nivel de atracción adecuado las especificaciones recibidas desde los usuarios que solicitan determinado sistema, para ello se requiere la habilidad de relevar la información necesario de esas personas.
Habilidades técnicas
La visión general que tiene el arquitecto le permite diseñar el sistema con un cierto nivel de abstracción que le permita describir todo el sistema.
En sistemas muy grandes estos diseños iniciales se subdividen en sistemas más pequeños que para poder simplificar el diseño. Estos subsistemas pueden estar construidos en diferentes tecnologías, implementados en infraestructuras diferentes, pudiendo ser construidos dentro de la empresa, por un tercero o bien ser un producto comercial. El diseño debe permitir integrar todos los sub sistemas mediante la utilización de estándares de integración de aplicación aplicables en la empresa.
Para un correcto diseño se debe tener bien identificados los requisitos funcionales, tener un adecuado conocimiento de las tecnologías, productos y sistemas implementados en la compañía, conocer sus ventajas y desventajas y luego decidir si utilizar productos y sistemas ya existentes, adaptarlos a las necesidades, construir nuevos o impulsar la adquisición de productos comerciales que se adapten a todo o parte de la necesidad del negocio. En el capitulo referentes a Diseño de Arquitecturas se analizará con más detalle este tema.
- [Akenine Daniel, 2008], “A Study of Architect Roles by IASA Sweden”, Architecture Journal 15, MSDN Architecture Center, http://msdn.microsoft.com/en-us/architecture/cc505968.aspx
- [Hofstader Joseph, 2008], “We Don't Need No Architects”, Architecture Journal 15, http://msdn.microsoft.com/en-us/architecture/cc505974.aspx
martes, abril 20, 2010
Tutorial de Linq
lunes, marzo 15, 2010
Config WCF with two host headers (english)
In this, my first post in english, I write about the configuration details when we need install a WCF service hosting in IIS 6.0 when the Information Server have two or more host header configurated.
Suppose a simplified version of classic WCF sample:
IService1.cs
namespace WCFTest
{
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value);
}}
Service1.cs
namespace WCFTest
{
public class Service1 : IService1
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
System.ServiceModel Web.config section:
In this case we use windows authetication, but this issue is not mandatory.
<system.serviceModel>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService1">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings><services>
<service behaviorConfiguration="WCFTest.ServiceBehavior" name="WCFTest.Service1">
<endpoint address="" binding="basicHttpBinding" contract="WCFTest.IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WCFTest.ServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
The error that ocurrs when the IIS 6.0 has configurated two or more host header is the folowing
Could not find a base address that matches scheme http for the endpoint with binding BasicHttpBinding. Registered base address schemes are [].
This error ocurrs because the WCF runtime cannot know the host header where the service was implemented. In this case we must be configurate in explicit form what is the the IP of the host header when the service should run.
First , we add other System.ServiceModel section
<system.serviceModel>
<baseAddressPrefixFilters>
<add prefix="http://<host header IP>" />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
The sevice and behaviors sections change too.
<service behaviorConfiguration="WCFTest.ServiceBehavior" name="WCFTest.Service1">
<endpoint address=http://<host header IP>/WCFTest/Service1.svc
binding="basicHttpBinding"
contract="WCFTest.IService1">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
<behaviors>
<serviceBehaviors>
<behavior name="WCFTest.ServiceBehavior">
<serviceMetadata httpGetEnabled="true"httpGetUrl="http://<host header IP>/CASServices/Services.svc/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
.....</system.serviceModel>
Note: In the production environment is recomended the set in false the httpGetEnabled and includeExceptionDetailInFaults attributes.
miércoles, marzo 10, 2010
Buenas prácticas de programación en C
El siguiente documento describe las buenas prácticas de programación a nivel general de lenguajes de programación orientados a procedimientos y en particular para el lenguaje de programación C.
Estas buenas prácticas las clasificaremos en diferentes grupos.
Nomenclaturas: Se refiere a las reglas aplicables a la denominación de nombres de variables, constantes, funciones, estructuras etc. Estas reglas tiene como objetivo definir un lenguaje común para facilitar la lectura y mantenimiento de un código. Son reglas generales de muchos lenguajes de programación, que son aplicables perfectamente al lenguaje C.
Sintaxis: Se refiere a reglas de la sintaxis en si del lenguaje de programación, y recomendaciones para hacer mas legible el código generado.
Patrones: Los patrones son diseños y recomendaciones generales que solucionan problemas comunes de determinados contextos. Existen patrones de diseño aplicados a diferentes tipos de lenguajes de programación (orientados a procedimientos, objetos, eventos, web etc), para diferentes contextos de ejecución (multitareas, tiempo real, distribuidos, ejecución batch etc), para diseñor en diferentes nivels de abstracción de un sistema, para integración entre sistemas que corren en la misma o diferente plataforma etc.
En nuestro caso nos dedicaremos a los aplicables a lenguajes de programación orientada a procedimientos (como el C).
Documento completo
My Software Architecture Presentation
En la actualidad no se concibe empresa grande sin soporte a sus negocios mediante el uso de las tecnologías de sistemas de información implementados dentro de la misma. Estos sistemas ayudan a manejar áreas tales como recursos humanos, ventas, compras, gestiones de procesos específicos del rubro, administración financiera, económica, tableros de comandos para la ayuda a la decisión de la gerencia etc.
Dada la criticidad de esos sistemas para el funcionamiento del negocio es imprescindible que sean construidos, implementados y mantenidos siguiendo estándares de calidad.
En este contexto se necesita un especialista que tenga una visión de negocio, habilidades técnicas y buena comunicación a los diferentes miembros del área de IT.
Estos sistemas muchas veces deben ser interconectados, es facultad del arquitecto garantizar la calidad del software desde el inicio hasta su implementación y mantenimiento.
En la siguiente presentación se resume el trabajo que analiza los aspectos relacionados con la arquitectura de software, su clasificación, el rol del arquitecto y metodologías recomendadas en pos de optimizar la integración entre sistemas.
Software Architecture Presentation
La documentación completa de esta presentación esta en el siguiente post.
Arquitectura de software, rol e integracion de aplicaciones
miércoles, marzo 03, 2010
miércoles, febrero 03, 2010
Develop in C/C++ with Eclipse CDT.
El uso de este entorno de desarrollo forma parte de una iniciativa de usarlo para desarrollo de aplicaciones utilizando la biblioteca OpenCV (Vision Library), que permite procesar imagenes estáticas y dinamica que puede ser programada en C/C++ y Python.
Eclipse es un entorno de desarrollo IDE de código libre que está basado en un plataforma de desarrollo extensible mediante plugings (Plugin-Development Environment PDE). Está desarrollado en Java pero permite agregar plugines para programar en gran cantidad de lenguajes de programación, herramientas de diseño , de control de ciclo de vida del desarrollo ,de control de fuentes (SVN, CVS) etc.
Entre los proyectos existentes para Eclipse se pueden clasificar en las siguientes grupos más importantes:
1- Desarrollo de aplicaciones empresariales.
2- Desarrollo de aplicaciones embebidas y móviles.
3- Aplicaciones basadas en clientes ricos.
4- Aplicaciones web basadas en interfaces ricas (Rich Internet Applications)
5- Desarrollo de entornos de trabajo (frameworks) para múltiples usos.
6- Administración de ciclo de vida del desarrollo.
7- Herramientas para aplicaciones basadas en Arquitecturas Orientadas a Servicios (SOA)
La documentación de este IDE se puede obtener del sitio oficil de Eclipse
Para el caso de queres programar en C o C++ vamos a utilizar el plugin de eclipse para desarrolladores de C++ CDT.
El Eclipse es multiplataforma, en nuestro caso los vamos a instalar sobre un Kubuntu dentro de una máquina virtual en Virtual Box.
Desde este IDE se puede crear proyectos , incluir código desde otros archivos, depurar paso a paso pudiendo ver es estado de las variables etc.
Al igual que todo paquete de Eclipse al iniciar la aplicación se debe seleccionar un espacio de trabajo (workplace), el Eclipse indica una por defecto que está ubicada en el perfil de usuario, esta carpeta contendrá los proyectos y códigos fuente que desarrollemos. Es posible crear otro workplace y pasar de uno a otro según convenga usando el comando File->Switch workplace
.
Proceso de instalación
La instalación del eclipse se efectúa de la siguiente forma
$sudo apt-get install eclipse
Una vez implementado el IDE se debe instalar el plugin del CDT, la forma recomendada a partir del a versión 3.4 del eclipse es usando la opción de instalación de nuevo software
Para instalar un plugin de Eclipse se de indicar la url de donde se obtendrá los código, el IDE los baja , los compila y configura automáticamente.
Para el caso del CDT esa url se obtiene de su sitio oficial http://www.eclipse.org/cdt/
El siguiente diagrama indica como se debe proceder.
1- Ejecutar el wizard para instalar proyectos nuevos
2- Configurar la url de donde se bajaran los paquetes del CDT.
Código de ejemplo
Para los impacientes vamos construir un proyecto de ejemplo y con él mostraremos las funcionalidades básicas del IDE.
El Eclipse tiene la posibilidad de crear proyectos donde internamente cargaremos nuestros códigos. Estos proyectos estarán dentro de perspectiva de Eclipse, por defecto se carga la correspondiente a Java.
En este ejemplo construiremos un ejemplo muy simple que define algunas variables y utilizando un bucle las muestra en pantalla que nos va a servir para mostrar funcionalidades básicas del IDE.
1- Crear un proyecto C del tipo consola
1.1 Creamos un proyecto C tipo consola
1.2 Dejar la opciones por defecto.
2- Código de ejemplo
3- Compilación y ejecución.
El CDT al instalarse utiliza por defecto el gcc. Al ejecutar el programa el CDT lo compila y en el caso de no tener ningun error ejecuta el codigo y muestra los resultados.
Para ejecutar el codigo seleccionar el siguiente menú:
Run → Run (Ctrl + F11) y Seleccionar correr proyecto C/C++.
El resultado para este codigo de ejemplo es la siguiente:
0a 1b 2c 3d 4e
4- Debugging
El CDT utiliza el debugguing del gcc para poder detener, inspeccionar los valores de las variables, modificarlas, correr paso a paso, agregar breakpoints, correr dentro de funciones etc.
Para ejecutar el debug del codigo seleccionar el siguiente menú:
Run → Debug (F11)
La primera vez pide la configuracion del debugguer, seleccionar GDB
Luego el CDT indicara que al ejecutar el debug el Eclipe cambiara de perspectiva, este es un proceso habitual para la mayoria de los lenguajes de programacion soportados por el IDE
El el diagrama se visualizan las diferenes secciones de la perpectiva de debug
- Debug: Indica el proceso que se esta ejecutan, en nuestro ejemplo la funcion main()
- Variables. En esta secciones se puede ver el estado de las variables correspondiente a la línea del código que estamos analizando.
- Breakpoints: Muestra los breakpoints que tenemos marcado en el código, una forma de crearlo es hacer doble click sobre la barrar vertical de la izquierda del codigo justo en la línea donde queremos que se detenga la ejecucion del programa.
- Register: Permite ver el estado de los registros del procesador, esta opcion es muy util para cuando tener codigo assembler junto con el codigo C.
- DSF Disassembly: Se puede ver el codigo assembler correspondiente al codigo C que estamos analizando.
El debugguer permite ademas ver el estado de las variables con solo apuntaar con el cursor del mouse sobre la variable a inspeccionar.
Comandos basicos de debugguing:
F11: Ejecuta el codigo en modo debug, esto hace que el debugguer corra el programa hasta el primer breakpoint, si no se asignaron breakpoints corre hasta el final del programa.
F5: Ejecuta linea a linea, esta opcion es muy util para ver como evoluciona el estado de la variables.
F6: Ejecuta linea a linea como F5 pero con la diferencia que si en la linea a ejecutar existe una llamada a funcion el debuguer se introduce en ella para ejecutar linea a linea su codigo interno. Esto no aplica a llamadas a funciones de la biblioteca estandard u otra biblioteca pues se require tener el codigo C disponibles.
En la seccion de disassembly se muestra el linea a linea pero del codigo assembler correspondiente.
F8: Ejecuta el codigo hasta el siguiente breakpoint.
Conclusión:
El Eclipse CDT es una plugin de eclipse que permite programar en C/C++ para en entorno donde lo tengamos instalado, en nuestro caso se instaló para programar en C/C++ para Linux.Para el caso de Windows se debe instalar el compilador de C/C++ compatible con gcc (MinGW entre otros), ver documentación del CDT para este caso.
Si ya trabajaron con Eclipse para Java,PHY, JMe , Python u otros de los tantos lenuajes soportado por sus plugines usar el CDT es muy transparente, esa es una de la grandes ventajas que tiene este IDE. El resto es cuestión de práctica.