jueves, 15 de enero de 2009

Mashups (Remezclas)

Este artículo lo publiqué antes en Noviembre del 2007 en mi blog personal y me parece una tecnología interesante que aun no ha sido y me atrevo a decir que aun no comiemza a ser explotada.

Los mashups son, traducidos al español, remezclas (si.. como las de los DJ's). Se trata de un concepto que se introduce en con la filosofía WEB 2.0 que tiene que ver con aprovechar la potencialidad de cruzar contenidos existentes en otras páginas y aprovechar la nueva información.

Según WIKI:
"Una aplicación web híbrida (mashup o remezcla), es un sitio web o aplicación web que usa contenido de otras aplicaciones Web para crear un nuevo contenido completo, consumiendo servicios directamente siempre a través de protocolo http.
El contenido usado en un mashup es típicamente usado de terceros a través de una interfaz pública o usando un
API. Otros métodos que constituyen el origen de sus datos incluyen: sindicadores web (RSS o Atom) , Screen scraping ...
Así como los
weblogs han revolucionado la publicación en línea, los mashups están revolucionando el desarrollo web, permitiendo que cualquiera combine, de forma innovadora, datos que existen en eBay, Amazon.com, Google, Windows Live y Yahoo!. Las grandes facilidades brindadas por simples y ligeras API's han hecho que los mashups sean relativamente fáciles de diseñar. El que se requiera de mínimos conocimientos técnicos ha hecho que los mashups sean creados en su mayoría de casos por innovadores, quienes combinan en formas nuevas y creativas datos disponibles públicamente. Así como hay mashups muy útiles, existen otros que no pasan de sólo ser novedosos o publicitarios, con mínima utilidad práctica.
Los defensores e impulsores de las aplicaciones
Web 2.0 expresan que los mashups son un ejemplo de este nuevo movimiento con sus usuarios en activa participación e interacción".

En la Charla que fui el martes, se tocó el tema de los mahups. Hablaban de un tipo que tenía una corredora de propiedades usando información desde dos fuentes. Un sitio donde se publicaban avisos de ventas y arriendos y otro sitio que permitía encontrar direcciones utilizando una herramienta del tipo google earth. Esa es mas o menos la idea. Utilizar fuentes de datos diferentes para obtener nueva información con algún objetivo particular.

En este video se trata la creación de Mashups con la herramienta QEDWiki de IBM.


Otras aplicaciones que permiten generar mashups son:

Yahoo! Pipes
Dapper
QEDWiki

Lo mejor es que no hay que programar. Solo hay que manejar algunos conceptos básicos y listo.
Shuerte en shush aventurash.

miércoles, 14 de enero de 2009

Patrones de diseño orientado a objetos

Definición:
Según Wikipedia: Los patrones de diseño (design patterns) son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces. Un patrón de diseño es una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.

Los patrones de diseño no son fáciles de entender, pero una vez entendido su funcionamiento, los diseños serán mucho más flexibles, modulares y reutilizables. Han revolucionado el diseño orientado a objetos y todo buen arquitecto de software debería conocerlos. y como consejo: Abusar o forzar el uso de los patrones puede ser un error.

El grupo de GoF clasificaron los patrones en 3 grandes categorías basadas en su PROPÓSITO: creacionales, estructurales y de comportamiento.

  • Creacionales: Patrones creacionales tratan con las formas de crear instancias de objetos. El objetivo de estos patrones es de abstraer el proceso de instanciación y ocultar los detalles de cómo los objetos son creados o inicializados.
  • Estructurales: Los patrones estructurales describen como las clases y objetos pueden ser combinados para formar grandes estructuras y proporcionar nuevas funcionalidades. Estos objetos adicionados pueden ser incluso objetos simples u objetos compuestos.
  • Comportamiento: Los patrones de comportamiento nos ayudan a definir la comunicación e iteración entre los objetos de un sistema. El propósito de este patrón es reducir el acoplamiento entre los objetos.
A continuación una lista con los patrones de diseño a objetos más habituales publicados en el libro "Design Patterns", escrito por los que comúnmente se conoce como GoF (gang of four, "pandilla de los cuatro").

Patrones de creación (Creacionales)

* Abstract Factory. Proporciona una interfaz para crear familias de objetos o que dependen entre sí, sin especificar sus clases concretas.
* Builder. Separa la construcción de un objeto complejo de su representación, de forma que el mismo proceso de construcción pueda crear diferentes representaciones.
* Factory Method. Define una interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qué clase instanciar. Permite que una clase delegue en sus subclases la creación de objetos.
* Prototype. Especifica los tipos de objetos a crear por medio de una instancia prototípica, y crear nuevos objetos copiando este prototipo.
* Singleton. Garantiza que una clase sólo tenga una instancia, y proporciona un punto de acceso global a ella.


Patrones estructurales


* Adapter. Convierte la interfaz de una clase en otra distinta que es la que esperan los clientes. Permiten que cooperen clases que de otra manera no podrían por tener interfaces incompatibles.
* Bridge. Desvincula una abstracción de su implementación, de manera que ambas puedan variar de forma independiente.
* Composite. Combina objetos en estructuras de árbol para representar jerarquías de parte-todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos.
* Decorator. Añade dinámicamente nuevas responsabilidades a un objeto, proporcionando una alternativa flexible a la herencia para extender la funcionalidad.
* Facade. Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Define una interfaz de alto nivel que hace que el subsistema se más fácil de usar.
* Flyweight. Usa el compartimiento para permitir un gran número de objetos de grano fino de forma eficiente.
* Proxy. Proporciona un sustituto o representante de otro objeto para controlar el acceso a éste.


Patrones de comportamiento


* Chain of Responsibility. Evita acoplar el emisor de una petición a su receptor, al dar a más de un objeto la posibilidad de responder a la petición. Crea una cadena con los objetos receptores y pasa la petición a través de la cadena hasta que esta sea tratada por algún objeto.
* Command. Encapsula una petición en un objeto, permitiendo así parametrizar a los clientes con distintas peticiones, encolar o llevar un registro de las peticiones y poder deshacer la operaciones.
* Interpreter. Dado un lenguaje, define una representación de su gramática junto con un intérprete que usa dicha representación para interpretar las sentencias del lenguaje.
* Iterator. Proporciona un modo de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación interna.
* Mediator. Define un objeto que encapsula cómo interactúan un conjunto de objetos. Promueve un bajo acoplamiento al evitar que los objetos se refieran unos a otros explícitamente, y permite variar la interacción entre ellos de forma independiente.
* Memento. Representa y externaliza el estado interno de un objeto sin violar la encapsulación, de forma que éste puede volver a dicho estado más tarde.
* Observer. Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambia de estado se notifica y actualizan automáticamente todos los objetos.
* State. Permite que un objeto modifique su comportamiento cada vez que cambia su estado interno. Parecerá que cambia la clase del objeto.
* Strategy. Define una familia de algoritmos, encapsula uno de ellos y los hace intercambiables. Permite que un algoritmo varíe independientemente de los clientes que lo usan.
* Template Method. Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura.
* Visitor. Representa una operación sobre los elementos de una estructura de objetos. Permite definir una nueva operación sin cambiar las clases de los elementos sobre los que opera.

Recursos:
Algunos ejemplos concretos de patrones de diseño en este link.
En este link algunos patrones con su código en Java o C#

Arquitectura TI: Que es y que hace un arquitecto de TI?

Introducción:
Previamente publiqué un post sobre la Arquitectura MVC pero... qué es realmente la arquitectura de software? cuál es el rol del arquitecto? Hay herramientas que faciliten la labor del arquitecto?

Definición:
La arquitectura de software, llamada también la arquitectura lógica, es el diseño de mas alto nivel de la estructura de un sistema, aunque hay varias definiciones y no hay prácticamente ninguna que sea totalmente aceptada, aunque la más oficial es la definición oficial de Arquitectura del Software es la IEEE Std 1471-2000 que dice: “La Arquitectura del Software es la organización fundamental de un sistema formada por sus componentes, las relaciones entre ellos y el contexto en el que se implantarán, y los principios que orientan su diseño y evolución”.

Otra definición es la de Hohmann, 2003: “Arquitectura de software es la suma de los módulos complejos, procesos y los datos del sistema, su estructura y exactas relaciones entre sí, cómo puede ser y se espera que sea, sus extensiones y qué tecnologías participan, deducir las capacidades exactas y flexibilidad del sistema desde el cual se puede formar un plan para la implementación o modificación del sistema.”

El Rol del arquitecto de software:
El arquitecto es el encargado de definir:
QUE?
La union de requerimientos del cliente, el conocimiento de su entorno, de sus necesidades, de sus espectativas de crecimiento, dan como resultado un producto intangible que será la solución que se va a proveer considerando un modelamiento del negocio conformado por el equipo de analistas que apoyan cada proyecto.
Acá se hace un paralelo con un drector de orquesta, que debe hacer que cada uno de los músicos interpreten la música de acuerdo a la partitura.


COMO?

Una vez que está definido el qué se va a hacer, definidos ya el modelo de negocios, con los analistas que conforman el negocio, se confecciona la documentación técnica del proyecto que contiene análisis, modelos y diseño de la solución a los requerimientos del cliente. El arquitecto cumple su parte como organizador, facilitador de definiciones y como validador del modelamiento.

CON QUE?
Nuevamente el arquitecto entra en su rol de "director de orquesta" esta vez con otro equipo de trabajo, conformado por un jefe de proyectos (que tiene una metodología) y un experto técnico con un framework de trabajo bien definido y consolidado para definir cada una de las partes de la solución, esta vez se toma mas en detalle a la solución, se toman decisiones que deben estar de acuerdo a la tecnología que vaya ser utilizada por el equipo de desarrollo y se define presupuesto y cronograma del proyecto (a esta altura ya debiera estar bien definido el equipo de trabajo del proyecto). Lo anterior en teoría, porque según mi experiencia, el arquitecto no se entromete en temas de presupuesto ni de cronograma del proyecto dado que el líder técnico (jefe de proyectos) debe conformar su equipo y planificar las actividades de su equipo, aunque esto puede variar dependiendo de las empresas cuando el arquitecto también es el jefe de proyectos.

Productos resultantes de la ingeniría de software:
No hay un consenso en cuanto al lenguaje y la forma en que el arquitecto entregue los elementos de ayuda a la toma de decisiones y que permitan la comunicación en un lenguaje común con todos los actores del proyecto. Acá, dependerá de la tendencia de la arquitectura escogida.
Uno de los modelos más usados y conocidos es el “4+1” de Philippe Kruchten, vinculado al Rational Unified Process (RUP), que define cuatro vistas diferentes:

  • Vista lógica: describe el modelo de objetos.
  • Vista de proceso: muestra la concurrencia y sincronía de los procesos.
  • Vista física: muestra la ubicación del software en el hardware.
  • Vista de desarrollo: describe la organización del entorno de desarrollo.
  • Existe una quinta vista que consiste en una selección de casos de uso o de escenarios que los arquitectos pueden elaborar a partir de las cuatro vistas anteriores.
Ejemplos de Arquitectura de Software:
Para ilustrar y clarificar un poco lo anteior, se muestran dos diagramas de arquitectura en un entorno J2EE. Ambos diagramas están disponibles en Designing Enterprise Applications with the J2EE Platform, Second Edition de SUN.

El primer diagrama consiste en una vista lógica que muestra los componentes y servicios típicos de un entorno J2EE.
Por otro lado, en el modelo MVC tenemos una vista de procesos que se relacionan entre las capas Modelo, Vista y Controlador en un entorno J2EE.


Hasta acá lo mas relevante con respecto a la arquitectura. En otros post posteriores seguramente mencionaré temas asociados como SOA (Arquitectura orientada a servicios), Usabilidad y Patrones y antipatrones de diseño.

Recursos: The architecture journalist; revista del MSDN (Microsoft Development Network) especialmente dedicada a temas de arquitectura. Hay varios números en español aunque atrasados con respecto a las publicaciones en inglés.

martes, 13 de enero de 2009

Informática Forense (Computer Forensic)

Introducción
Es un término que suena muy fuerte a primera vista. La mayoría relacionamos la práctica forense con asesinatos, cadáveres y muerte en general. En informática, la verdad es que no es tan diferente, acá los asesinatos podrían paralelizarse con los delitos de robo de información (el crimen), los cadáveres con datos, dispositivos de almacenamiento o periféricos.
Para mi es apasionante el tema de la seguridad informática en general, y la informática forense podría clasificarse como una sub-area dentro de la seguridad.



Definición:
El término Informática Forense(Digital Forensic) viene de la unión de las tecnologías de información con la necesidad de obtener, identificar, examinar y preservar información-evidencia criminal y/o legar relevante en algún aspecto computacional dentro de un caso relacionado con la justicia.

Forense:

Del lat. forensis.

* adj. Perteneciente o relativo al foro.

* adj. ant. Público y manifiesto.


En realidad no estoy completamente seguro que solamente se deba llevar al ámbito judicial, pero es lo que normalmente se hace. Por ejemplo cuando una compañia sufre un ataque desde el interior del robo de información por parte de un empleado, lo lógico sería que dicha empresa levantara cargos contra las personas que resultaren responsables, pero probablemente habrá casos en que a la empresa solamente le interesa contar con la información. Creo es es un tema debatible, pero no acá :)

Origen:
En la mayoría de los sitios dan como precursores de la informática forense a los creadores del primer "Forensic toolkit"

Alcances.
Entre los usos más comunes de un análisis forense están:
  • Recuperación de evidencias en discos
  • Recuperación de contraseñas
  • Detección y recuperación de Virus, Spyware y Troyanos
  • Recuperación de correos electrónicos
  • Análisis de redes P2P
Etapas:
  • Adquisición: en esta etapa se debe copiar la información del sistema en observación. podría requerir desde realizar una imagen del disco duro hasta rescatar un disco que se haya caído al mar, que haya sufrido daños físicos o que haya sido borrado. Es importante en esta etapa tener en cuenta que el simple arranque del computador, podría modificar archivos del sistema. Es por eso que actualmente se usan sistemas operativos del tipo "portable" es decir que arrancan desde el CD o desde una entrada USB (En otro post me extenderé mas acerca de esto).
  • Validación y preservación de los datos; Con el fin de resguardar los datos, se intenta mantener la confidencialidad de estos, por lo que se recomienda el uso de passwords robustas para que sea difícil el obtenerlas por terceras personas.
  • Análisis y descubrimiento de evidencia: Se realiza una batería de operaciones y pruebas sobre los datos en diferentes niveles y lo que se busca generalmente es:
*Archivos borrados, creados, accesados y modificados
*Tipos de archivos con formatos en particular (documentos, planillas, presentaciones, etc)
*Imágenes, mensajería, correos electrónicos, direcciones web visitadas, tráfico de internet.
*Palabras claves como nombres, ciudades, números telefónicos
  • Emisión de informe: Se determina si hay un patrón del uso con respecto al análisis anterior. Y se entrega la información en lenguaje técnico e idealmente un CD u otro con los archivos donde se interpreta la evidencia.
Proyectos en curso:
http://cp4df.sourceforge.net/
http://sourceforge.net/projects/oscfmanual/
http://www.ioce.org/2002/core.php?ID=1

Recursos:
Una revista dedicada al tema. Se puede bajar el primer número gratis.

Sistemas operativos especializados:
Caine (Computer Aided INvestigative Environment) es una distribución de GNU/Linux del tipo Live-CD creado por Giancarlo Giustini como un projecto del CRIS (Digital Forensics for Interdepartment Center for Research on Security) de la Universidad de modena.

Algo sobre Frameworks y Arquitectura MVC y RIA (Rich Internet Applications)

Introducción:
Es difícil empezar a escribir. Primero, por que es mi primer post en este blog y me imagino que debo soltar un poco la mano antes de tomar confianza y soltura.
En realidad no se por qué este primer post está dedicado a la arquitectura MVC. Será que es de las cosas que me interesa aprender? por que les digo desde ya: La palabra experto siempre me ha parecido muy subjetiva y yo no me considero experto en ninguna rama de la informática, mas bien la experiencia, los estudios y la lectura, me han llevado a saber de todo un poco y también por eso un poco el título del blog. Entre tanta cosa, sigla, iniciales, tecnologías, empresas, marcas... díganme, quién no se ha sentido un poco desorientado en este mundo?

Frameworks
Según wiki: Un framework, en el desarrollo de software, es una estructura de soporte definida en la cual otro proyecto de software puede ser organizado y desarrollado. Típicamente, puede incluir soporte de programas, bibliotecas y un lenguaje interpretado entre otros software para ayudar a desarrollar y unir los diferentes componentes de un proyecto.
Representa una arquitectura de software que modela las relaciones generales de las entidades del dominio. Provee una estructura y una metodología de trabajo la cual extiende o utiliza las aplicaciones del dominio.


La verdad es que leo esa definición y me parece muy técnica aunque si explicativa. En el fondo, lo que quiere decir es que un framework es un programa que permite hacer programas. Complementando lo anterior, es necesario mencionar que hsata ahora estoy hablando solamente de una herramienta, independiente de la tecnología.
hoy en día muchas empresas han desarrollado o adaptado (dependiendo de sus propias necesidades) estos programas (generalmente basados en productos opensource) permitiendo disminuir los tiempos de desarrollo. Un sencillo ejemplo podría ser que para generar una lista de elementos desde una base de datos (por ejemplo una lista de ciudades), cosa que trabajando en forma bruta significaría crear una consulta que extraiga los elementos desde la base de datos y crear el código para que la lista se genere dinámicamente, con un framework esta misma acción podría simplificarse a una línea de código en que se pasen como parámetros los elementos necesarios para que la lista sea desplegada (parámetros como la tabla que desea ser consultada, cual será la opcion por defecto, si es una lista en que se pueden seleccionar varios elementos o solo uno, el método de ordenamiento, etc.
Ejemplo: en el framework Akelos (fue el primer ejemplo que encontré), el código sería:

$form_options_helper->select ($object_name,$column_name,$choices, [ $options ],[ $html_options ])

No me voy a extender mas sobre esto. Mas bien espero haber clarificado un poco de que se trata un framework. Su utilidad.
En la red hay muchos y para todos los gustos. Por ejemplo:
En la página http://www.phpframeworks.com/
hay una tabla comparativa de frameworks para PHP que indica cuáles son sus principales funcionalidades o soportes.
También los hay en Java si es que alguien tiene preferecias por este lenguaje.
En este sentido intentaré ser imparcial y mis recomendaciones serían que al momento de elegir un Framework, se fijen en:
- Tipo de aplicacion a desarrollar
- Facilidad en el desarrollo
- Soporte del framework (que tan amplia es la comunidad del proyecto)
- Si se vislumbra continuidad en el desarrollo del framework
- Soporte de tecnologías (características técnicas)
Además de:
- No crean todo lo que dicen los blogs y/o artículos
- Pruebenlo ustedes mismos
- Ver si se ajusta a los intereses corporativos
- Intenta realizar un prototipo en los que elijas y si sale muy complicado, deshéchalo.
- Intenta documentar todo. Desde por qué no te gustó un framework hasta por qué elejiste uno mas antiguo.

Ahora, para hacer el enganche con el siguiente tema, debo decir que los Frameworks permiten realizar el desarrollo de aplicaciones de acuerdo a cierta arquitectura.
Por ejemplo: Una de las arquitecturas más extendidas y por tanto la mayoría de los frameworks la soportan es la aquitectura MVC (Modelo / Vista / Controlador)
La idea de esta arquitectura es separar la aplicacion en "datos", "interfaz de usuario" y "lógica de control".
Modelo: Es la representación de la información con la cual el sistema opera. La lógica de datos asegura la integridad de estos y permite derivar nuevos datos.
Vista: Este presenta el modelo en un formato adecuado para visualizar y operar (interactuar), típicamente conocido como "interfaz de usuario".
Controlador: Este responde a eventos, usualmente acciones del usuario e invoca cambios en el modelo y probablemente en la vista.
RIA
Y para terminar con este artículo, no puedo dejar de mencionar el concepto RIA.
Según Wikipedia: RIA, acrónimo de Rich Internet Applications (Aplicaciones Ricas de Internet) son un nuevo tipo de aplicaciones con más ventajas que las tradicionales aplicaciones Web. Esta surge como una combinación de las ventajas que ofrecen las aplicaciones Web y las aplicaciones tradicionales.

Normalmente en las aplicaciones Web, hay una recarga contínua de páginas cada vez que el usuario pulsa sobre un enlace. De esta forma se produce un tráfico muy alto entre el cliente y el servidor, llegado muchas veces, a recargar la misma página con un mínimo cambio.

Otra de las desventajas de las tradicionales aplicaciones Web es la poca capacidad multimedia que posee. Para ver un vídeo es necesario usar un programa externo para su reproducción.

En los entornos RIA, en cambio, no se producen recargas de página, ya que desde el principio se carga toda la aplicación, y sólo se produce comunicación con el servidor cuando se necesitan datos externos como datos de una Base de Datos o de otros ficheros externos.

Las capacidades multimedia son totales gracias a que estos entornos tienen reproductores internos y no hace falta ningún reproductor del Sistema Operativo del usuario.

Hay muchas herramientas para la creación de entornos RIA. Entre estas se puede mencionar las plataformas Adobe Flash, Adobe Flex y Adobe AIR de Adobe, AJAX, OpenLaszlo, Silverlight de Microsoft, JavaFX Script de Sun Microsystems y Bindows de MB Technologies.

Y para terminar, teniendo la tecnología RIA, en una arquitectura MVC y con un framework que soporte ambas, creo que las aplicaciones serán cada día mejores. En una artículo leí que para el 2010, el 60% de las aplicaciones serán construídas utilizando este esquema. Queda en nuestras manos informáticas el hacer que esta cifra aumente. Y cómo? aprovechando la tecnología existente, implementando la amplia gama de posibilidades que ofrece la WEB 2.0, aprendiendo a utilizarlas y potenciandolas. Espero con este artículo haber abierto un poco las mentes y haber alimentado el apetito de más de alguien.
Dejo acá algunos Frameworks que están hechos para desarrollar "RIA's"
Spring Richclients
Ariaware ARP
Scope
Cairngorm

Eso por ahora. Que lo disfruten

Powered By Blogger

Un informático desorientado © 2008. Template by Dicas Blogger.

TOPO