viernes, 9 de mayo de 2008

Revolution OS

Hola, existe gran diferencia entre microsoft y el open source, una es la que se refleja en la imagen....



El Software Libre ha revolucionado la informática, esa es la idea fundamental de la obra. Revolution OS es una película documental que trata sobre el Sistema Operativo (OS) GNU/Linux, y los movimientos del Software Libre y el Código abierto (Open Source).

Durante los minutos que dura RevolutionOS veremos pasar los principales personajes que han cambiado el mundo de la informática a nivel mundial, hablando por sí mismos, opinando, realizando algún chiste, contando alguna anécdota, todos muy entusiasmados, como cualquier hacker al cual se le pregunta ¿a qué te dedicas? Los hackers y los emprendedores empresariales
informáticos suelen ser muy misticos cuando hablan de sus tareas.

Será muy interesante presenciar los comienzos del software, cuando era compartido en discos de cinta. Así mismo, este documental es una joyita dentro de la historia de la informática, la Carta Abierta de Bill Gates hacia lo que él llamaba aficionados en la cual les pide que no compartan el software, sino que lo vendan... esta carta fue escrita por Bill Gates cuando Microsoft todavía estaba basado en New México y se llamaba "Micro-Soft".

Luego Richard Stallman explica cómo y por qué dejó el MIT Lab for Artificial Intelligence para dedicar su vida entera al desarrollo y la expansión del Software Libre, y cómo empezó con el proyecto GNU para construir un sistema operativo totalmente libre.

La controversia en cuanto a llamar Linux o GNU/Linux al sistema es presentada ante Linus Tordvalds, así como se le pregunta qué es Linux y qué supone su desarrollo y comercialización. Es interesante lo que dice Linus en un momento: "puedes pensar a Richard Stallman como el gran filósofo y a mí como el arquitecto", también es remarcable escucharlo decir "Sin el compilador GNU C no hubiera sido posible hacer Linux ni la mayoría de los programas abiertos": esto le cerraría la boca a más de un fanático que anda diciendo por listas de mail y foros de usuarios que GNU no es importante para Linux, o cosas por el estilo, o que Richard Stallman anda por ahí reclamándose la paternidad del Software Libre cuando en realidad hizo muy poco (!!!)... siendo que él mismo comenzó a programar el compilador GNU C (GCC), y redactó la licencia GPL, entre otras cosas.

Se tratan en la película los primeros pasos a pequeña, mediana y gran escala de la aplicación de GNU/Linux en los negocios, dan testimonio de ello Larry Augustin de "VA Linux" y Michael Tiemann de Cygnus Solutions.

También se entrevista a uno de los desarrolladores originales de uno de los programas libres más exitosos de la historia: Apache, el que sirve mas del 80% de las aplicaciones web alrededor del mundo.

A muchos les gustará ver cómo fue el primer evento masivo "LinuxWorld", en el que estuvieron presentes Linus Torvalds, Larry Augustin y Richard Stallman recibiendo un premio.

La película se exhibió en varios festivales, incluyendo South by Southwest, Atlanta Film and Video Festival, Boston Film Festival, Denver International Film Festival; ganó el premio al Mejor Documental en ambos "Savannah Film and Video Festival" y en el "Kudzu Film Festival".

¿Qué ha cambiado desde 2001 dentro del Software Libre, el Open Source y GNU/Linux?

Para concluir, sería bueno preguntarse ¿qué ha cambiado desde 2001 dentro del Software Libre, el Open Source y GNU/Linux? Han cambiado algunas cosas: los programas para escritorio se han popularizado, tenemos a OpenOffice, Firefox, BitTorrent entre otros, el sistema GNU/Linux se ha convertido en algo muy sencillo de manejar para cualquier persona, hasta diría que es más sencillo que Windows (ventanukos).

Richard Stallman y otros han realizado una campaña mundial por difundir la filosofía del software libre, la cual ha impactado en políticos de todo el mundo, vemos que Paises enteros comienzan la migración, tales son los casos de Venezuela, Cuba, Brasil, Rusia, italia, etc.. entre otros.

La adopción y desarrollo de Software Libre u Open Source ha avanzado de forma definitiva sobre las grandes empresas en todo el planeta, dominando el mercado de los servidores web y de base de datos... el 95% de las computadoras en Hollywood utilizan GNU/Linux, y así podríamos seguir con una lista casi interminable de objetivos cumplidos por esta comunidad heterogénea y anárquica que ha revolucionado la informática para siempre.

Vamos al meollo del asunto.



Otras peliculas que recomiendo son:

-Code Linux
-The Secret history of Hacking(ingles, documental de discovery channel)
-Pirates of silicon valley(ingles)

Regards and be free... Use Linux...

miércoles, 30 de abril de 2008

Modelado con UML

Las notaciones nos permiten formular ideas complejas en forma resumida y precisa.

Para que una notación permita la comunicación precisa debe tener una semántica bien definida, debe ser muy adecuada para la representación de un aspecto dado de un sistema y debe ser bien comprendida por los participantes del proyecto. En esto ultimo se encuentra la fortaleza de los estándares y las convenciones.

Seleccionamos el UML (Lenguaje de Modelado Unificado) como notación estándar, ya que tiene una semántica bien definida, proporciona un espectro de notaciones para la representación de diferentes aspectos de un sistema y ha sido aceptado como una notación estándar en la industria.

UML es una notación que se produjo como resultado de la unificación de la técnica de modelado de objetos. El UML ha sido diseñado para resolver un amplio rango de aplicaciones.

El desarrollo de sistemas se enfoca en tres modelos diferentes del sistema:

Modelo funcional: representado en UML con diagramas de caso de uso, describe la funcionalidad del sistema desde el punto de vista del usuario.

Modelo de objetos: representado en UML con diagramas del clase, describe la estructura de un sistema desde el punto de vista de objetos, atributos, asociaciones y operaciones.

Modelo dinámico: representado en UML con diagramas de secuencia, diagramas de gráfica de estado y diagramas de actividad, describe el comportamiento interno del sistema.


Panorámica del UML.

Se presentan 5 notaciones UML:

Diagramas de caso de uso.
Diagrama de clase.
Diagrama de secuencia.
Diagrama de estado. (*)
Diagrama de actividad (*)



Diagrama de caso de uso.

Los casos de uso se utilizan durante la obtención de requerimientos y el análisis para representar la funcionalidad del sistema. Los casos de uso se enfocan en el comportamiento del sistema desde un punto de vista externo y que proporciona un resultado visible para un actor.

Un actor puede ser cualquier entidad que interactúa con el sistema ya sea un usuario u otro sistema. La identificación de los actores y los casos de uso da como resultado la definición de la frontera del sistema, esto es la diferencia entre las tareas realizadas por el sistema y las realizadas por su ambiente.


El actor UsuarioReloj puede consultar la hora con el caso de uso LeerHora, o ajustar la hora con el caso de uso AjustarHora. Sin embargo, solo el actor PersonaReparadoraRelojes puede cambiar la batería del reloj con el caso de uso CambiarBateria


Diagrama de clase

Se utilizan diagramas de clase para describir la estructura del sistema. Las clases son abstracciones que especifican la estructura y el comportamiento común de un conjunto de objetos. Los objetos son instancias de las clases que se crean, modifican y se destruyen durante la ejecución del sistema.

Los diagramas de clase describen el sistema desde el punto de vista de objetos, clases, atributos, operaciones y sus asociaciones.


El diagrama de clase describe todos los elementos de todos los relojes de la clase RelojSimple.Todos estos objetos de reloj tienen una asociación con un objeto de la clase BotonImprimible, un objeto de la clase pantalla, un objeto de la clase hora.


Diagrama de secuencia

Los diagramas de secuencia se usan para formalizar el comportamiento del sistema y para visualizar la comunicación entre objetos. Son útiles para la identificación de objetos adicionales que participan en los casos de uso. A los objetos involucrados en un caso de uso les llamamos objetos participantes. Un diagrama de secuencia representa las interacciones que suceden entre esos objetos.



La imagen corresponde al diagrama de secuencia para el caso de uso AjustarHora de nuestro RelojSimple, la primera columna representa al actor UsuarioReloj que inicia el caso de uso. Las demás columnas representan la linea de tiempo de los objetos que participan en este caso de uso.

Este articulo es solo una introducción al modelado con uml, existen otra serie de diagramas que ire agregando o escribiendo otros articulos para profundizar en este tema

Saludos y suerte !!

miércoles, 23 de abril de 2008

Requerimientos

Toma de Requerimientos

Podemos definir un requerimiento como una condicion o capacidad que debe estar presente
en un sistema o componentes de este para satisfacer un contrato, estandar, especificación u otro documento formal (Std 610.12-1900, IEEE:62)

Otra definicion adoptada es que un requerimiento es simplemente una declaración abstracta de alto nivel de un servicio que debe proporcionar un sistema.

Los requerimientos son una pieza fundamental en proyectos de Software, en base a esto se puede determinar y hacer estimaciones de tiempo, costos, definir recursos necesarios, elaborar cronogramas y cartas gantt, etc.
Permite verificar y comprobar si se obtuvieron los objetivos establecidos para el proyecto.

Muchas veces los proyectos que fracasan por que la toma de requerimientos es incompleta o por el mal manejo de los cambios en los requerimientos durante la vida de desarrollo del Software.

Clasificación de Requerimientos
La clasificación de requerimientos es importante, de esta manera podemos definir y abstraer con mayor detalle los tipos de requerimientos a los que nos enfrentamos, los requerimientos se pueden clasificar en:
  • Requerimientos Funcionales.
  • Requerimientos no Funcionales.
  • Requerimientos de Implementación.
Requerimientos Funcionales: Describen las interacciones entre el sistema y su entorno, usuarios u otros sistemas

Requerimientos No Funcionales: Describen aspectos visibles del sistema por el usuario, y que no se relacionan directamente con el comportamiento funcional del sistema.

Requerimientos de Implementación: Corresponden a las necesidades del cliente que restringen la implementación, como la plataforma tecnológica, de hardware, redes, etc.

Características en la Toma de Requerimientos
Las características mas importantes y fundamentales para una toma de requerimientos deben contener los siguientes puntos:
  • Un requerimientos debe estar especificado siempre por escrito.
  • Un requerimiento debe ser posible de probar y verificar.
  • Un requerimiento debe ser conciso.
  • Un requerimiento debe ser completo.
  • Un requerimiento debe ser consistente.
  • Un requerimiento no debe ser ambiguo.

Ingeniería de Requerimientos
La Ingeniería de requerimientos ayuda a los ingenieros de software a entender mejor el problema en cuya solución trabajaran, incluye el conjunto de tareas que conducen a comprender cual sera el impacto del software sobre el negocio, que es lo que el cliente quiere y como interactuaran los usuarios finales con el software.

También la ingeniería de requerimientos comprende el proceso de desarrollar una especificación del software, estas pretenden comunicar las necesidades del sistema del cliente a los desarrolladores del sistema

Importancia de la Ingeniería de Requerimientos:
  • Permite gestionar las necesidades del proyecto de manera documental y estructurada.
  • Mejora la capacidad de predecir cronogramas de proyectos, así como sus resultados.
  • Disminuyen los costos y retrasos del proyecto.
  • Mejora la calidad del Software.
  • Mejora la comunicación entre equipos.
  • Evita rechazos de usuarios finales.

Actividades de la IR
  • Estudio de la viabilidad
  • Obtención y análisis de requerimientos.
  • Validación de requerimientos.
  • Administración de requerimientos.

Estudio de la viabilidad
Un estudio de la viabilidad es a corto plazo, y orientado a resolver si el sistema:
Contribuye a los objetivos de la organización?
Se puede implementar con tecnología actual dentro de costo y tiempo?
Puede integrarse a otros existentes en la organización?

Obtención y análisis de requerimientos
  • Descubrimiento de requerimientos,
  • Puntos de vista: toma en cuenta la existencia de varias perspectivas y provee de una marco de trabajo para descubrir conflictos.
  • Entrevistas.
  • Escenario: son descripciones de ejemplos de las sesiones de interacción del sistema, se inicio con un bosquejo y durante la obtención se agregan detalles.
  • Casos de Uso (UML)
  • Clasificación y organización de requerimientos
  • Orden por prioridades y negociación
  • Documentación

Validación de requerimientos
  • Similar al análisis pero comprende un bosquejo completo del documento.
  • Importante, ya que los errores en los requerimientos pueden conducir a costos excesivos si se descubren durante el desarrollo o después en la implantación.

Técnicas de validación.
  • Revisiones de requerimientos y su documentación.
  • Construcción de prototipos.
  • Generación de casos de prueba.
  • Análisis de consistencia automático con herramientas de software.

Administración de requerimientos.
Los requerimientos de sistemas grandes o complejos son siempre cambiantes.
Los sistemas grandes usualmente se desarrollan para mejorar el status quo.
Surgirán nuevos requerimientos debido a:
  • Comunidad diversa de usuarios, los requerimientos finales son comúnmente un termino medio.
  • Quien paga es raramente quien usa el sistema.
  • Entorno del negocio cambiante.

Se debe generar un proceso formal para que todos los cambios propuestos sean tratados de forma consistente.

Etapas:
  • Análisis del problema y especificación del cambio
  • Análisis del cambio y costos
  • Implementación del cambio
Siempre existe la tentación de hacer un cambio de manera urgente al sistema, y en retrospectiva
modificar el documento de requerimientos. Esto conduce a un desface e inconsistencia

Requerimientos en Normas de calidad
MPS-BR: Norma estándar basada en conceptos similares a los tratados, siguiere la utilización de
UML(casos de uso, secuencia, actividades, estados, etc.) con formato de documentos definidos y
adoptados por la industria como estándar para el modelado y diseño de sistemas con UML.
Propuesta: Utilización de diagramas UML y Procesos, con un modelo de entrega por etapas con
verificación y administración de requerimientos basado en documentación de la norma estándar IEEE-STD-803-1998

Casos de Uso (UML)
UML, de sus siglas en ingles (Unified Modeling Language) se relaciona directamente con el desarrollo de software orientado a objetos y en este nos encontramos con los casos de uso, los cuales nos apoyan al análisis de los requerimientos como una técnica de adquisición de estos, una definición es que los Casos de Uso no son parte del diseño, sino parte del análisis. De forma que al ser parte del análisis nos ayudan a describir qué es lo que el sistema debe hacer. Los Casos de Uso son lo qué hace el sistema desde el punto de vista del usuario. Es decir, describen un uso del sistema y cómo este interactúa con el usuario.


Notación de casos de uso:



Lo importante de los casos de uso no es el dibujo que acostumbramos a ver, entonces ¿que es lo importante?, Lo realmente útil de los casos de uso es el documento que describe el caso de uso, en este documento se explica la forma de interactuar entre el sistema y el usuario.
Este podría ser el caso de uso de escribir un mensaje en un foro.



Herramientas de apoyo
Es importante para la buena gestión y administración de tareas, las cuales nacen muchas veces de un requerimiento del cliente, contar con una herramienta tecnológica o aplicación que nos apoye en esta gestión, una aplicación de tipo Workflow que nos permita hacer seguimiento de estas tareas que se pueden asignar a los participantes del proyecto.

Mejores Prácticas
¿Que son las mejores prácticas?
Un conjunto organizado y documentado de principios, métodos y procesos que incrementan la calidad y la productividad en del desarrollo de software.

Mejores practicas orientadas hacia:

El recurso humano.
  • Gestión por Roles
  • Administración del Tiempo
  • Gestión del Conocimiento
  • Capacitación basada en competencias

El proceso.
  • Desarrollo Iterativo
  • Administración de requisitos
  • Uso de arquitectura basada en componentes
  • Modelado visual
  • Aseguramiento continuo de la calidad
  • Administración de cambios

El Producto
  • La Arquitectura
  • El Diseño
  • Las Base de datos
  • Las Pruebas
  • La Operación

Saludos y Suerte !!

viernes, 28 de marzo de 2008

Workflow - Scarab

Hola, muchas veces en las empresas en que trabajamos es necesario implementar un sistema que haga un seguimiento a distintos casos o actividades, es decir la construcción o implementación de un workflow. Ahora ustedes se preguntaran ¿Que es un Workflow? , en simples palabras, un workflow es el seguimiento a un flujo de trabajo ver aquí para más información.

Los Workflow deben cumplir con los siguientes objetivos (copiado de wikipedia):
  • Reflejar, mecanizar y automatizar los métodos y organización en el sistema de información
  • Establecer los mecanismos de control y seguimiento de los procedimientos organizativos
  • Independizar el método y flujo de trabajo de las personas que lo ejecutan
  • Facilitar la movilidad del personal
  • Soportar procesos de reingeniería de negocio
  • Agilizar el proceso de intercambio de información y agilizar la toma de decisiones de una organización, empresa o institución

Ahora que ya sabemos lo que es un workflow, y que además necesitamos implementar uno, veremos como lo haremos.
Existen muchos workflow en el mercado, en el siguiente link hay una lista de ellos, son proyectos Open Source - Workflow Engine in Java.

Nos centraremos en una aplicación Open Source llamada Scarab de tigris.org, escrita en Java y altamente configurable, trabaja con distintas bases de datos como Oracle, Postgre, Mysql, Hipersonic, etc., Prototype como librería de Ajax, y los mejores estándares abiertos de tecnología J2EE, como base de Workflow ocupa WfmOpen, La meta de este proyecto (WfmOpen) es proporcionar una puesta en práctica ligera basada en un motor del worflow J2EE. el cual funcionará en una variedad de plataformas y con licencia GPL.

Tambien el código fuente se integra fácilmente con ides como eclipse y netbeans, trabajando con ant y maven a gusto del desarrollador, velocity Macro para las paginas y turbine como motor.

Bueno pongamos manos a la obra y descarguemos el proyecto desde este link

bajemos la ultima versión estable, la 0.21, en formato tar.gz o zip, y lo descomprimimos en el directorio donde tengamos nuestros desarrollos, esto nos generara un árbol de archivos como el siguiente:

slack@ulinux:~/desarrollo/scarab-0.21$ ls -la

total 364
drwxr-xr-x 10 slack slack 4096 2008-03-28 10:26 .
drwxr-xr-x 45 slack slack 4096 2008-03-24 10:06 ..
drwxr-xr-x 3 slack slack 4096 2008-03-27 16:06 bin
drwxr-xr-x 2 slack slack 4096 2008-03-28 09:40 build
-rwxr-xr-x 1 slack slack 10104 2008-03-12 22:38 .classpath
drwxr-xr-x 8 slack slack 4096 2008-03-12 22:36 extensions
-rwxr-xr-x 1 slack slack 9646 2007-02-09 16:28 INSTALL
drwxr-xr-x 2 slack slack 4096 2008-03-12 22:36 lib
-rwxr-xr-x 1 slack slack 175 2007-02-09 16:28 LICENSE
-rwxr-xr-x 1 slack slack 28373 2007-02-09 16:28 maven.xml
-rwxr-xr-x 1 slack slack 18837 2007-02-09 16:28 MIGRATION
-rwxr-xr-x 1 slack slack 14209 2008-03-27 11:44 minimal.properties
-rwxr-xr-x 1 slack slack 3868 2007-02-09 16:28 minimal.xsl
-rwxr-xr-x 1 slack slack 370 2008-03-12 22:38 .project
-rwxr-xr-x 1 slack slack 55009 2008-03-27 15:07 project.properties
-rwxr-xr-x 1 slack slack 28509 2007-02-09 16:28 project.xml
-rwxr-xr-x 1 slack slack 4139 2007-02-09 16:28 project.xsl
-rwxr-xr-x 1 slack slack 3194 2007-02-09 16:28 README
drwxr-xr-x 9 slack slack 4096 2007-02-09 16:34 src
drwxr-xr-x 9 slack slack 4096 2007-02-09 16:34 tomcat
-rwxr-xr-x 1 slack slack 98872 2007-02-09 16:31 velocity.log
-rwxr-xr-x 1 slack slack 14120 2007-02-09 16:28 wizzard.properties
-rwxr-xr-x 1 slack slack 3956 2007-02-09 16:28 wizzard.xsl
drwxr-xr-x 3 slack slack 4096 2007-02-09 16:34 www
drwxr-xr-x 7 slack slack 4096 2008-03-12 22:36 xdocs

y al montarlo el eclipse quedaría así este proyecto:



Entonces ahora tendremos que tener instalada y arriba Mysql la cual ocupa por defecto para el arranque inicial, la podriamos cambiar modificando el archivo minimal.properties de la raiz del proyecto, si ocupamos ANT debemos ir a la carpeta build del proyecto y correr con ant el archivo buid.xml, como muestra la siguiente imagen:



Antes de comenzar a deployar la aplicación debemos crear una base de datos llamada scarab en mysql con usuario root por default, luego en el navegador derecho de opciones de ant hacemos doble click en la opción por defecto marcada como deploy [default] y luego que termine en la consola de hacer este deploy si todo va bien debemos generar el war con la opcion war de ant, esto nos generara una carpeta con el nombre target en la raiz del proyecto y dentro de esta el archivo scarab.war que debemos llevar al webapp de tomcat.

Saludos y mucha suerte !!

miércoles, 12 de marzo de 2008

Hacker o Cracker?


Uno de los temas que tiene mucho que ver en esto de la informática y que no está muy claro todavía, es acerca de los hackers. Estas personas tienden a ser confundidas con otro tipo de individuos que son todo lo contrario a ellos...

En esta primera parte abarcaremos lo que es un hacker - ¿ Acaso no son los hackers los que se pasan tratando de romper las cuentas de hotmail a la gente?

¿Qué es lo primero que pensamos cuando escuchamos la palabra Hacker?.En un tipo frente a una computadora metiéndose a otra para desconfigurarla o robarle información, o en un tipo programando virus para infectar tu máquina y así perder toda tu información. Muchos usuarios de Internet les temen a estos tipos que incluso cuando saben que tienen uno en su lista de contactos, lo borran y borran todo lo relacionado con este, creyendo evitar así ser espiados, este tipo de personas asociados a un mundo medio under ground, de musica rock, bar de rene, o de la noche, etc... no somos tan malos, jjj.



En cambio otros (especialmente los principiantes) adoran a estos hackers y pasan días enteros buscando información de como convertirse en uno de ellos, y cuando se topan con uno quieren convertirse en su pupilo y aprender todas la magias que encierra a estos individuos denominados hackers por la sociedad.

Pero oh! Error señores, estos no son los verdaderos hackers. Los hackers de verdad no destruyen.... Construyen.

Todos estos individuos que se la pasan saboteando equipos no son más que Crackers que se dedican a crackear cuentas con el único fin de perjudicar a otros. Los Hackers en cambio son tipos rudos en la programación y tecnología o en la creación de soluciones a problemas, autodidactas, etc.

La sociedad ha denominado hackers a los crackers y esto a los hackers de verdad no les causa la menor de las gracias pues ellos están para construir, desarrollar soluciones, y descubrir fallos de seguridad en los sistemas que investigan, no para destruir y sabotear.

Un hacker no dice: Soy un Hacker!. la comunidad de hackers es la que lo denomina como tal, por sus características y esfuerzo al realizar una aplicación o al contribuir a la solución de un problema.

"Los hackers resuelven problemas y construyen cosas, y creen en la libertad y la ayuda voluntaria mutua. Para ser aceptado como hacker, deberás comportarte como si tuvieras esta actitud en tu interior. Y para comportarte como si tuvieras esta actitud, deberás creerte de verdad dicha actitud".

"Pero si piensas en cultivar las actitudes de hacker sólo como una forma de ganar aceptación en esta cultura, te estás equivocando. Transformarse en la clase de persona que cree estas cosas es importante para ti para ayudarte a aprender y mantenerte motivado. Como en todas las artes creativas, el modo más efectivo de transformarse en un maestro es imitar la mentalidad de los maestros no sólo intelectualmente, sino también emocionalmente".

Los hackers son autodidactas, y es para ellos todo un reto el resolver un problema. Entre mas grande sea el problema a resolver, mas interesante se hace el reto para un hacker de solucionarlo.

Linux es un ejemplo de una plataforma creada por hackers. Linux es un sistema operativo muy usado por los hackers, en el desarrollan aplicaciones, y crean soluciones a distintos problemas que tiene la comunidad linux, como la falta de algunas aplicaciones o la actualización de otras, etc. Estas aplicaciones van desde una página web hasta un sistema operativo completo.

La comunidad hacker esta en la red, y se encuentra en distintas comunidades y foros en lo ancho del Internet. Algunos son Moderadores y pasan largas jornadas leyendo problemas y aportando soluciones. Otros participan en proyectos de software y aportan código u optimizan código para los proyectos, en realidad son comunidad abierta al conocimiento.

Los hackers son los que le han dado forma a lo que hoy conocemos como Internet y su aportación es muy importante en el desarrollo informático. No solo son programadores, los hay desarrolladores y podría decir que también algunos solo son autodidactas y adictivos a la informatica.

Así que si la próxima vez quieres robar una cuenta de Hotmail y ser un gran hacker.. serás mas bien un cracker! (¡lamer es el término adecuado!). En vez de robar mejor: "aporta y crea soluciones para la comunidad... se autodidacta, sé un hacker!!.

Saludos y Suerte !!

jueves, 21 de febrero de 2008

Virtualización de Servidores

La virtualización es la capacidad de poder generar 'n' ambientes de sistemas operativos en un mismo hardware manteniendo un alto performance y rendimiento por cada uno de ellos, pudiendo además poder implementar clustering entre estos sistemas para balanceo de cargas y poder mantener los servicios 99.99% del tiempo arriba.


Un plan de virtualización define etapas de investigación y pruebas para una correcta implementación de este concepto en nuestras maquinas, la principal ventaja de la virtualización de servidores es, aprovechar los escasos recursos de equipamiento de servidores para poder generar un amplio ambiente virtual con n maquinas servidoras.

En Linux existe Xen (Open Source) para Virtualización de servidores, Xen es una maquina virtual de código abierto desarrollada en la universidad de Cambridge, recientemente Amazon comenzó a brindar servicios de Computadores bajo demanda utilizando Xen como el núcleo del servicio. Xen ha tenido gran éxito y es mantenido por una comunidad muy activa dentro del desarrollo de Software Open Source.

En la actualidad los fabricantes de hardware y CPU como Intel y Amd han dado soporte para la virtualización, y seguramente es la mejor implementación que se puede adoptar para un mantener un alto performance y rendimiento de los servicios de sistemas y web que se ofrecen.

Las técnicas de Virtualización deben contemplar la virtualización de todo el hardware, mas específicamente la virtualización de la CPU, Memoria, discos duros y hardware de entrada y salida.

Xen se puede configurar de manera transparente y compleja con muchos pasos. a diferencia de aplicaciones como VMWare, Xen se codifica básicamente en el kernel de Linux y se gestiona con un servicio que administra las maquinas virtuales, esa es la ventaja que nos puede proveer Xen al ser implementado en Un Sistema Operativo de código abierto como Linux.

Xen proporciona aislamiento seguro, control de recursos, garantías de calidad de servicio y migración de máquinas virtuales en caliente. Los sistemas operativos deben ser modificados explícitamente para correr Xen (aunque manteniendo la compatibilidad con aplicaciones de usuario). Esto permite a Xen alcanzar virtualización de alto rendimiento sin un soporte especial de hardware pero si con su compatibilidad.

Las máquinas virtuales Xen pueden ser migradas en caliente entre equipos físicos sin pararlos. Durante este proceso, la memoria de la máquina virtual es copiada iterativamente al destino sin detener su ejecución. Una parada muy breve de alrededor de 60 a 300 ms es necesaria para realizar la sincronización final antes de que la máquina virtual comience a ejecutarse en su destino final. Una tecnología similar es utilizada para suspender las máquinas virtuales a disco y cambiar a otra máquina virtual.

Para poder implementar Xen de manera exitosa en cualquier compañía debemos facilitar los recursos necesarios y proponer un plan de pruebas eficiente para su correcta implementación.

Algunos link recomendados:

http://es.wikipedia.org/wiki/Xen
http://www.xen.org/
http://www.citrixxenserver.com/Pages/default.aspx

Saludos y Suerte !!

lunes, 11 de febrero de 2008

Configurando Jboss portal para postgresql

Hola, en la actualidad y desde hace un tiempo las empresas implementan portales para dar soluciones de escala empresarial a sus clientes, uno de los portales que mas se utilizan es jboos portal, debido a que es open source y altamente robusto.
Un portal empresarial como jboos portal cumple con varias caracteristicas que nos aseguran una buena gestión y administración de portales para nuestros clientes, las caracteristicas tecnicas mas importantes son:

En tecnología y Arquitectura:
JEMS: Se apoya el poder de JBoss Enterprise Middleware JBoss Application Server, JBoss
Cache, JGroups, y Hibernate.
• PP Agnóstico: ¿funcionan con cualquier RDBMS apoyo de Hibernate
• SSO / LDAP: Se apoya Tomcat y JBoss de inicio de sesión único (SSO) de las soluciones.
• JAAS Autenticación: Custom autenticación a través de módulos JAAS login.
• Cacheing: Utiliza emitir opinión-caché para mejorar el rendimiento.
• Clusterable: Grupo de apoyo para el portal estatal permite que se agrupen portales para todos los casos.
• Hot-Despliegue: Se apoya JBoss dinámico para despliegue automático de características.

Soporte a Estandares:
• Especificación y Portlet API 1.0 (JSR-168)
• Content Repository for Java Technology API (JSR-170)
• Java Server Faces 1.2 (JSR-252)
• Java Management Extension (JMX) 1,2
• Completo J2EE 1,4 cumplimiento cuando se utiliza con JBoss AS

Portal y Portlet Container:
• Múltiples instancias del portal: La capacidad de tener múltiples instancias en funcionamiento dentro del portal de un portal de contenedores.
• IPC ™ Interamericano de Comunicación Portlet API permite a los portlets para crear enlaces con otros objetos, como una página, portal o ventana.
• Dynamicity ™ La capacidad de los administradores y los usuarios a crear y destruir objetos, como los portlets, páginas, Portales, temas, y diseños en tiempo de ejecución.
• Internacionalización: Capacidad para utilizar la internacionalización de archivos de recursos para cada portlet.
• Pluggable servicios: autenticación realizada por el contenedor servlet y JAAS que hacen posible el intercambio de Esquemas de autenticación.
• Página basada en la arquitectura: Permite la agrupación y división de los portlets en una página por cada base.
• Marco de apoyo existentes: Portlets utilizando Struts, Spring MVC, Sun JSF-RI, AJAX, o que cuenten con el apoyo de MyFaces Portado.

Temas y Diseños:
• Fácilmente intercambiables temas / diseños: Nuevos temas y diseños que contengan imágenes se pueden desplegar en un WAR
• Flexible API: Tema y diseño de la API están diseñados para separar la capa de negocio de la capa de presentación.

Funcionalidad de usuario y de grupo:
• Registro de usuario / validación: registro de los parámetros configurables para permitir que los usuarios de correo electrónico de validación antes de su activación.
• Login: Hace uso de contenedor servlet de autenticación.
• Crear o modificar usuarios: Capacidad para que los administradores de crear/editar perfiles de usuario.
• Crear o modificar Roles: La habilidad para los administradores de crear/editar los papeles.
• Asignación de Papel: La habilidad para los administradores asignar funciones a los usuarios.

Gestión de permisos:
• Permisos ampliables con la API: Permisos basados en la definición de papeles.
• Administraión de la interfaz: Permite a las cesiones de los permisos de funciones en cualquier momento por cualquier despliegue de portlet, Página, o portal de ejemplo.

Sistema de Gestión de Contenidos (CMS):
• JCR conformes: El CMS se alimenta a través de Apache Jackrabbit, una aplicación de código abierto de Java
• PP o almacenar el apoyo del sistema de archivos: Configurable para almacenar el contenido del sistema de archivos o bien un RDBMS.
• Factores externos Blob Soporte: Contenido configurable que permite almacenar grandes nodos de referencias y propiedades al residir en una RDBMS.
• versionado de apoyo: Todo el contenido editado o creado es autoversionedo con una historia de ediciones que se pueden ver en cualquier momento.
• equipado con un editor HTML: HTML de modo WYSIWYG, la funcionalidad de vista preliminar, y HTML .

El listado anterior son las caracteristicas mas importantes de este Open-Source. ahora que ya tenemos una mejor noción de lo que es un portal de fuente abierta podremos continuar con el articulo. Por defecto jboss portal viene con una base de datos, la HSQL o Hipersonic, ahora generaremos la configuración para PostgreSQL, de esta manera se nos facilita un poco la administración de la base del portal, si es que tenemos webmin.

Entonces lo primero que haremos sera descargarnos jboos portal de la siguiente url, para este ejemplo practico, ocupo jboss portal 2.4 bundled, postgresql 8.2, linux debian y la jdk1.5.0_12:

1.- Descargamos jboss-portal-2.4.1-bundled.zip de la siguiente url:

http://labs.jboss.com/jbossportal/download/index.html

2.- Lo descomprimimos en un directorio y nos aseguramos de tener los permisos para levantar en servicio:

slack@debian:~/portals$ unzip jboss-portal-2.4.1-bundled.zip

este comando anterior descomprime el zip en el directorio donde nos encontramos, luego vamos al directorio bin de la raiz del jboss.

slack@debian:~/portals$ cd jboss-portal-2.4.1/bin/
slack@debian:~/portals/jboss-portal-2.4.1/bin$ ls -la
total 180
drwxr-xr-x 2 slack slack 4096 2006-12-20 17:26 .
drwxr-xr-x 8 slack slack 4096 2006-12-20 17:27 ..
-rw-r--r-- 1 slack slack 3539 2006-12-20 17:26 classpath.sh
-rw-r--r-- 1 slack slack 3479 2006-12-20 17:26 jboss_init_hpux.sh
-rw-r--r-- 1 slack slack 2463 2006-12-20 17:26 jboss_init_redhat.sh
-rw-r--r-- 1 slack slack 3750 2006-12-20 17:26 jboss_init_suse.sh
-rw-r--r-- 1 slack slack 535 2006-12-20 17:26 probe.bat
-rw-r--r-- 1 slack slack 918 2006-12-20 17:26 probe.sh
-rw-r--r-- 1 slack slack 3221 2006-12-20 17:26 run.bat
-rw-r--r-- 1 slack slack 1572 2006-12-20 17:26 run.conf
-rw-r--r-- 1 slack slack 38163 2006-12-20 17:26 run.jar
-rw-r--r-- 1 slack slack 4672 2006-12-20 17:26 run.sh
-rw-r--r-- 1 slack slack 1813 2006-12-20 17:26 shutdown.bat
-rw-r--r-- 1 slack slack 17296 2006-12-20 17:26 shutdown.jar
-rw-r--r-- 1 slack slack 2061 2006-12-20 17:26 shutdown.sh
-rw-r--r-- 1 slack slack 2137 2006-12-20 17:26 twiddle.bat
-rw-r--r-- 1 slack slack 47481 2006-12-20 17:26 twiddle.jar
-rw-r--r-- 1 slack slack 2414 2006-12-20 17:26 twiddle.sh
-rw-r--r-- 1 slack slack 2037 2006-12-20 17:26 wstools.bat
-rw-r--r-- 1 slack slack 2776 2006-12-20 17:26 wstools.sh

tendremos que dar permiso al run.sh para levantar el servidor jboss, con el siguiente comando:

slack@debian:~/portals/jboss-portal-2.4.1/bin$ chmod +x run.sh

IMPORTANTE: no correr run.sh hasta terminar la configuración

Ya tenemos listo jboss para arrancarlo, ahora veremos el tema de la configuración de la base de datos, aqui lo setearemos para postgresql.

Primero vamos al webmin o algún gestor de bases de datos Postgre, creamos una base de datos para el portal (jbossportal), ademas nos creamos un usuario (portaluser) y le asignamos una clave (quaker77) para esta base de datos, con permisos para crear tablas.
Una vez creada correctamente la base de datos, verificamos que podamos conectarnos, para esto podemos ocupar un database explorer de bases de datos, del mismo ide Eclipse, Netbeans, u otro, ya conectados seguimos adelante con la configuracion de los archivos de jboss para postgresql.

Tendremos que editar 2 archivos de configuración, estos son:

postgres-ds.xml
portal-postgresql-ds.xml

y la ubicación donde deben ir el el portal es:

slack@debian:~/portals/jboss-portal-2.4.1/server/default/deploy

Sin embargo la primera vez estos archivos no se encuentran el este directorio, ya que la configuración por default es con HSQL. si listamos los archivos vemos los archivos de configuración para HSQL

slack@debian:~/portals/jboss-portal-2.4.1/server/default/deploy$ ls
bsh-deployer.xml http-invoker.sar jboss-local-jdbc.rar
jmx-console.war monitoring-service.xml uuid-key-generator.sar
cache-invalidation-service.xml jboss-aop.deployer jboss-portal.sar jmx-invoker-service.xml portal-hsqldb-ds.xml client-deployer-service.xml jboss-bean.deployer jbossweb-tomcat55.sar jsr88-service.xml properties-service.xml
ear-deployer.xml jboss-ha-local-jdbc.rar jbossws14.sar mail-ra.rar schedule-manager-service.xml ejb-deployer.xml jboss-ha-xa-jdbc.rar jboss-xa-jdbc.rar mail-service.xml scheduler-service.xml
hsqldb-ds.xml jbossjca-service.xml jms management sqlexception-service.xml

Pero como nosostros queremos levantar el portal jboss con PostgreSQL, debemos reemplazar estos archivos por los que corresponden para PostgreSQL, el archivo portal-postgresql-ds.xml, se encuantra en el directorio Setup de la raiz del jboss, vamos allá entonces y procedemos a editarlo para nuestra base de datos

slack@debian:~/portals/jboss-portal-2.4.1/setup$ nano portal-postgresql-ds.xml

esto es lo importante:



PortalDS
jdbc:postgresql:jbossportal
org.postgresql.Driver
portaluser
quaker77



Guardamos el archivo en:

slack@debian:~/portals/jboss-portal-2.4.1/server/default/deploy

y eliminamos el archivo que correspondia a HSQL, portal-hsqldb-ds.xml

posteriormente hacemos lo mismo para postgres-ds.xml

Este archivo se encuentra en:

slack@debian:~/portals/jboss-portal-2.4.1/docs/examples/jca$ ls
asapxcess-jb3.2-ds.xml facets-ds.xml hsqldb-encrypted-ds.xml jms-ds.xml mssql-ds.xml pointbase-xa-ds.xml sybase-ds.xml
cicsr9s-ds.xml fastobjects-jboss32-ds.xml informix-ds.xml jsql-ds.xml mssql-xa-ds.xml postgres-ds.xml
db2-400-ds.xml firebird-ds.xml informix-xa-ds.xml lido-versant-service.xml mysql-ds.xml progress-ds.xml
db2-ds.xml generic-ds.xml jboss-ha-local-jdbc.rar mimer-ds.xml oracle-ds.xml sapdb-ds.xml
db2-xa-ds.xml hajndi-jms-ds.xml jboss-ha-xa-jdbc.rar mimer-xa-ds.xml oracle-xa-ds.xml sapr3-ds.xml
derby-ds.xml hsqldb-ds.xml jdatastore-ds.xml msaccess-ds.xml pointbase-ds.xml solid-ds.xml

Procedemos a editarlo de la misma manera:

slack@debian:~/portals/jboss-portal-2.4.1/docs/examples/jca$ nano postgres-ds.xml

de dejamos como se ve:



PostgresDS
jdbc:postgresql://[servername]:[port]/[database name]
org.postgresql.Driver
portaluser
quaker77

select 1


select 1







Lo guardamos y copiamos al directorio:

slack@debian:~/portals/jboss-portal-2.4.1/server/default/deploy

y eliminamos el archivo que correspondia a HSQL, hsqldb-ds.xml


Ahora buscamos el driver para conectarnos a postgre, yo tengo, postgresql-jdbc3-8.1-405.jar

lo copiamos a:

slack@debian:~/portals/jboss-portal-2.4.1/server/default/lib$ ls
activation.jar commons-collections.jar jboss-backport-concurrent.jar jboss-management.jar jbosssx.jar postgresql-jdbc3-8.1-405.jar
antlr-2.7.6.jar commons-httpclient.jar jboss-common-jdbc-wrapper.jar jboss-monitoring.jar jboss-transaction.jar properties-plugin.jar
autonumber-plugin.jar commons-logging.jar jboss-hibernate.jar jbossmq.jar jmx-adaptor-plugin.jar scheduler-plugin-example.jar
bcel.jar hibernate3.jar jboss-j2ee.jar jboss-remoting-int.jar jnpserver.jar scheduler-plugin.jar
bindingservice-plugin.jar hsqldb.jar jboss.jar jboss-remoting.jar jpl-pattern.jar snmp-support.jar
bsf.jar hsqldb-plugin.jar jboss-jaxrpc.jar jbossretro-rt.jar jpl-util.jar wsdl4j.jar
bsh-1.3.0.jar javassist.jar jboss-jca.jar jboss-saaj.jar log4j.jar xmlentitymgr.jar
bsh-deployer.jar javax.servlet.jar jboss-jsr77.jar jboss-serialization.jar mail.jar
cglib.jar javax.servlet.jsp.jar jboss-jsr88.jar jboss-srp.jar mail-plugin.jar

Una vez todo listo, vemos la configuración que se despliega cuando arrancamos el portal:

slack@debian:~/portals/jboss-portal-2.4.1/bin$ ./run.sh

=========================================================================

JBoss Bootstrap Environment

JBOSS_HOME: /home/slack/portals/jboss-portal-2.4.1

JAVA: /usr/lib/jvm/jdk1.5.0_12/bin/java

JAVA_OPTS: -server -Xms128m -Xmx512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Dprogram.name=run.sh

CLASSPATH: /home/slack/portals/jboss-portal-2.4.1/bin/run.jar:/usr/lib/jvm/jdk1.5.0_12/lib/tools.jar

=========================================================================

13:56:48,594 INFO [Server] Starting JBoss (MX MicroKernel)...
13:56:48,595 INFO [Server] Release ID: JBoss [Zion] 4.0.4.GA (build: CVSTag=JBoss_4_0_4_GA date=200605151000)
13:56:48,597 INFO [Server] Home Dir: /home/slack/portals/jboss-portal-2.4.1
13:56:48,597 INFO [Server] Home URL: file:/home/slack/portals/jboss-portal-2.4.1/
13:56:48,598 INFO [Server] Patch URL: null
13:56:48,598 INFO [Server] Server Name: default
13:56:48,598 INFO [Server] Server Home Dir: /home/slack/portals/jboss-portal-2.4.1/server/default
13:56:48,598 INFO [Server] Server Home URL: file:/home/slack/portals/jboss-portal-2.4.1/server/default/
13:56:48,598 INFO [Server] Server Log Dir: /home/slack/portals/jboss-portal-2.4.1/server/default/log
13:56:48,599 INFO [Server] Server Temp Dir: /home/slack/portals/jboss-portal-2.4.1/server/default/tmp
13:56:48,599 INFO [Server] Root Deployment Filename: jboss-service.xml
13:56:48,908 INFO [ServerInfo] Java version: 1.5.0_12,Sun Microsystems Inc.
13:56:48,908 INFO [ServerInfo] Java VM: Java HotSpot(TM) Server VM 1.5.0_12-b04,Sun Microsystems Inc.
13:56:48,909 INFO [ServerInfo] OS-System: Linux 2.6.18-5-686,i386
13:56:49,368 INFO [Server] Core system initialized
.
.
.
.
.
13:57:39,104 INFO [Dialect] Using dialect: org.hibernate.dialect.PostgreSQLDialect
13:57:44,420 INFO [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=PostgresDS' to J NDI name 'java:PostgresDS'
13:57:44,747 INFO [Http11BaseProtocol] Starting Coyote HTTP/1.1 on http-0.0.0.0-8080
13:57:44,839 INFO [ChannelSocket] JK: ajp13 listening on /0.0.0.0:8009
13:57:44,849 INFO [JkMain] Jk running ID=0 time=0/38 config=null
13:57:44,860 INFO [Server] JBoss (MX MicroKernel) [4.0.4.GA (build: CVSTag=JBoss_4_0_4_GA date=200605151000)] Started in 56s:259ms

Vemos que en algunas lineas del log en el arranque esta configurada la nueva conexión de base de datos para el portal jboss, para confirmar esto abrimos el browser y efectuamos el inicio de sesion:

http://localhost:8080/portal/auth/portal/default/Admin

OJO: por defecto jboss ocupa el puerto 8080, sin embargo a veces ocupamos ese mismo puerto para tomcat, lo podemos solucionar editando el archivo server.xml que se encuentra en:

slack@debian:~/portals/jboss-portal-2.4.1/server/default/deploy/jbossweb-tomcat55.sar$ ls
catalina.jar commons-el.jar context.xml jasper-runtime.jar naming-resources.jar servlets-default.jar tomcat55-service.jar tomcat-coyote.jar
catalina-manager.jar commons-modeler.jar jasper-compiler.jar jsf-libs ROOT.war servlets-invoker.jar tomcat-ajp.jar tomcat-http.jar
catalina-optional.jar conf jasper-compiler-jdt.jar META-INF server.xml servlets-webdav.jar tomcat-apr.jar tomcat-util.jar

modificando el puerto 8080 al 8082 por ejemplo.

bueno, ingresamos entonces al portal como admin admin, y creamos un usuario, quaker por ejemplo. luego vamos al webmin o hacemos una query a la tabla jbp_users y vemos que tenemos este usuario en esa tabla en nuestro PostgreSQL.

Saludos y suerte !!