Source: http://www.slideshare.net/ceinnavarra/cesnavarra-2009boletn-10
Timestamp: 2016-08-23 21:07:55+00:00

Document:
FUNDETEC: Estamos conectados by Cein
Título Introducción a JavaFXTexto En éste artículo del boletín de septiembre se habló sobre los mashups, para este mes, estaba pensando continuar desarrollándolo mostrando cómo hacer un mashup con Yahoo pipes o con Morfeo EzWeb, pero el otro día leí un artículo muy interesante en el que se creaba un mashup con JavaFX Script y pensé que era interesante probarlo. Sin embargo, antes de empezar a hablar de cómo se puede utilizar JavaFX para crear Mashups, es importante conocer de qué se habla cuando este nombre se menciona. JavaFX es un framework que presentó Sun en el JavaOne de 2007 y que pretende introducir a Sun en el mercado de las RIAs (Rich Internet Application) compitiendo contra Adobe Flex o Microsoft SilverLight. Actualmente está en la versión 1.2 y se contemplan dos vertientes, la Script y la Mobile, referidas a la ejecución de JavaFX en ordenadores (ya sea como applet dentro del navegador, widget o como un aplicación de escritorio) o en dispositivos móviles (teléfonos móviles, pdas…) respectivamente. Para poder utilizar JavaFX 1.2 se necesita tener instalado en el dispositivo en el que se vaya a ejecutar al menos la versión 1.6.13 de Java. Entre otras cosas, el uso de esta versión aporta que se puedan ejecutar applets fuera del navegador, independientemente del mismo, lo cual puede ser una gran ventaja en el caso de que uno funcione mal, pues el resto de applets de una misma página Web podrán seguir ejecutándose. Pero, ¿qué ventajas ofrece JavaFX? ¿Por qué se querría utilizar? Algunos de los motivos podrían ser:  Perfil común. JavaFX está basado en el concepto de un “perfil común” que pretende abarcar todos los dispositivos soportados por JavaFX. Este acercamiento hace posible a los desarrolladores usar un modelo común de programación mientras está construyendo una aplicación dirigida tanto para dispositivos móviles como dispositivos de escritorio y compartir bastante código, recursos gráficos y contenido entre las versiones de escritorio y móvil. Para tratar la necesidad de ajustar las aplicaciones a las necesidades específicas de las clases de dispositivos, desde la plataforma JavaFX 1.1 se incluyen APIs que son específicas para escritorio o móvil. Por ejemplo, el perfil Desktop de JavaFX incluye Swing y efectos visuales avanzados.  Arrastrar para instalar. Desde el puto de vista del usuario final “Drag-to-Install” permite arrastrar un widget JavaFX o aplicación residente en un sitio web dentro de la ventana del navegador y soltarlo en su escritorio. La aplicación no perderá su estado o contexto incluso si el navegador se cierra. Una aplicación también puede volver a ser relanzada clicando en un atajo que se crea automáticamente en 2.
el escritorio del usuario. Este comportamiento está permitido por el mecanismo de los applets de Java y es aprovechado por JavaFX usando la capa Java subyacente. Sun vende “Drag-to-Install” como una apertura para un nuevo modelo de distribución y permitiendo a los desarrolladores a “desprenderse del navegador”.  Integrar gráficos (imágenes) creados con herramientas de terceros. JavaFX incluye un conjunto de plug-ins para Adobe Photoshop e Illustrator que permiten que gráficos avanzados sean integrados directamente en aplicaciones JavaFX. Los plug-ins generan código JavaFX Script que preserva capas y estructura de los gráficos. Los desarrolladores pueden entonces añadir fácilmente animación o efectos a los gráficos estáticos importados. Hay también una herramienta de conversión de gráficos SVG (también conocido como Media Factory) esto permite importar gráficos y previsualizar recursos después de convertirlos al formato JavaFX.A la hora de ponerse a escribir código de JavaFX, antes de aprender lasintaxis del mismo, es conveniente contar con las herramientasadecuadas. En principio es suficiente contar con una herramienta tipo blocde notas que no te enriquece el texto ni añade caracteres extraños y permiteincluir cualquier tipo de extensión y además de esto será necesariodescargarse el SDK de JavaFX para poder compilar lasaplicaciones. Desde aquí, se podrá descargar tanto el SDK como la últimaversión del Entorno de Desarrollo NetBeans con JavaFX o el plug-in parael IDE Eclipse. Es recomendable el uso de cualquiera de estos dos entornosde desarrollo puesto que ofrecen ventajas frente al hecho de simplementecontar con un editor de texto normal. Básicamente la posibilidad decompilar, ejecutar el código o depurarlo o encontrar los fallos del mismo demanera más inmediata.Una vez conocidas estas ventajas que ofrece JavaFX para el desarrollo deaplicaciones y que ya se sabe con qué podemos desarrollar programas, esconveniente comenzar a acercarse al lenguaje. En JavaFX en vez deprogramas se escriben Scripts, es decir, es un lenguaje declarativo de scriptestáticamente tipado. Los tipos primitivos que se emplean en Java FX son:  Boolean: booleanos: java.lang.Boolean,  Integer: números enteros de 32 bit: java.lang.Integer,  Number: números en punto flotante con doble precisión: java.lang.Double,  String: cadenas de caracteres: java.lang.String,  Duration: se emplea en animaciones: 3.
java.lang.Duration.Aunque al contrario que los tipos primitivos de Java, todos ellos son objetos.Como en otros lenguajes de script, el tipo String de JavaFX soportaexpresiones embebidas de JavaFX empleando llaves ({}). JavaFX ademássoporta el formateo de expresiones embebidas JavaFX en strings mediante eluso de especificadores de formato. JavaFX no soporta Strings multi-líneacomo otros lenguajes de script lo hacen. Sin embargo, para facilitar larepresentación de Strings demasiado largos y Strings multi-línea, JavaFXsoporta concatenación de expresiones de String adyacentes.Para el tipo Duration, JavaFX soporta literales de tiempo, que son evidentesen sí mismos en forma y significado, por ejemplo, 1h representa 1 hora, 1s 1segundo o 5m 5 minutos. Esto se emplea sobre todo para especificarduraciones para los efectos de animación.Por otra parte, en JavaFX se elimina el uso del patrón listener, para ello secuenta con el operador bind que permite que el contenido dinámico puedaser expresado declarativamente. La dependencia se basa en la evaluación decualquier expresión y en su actualización automáticamente sin falta de usarel patrón listener. Así por ejemplo, si queremos hacer la típica primeraaplicación que aparece en todos los cursos de programación, el HelloWorld!, en JavaFX se deberá hacer: 1. Crear un nuevo proyecto vacío JavaFX con Eclipse o NetBeans. 2. Si se desea que el código esté dentro de un paquete, en Eclipse se deberá crear el paquete después de haber creado el proyecto, en NetBeans no hace falta puesto que lo crea directamente al crear el proyecto. 3. Después se creará un Empty JavaFX Script. 4. En el script JavaFX se incluirá las siguientes líneas de código:package com.cein.hello;import javafx.stage.Stage;import javafx.scene.Scene;import javafx.scene.paint.Color;import javafx.scene.paint.LinearGradient;import javafx.scene.paint.Stop;import javafx.scene.shape.Rectangle;import javafx.scene.text.Text;import javafx.scene.text.Font;import javafx.scene.effect.Reflection;/** * @author blacubcru */Stage { title: "Hello World!!" width: 305; 4.
height: 330; visible: true scene: Scene { content: [ Rectangle { x: 25; //Posición X y: 25; //Posición Y width: 250; //Anchura del rectángulo height: 250; //Altura del rectángulo // Para redondear las esquinas seemplea // arcWidth y arcHeight arcWidth: 25; arcHeight: 25; stroke: Color.BLACK; //Color de borde // Se añade un gradiente lineal alrectángulo fill: LinearGradient { startX: 0.0, startY: 0.0, endX: 0.0, endY: 1.0, proportional: true stops: [ Stop { offset: 0.0 color: Color.THISTLE }, Stop { offset: 1.0 color: Color.ORCHID } ] } // fill }, // Rectangle Text { x: 40 y: 150 content: "Hello World!"; font: Font { size:40; name:"DirtyBakersDozen"; }; // Se añade un relleno basado en ungradiente // Lineal a la fuente fill: LinearGradient { startX: 0.0, startY: 0.0, endX: 1.0, endY: 0.0, proportional: true stops: [ Stop { offset: 0.0 color:Color.LIGHTSLATEGREY }, Stop { offset: 1.0 color: 5.
Color.STEELBLUE } ] } // fill // (Se añade un reflejo al texto) effect: Reflection { fraction: 1.0, topOpacity: 0.7, topOffset: 5, } } // Text ] // content fill: Color.BLACK; }}Y al ejecutarlo esto nos mostrará:Figura 1. Aplicación Hello World en JavaFXPara ver el efecto del uso de bind, se modificará la aplicación para que saqueHello X! donde X será el nombre que se introduzca en un control de texto.package com.cein.hello;import javafx.stage.Stage;import javafx.scene.Scene;import javafx.scene.paint.Color;import javafx.scene.paint.LinearGradient;import javafx.scene.paint.Stop;import javafx.scene.shape.Rectangle;import javafx.scene.text.Text;import javafx.scene.text.Font;import javafx.scene.effect.Reflection;import javafx.scene.control.TextBox;/** 6.
* @author blacubcru *///Variable en la que se recoge el valor del cuadro de texto.var txName:String = bind "Hello {tbInput.text}!";//Caja de texto en la que se pone el nombrevar tbInput:TextBox = TextBox { text:"World"; editable: true; layoutX: 40; layoutY: 230;};Stage { title: "Hello World Binded!!" width: 305; height: 330; visible: true scene: Scene { content: [ Rectangle { x: 25; //Posición X y: 25; //Posición Y width: 250; //Anchura del rectángulo height: 250; //Altura del rectángulo // Para redondear las esquinas seemplea // arcWidth y arcHeight arcWidth: 25; arcHeight: 25; stroke: Color.BLACK; //Color de borde // Se añade un gradiente lineal alrectángulo fill: LinearGradient { startX: 0.0, startY: 0.0, endX: 0.0, endY: 1.0, proportional: true stops: [ Stop { offset: 0.0 color: Color.THISTLE }, Stop { offset: 1.0 color: Color.ORCHID } ] } // fill }, // Rectangle Text { x: 40 y: 150 // El contenido se liga a la variabletxName. // Si no se usara bind entonces no cambiaría // el valor mostrado. content: bind txName; 7.
font: Font { size:40; name:"DirtyBakersDozen"; }; // Se añade un relleno basado en ungradiente // Lineal a la fuente fill: LinearGradient { startX: 0.0, startY: 0.0, endX: 1.0, endY: 0.0, proportional: true stops: [ Stop { offset: 0.0 color:Color.LIGHTSLATEGREY }, Stop { offset: 1.0 color:Color.STEELBLUE } ] } // fill // (Se añade un reflejo al texto) effect: Reflection { fraction: 1.0, topOpacity: 0.7, topOffset: 5, } }, // Text tbInput //Se incluye el cuadro de texto ] // content fill: Color.BLACK; }}Y esto da como resultado al ejecutarlo: 8.
Figura 2. Aplicación Hello World Binded en JavaFXENLACES DE INTERÉS:  http://javafx.com/  http://en.wikipedia.org/wiki/JavaFX  http://es.wikipedia.org/wiki/JavaFX  http://en.wikipedia.org/wiki/JavaFX_Script  http://en.wikipedia.org/wiki/JavaFX_Mobile  http://onjava.com/pub/a/onjava/2007/07/27/introduct ion-to-javafx-script.html  http://www.javaworld.com/javaworld/jw-11-2008/jw- 11-jump-into-jfx-1.html  http://www.javaworld.com/javaworld/jw-12-2008/jw- 12-jump-into-jfx-2.html  http://www.javaworld.com/javaworld/jw-02-2009/jw- 02-javafx-fights-flash.html  http://java.sun.com/developer/technicalArticles/javafx /mobile/  http://java.sun.com/javafx/1/tutorials/core/  http://www.ibm.com/developerworks/web/library/wa- 9.
javafx/index.html  http://javafx.com/docs/tutorials/mediabrowser/module 3_task1.jsp  http://arstechnica.com/old/content/2008/12/hands- on-building-rich-internet-apps-with-javafx-1-0.ars  http://today.java.net/pub/a/today/2009/02/17/javafx- http-networking-and-xml-parsing.html  http://weblogs.java.net/blog/caroljmcdonald/archive/2 009/02/javafx_restful_1.html  http://www.javafx.com/samples/Tweeter/index.html  http://blogs.sun.com/clarkeman/entry/javafx_1_0_an other_improvment  http://www.javapassion.com/javafx/  http://java.sun.com/javafx/1/reference/system- requirements-1-2.html#javafxsdkCatego CES OpenSouce/JavaríasTema DesarrolloAutor Blanca Cubas CruzMes OctubreAño 2009Boletí 10nTítu Ejecutando Linux en Windows sin virtualizarloTex Hará unos meses ciertos cambios me llevaron a tomar la decisión de migrarto mi sistema operativo (Ubuntu) a Windows. No obstante, no deseaba perder el contacto con el sistema operativo Linux, así que deseaba encontrar una forma de mantenerlo. Las opciones que tenía conocía eran:  Arranque dual: o Pros: no es virtualizado y por tanto, usa toda la capacidad del ordenador (a excepción del disco duro). o Cons: necesidad de arrancar el ordenador en un sistema u otro, de forma alterna, no simultánea.  Virtualización: 10.
o Pros: posibilidad de trabajar de forma simultánea en ambos sistemas operativos, Linux y Windows. o Cons: compartición de la potencia del ordenador, y del disco duro. Además, a pesar de poder trabajar de forma simultánea, puede resultar incómodo para el día a día.Ninguna me acababa de convencer, hasta que encontré coLinux. Según supágina web “…Cooperative Linux is the first working free and open sourcemethod for optimally running Linux on Microsoft Windows natively. Moregenerally, Cooperative Linux (short-named coLinux) is a port of the Linuxkernel that allows it to run cooperatively alongside another operating systemon a single machine. For instance, it allows one to freely run Linux onWindows 2000/XP/Vista/7, without using a commercial PC virtualizationsoftware such as VMware, in a way which is much more optimal than usingany general purpose PC virtualization software…”En este artículo describiré el proceso que seguí en su día parainstalar coLinux, aunque es posible que algunas cosas puedan habercambiado desde entonces.Con posterioridad, descubrí andLinux, que mencionaré por encima al finaldel artículo. Una herramienta software basada en coLinux con imágenes deUbuntu totalmente pre-configurado con todo lo necesario. coLinux1 – Descarga e instalaciónVamos a la página de descargas decoLinux, http://sourceforge.net/projects/colinux/files/, y obtenemos laúltima versión estable del ejecutable coLinux.En su día, la instalación requería de la herramienta WinPCap ( una utilidadpara realizar bridge networking en windows). Ahora, parece que la propiainstalación lo trae de “serie”, así que es posible que no sea necesarioinstalarlo a parte.Durante la instalación, también nos da la opción de descargar una imagende Linux (tan solo la descarga, no configura coLinux para su uso), pero esopcional. Siempre podemos descargarnos la imagen de una distribuciónLinux, comprimida en formato 7z, a nuestra elección, desde la misma páginade descargas del proyecto. En realidad, tan solo se trata de un sistema deficheros con un sistema Linux pre-instalado. Siempre podemos partir de unsistema de ficheros vacío e instalar la distribución que queramos, aunqueesto requierirá conocimientos más avanzados.Yo descargué, por recomendación, una imagen de debian 4.0.2- ConfiguraciónLa parte más compleja de configurar y la más importante, quizás sea lasconexiones de red.coLinux recomienda configurar dos redes de conexión entre el sistemaoperativo huésped (en mi caso Windows) y la imagen coLinux (en mi caso 11.
debían). Una para la conexión de coLinux a Internet que le da salida a travésde la tarjeta Ethernet. Y otra para la interconexión rápida entre la sistemaoperativo huésped y la imagen de coLinux para el servidor gráfico, sin el usode la tarjeta Ethernet, y así no sobrecargarla.coLinux ofrece varias opciones de conexión: Tap, WinPCap y Slirp.En mi caso, configuré WinPCap para la conexión entre debían e Internet através de la tarjeta Ethernet por ser la recomendada y la más sencilla, y TAPpara la conexión rápida entre debian yWindows.Antes de arrancar la máquina debían para configurar la red, vamos arealizar algunos cambios necesarios en la configuración de lasconexiones Windows:  No es necesario pero modifiqué los nombres de las conexiones para poder identificarlas fácilmente.  Por defecto, coLinux crea una conexión Tap. Yo establecí la siguiente red interna debian-Windows: 10.10.10.0/24. Reservando la 10.10.10.1 para la IP de Windows y 10.10.10.2 para debian.  Modificamos las opciones del firewall para que permita todas estas conexiones, en caso contrario tendremos que ejecutar coLinux como administrador.A continuación, toca configurar coLinux para que use la imagen descargada,debian 4.0.Descomprimimos la imagen dentro del directorio donde se ha instaladocoLinux.Dentro del directorio de instalación de coLinux, existe un fichero ejemplo deconfiguración llamado example.conf que usamos como punto de partidapara el nuestro. Lo copiamos y le damos el nombre de debían.conf.Editamos el fichero y ajustamos los siguientes parámetros:  El parámetro cobd define las rutas a las particiones. Se van numerando 0,1,2, etc y puede haber tantas como se desee.  El parámetro cobd0 es la principal, que debe apuntar al lugar donde se encuentra nuestra imagen fs de debian.  El parámetro cobd1 es la ruta de la siguiente partición. En nuestro caso, será la swap. Es opcional, y en el caso de la imagen descargada de debían, venía sin ella. No obstante, se puede descargar desde http://gniarf.nerim.net/colinux/swap. En realidad, son ficheros vacios con el tamaño de swap que queremos. Posteriormente, una vez arrancado coLinux, deberemos configurarlo para que la use.  El parámetro eth, establece las conexiones de coLinux. Y al igual que en caso anterior, también puede haber tantas como se quiera.  El parámetro eth0 define la primera conexión. En nuestro caso será la de acceso al mundo exterior, Internet, y será a través de WinPCap. Debemos proporcionar el nombre indentificativo de la conexión le hemos dado en Windows (de ahí que las haya renombrado anteriormente). Esto es, eth0: winpcap, nombre_conexión_windows  Con el parámetro eth1 definimos la conexión interna, mediante TAP, entre debian y Windows. Por tanto, eth1: tap, nombre_conexión_windows. 12.
Ahora, ya podemos ejecutar coLinux (si no hemos configurado el firewall,tendremos seguramente que hacerlo como administrador) para terminar deconfigurarlo, indicando el fichero de configuración que hemos definido paradebian: colinux-daemon.exe –t nt @debian.confSegún indican en la wiki de colinux, las contraseñas son en “blanco” para lasimágenes con kernel 2.4 y “root” para las imágenes con kernel 2.6. En elcaso de nuestra imagen debían accedemos como usuario root y contraseñaroot.Una vez dentro, primero configuramos la swap que hemos definido antes: Asumimos que la swap está en /dev/cobd1 Añadimos la entrada en /etc/fstab: /dev/cobd1 swap swap defaults 0 0 Iniciámos la partición swap con: mkswap /dev/cobd1 Finalmente, para no tener que reiniciar la máquina, ejecutamos: run swapon -aA continuación, seguimos con la configuración de red: Editamos /etc/network/interfaces: auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet static ip 10.10.10.2 netmask 255.255.255.0 Y reiniciamos la red: /etc/init.d/network restartEn principio, la máquina ya está lista. En mi caso, además instalé una seriede paquetes adicionales: Preparamos el teclado, por defecto en USA, para soportar más idiomas: apt-get install console-data apt-get install console-tools apt-get install kbd Y lo configuramos a nuestro gusto: dpkg-reconfigure console-dataAhora, pasamos a realizar el último paso, la comunicación gráfica debían-Windows: Instalamos las X en debían para el entorno gráfico: apt-get update 13.
apt-get install xserver-xfree86 apt-get install xfce4 Hay varios servidores de X en windows para el entorno gráfico, nosotros instalaremos y usaremos Xming por ser open source y en principio el más sencillo. En Windows establecemos el display donde se visualizarán las aplicaciones: SET DISPLAY=10.10.10.1:0.0 En debían exportamos el display al que hemos fijando en Windows: Export DISPLAY=10.10.10.1:0.0 Podemos añadir esta instrucción al /etc/profile para no ejecutarla con cada sesión. Por último, en debían, habilitamos la conexión gráfica desde cualquier máquina, en nuestro caso Windows: Xhost +Y estos han sido todos los pasos necesarios, ahora podremos ejecutaraplicaciones Linux como si fuesen nativas en Windows sin falta de usarninguna virtualización. AndLinuxNo pasaré a describir el proceso de instalación porque, como se puede veren su página web, es trivial.En la sección de downloads, se puede observar que andLinux está preparadopara funcionar con una versión de escritorio XFCE y con KDE pero no conGNOME, aunque con posterioridad no habría más que instalarla sobreUbuntu si así lo deseamos. Dejar que la distribución vea, pueda leer/escribir, nuestro disco o discos.Esta última parte no la he comprobado, pero he creído interesante añadirla.Consiste en configurar la imagen coLinux para que pueda acceder al discoduro de la máquina huesped.Para eso, en nuestro debían.conf debemos añadir lo siguiente: Cofs0=c:O ejecutar coLinux de la siguiente manera: colinux-daemon.exe –t nt @debian.conf cofs0=c:Por último, en debían, debemos montar esta nueva partición: Asumimos que la swap está en /dev/cofs0 14.
Creamos el directorio donde vamos a montar el disco: mkdir /mnt/c Añadimos la entrada en /etc/fstab: cofs0 /mnt/c cofs defaults 0 0 O esta otra opción si queremos dar acceso completo: cofs0:Share /mnt/c cofs defaults 0 0 ScreenshootsAquí podemos ver algunas imágenes bastante ilustrativas de cuál sería elresultado. 15.
Cat CES OpenSouce/JavaegoríasTem VariosaAut Raúl Sanz de AcedoorMes OctubreAño 2009Bol 10etínTítulo ¿Para qué necesitan las empresas la supercomputación?Texto Andrés Gómez Tato, del CESGA, en su charla ofrecida durante la Semana Internacional de la Computación, nos comentó cómo las empresas pueden utilizar la supercomputación y las dudas que éstas plantean ante dicha tecnología. La supercomputación se puede utilizar para cualquier cosa que se pueda modelizar matemáticamente. Por ejemplo se modelizó el mercado inmobiliario en Estados Unidos y Reino Unido y se predijo su estallido dos años antes de que ocurriera. Esto implica que hay industrias potenciales usuarias de supercomputación de sectores como son:  Aeronáutico: simulación del comportamiento en vuelo de los aviones.  Automovilístico: simulación de choques entre vehículos.  Financiero: análisis de riesgos. Estudio de situaciones en concesión de créditos (qué riesgo tiene una cartera de valores, tus ingresos…), simulación de mercados, comportamiento bursátil. Probabilidades de catástrofes para la gestión de seguros. Los modelos que manejan los bancos no son públicos porque en ellos reside su ventaja competitiva.  Eólico y naviero: estudio de la climatología para la ubicación de parques de molinos o para la navegabilidad de los buques.  Farmacéutico.  Electrónico.  Ciencias de la vida: simulación de la respiración a través de las fosas nasales, por ejemplo. 16.
Pero ¿realmente se utiliza la supercomputación?Para ello se sondeó en 2004 a 500 empresas de Galicia: elresultado fue que la simulación numérica era utilizadaproporcionalmente al tamaño de la empresa.Un pequeña desagradable sorpresa fue que la industriaautomovilística, con fuerte presencia en la zona, no hacía usode esta tecnología. La razón es que el diseño de productos nose ubica en Galicia sino sólo la producción.El uso que se hace de la supercomputación es sobre todo enlas áreas mecánicas y estructurales o en los procesos defabricación: inyección, estampación, forja…Los servicios demandados por las empresas comenzaban poralgo tan básico como solicitar asesoramiento acerca de qué sepuede conseguir con esta tecnología.Tras esto se solicita formación en simulación numérica puestoque es algo que no es fácil de adquirir.Finalmente se solicita ayuda en la implantación del software autilizar.La aplicación que se hace de la simulación numérica se centraen el diseño y validación del producto, en el diseño yvalidación del proceso de fabricación.El principal obstáculo para hacer uso de todo esto es la faltade personal cualificado.El tipo de software utilizado es CAE específico para elproblema a solucionar.Pero desgraciadamente nadie utilizaba un supercomputadorpara ejecutar esas simulaciones.En 2008 se hizo un recorrido por diversas empresasespañolas para preguntarles qué uso podrían hacerdel supercomputador del CESGA y cuáles serían losprincipales obstáculos para hacerlo.Las respuestas por sectores fueron:  Naval: o Necesidades:  El 90% de sus necesidades las cubren internamente y el 10% restante la subcontratan.  Se simula la hidrodinámica, las turbinas o buques enteros (principalmente la estela que producen al navegar). o Barreras:  Confidencialidad de la información, que debe estar en el centro de supercomputación. 17.
 El pago de licencias.  El problema de mover grandes cantidades de datos. Eólico: o Necesidades:  Tema de estructuras, diseño de palas.  Cómo circula el viento por las palas: CFD.  Mayor exactitud en los resultados. o Barreras:  Confidencialidad de la información.  El pago de licencias.  El problema de mover grandes cantidades de datos. Financiero: o Necesidades:  No desean externalizar: todo lo realizan internamente. No quieren interactuar con otros agentes.  Data Mining.  Scoring.  Análisis de fraude.  Análisis de productos financieros. o Barreras:  Confidencialidad de la información.  El pago de licencias.  Necesitan los cálculos en tiempo real: no quieren esperar.  El problema de mover grandes cantidades de datos. Automóvil: o Necesidades:  Sólo para I+D, CFD. o Barreras:  Confidencialidad de la información.  El pago de licencias.  El problema de mover grandes cantidades de datos. Aeronaútico: o Necesidades:  Electromagnetismo.  CFD.  Sonido.  Estructuras.  Física del vuelo. o Barreras:  No las tienen identificadas. 18.
Respecto al tema de pago de licencias, esto ha hecho que se impulse el uso de software libre. En resumen la supercomputación es una tecnología que cada vez coge más envergadura para hacer que las empresas sean más competitivas. Pero el tema de la confidencialidad es un gran problema que hay que superar. Si quieres enviar algún comentario o sugerir temas a tratar en otros artículos, escribe a: curtasun[simboloArroba]cein.esCategorías GeneralTema VariosAutor Carlos UrtasunMes OctubreAño 2009Boletín 10Título War is over?Texto “If you want it”. Bueno el caso es que Lennon no lo preguntaba si no que lo afirmaba. ¿De qué guerra hablo? Como recordaréis por un artículo anterior, se había suscitado una polémica en torno a las titulaciones universitarias de informática, polémica que parece haberse resuelto vía BOE. El ocho de agosto (para que luego digamos que la Administración no trabaja en verano) se publica en dicho Boletín una, tomad aliento, Resolución de 8 de junio de 2009, de la Secretaría General de Universidades, por la que se da publicidad al Acuerdo del Consejo de Universidades, por el que se establecen recomendaciones para la propuesta por las universidades de memorias de solicitud de títulos oficiales en los ámbitos de la Ingeniería Informática, Ingeniería Técnica Informática e Ingeniería Química. Dejando aparte la Ingeniería Química (mis conocimientos no van mucho más allá de esto), vamos a ver lo que dice dicha Resolución. Además me centraré en la descripción de las competencias que los estudiantes deben adquirir. Se indican así: Capacidad para  Proyectar, calcular y diseñar productos, procesos e instalaciones en todos los ámbitos de la ingeniería informática.  La dirección de obras e instalaciones de sistemas 19.
informáticos, cumpliendo la normativa vigente y asegurando la calidad del servicio.  Dirigir, planificar y supervisar equipos multidisciplinares.  El modelado matemático, cálculo y simulación en centros tecnológicos y de ingeniería de empresa, particularmente en tareas de investigación, desarrollo e innovación en todos los ámbitos relacionados con la Ingeniería en Informática.  La elaboración, planificación estratégica, dirección, coordinación y gestión técnica y económica de proyectos en todos los ámbitos de la Ingeniería en Informática siguiendo criterios de calidad y medioambientales.  La dirección general, dirección técnica y dirección de proyectos de investigación, desarrollo e innovación, en empresas y centros tecnológicos, en el ámbito de la Ingeniería Informática.  La puesta en marcha, dirección y gestión de procesos de fabricación de equipos informáticos, con garantía de la seguridad para las personas y bienes, la calidad final de los productos y su homologación.  La aplicación de los conocimientos adquiridos y de resolver problemas en entornos nuevos o poco conocidos dentro de contextos más amplios y multidisciplinares, siendo capaces de integrar estos conocimientos.  Comprender y aplicar la responsabilidad ética, la legislación y la deontología profesional de la actividad de la profesión de Ingeniero en Informática.  Aplicar los principios de la economía y de la gestión de recursos humanos y proyectos, así como la legislación, regulación y normalización de la informática.“¡Caramba! ¡Guau! ¡Cohone!” que diría aquél. No sé si measombra más cada punto de los arriba indicados o la recurrentecoletilla “en todos los ámbitos de la Ingeniería en Informática”.En todos, insisten.Vuelvo a leer y sí son las “Competencias que los estudiantesdeben adquirir”, no los requisitos para las candidaturasdel premio Turing.Respecto al “Máster vinculado con el ejercicio de la profesión deIngeniero en Informática, el plan de estudios deberá incluir,como mínimo, los siguientes módulos” (elsubrayado es mío) “ycompetencias”:Capacidad:  Para la integración de tecnologías, aplicaciones, servicios y sistemas propios de la Ingeniería Informática, con carácter generalista, y en contextos más amplios y multidisciplinares.  Para la planificación estratégica, elaboración, dirección, coordinación, y gestión técnica y económica en los ámbitos de la ingeniería informática relacionados, entre otros, con: sistemas, aplicaciones, servicios, redes, infraestructuras o instalaciones informáticas y centros o factorías de desarrollo de software, respetando el adecuado cumplimiento de los criterios de calidad y medioambientales y en entornos de trabajo multidisciplinares.  Para la dirección de proyectos de investigación, desarrollo e innovación, en empresas y centros tecnológicos, con garantía de la seguridad para las personas y bienes, la calidad final de los productos y su homologación.  Para modelar, diseñar, definir la arquitectura, implantar, gestionar, operar, administrar y mantener aplicaciones, redes, sistemas, servicios y contenidos informáticos. 20.
 De comprender y saber aplicar el funcionamiento y organización de Internet, las tecnologías y protocolos de redes de nueva generación, los modelos de componentes, software intermediario y servicios.  Para asegurar, gestionar, auditar y certificar la calidad de los desarrollos, procesos, sistemas, servicios, aplicaciones y productos informáticos.  Para diseñar, desarrollar, gestionar y evaluar mecanismos de certificación y garantía de seguridad en el tratamiento y acceso a la información en un sistema de procesamiento local o distribuido.  Para analizar las necesidades de información que se plantean en un entorno y llevar a cabo en todas sus etapas el proceso de construcción de un sistema de información.  Para diseñar y evaluar sistemas operativos y servidores, y aplicaciones y sistemas basados en computación distribuida.  Para comprender y poder aplicar conocimientos avanzados de computación de altas prestaciones y métodos numéricos o computacionales a problemas de ingeniería.  De diseñar y desarrollar sistemas, aplicaciones y servicios informáticos en sistemas empotrados y ubicuos.  Para aplicar métodos matemáticos, estadísticos y de inteligencia artificial para modelar, diseñar y desarrollar aplicaciones, servicios, sistemas inteligentes y sistemas basados en el conocimiento.  Para utilizar y desarrollar metodologías, métodos, técnicas, programas de uso específico, normas y estándares de computación gráfica.  Para conceptualizar, diseñar, desarrollar y evaluar la interacción persona-ordenador de productos, sistemas, aplicaciones y servicios informáticos.  Para la creación y explotación de entornos virtuales, y para la creación, gestión y distribución de contenidos multimedia.No tengo adjetivos: supongo que cuando dicen máster sereferirán a esto.Uno de los puntos que me ha hecho abrir los ojos más de lonormal es el de “diseñar y evaluar sistemas operativos” por nodecir nada del de “aplicar métodos matemáticos, estadísticos yde inteligencia artificial”.Además se realizará un Proyecto fin de máster que consistirá enla “realización, presentación y defensa, una vez obtenidos todoslos créditos del plan de estudios, de un ejercicio originalrealizado individualmente ante un tribunal universitario,consistente en un proyecto integral de Ingeniería en Informáticade naturaleza profesional en el que se sinteticen lascompetencias adquiridas en las enseñanzas.”Un “proyecto integral de Ingeniería en Informática de naturalezaprofesional”, de naturaleza profesional, no académica ¡ojo!.¿Quiere eso decir que el graduando dirigirá un proyecto con sualcance, recursos y plazos o, simplemente, a lo Juan Palomohará de hombre-orquesta?Bueno, teniendo en cuenta que en su día obtuve la licenciaturaen Informática, me siento que o bien me dieron un título dela señorita Pepis o que los tiempos han cambiado mucho. 21.
Sigo leyendo y llego a las competencias que los estudiantes deIngeniería Técnica en Informática deben adquirir.Voici!Capacidad para:  Concebir, redactar, organizar, planificar, desarrollar y firmar proyectos en el ámbito de la ingeniería en informática que tengan por objeto, de acuerdo con los conocimientos adquiridos según lo establecido en el apartado 5 de este anexo, la concepción, el desarrollo o la explotación de sistemas, servicios y aplicaciones informáticas.  Dirigir las actividades objeto de los proyectos del ámbito de la informática de acuerdo con los conocimientos adquiridos según lo establecido en el apartado 5 de este anexo.  Diseñar, desarrollar, evaluar y asegurar la accesibilidad, ergonomía, usabilidad y seguridad de los sistemas, servicios y aplicaciones informáticas, así como de la información que gestionan.  Definir, evaluar y seleccionar plataformas hardware y software para el desarrollo y la ejecución de sistemas, servicios y aplicaciones informáticas, de acuerdo con los conocimientos adquiridos según lo establecido en el apartado 5 de este anexo.  Concebir, desarrollar y mantener sistemas, servicios y aplicaciones informáticas empleando los métodos de la ingeniería del software como instrumento para el aseguramiento de su calidad, de acuerdo con los conocimientos adquiridos según lo establecido en el apartado 5 de este anexo.  Concebir y desarrollar sistemas o arquitecturas informáticas centralizadas o distribuidas integrando hardware, software y redes de acuerdo con los conocimientos adquiridos según lo establecido en el apartado 5 de este anexo.  Conocer, comprender y aplicar la legislación necesaria durante el desarrollo de la profesión de Ingeniero Técnico en Informática y manejar especificaciones, reglamentos y normas de obligado cumplimiento.  Resolver problemas con iniciativa, toma de decisiones, autonomía y creatividad. Capacidad para saber comunicar y transmitir los conocimientos, habilidades y destrezas de la profesión de Ingeniero Técnico en Informática.  Para analizar y valorar el impacto social y medioambiental de las soluciones técnicas, comprendiendo la responsabilidad ética y profesional de la actividad del Ingeniero Técnico en Informática.Conocimiento:  De las materias básicas y tecnologías, que capaciten para el aprendizaje y desarrollo de nuevos métodos y tecnologías, así como las que les doten de una gran versatilidad para adaptarse a nuevas situaciones.  Y aplicación de elementos básicos de economía y de gestión de recursos humanos, organización y planificación de proyectos, así como la legislación, regulación y normalización en el ámbito de los proyectos informáticos, de acuerdo con los conocimientos adquiridos según lo establecido en el apartado 5 de este anexo.  Conocimientos para la realización de mediciones, cálculos, valoraciones, tasaciones, peritaciones, estudios, informes, planificación de tareas y otros trabajos análogos de informática, de acuerdo con los conocimientos adquiridos según lo establecido en el apartado 5 de este anexo. 22.
El citado apartado 5 dice (agarraos que hay curva) dice que lascompetencias que deben adquirirse son:  Capacidad para la resolución de los problemas matemáticos que puedan plantearse en la ingeniería.  Aptitud para aplicar los conocimientos sobre: álgebra lineal; cálculo diferencial e integral; métodos numéricos; algorítmica numérica; estadística y optimización.  Comprensión y dominio de los conceptos básicos de campos y ondas y electromagnetismo, teoría de circuitos eléctricos, circuitos electrónicos, principio físico de los semiconductores y familias lógicas, dispositivos electrónicos y fotónicos, y su aplicación para la resolución de problemas propios de la ingeniería.  Capacidad para comprender y dominar los conceptos básicos de matemática discreta, lógica, algorítmica y complejidad computacional, y su aplicación para la resolución de problemas propios de la ingeniería.  Conocimientos básicos sobre el uso y programación de los ordenadores, sistemas operativos, bases de datos y programas informáticos con aplicación en ingeniería.  Conocimiento de la estructura, organización, funcionamiento e interconexión de los sistemas informáticos, los fundamentos de su programación, y su aplicación para la resolución de problemas propios de la ingeniería.  Conocimiento adecuado del concepto de empresa, marco institucional y jurídico de la empresa. Organización y gestión de empresas.  Capacidad para diseñar, desarrollar, seleccionar y evaluar aplicaciones y sistemas informáticos, asegurando su fiabilidad, seguridad y calidad, conforme a principios éticos y a la legislación y normativa vigente.  Capacidad para planificar, concebir, desplegar y dirigir proyectos, servicios y sistemas informáticos en todos los ámbitos, liderando su puesta en marcha y su mejora continua y valorando su impacto económico y social.  Capacidad para comprender la importancia de la negociación, los hábitos de trabajo efectivos, el liderazgo y las habilidades de comunicación en todos los entornos de desarrollo de software.  Capacidad para elaborar el pliego de condiciones técnicas de una instalación informática que cumpla los estándares y normativas vigentes.  Conocimiento, administración y mantenimiento sistemas, servicios y aplicaciones informáticas.  Conocimiento y aplicación de los procedimientos algorítmicos básicos de las tecnologías informáticas para diseñar soluciones a problemas, analizando la idoneidad y complejidad de los algoritmos propuestos.  Conocimiento, diseño y utilización de forma eficiente los tipos y estructuras de datos más adecuados a la resolución de un problema.  Capacidad para analizar, diseñar, construir y mantener aplicaciones de forma robusta, segura y eficiente, eligiendo el paradigma y los lenguajes de programación más adecuados.  Capacidad de conocer, comprender y evaluar la estructura y arquitectura de los computadores, así como los componentes básicos que los conforman.  Conocimiento de las características, funcionalidades y estructura de los Sistemas Operativos y diseñar e implementar aplicaciones basadas en sus servicios.  Conocimiento y aplicación de las características, funcionalidades y estructura de los Sistemas Distribuidos, las Redes de Computadores e Internet y diseñar e implementar aplicaciones basadas en ellas. 23.
 Conocimiento y aplicación de las características, funcionalidades y estructura de las bases de datos, que permitan su adecuado uso, y el diseño y el análisis e implementación de aplicaciones basadas en ellos. Conocimiento y aplicación de las herramientas necesarias para el almacenamiento, procesamiento y acceso a los Sistemas de información, incluidos los basados en web. Conocimiento y aplicación de los principios fundamentales y técnicas básicas de la programación paralela, concurrente, distribuida y de tiempo real. Conocimiento y aplicación de los principios fundamentales y técnicas básicas de los sistemas inteligentes y su aplicación práctica. Conocimiento y aplicación de los principios, metodologías y ciclos de vida de la ingeniería de software. Capacidad para diseñar y evaluar interfaces persona computador que garanticen la accesibilidad y usabilidad a los sistemas, servicios y aplicaciones informáticas. Conocimiento de la normativa y la regulación de la informática en los ámbitos nacional, europeo e internacional. Capacidad para desarrollar, mantener y evaluar servicios y sistemas software que satisfagan todos los requisitos del usuario y se comporten de forma fiable y eficiente, sean asequibles de desarrollar y mantener y cumplan normas de calidad, aplicando las teorías, principios, métodos y prácticas de la Ingeniería del Software. Capacidad para valorar las necesidades del cliente y especificar los requisitos software para satisfacer estas necesidades, reconciliando objetivos en conflicto mediante la búsqueda de compromisos aceptables dentro de las limitaciones derivadas del coste, del tiempo, de la existencia de sistemas ya desarrollados y de las propias organizaciones. Capacidad de dar solución a problemas de integración en función de las estrategias, estándares y tecnologías disponibles. Capacidad de identificar y analizar problemas y diseñar, desarrollar, implementar, verificar y documentar soluciones software sobre la base de un conocimiento adecuado de las teorías, modelos y técnicas actuales. Capacidad de identificar, evaluar y gestionar los riesgos potenciales asociados que pudieran presentarse. Capacidad para diseñar soluciones apropiadas en uno o más dominios de aplicación utilizando métodos de la ingeniería del software que integren aspectos éticos, sociales, legales y económicos. Capacidad de diseñar y construir sistemas digitales, incluyendo computadores, sistemas basados en microprocesador y sistemas de comunicaciones. Capacidad de desarrollar procesadores específicos y sistemas empotrados, así como desarrollar y optimizar el software de dichos sistemas. Capacidad de analizar y evaluar arquitecturas de computadores, incluyendo plataformas paralelas y distribuidas, así como desarrollar y optimizar software de para las mismas. Capacidad de diseñar e implementar software de sistema y de comunicaciones. Capacidad de analizar, evaluar y seleccionar las plataformas hardware y software más adecuadas para el soporte de aplicaciones empotradas y de tiempo real. Capacidad para comprender, aplicar y gestionar la garantía y seguridad de los sistemas informáticos. Capacidad para analizar, evaluar, seleccionar y configurar plataformas hardware para el desarrollo y ejecución de 24.
aplicaciones y servicios informáticos. Capacidad para diseñar, desplegar, administrar y gestionar redes de computadores. Capacidad para tener un conocimiento profundo de los principios fundamentales y modelos de la computación y saberlos aplicar para interpretar, seleccionar, valorar, modelar, y crear nuevos conceptos, teorías, usos y desarrollos tecnológicos relacionados con la informática. Capacidad para conocer los fundamentos teóricos de los lenguajes de programación y las técnicas de procesamiento léxico, sintáctico y semántico asociadas, y saber aplicarlas para la creación, diseño y procesamiento de lenguajes. Capacidad para evaluar la complejidad computacional de un problema, conocer estrategias algorítmicas que puedan conducir a su resolución y recomendar, desarrollar e implementar aquella que garantice el mejor rendimiento de acuerdo con los requisitos establecidos. Capacidad para conocer los fundamentos, paradigmas y técnicas propias de los sistemas inteligentes y analizar, diseñar y construir sistemas, servicios y aplicaciones informáticas que utilicen dichas técnicas en cualquier ámbito de aplicación. Capacidad para adquirir, obtener, formalizar y representar el conocimiento humano en una forma computable para la resolución de problemas mediante un sistema informático en cualquier ámbito de aplicación, particularmente los relacionados con aspectos de computación, percepción y actuación en ambientes o entornos inteligentes. Capacidad para desarrollar y evaluar sistemas interactivos y de presentación de información compleja y su aplicación a la resolución de problemas de diseño de interacción persona computadora. Capacidad para conocer y desarrollar técnicas de aprendizaje computacional y diseñar e implementar aplicaciones y sistemas que las utilicen, incluyendo las dedicadas a extracción automática de información y conocimiento a partir de grandes volúmenes de datos. Capacidad de integrar soluciones de Tecnologías de la Información y las Comunicaciones y procesos empresariales para satisfacer las necesidades de información de las organizaciones, permitiéndoles alcanzar sus objetivos de forma efectiva y eficiente, dándoles así ventajas competitivas. Capacidad para determinar los requisitos de los sistemas de información y comunicación de una organización atendiendo a aspectos de seguridad y cumplimiento de la normativa y la legislación vigente. Capacidad para participar activamente en la especificación, diseño, implementación y mantenimiento de los sistemas de información y comunicación. Capacidad para comprender y aplicar los principios y prácticas de las organizaciones, de forma que puedan ejercer como enlace entre las comunidades técnica y de gestión de una organización y participar activamente en la formación de los usuarios. Capacidad para comprender y aplicar los principios de la evaluación de riesgos y aplicarlos correctamente en la elaboración y ejecución de planes de actuación. Capacidad para comprender y aplicar los principios y las técnicas de gestión de la calidad y de la innovación tecnológica en las organizaciones. Capacidad para comprender el entorno de una organización y sus necesidades en el ámbito de las tecnologías de la información y las comunicaciones. Capacidad para seleccionar, diseñar, desplegar, integrar, evaluar, construir, gestionar, explotar y mantener las 25.
tecnologías de hardware, software y redes, dentro de los parámetros de coste y calidad adecuados.  Capacidad para emplear metodologías centradas en el usuario y la organización para el desarrollo, evaluación y gestión de aplicaciones y sistemas basados en tecnologías de la información que aseguren la accesibilidad, ergonomía y usabilidad de los sistemas.  Capacidad para seleccionar, diseñar, desplegar, integrar y gestionar redes e infraestructuras de comunicaciones en una organización.  Capacidad para seleccionar, desplegar, integrar y gestionar sistemas de información que satisfagan las necesidades de la organización, con los criterios de coste y calidad identificados.  Capacidad de concebir sistemas, aplicaciones y servicios basados en tecnologías de red, incluyendo Internet, web, comercio electrónico, multimedia, servicios interactivos y computación móvil.  Capacidad para comprender, aplicar y gestionar la garantía y seguridad de los sistemas informáticos. No tengo palabras. Es más: no siento las piernas. Como colofón se realizará un Proyecto de Fin de Grado, consistente en un “Ejercicio original a realizar individualmente y presentar y defender ante un tribunal universitario, consistente en un proyecto en el ámbito de las tecnologías específicas de la Ingeniería en Informática de naturaleza profesional en el que se sinteticen e integren las competencias adquiridas en las enseñanzas.” A lo largo de este artículo el tono ha sido irónico, basado en este razonamiento (tengo este defecto): 1. Las cosas se escriben tras una reflexión. 2. Lo expuesto en la resolución arriba descrita refleja las capacidades y conocimientos que deben tener los ingenieros informáticos (técnicos y/o superiores) o quienes cursan un máster. 3. Dichas capacidades y conocimientos me resultan excesivos. Creo que sólo se adquirirían tras complementar los años de estudio con años de experiencia laboral. 4. Luego: o esta resolución es un desiderátum o quiere establecer un límite o está fuera de toda realidad. 5. Corolario: en caso de que un profesional informático posea todas o algunas de estas habilidades podríamos aplicar eso de “Y aún dicen que el pescado es caro.” Si quieres enviar algún comentario o sugerir temas a tratar en otros artículos, escribe a: curtasun[simboloArroba]cein.esCategorías GeneralTema VariosAutor Carlos UrtasunMes OctubreAño 2009 26.
Boletín 10Título Personalización del código generado en la Ingeniería inversa con JPA y MyEclipse.Texto Estrategia de la ingeniería inversa A la hora de generar código a partir de las tablas creadas en nuestra base de datos, la estrategia por defecto usa reglas básicas para mapear los nombres JDBC con los nombres java. También, mapea los tipos JDBC con los tipos java. En el wizard de MyEclipse vemos que tenemos varias opciones para tener bajo nuestro control la generación del código.  Reveng.xml, el archivo de filtro para la ingeniería inversa.  Personalizar la estrategia de ingeniería inversa.  Templates, plantillas para la generación de pojos. REVENG.XML El archivo de filtro para la ingeniería inversa, es un archivo XML donde podemos controlar la generación del código de manera precisa. 27.
Desde este archivo se puede controlar el mapeo de tipos JDBC atipos java,excluir tablas y definir como debe ser la ingeniería inversa sobreuna tabla en concreto.Mapeo de tipos:mapeamos los tipos JDBC con los tipos java <type-mapping> <sql-type jdbc-type="nombre de java.sql.Types" length="valor numérico " precision="valor numérico " scale="valor numérico" not-null="true|false" hibernate-type="number del tipo hibernate" /> </type-mapping> 28.
Filtrado de tablas:mediante el atributo exclude, decidimos excluir la tabla de laingeniería inversa. <table-filter match-catalog="nombre del catálogo" match-schema="nombre del esquema" match-name="nombre de la tabla" exclude="true|false" package="package.name" />Configuración de una tabla específica: <table catalog="nombre del catálogo" schema="nombre del esquema" name="nombre de la tabla" class="nombre de la clase" > <primary-key.../> <column.../> <foreign-key.../> </table> El <primary-key> nos permite definir la clave primaria para tablas que no la tienen en la base de datos. Con <column> es posible definir explícitamente el nombre de la propiedad. También nos permite definir su tipo java y si queremos excluirla del proceso. El <foreign-key> tiene dos propósitos. Uno de ellos es definir claves externas en bases de datos que no las soportan,y segundo, te permite definir el nombre de la propiedad resultante (many-to-one, one-to-one, one-to-many). REVERSE ENGINEERING STRATEGY Podemos crear nuestra propia estrategia. Para ello debemoscrearnos una clase queextienda DelegatingReverseEngineeringStrategy. En ellamodificaremos los métodos necesarios o crearemos nuestrospropios métodos. Podemos sobrescribir elmétodo columnToPropertyName(TableIdentifier table, Stringcolumn) para nombrar las propiedades.(Importante: Con Oracle los nombres de columnas llegan enmayúsculas)Podemos identificar prefijos que puedan tener nuestras columnas,poner mayúsculas o minúsculas,… En el siguiente ejemplo queremos identificar posibles prefijos 29.
de las columnas, personalizarlos y poner mayúscula a la siguiente.Así, de una columna con nombre TXALMNOMBRE obtenemostxALMNombre.private static String[] aTipos = {“iId”,”i”,”tx”,”dt”};private static String[] aPrefijos = {“ALM”,”CMD”,”FA”,”GNR”};public String columnToPropertyName(TableIdentifier table,String column) { int i = 0; boolean capitalized = false; StringBuffer java = new StringBuffer(column.length()); while(i<column.length()){ String subSqlName = column.substring(i); //Tipos for(int j = 0; j<aTipos.length; j++){ if(subSqlName.startsWith(aTipos[j].toUpperCas e()) && i==0){ java.append(aTipos[j]); i+=aTipos[j].length(); capitalized = true; } } //Prefijos subSqlName = column.substring(i); for(int j = 0; j<aPrefijos.length; j++){ if(subSqlName.startsWith(aPrefijos[j])){ java.append(aPrefijos[j]); i+=aPrefijos[j].length(); capitalized = true; } 30.
} if(capitalized){ java.append(Character.toU pperCase(column.charAt(i))); capitalized = false; }else{ java.append(Character.toL owerCase(column.charAt(i))); } i++; } return java.toString();}El método columnToHibernateTypeName nos permite mapear tiposJDBC con los tipos java de distinto modo. Los que no nos interesenlos dejamos en mano de laclase DelegatingReverseEngineeringStrategy. Por defecto elmapeo es el siguiente: CHAR -->String VARCHAR --> String LONGVARCHAR --> String NUMERIC --> java.math.BigDecimal DECIMAL --> java.math.BigDecimal BIT --> boolean BOOLEAN --> boolean TINYINT --> byte SMALLINT --> short 31.
INTEGER --> int BIGINT --> long REAL --> float FLOAT --> double DOUBLE --> double BINARY --> byte[] VARBINARY --> byte[] LONGVARBINARY --> byte[] DATE --> java.sql.Date TIME --> java.sql.Time TIMESTAMP --> java.sql.Timestamp CLOB --> Clob BLOB --> Blob ARRAY --> Array Si queremos cambiar el tipo java, basta con crearnos elmétodo retornando los tipos deseados. public String columnToHibernateTypeName(TableIdentifiertable, StringcolumnName, int sqlType, int length, int precision, int scale, boolean nullable, boolean generatedIdentifier){ if(sqlType==Types.TIMESTAMP) { return “java.util.Date”; }else if(sqlType==Types.NUMERIC) { return “int”; }else if(sqlType==Types.CHAR) { return “java.lang.Character”; 32.
}else if(sqlType==Types.DECIMAL) { return “int”; }else{ returnsuper.columnToHibernateTypeName(table, columnName, sqlType, length, precision, scale,nullable, generatedIdentifier); } } TEMPLATES 33.
Puedes personalizar el código generado para los pojos yDAOs con las plantillas Velocity (o FreeMarker). En el wizardmarcaremos Use custom templates y navegaremos hasta la carpetade donde se encuentren nuestras plantillas. En las plantillas POJO podremos controlar los constructores,setters y getters. En las plantillas DAO podremos controlar los finders, lasacciones de salvar, borrar y actualización de modelos. 34.
ENLACES DE INTERÉS http://docs.jboss.org/tools/3.0.1.GA/en/hibernatetools/html_single /index.html#reverseengineering http://www.docjar.com/docs/api/org/hibernate/cfg/reveng/Delegat ingReverseEngineeringStrategy.html http://db.apache.org/ojb/docu/guides/jdbc-types.html http://velocity.apache.org/Categ CES OpenSouce/JavaoríasTema DesarrolloAutor Edurne Berastegi ZabalzaMes OctubreAño 2009Boletí 10nTítulo Pinitos con Windows Communication FoundationTexto Windows Communication Foundation (WCF) es un arma poderosa, un framework para el desarrollo de aplicaciones con unas 35.
capacidades de comunicación enormes. Y lo tenemos disponible ennuestro “kit para programar” alias .NET Framework desde la versión3.0 Una de esas capacidades y quizá la menos conocida es lacomunicación Peer-to-peer o P2P, típicamente asociada a losprogramas de descarga.El motivo de mi interés en este canal de comunicación esque Microsoft incorpora en los S.O. Windows 2008R2 y enWindows7 un uso profesional de las comunicaciones P2P enlo que denomina BranchCache: un modo de compartir losarchivos de una empresa entre PCs mediante tecnologíasP2P de modo que se reduce sensiblemente el ancho debanda requerido así como los tiempos de transferencia,especialmente en empresas con oficinas distribuidas (novoy a entrar en el detalle de esta solución, hay bastantemás info disponible en este enlace).Viendo que WCF tiene este potencial y con ganas de volvera pringarme con el código, vamos a ver este mes unejemplo de uso de WCF con conectividad P2P paradesarrollar un cliente de Chat muy simple. Al tajo…Aplicación simple (simplísima) WCFLo primero que vamos a hacer es implementar unaaplicación Cliente-Servidor con WCF, será muy sencilla porlo que usaremos sólo aplicaciones de modo consola.Abrimos VS2008 (mañana paso a 2010 :) en modoAdministrador, ya que de otro modo VS no podráregistrar nuestros servicios en la máquina y la depuraciónfallará. Creamos un nuevo proyecto de tipo Aplicación deConsola que yo he denominado BaseWCF. Una vezgenerado, agregamos una referencia a“System.ServiceModel” que es la librería que nos facilita elacceso a la funcionalidad de WCF que nos interesa: botónderecho sobre el proyecto, “Agregar referencia…” y laseleccionamos.Lo primero que vamos a definir es nuestro Interfaz decomunicación, que será la clase que se encargará de recibirlas peticiones y emitir las respuestas. Para eso, estarácompuesta de unos métodos que en WCF se denominanOperaciones. En nuestro caso sólo definimos una operaciónque implementaremos más adelante. VisualStudio nosfacilita una plantilla para la definición de interfaces quedebemos emplear. Para eso, hacemos nuevamente botón 36.
derecho sobre el proyecto y seleccionamos“Agregar”,”Nuevo elemento…” y elegimos la plantilla“Interfaz”. Como nombre le asigno “SaludoContrato” yaque este interfaz va a contener los contratos públicos denuestro servicio y sus operaciones. El código es elsiguiente: 1: using System; 2: using System.Collections.Generic; 3: using System.ServiceModel; 4: using System.Text; 5: 6: namespace BaseWCF 7: { 8: [ServiceContract] 9: public interface IHola 10: { 11: [OperationContract] 12: string Comunica(); 13: } 14: }Hemos definido el interfaz IHola con una única operacióndenominada Comunica que no acepta argumentos y nosdevuelve una cadena. Lo siguiente es implementarlo, paralo que en nuestro archivo Program.cs incluiremos elsiguiente código: 1: using System; 2: using System.ServiceModel; 3: 4: namespace BaseWCF 5: { 6: public class Hola: IHola 7: { 8: public string Comunica() 9: { 10: return "Egun on guztiei!"; 11: } 12: } 13: 14: class Program 15: { 16: static void Main(string[] args) 17: { 18: ServiceHost sh = new ServiceHost(typeof(Hola), 19: new Uri("http://localhost:4123/BaseWCF")); 20: sh.Open(); 21: Console.WriteLine("Entzuten..."); 22: Console.WriteLine("<Enter> pulsatu bukatzeko"); 23: Console.ReadLine(); 24: 25: sh.Close(); //close the service 26: } 27: } 28: }Aquí tenemos dos clases diferenciadas. Por un lado, laimplementación de nuestra operación, que simplementedevuelve un mensaje. Esta implementación la podíamoshaber hecho también en el fichero donde definimos laInterfaz, pero de esta manera separamos laimplementación de la definición, una manera sencilla deseparar la lógica del desarrollo y que hace más sencillo la 37.
gestión del código.La siguiente clase es la implementación de nuestro Serviciodonde creamos un nuevo ServiceHost de WCF que invocaráun objeto de clase Hola (este será el que escucha yresponde a las peticiones, tal y como hemos dicho) en unadirección en este caso de nuestra máquina (para poderregistrar esta URI debemos haber arrancando VS con unusuario con privilegios de Administrador de la máquina). Acontinuación, dejamos el programa en ejecución esperandouna tecla, para no cerrar antes de que algún clienteinvoque el servicio.Lo que nos queda para completar este servicio es definir losparámetros de configuración necesarios para su ejecución.Esto lo haremos con un archivo App.config que añadimos alproyecto: botón derecho, “Agregar”, “Nuevo elemento…” yelegimos la plantilla de “Archivo de configuración de laaplicación”. Este archivo contendrá lo siguiente: 1: <?xml version="1.0" encoding="utf-8" ?> 2: <configuration> 3: <system.serviceModel> 4: <services> 5: <service behaviorConfiguration="holaServiceBehavior"name="BaseWCF.Hola"> 6: <endpoint address="holaEndpoint" binding="wsHttpBinding"bindingConfiguration="holaBinding" 7: contract="BaseWCF.IHola" /> 8: </service> 9: </services> 10: <bindings> 11: <wsHttpBinding> 12: <binding name="holaBinding"> 13: <security mode="Message"> 14: <message /> 15: </security> 16: </binding> 17: </wsHttpBinding> 18: </bindings> 19: <behaviors> 20: <serviceBehaviors> 21: <behavior name="holaServiceBehavior"> 22: <serviceMetadata httpGetEnabled="true" /> 23: </behavior> 24: </serviceBehaviors> 25: </behaviors> 26: </system.serviceModel> 27: </configuration>Lo que hemos definido son tres elementos: servicios que seha de corresponder con las operaciones de nuestro interfaz,bindings o enlaces de comunicación y behaviors oespecificidades de la comunicación de la información.  Servicio: definimos un servicio de nombre BaseWCF.Hola que tiene un endpoint (punto de conexión) llamado holaEndpoint y que asociamos al contrato BaseWCF.IHola (es decir, al servicio o interfaz que hemos creado antes). 38.
También se asocia al binding wsHttpBinding y usará de este su configuración holaBinding. Por último el servicio ejecutará los behaviors definidos en holaServiceBehavior.  Bindings: nada reseñable, usa seguridad en el mensaje.  Behaviors: activa httpGet como petición.A continuación implementaremos el cliente que llamará aese servicio. Vamos a añadir un nuevo proyecto a nuestrasolución, “Archivo”, “Agregar”, “Nuevo proyecto…”, yseleccionamos una aplicación de consola a la que doy elnombre de “Cliente” (vale, no estoy muy creativo :). A esteproyecto por simplificar le copiamos el mismo contrato queal servidor (arrastrar y soltar SaludoContrato.cs sobre elproyecto Cliente) y en su código Program.csintroduciremos: 1: using System; 2: using System.ServiceModel; 3: 4: namespace Client 5: { 6: class Program 7: { 8: static void Main(string[] args) 9: { 10: Console.WriteLine("Zerbitzu prestatua bada, edozein teklapultsatu"); 11: Console.ReadKey(); 12: Console.WriteLine(); 13: 14: ChannelFactory<BaseWCF.IHola> cnf = 15: new ChannelFactory<BaseWCF.IHola>("holaClient"); 16: BaseWCF.IHola chn = cnf.CreateChannel(); 17: Console.WriteLine(chn.Comunica()); 18: 19: //Clean up 20: cnf.Close(); 21: Console.WriteLine("<Enter> pulsatu bukatzeko"); 22: Console.ReadLine(); 23: } 24: } 25: }Lo primero que hacemos es esperar… a que el servicio estélisto. El motivo es que no sabemos si lo está o no y aunquepodíamos hacer pooling o similar hasta que lo esté lo mássencillo es esperar “manualmente”. Una vez que sabemosque ya está listo, pasamos a crear un canal por el quecomunicarnos. Esto con WCF es sencillo, creamos unChannelFactory de tipo BaseWCF.IHola (que tenemosdefinido en el contrato) al que le pasamos su endpoint(punto de comunicación) como parámetro, que definiremosen seguida. A continuación creamos un canal desde esaChannelFactory y en este canal ya podemos invocar las 39.
operaciones definidas en el contrato, en este casoComunica. Lo que haremos es mostrar el mensaje que nosdevuelve por pantalla, para ver el resultado. Finalmente,cerraremos todo de manera correcta.Nos queda pues definir los parámetros de nuestraaplicación (endpoint y bindings), mediante un ficheroApp.config. Boton derecho sobre “Cliente”, “Agregar”,“Nuevo elemento…”, “Archivo de configuración de laaplicación”, y en este tendremos que incluir lo siguiente: 1: <?xml version="1.0" encoding="utf-8" ?> 2: <configuration> 3: <system.serviceModel> 4: <client> 5: <endpoint 6: name="holaClient" 7: address="http://localhost:4123/BaseWCF/holaEndpoint" 8: contract="BaseWCF.IHola" 9: binding="wsHttpBinding" 10: bindingConfiguration="holaBinding"> 11: </endpoint> 12: </client> 13: <bindings> 14: <wsHttpBinding> 15: <binding name="holaBinding"> 16: <security mode="Message"> 17: <message /> 18: </security> 19: </binding> 20: </wsHttpBinding> 21: </bindings> 22: </system.serviceModel> 23: </configuration>Como hemos dicho, estamos definiendo el Cliente y suBinding. Como vemos el binding es exactamente igual queen el caso del servidor, lógico para que se comuniquen, yen cuanto al cliente definimos su endpoint quedenominamos holaClient (que hemos pasado comoparámetro al crear el canal), con el binding wsHttpBinding ysu configuración holaBinding, el contrato BaseWCF.IHola yla dirección con la que se va a comunicar será la delserviciohttp://localhost:4123/BaseWCF/holaEndpoint”.Es decir, el cliente es una aplicación que usa WCF paradefinir un “punto” por el que se comunicará y con que“punto” del servidor se va a comunicar. Luego, en el códigoinvocaremos una u otra operación de ese servidor segúnqueramos.Bien, ¡ya casi estamos! Sólo nos queda un “pero”, unapequeña trampa pero que si no realizamos hará que siejecutamos ahora nuestra aplicación VS nos devuelva unerror TCP 100061. Y es que si bien VS si lo ejecutamos enmodo Administrador es capaz de registrar los servicios ennuestra máquina, no puede autorizar la escucha en un 40.
puerto específico y es algo que tenemos que hacernosotros. Lo que queremos es que nuestra máquinaescuche en el puerto 4123 (que hemos usado en el código),para lo que hacemos uso del comando netsh desde unintérprete de comandos que habremos lanzado conprivilegios de Administrador (botón derecho…). El comandoes este:netsh http add iplisten ipaddress=127.0.0.1:4123Hecho esto, para ejecutar la aplicación tenemos que indicara VS que se trata de una solución multiproyecto y ordenarsu ejecución correctamente. Para eso, pulsamos con elbotón derecho del ratón sobre el nombre de la solución yseleccionamos sus Propiedades. En la sección de Proyectode inicio marcamos “Proyectos de inicio mútliples”, nosaseguramos de que nuestros prouyectos Servicio y Clientetienen como Acción “Iniciar” y Servicio está por encima deCliente, como en esta pantalla.Ahora ya podemos ejecutar la aplicación con esteresultado: 41.
Servidor escuchando Cliente con ejecución correcta. Hasta aquí hemos usado WCF para implementar una comunicación cliente-servidor tradicional. Al final se nos ha echado el tiempo encima, el siguiente paso es emplear P2P, tal y como comentaba al principio, pero tendrá que ser en un artículo posterior. Nos vemos!Categor CES MicrosoftíasTema DesarrolloAutor Rafael FloresMes OctubreAño 2009Boletín 10 Recommended

References: Resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución