<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog tecnológico de Entel IT Consulting, SA</title>
	<atom:link href="http://tecnoblog.entel.es/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://tecnoblog.entel.es</link>
	<description></description>
	<lastBuildDate>Fri, 15 May 2009 08:50:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Introducción a Apache Tapestry</title>
		<link>http://tecnoblog.entel.es/?p=81</link>
		<comments>http://tecnoblog.entel.es/?p=81#comments</comments>
		<pubDate>Tue, 12 May 2009 09:35:54 +0000</pubDate>
		<dc:creator>Pablo Ruiz Múzquiz</dc:creator>
				<category><![CDATA[FOSS]]></category>

		<guid isPermaLink="false">http://tecnoblog.entel.es/?p=81</guid>
		<description><![CDATA[Con el enorme número de frameworks que existen para desarrollar aplicaciones web en Java elegir el framework adecuado para un desarrollo o para varios desarrollos como estándar se puede convertir en una tarea que puede abrumar por la cantidad y diferentes características de cada uno de ellos. Personalmente, he tenido la oportunidad de desarrollar varias [...]]]></description>
			<content:encoded><![CDATA[<p>Con el enorme número de frameworks que existen para desarrollar aplicaciones web en Java elegir el framework adecuado para un desarrollo o para varios desarrollos como estándar se puede convertir en una tarea que puede abrumar por la cantidad y diferentes características de cada uno de ellos. Personalmente, he tenido la oportunidad de desarrollar varias aplicaciones mediante el framework Apache Tapestry y mi experiencia personal ha sido *mucho más* satisfactoria comparada con otros conocidos frameworks o tecnologías como JSP/Struts y Java Server Faces. Esta primera parte introducción a Tapestry, traducción en su mayor parte de la página del proyecto, trata de definir sus características y principios más generales.</p>
<p><span id="more-81"></span><br />
<strong>Introducción</strong></p>
<p>Tapestry es un framework open source para la construcción de aplicaciones web en Java dinámicas, robustas y altamente escalables. Tapestry complementa y se basa en la API estandar de Java Servlet, y por tanto funciona en cualquier contenedor de servlets o servidor de aplicaciones.</p>
<p>Tapestry divide una aplicación web en un conjunto de páginas, construidas a su vez de componentes [3]. Esta parte proporciona una estructura consistente, permitiendo al framework Tapestry asumir la responsabilidad de actividades clave como la construcción y servicio de URL, almacenamiento persistente en el cliente o en el servidor, validación de datos, localización/internacionalización e informes de errores. Desarrollar aplicaciones con Tapestry engloba crear plantillas HTML usando simplemente HTML plano, y combinando esas plantillas con pequeñas cantidades de código Java (opcional) usando ficheros descriptores XML (NT: desaparecen en Tapestry 5 y se sustituyen por anotaciones). En Tapestry, creas tu aplicación en términos de objetos, además los métodos y propiedades de esos objetos &#8211; y específicamente no en términos de URL y parámetros. Tapestry proporcionan un desarrollo orientado a objetos verdadero a las aplicaciones web Java.</p>
<p>Tapestry está específicamente diseñado para crear nuevos componentes muy fácilmente, ya que esta es una rutina habitual en el desarrollo de aplicaciones. La distribución base incluye 50+ componentes, desde simples componentes que sólo generan salida hasta complejas tablas de datos y árboles de navegación.</p>
<p>La arquitectura de Tapestry permite escalar desde pequeñas aplicaciones hasta aplicaciones masivas formadas por cientos de páginas individuales, desarrolladas por un amplio y diverso equipo. Tapestry se integra fácilmente con cualquier tipo de back-end, incluyendo J2EE, HiveMind y Spring [4].</p>
<p><strong>Principios</strong></p>
<p>Tapestry está organizado alrededor de cuatro principios:</p>
<ol>
<li>Simplicidad: las aplicaciones web no debería ser una ciencia de construcción de cohetes!.</li>
<li>Consistencia: lo que funciona en páginas debería funcionar en componentes. Lo que funciona en pequeñas aplicaciones debería funcionar en aplicaciones grandes. Diferentes desarrolladores deberían encontrar soluciones similares a problemas similares.</li>
<li>Eficiencia: las aplicaciones deben tener un alto rendimiento y escalabilidad.</li>
<li>Feedback: cuando las cosas van mal, el framework no debería abandonarnos; en realidad, debería proporcionar diagnósticos útiles. (NT: gran diferencia con Java Server Faces).</li>
</ol>
<p>Los anteriores cuatro principios guían al meta-principio: La solución más simple debería ser la solución correcta.</p>
<p>Hemos encontrado (NT: los desarrolladores de Tapestry) que la aproximación al desarrollo de aplicaciones web mediante componentes es la mejor forma de materializar estos principios. Estructurar el framework y una hipotetica aplicación alrededor de componentes hace posible mover todo el código de la aburrida fontanería de dicha aplicación al framework. Como resultado escribes menos código, en ocasiones código más simple, algunas veces ni siquiera escribes código.</p>
<p>Es algo más de lo que puedes hacer con Tapestry&#8230; es también como lo haces! Tapestry es un entorno enormemente productivo. Los desarrolladores Java lo aman porque hacen cambios en el código Java y lo ven inmediatamente&#8230; sin redespliegues, sin reinicios!, en tiempo real (NT: esta característica está en Tapestry 5 [5]) Y es increiblemente rápido en arrancar (incluso cuando los ficheros cambian). Los diseñadores lo veneran porque las plantillas son muy parecidas a HTML ordinario, sin toda la confusión que se ve en los Java Server Pages. Los jefes de proyecto también lo tienen idealizado, porque hace fácil que equipos grandes de desarrolladores trabajen juntos y conozcan que las características importantes (incluyendo la localización) las proporciona el framework. Una vez que trabajas con Tapestry existe retorno</p>
<p>Referencia:</p>
<ol>
<li>http://java-source.net/open-source/web-frameworks</li>
<li>http://tapestry.apache.org/</li>
<li>http://tapestry.apache.org/tapestry5/tapestry-core/ref/</li>
<li>http://www.springsource.org/</li>
<li>http://tapestry.apache.org/tapestry5/</li>
<li>http://www.infoq.com/articles/tapestry5-intro</li>
</ol>
<p>* NT: Nota traductor</p>
<p>A continuación se muestran un poco más en detalle, algunas características que hacen de Tapestry una opción muy a tener en cuenta en la elección del framework de desarrollo para la capa de presentación de una aplicación web Java.</p>
<p>Explicar todas las características y en profundidad que ofrece Tapestry sería demasiado extenso, por lo que teniendo en cuenta que además de las indicadas en este artículo seguro que hay otras que pueden resultar interesantes y que se pueden consultar en mayor profundidad en los enlaces de referencia y en la documentacion del propio proyecto.</p>
<p>Plantillas de páginas y componentes</p>
<p>Una de las diferencias de Tapestry respecto a otros frameworks es que utiliza su propio sistema de plantillas en vez de Java Server Pages como es el caso de Struts. Las plantillas de Tapestry están diseñadas para ser ficheros (X)HTML válidos en las que las referencias a los componentes se ocultan en atributos especiales de forma poco intrusiva.</p>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5.1/guide/templates.html</p>
<p>http://tapestry.apache.org/tapestry4.1/usersguide/template.html</p>
<p><strong>Cambios en caliente</strong></p>
<p>En Tapestry 5 los cambios en los componentes (incluso en las clases Java) se cogen en &#8220;caliente&#8221; sin necesidad de hacer redespliegues ni reinicios. Como resultado se obtiene una mayor productividad en el desarrollo (estas características solo están disponibles para los componentes de Tapestry).</p>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5.1/guide/reload.html</p>
<p><strong>Crear componentes</strong></p>
<p>En Tapestry 5 los componentes son aún más sencillos que en Tapestry 4. No tienen que extender de ninguna clase base, no son abstractos y no hay un fichero XML que los describa, esto último se sustituye por medio de anotaciones.</p>
<p>El código de un componente de Tapestry que simplemente genere un texto puede ser tan sencillo como:</p>
<blockquote><p>package com.entelibai.tapestry5.component;</p>
<p>import org.apache.tapestry5.MarkupWriter;<br />
import org.apache.tapestry5.annotations.BeginRender;</p>
<p>public class HelloWorld {<br />
@BeginRender<br />
void renderMessage(MarkupWriter writer) {<br />
writer.write(&#8220;Hola mundo !!!&#8221;);<br />
}<br />
}</p></blockquote>
<p>Y su uso:</p>
<blockquote><p>&lt;span t:type=&#8221;HelloWorld&#8221;/&gt;&lt;/span&gt;</p></blockquote>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5.1/guide/component-classes.html</p>
<p>http://tapestry.apache.org/tapestry5.1/guide/event.html</p>
<p><strong>Librerias de componentes</strong></p>
<p>Cada aplicación en Tapestry incluye al menos una serie de componentes personalizados específicos de esa aplicación. La parte que resulta tan interesante de Tapestry es lo sencillo y util que es empaquetar esos componentes para ser reutilizados en varias aplicaciones&#8230; y el que las aplicaciones que usen una librería de componentes no necesita ninguna configuración especial. Una librería consiste en un conjunto de componentes pero además una librería puede definir nuevos servicios que utilicen los componentes o configurar otros servicios presentes en Tapestry. Finalmente, los componentes son empaquetados en un archivo jar junto con las imagenes, hojas de estilo y librerias de javascript que necesiten proporcionar al navegador web.</p>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5/cookbook/lib.html</p>
<p><strong>Lenguaje de expresiones</strong></p>
<p>Tapestry tiene un potente lenguage de expresiones que permite asignar valores a los parámetros de los componentes. La expresiones están precedidas por un prefijo que indica como se ha de interpretar la expresión a continuación del prefijo. Mediante estas expresiones los componentes pueden acceder de forma sencilla en la plantilla (X)HTML del componente a assets (css, imagenes, &#8230;), referencias a otros componentes, mensajes localizados, propiedades del componente, &#8230;. Una de la diferencias respecto a otros lenguages de expresiones es que en Tapestry no están limitadas a las propiedades que sigen la espeficación de los JavaBeans, esto es interesante ya que no todas las clases Java siguen esta norma, como por ejemplo la propiedad size() de la clases que implementan la interfaz java.util.List.</p>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5/guide/parameters.html</p>
<p><strong>Navegación</strong></p>
<p>En esencia, una aplicación Tapestry es un conjunto de páginas relacionadas trabajando juntas. Una petición tendrá como destino una única página. Las peticiones pueden venir en dos formas:</p>
<ul>
<li>Eventos de componentes que tienen como objetivo un componente específico de una página específica, lanzando un evento en ese componente.</li>
<li>Peticiones para mostrar una página especifica, generar el etiquetado HTML de esa página y enviarlo al cliente.Esta dicotomía entre eventos de componentes y peticiones para mostrar páginas es nueva en Tapestry 5. Está basada en las ideas de la especificación de los Portlets y permite aliviar una serie de problemas presentes en aplicaciones web tradicionales como el botón atrás o el botón refrescar de los navegadores.</li>
</ul>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5/guide/pagenav.html</p>
<p><strong>Internacionalización/Localización</strong></p>
<p>La localización de las plantillas en Tapestry no sólo hace referencia a los mensajes de texto sino que se pueden tener dos plantillas totalmente diferentes e imágenes dependiendo del idioma del usuario.</p>
<p>En Tapestry los catálogos de mensajes de localización pueden ser a nivel de aplicación y/o a nivel de componente proporcinando una gran flexibilidad.</p>
<p>Los cambios en caliente también se aplican a los catálogos de mensajes.</p>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5.1/guide/localization.html</p>
<p><strong>Informe de errores</strong></p>
<p>Una de las mejores características es el informe de error que se genera en caso de que algo vaya mal. El nivel de detalle proporcionado es amplio y muy útil, lo que permite identificar de una forma más sencilla la causa del error. En el informe se incluye la linea de la plantilla donde se ha producido el error asi como la traza de la excepción. Por supuesto, este informe de error puede ser redefinido para que en un entorno de producción se muestre de otra forma más util para el usuario final.</p>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5.1/cookbook/exceptions.html</p>
<p><strong>AJAX/JSON</strong></p>
<p>Tapestry proporcina un sofisticado soporte de Ajax y Javascript basado en las librerías Prototype y Scriptaculous, estas librerías están incluidas dentro del mismo framework.</p>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5.1/guide/ajax.html</p>
<p><strong>Valicación de formularios</strong></p>
<p>Una de las cosas que comparten todas las aplicaciones web es la necesidad de validar la información introducida por el usuario. Tapestry proporciona un excelente soporte para realizar la validación de forma declarativa, lo que significa que simplemente se le indica que validaciones aplicar a que campos. Tapestry no sólo es capaz de presentar los errores al usuario sino también de decorar los campos y etiquetas que contienen errores.</p>
<p>Otra de las necesidades de todas las aplicaciones web es la de convertir los valores del servidor a cadenas de texto en la parte cliente y viceversa, de esto se encargan las clases que implementan la interface Translator.</p>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5.1/guide/validation.html</p>
<p>http://tapestry.apache.org/tapestry5.1/apidocs/org/apache/tapestry5/Validator.html</p>
<p>http://tapestry.apache.org/tapestry5.1/apidocs/org/apache/tapestry5/Translator.html</p>
<p><strong>Mantenimiento de estado en el servidor</strong></p>
<p>En ciertos momentos de practicamente todas las aplicaciones web hay que conservar cierta información sobre una tarea que esta realizando el usuario, para ello Tapestry dispone de varias estrategias de persistencia: en sesión hasta que se de por finalizada la sesión del usuario, flash donde la información se conserva hasta la siguiente petición del usuario, en cliente en forma de un nuevo parámetro en URL o un campo oculto en un formulario. Este tipo de persistencia puede aplicarse a cada una de las propiedades de los componentes. En caso de que necesitemos que cierta información este disponible en varias páginas Tapestry usa el concepto de Application State Objet (ASO) que permiten mantener el estado pero sin tener que estar asociada esta información a una propiedad de una página o componente en concreto, de nuevo a estos ASO se les puede aplicar diferentes estrategias de persistencia.</p>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5/guide/persist.html</p>
<p>http://tapestry.apache.org/tapestry5/guide/appstate.html</p>
<p><strong>URLs amistosas</strong></p>
<p>El concepto de URLs amistosas hace referencia al formato de las URL que genera Tapestry. Que el entorno genere las URLs de esta forma permite aplicar a las mismas la seguridad declarativa de J2EE o Spring.</p>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry4.1/usersguide/friendly-urls.html</p>
<p><strong>IoC (Inversion of Control)</strong></p>
<p>Un concepto clave en Tapestry es el uso de la inyección. Tapestry, mediante las anotaciones, permite una inyección de una instancia de un servicio directamente sobre las propiedades de un componente, página o servicio.</p>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5.1/guide/inject.html</p>
<p>http://tapestry.apache.org/tapestry5.1/tapestry-ioc/</p>
<p><strong>Integración con Spring</strong></p>
<p>Tapestry proporciona integración con Spring permitiendo a los beans definidos en Spring ser inyectados en los servicios o componentes.</p>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5.1/tapestry-spring/</p>
<p>http://tapestry.apache.org/tapestry5.1/tapestry-ioc/injection.html</p>
<p><strong>Rendimiento</strong></p>
<p>Con el objetivo de aumentar el rendimiento de las aplicaciones, Tapestry realiza de forma automática una serie de actividades:</p>
<ul>
<li>Eliminación de espacios: Tapestry elimina todos los espacios no necesarios reduciendolos a sólo el único necesario. Los bloques que sean únicamente espacios son eliminados completamente. Esto tiene ventajas tanto en el servidor como en el ciente, por un lado hay menos salida que generar y en el cliente menos que procesar.</li>
<li>Versionado: Tapestry permite versionar los assets que se envían al cliente marcándolos además con una fecha de expiración muy lejana en el futuro. Esto significa que el navegador del cliente puede almacenar en la cache los ficheros que recibe y sirve para que en el momento que cambien el cliente pueda acceder a los nuevos.</li>
<li>Compresión: Desde Tapestry 5.1 se comprime mediante GZIP el contenido generado para el cliente. Esta peculiaridad reduce significativamente la cantidad de tráfico de red a costa de tiempo de procesado en el servidor. Lo anteriormente mencionado afecta al contenido HTML como a los assets (imagenes, css, javascript, &#8230;) enviados al cliente. Proporcina mayor rendimiento que un filtro que haga la compresión ya que este no sabría que contenido es dinámico y cual estático haciendo repitiendo el proceso de compresión para el mismo contenido.</li>
</ul>
<p>Finalmente, como se explica en la propia página de Tapestry, la versión 4 tiene un rendimiento comparable a su aplicación equivalente Servlet/JSP, la versión 5 con estas y otras características es mucho más rápido.</p>
<p>Referencia:</p>
<p>http://tapestry.apache.org/tapestry5.1/guide/compress.html</p>
<p>http://tapestryjava.blogspot.com/2009/02/speeding-up-tapestry-51.html</p>
<p>Happy Hacking!</p>
<p>Autor, D</p>
]]></content:encoded>
			<wfw:commentRss>http://tecnoblog.entel.es/?feed=rss2&amp;p=81</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>El Plan de un Proyecto TI</title>
		<link>http://tecnoblog.entel.es/?p=74</link>
		<comments>http://tecnoblog.entel.es/?p=74#comments</comments>
		<pubDate>Fri, 30 Jan 2009 09:53:56 +0000</pubDate>
		<dc:creator>Alberto Salgado</dc:creator>
				<category><![CDATA[Dirección de proyectos]]></category>

		<guid isPermaLink="false">http://tecnoblog.entel.es/?p=74</guid>
		<description><![CDATA[Uno de los aspectos que más me ha llamado la atención a lo largo de mi vida profesional es cómo las organizaciones preparan y coordinan la producción en los proyectos y, más concretamente como los Jefes de Proyecto realizan el Plan del Proyecto.
Lo primero que necesitamos especificar es que entendemos por proyecto, y para tener [...]]]></description>
			<content:encoded><![CDATA[<p>Uno de los aspectos que más me ha llamado la atención a lo largo de mi vida profesional es cómo las organizaciones preparan y coordinan la producción en los proyectos y, más concretamente como los Jefes de Proyecto realizan el Plan del Proyecto.</p>
<p><span id="more-74"></span>Lo primero que necesitamos especificar es que entendemos por proyecto, y para tener un orden de magnitud conjunto, nos referiremos a todo aquel proyecto que supere los 65.000 € y los 4 meses de duración; de esta forma identificaremos y especificaremos un conjunto de mínimos.</p>
<p>En segundo lugar necesitamos aclarar que es lo que se entiende por Plan del Proyecto y, no es más, que el conjunto de elementos que permiten, como mínimo, dar respuesta a:</p>
<ul>
<li>¿Qué producto necesita el cliente?</li>
<li>¿Qué trabajo hay que realizar?</li>
<li>¿Cuándo hay que realizar el trabajo?</li>
<li>¿En qué fechas hay que realizar el trabajo?</li>
<li>¿Cuánto tiempo le vamos a dedicar?</li>
<li>¿Quiénes vamos a participar en el proyecto?</li>
<li>¿Cuánto costará la realización del proyecto?</li>
<li>¿Cuánto dinero esperamos ganar en la realización de éste proyecto?</li>
<li>¿Cuál es el precio de venta?</li>
<li>¿Qué problemas podremos encontrar en la realización del proyecto?</li>
</ul>
<p>Esto me lleva a diseñar un flujo de trabajo que facilite el tránsito de información entre los diferentes productos que conforman el Plan del Proyecto.</p>
<p style="text-align: center;"><a href="http://tecnoblog.entel.es/wp-content/uploads/2009/01/plan_proyecto.png"><img class="size-medium wp-image-75 aligncenter" title="plan_proyecto" src="http://tecnoblog.entel.es/wp-content/uploads/2009/01/plan_proyecto.png" alt="Plan_del_Proyecto" width="300" height="244" /></a></p>
<p style="text-align: center;">
<ul>
<li><strong>Documento de Requisitos</strong>: Especificación formal, estructurada y ordenada de las necesidades y problemática de los clientes. Aunque no pertenece al Plan del Proyecto, su existencia es fundamental.</li>
<li><strong>Alcance del Producto</strong>: Descripción de la solución tecnológica adoptada para cubrir, de forma total o parcial, las necesidades especificadas.</li>
<li><strong>Alcance del Proyecto</strong>: Conjunto de actividades que permiten desarrollar, gestionar y controlar el desarrollo del producto propuesto.</li>
<li><strong>Cronograma</strong>: Distribución temporal de las actividades, según la estrategia de ejecución planteada, que especifica el compromiso de plazos y el trabajo colaborativo.</li>
<li><strong>Hoja de Esfuerzo</strong>: Describe el tiempo de dedicación estimado para completar cada una de las actividades a realizar. Sólo aparecerán aquellas personas cuya producción ha de ser controlada por el Jefe de Proyecto.</li>
<li><strong>Hoja Financiera</strong>: Describe los flujos de caja esperados, incluyendo gastos, facturas a realizar (cliente) y recibir (proveedores).</li>
<li><strong>Hoja de Riesgos</strong>: Descripción de los diferentes riesgos, su impacto, probabilidad, fecha estimada en que se produzca y plan de resolución.</li>
</ul>
<p>Un aspecto asociado a la Hoja de Riesgos, que puede haberte llamado la atención de la imagen anterior, es que hay ciertas flechas que relacionan dicho entregable con otros del Plan del Proyecto, saltándose el proceso normal. Esto se debe a que la solución adaptada de un riesgo (un nuevo escenario) se debe a la modificación de diferentes elementos (producto, actividades, ordenación cronológica, perfil de los recursos, tiempo de dedicación, costes del proyecto, margen del proyecto, precio del proyecto, etc…), el cual desencadena un conjunto de efectos a tener en cuenta según el flujo especificado.</p>
<p>También podría hablarse en este artículo de qué información, métricas e indicadores deberían aparecer en cada uno de los entregables citados, y cómo los flujos de información nutren el resto de elementos relacionados, pero esto, en todo caso, puede ser objeto de otro artículo.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecnoblog.entel.es/?feed=rss2&amp;p=74</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Métodos Ágiles en IT</title>
		<link>http://tecnoblog.entel.es/?p=72</link>
		<comments>http://tecnoblog.entel.es/?p=72#comments</comments>
		<pubDate>Tue, 14 Oct 2008 13:18:51 +0000</pubDate>
		<dc:creator>Alberto Salgado</dc:creator>
				<category><![CDATA[Dirección de proyectos]]></category>
		<category><![CDATA[Modelos Ágiles]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[SCRUM]]></category>

		<guid isPermaLink="false">http://tecnoblog.entel.es/?p=72</guid>
		<description><![CDATA[La razón por la que surgen los proyectos, viene dada por la necesidad o problemática de una persona u organización. En ciertos casos, la solución tiene un enfoque sencillo y claro, pero en otras requiere de aportación valor diferencial e I+D.
Es en estos casos, es donde tienen una mayor aceptación los nuevos modelos ágiles, tanto [...]]]></description>
			<content:encoded><![CDATA[<p>La razón por la que surgen los proyectos, viene dada por la necesidad o problemática de una persona u organización. En ciertos casos, la solución tiene un enfoque sencillo y claro, pero en otras requiere de aportación valor diferencial e I+D.</p>
<p>Es en estos casos, es donde tienen una mayor aceptación los nuevos modelos ágiles, tanto aplicables en todo el ámbito del proyecto, como los especializados en la dirección de los mismos.<br />
<span id="more-72"></span><br />
Estos modelos se basan en los cuatro pilares del <a title="Manifiesto Ágil" href="http://www.agilemanifesto.org/" target="_blank">manifiesto ágil</a>, donde se valoran:</p>
<ol>
<li>A los individuos y su interacción por encima de los procesos y las herramientas</li>
<li>El software que funciona, por encima de la documentación exhaustiva.</li>
<li>La colaboración con el cliente, por encima de la negociación contractual.</li>
<li>La respuesta al cambio, por encima del seguimiento de un plan.</li>
</ol>
<p>Como podemos observar, existen ciertas divergencias en comparación con los modelos clásicos o dirigidos, pero debemos tener en cuenta, al igual que con el resto de metodologías y modelos, que para resolver un mismo problema tenemos que tener en cuenta los siguientes factores:</p>
<ol>
<li>Capacitación y capacidad del equipo, ya que son las personas las que idean y crean cada elemento, creando un entorno de gestión del conocimiento compartido, coherente, directo y no sobrecargado.</li>
<li>Disponer de forma temprana de parte del producto final. Esto permitirá recibir feed-back por parte del cliente, y recabar nuevas necesidades, además de disponer de un entorno de pruebas mucho más potente e integral.</li>
<li>El proveedor de soluciones IT debe ser más un aliado tecnológico que hace las veces de consultor, que un mero suministrador de tecnología.</li>
<li>Si el entorno en el que se mueve el cliente cambia, su necesidad o problemática mutará, por lo tanto debemos disponer de los medios que nos permitan adaptarnos a dichos cambios lo antes posible.</li>
</ol>
<p>En este punto podréis pensar que soy un gran soñador, y que no he tenido en cuenta grandes problemas organizativos, pero antes de plantearnos siquiera el trabajar con metodologías ágiles, debemos de cumplir ciertos prerrequisitos y tener claras ciertas cuestiones:</p>
<ul>
<li>El equipo debe de estar formado por un conjunto de personas que muestren una actitud colaborativa y dispongan de aptitudes y conocimientos destacables en diferentes áreas de conocimiento, ya que si no es así, ¿que innovación y contribución diferencial existirá?</li>
<li>El no disponer de documentación exhaustiva no quiere decir que no haya documentación. Debemos saber qué es crítico en el ciclo de vida del producto y dónde se encuentra su complejidad.</li>
<li>La comunicación interpersonal es la base de la gestión del cambio continuo. Esto puede parecer que choca con las políticas de calidad de las organizaciones, pero no es así, ya que como hemos indicado en el punto anterior, debemos tener muy claro, qué debe quedar por escrito.</li>
<li>Para conocer el nivel de cumplimiento de un contrato, necesitamos conocer  alcance, plazo y coste, ¿pero qué pasaría si no conocemos el primero de los factores? ¿No podríamos crear un contrato marco y para cada uno de los entregables realizar un anexo?</li>
</ul>
<p>Una persona encargada de la venta o de gestionar un presupuesto, puede resaltar de la dificultad de gestionar la ocupación y rentabilidad de un departamento, y la complejidad añadida de tener que negociar de forma continuada. Este enfoque nos obliga a trabajar estrechamente y colaborar con el cliente, centrarnos en sus necesidades y hacer un trabajo de alto valor añadido en cada entrega.</p>
<p>Al igual que existen muchas metodologías tradicionales, atendiendo a la importancia y relevancia sobre la que se quiere hacer énfasis, existen muchas otras denominadas ágiles, como son:</p>
<ul>
<li><a title="Agile Database Techniques" href="http://www.agiledata.org/" target="_blank">Agile Database Techniques</a></li>
<li><a title="Agile Modeling" href="http://www.agilemodeling.com/" target="_blank">Agile Modeling</a></li>
<li><a title="Agile Unified Process" href="http://www.ambysoft.com/unifiedprocess/agileUP.html" target="_blank">Agile Unified Process</a></li>
<li><a title="Crystal" href="http://www.agilekiwi.com/crystal_clear.htm" target="_blank">Crystal</a></li>
<li><a title="Feature Driven Development" href="http://www.featuredrivendevelopment.com/" target="_blank">Feature Driven Development</a></li>
<li><a title="Dynamic Systems Development Method" href="http://www.dsdm.org/" target="_blank">Dynamic Systems Development Method</a></li>
<li><a title="Lean Software Development" href="http://www.leansoftwareinstitute.com/" target="_blank">Lean Software Development</a></li>
<li><a title="Scrum" href="http://www.scrumalliance.org/" target="_blank">Scrum</a></li>
<li><a title="Test-Driven Design" href="http://www.testdriven.com" target="_blank">Test-Driven Design</a></li>
<li><a title="XBreed" href="http://www.e-architects.com/AE/" target="_blank">XBreed</a></li>
<li><a title="eXtreme Programming" href="http://www.extremeprogramming.org/" target="_blank">eXtreme Programming </a></li>
</ul>
<p>Muchas de ellas tratan tanto el ciclo de vida de desarrollo de software como el de gestión, mientras que algunas de ellas se centran única y exclusivamente en el modelo de gestión. Dada la extensión del análisis de las mismas, podrá ser objeto de otra futura aportación a este blog.</p>
<p>Aun así, me gustaría comentar algunas de las características de una de ellas, SCRUM. Es un término acuñado del rubgy, y haciendo una semejanza, describe cómo:</p>
<ul>
<li>El equipo debe organizarse haciendo una piña, y donde cada persona aporta tanto individualmente como colectivamente.</li>
<li>El objetivo de cada iteración es la aportación de valor, es decir, conseguir un ensayo.</li>
<li>El objetivo es ganar el partido y que el cliente (interno y externo) esté satisfecho del resultado final.</li>
</ul>
<p>Personalmente, esto me lleva a un dilema, si el objetivo de todo proyecto de desarrollo de software, es crear el producto necesario con el nivel de calidad requerido, y debe estar disponible con la premura que requiere el negocio al que dará soporte, el fin justifica los medios ¿no?</p>
<p><em>Alberto Salgado</em></p>
<p><em>Consultor IT, Consultoría y Formación</em></p>
]]></content:encoded>
			<wfw:commentRss>http://tecnoblog.entel.es/?feed=rss2&amp;p=72</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Mono: Solución libre para .NET</title>
		<link>http://tecnoblog.entel.es/?p=71</link>
		<comments>http://tecnoblog.entel.es/?p=71#comments</comments>
		<pubDate>Thu, 18 Sep 2008 14:30:48 +0000</pubDate>
		<dc:creator>odelgado</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://tecnoblog.entel.es/?p=71</guid>
		<description><![CDATA[Mono es la implementación libre y abierta de la tecnología .NET de Microsoft, capaz de funcionar en los sistemas operativos de Linux, Mac OS X, Sun Solaris, BSD (OpenBSD, FreeBSD, NetBSD) y Microsoft Windows.
Como ya sabéis Microsoft dio a conocer su tecnología .NET a finales del 2000 para hacer frente al avance o “éxito” de [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Mono </strong>es la implementación libre y abierta de la <a title="Tecnología .NET" href="http://www.microsoft.com/net/default.aspx" target="_blank">tecnología .NET de Microsoft</a>, capaz de funcionar en los sistemas operativos de Linux, Mac OS X, Sun Solaris, BSD (OpenBSD, FreeBSD, NetBSD) y Microsoft Windows.</p>
<p>Como ya sabéis Microsoft dio a conocer su tecnología .NET a finales del 2000 para hacer frente al avance o “éxito” de Java de Sun. En ese momento fue cuando <a title="Miguel de Icaza" href="http://es.wikipedia.org/wiki/Miguel_de_Icaza" target="_blank">Miguel de Icaza</a> (Co-fundador de la empresa Ximian, fundador y presidente de la <a title="Proyecto GNOME" href="http://www.gnome.org/" target="_blank">GNOME </a>Foundation y actualmente Vicepresidente de Desarrollo en Novell) teniendo acceso a la información de la tecnología .NET vio una forma de solucionar la problemática existente en GNOME.</p>
<p><span id="more-71"></span></p>
<p>Como él mismo dijo… “su pasión es el desktop, y Linux ya no puede ser más un sistema escrito por programadores para programadores, sino que tiene que ser apto para cualquier usuario”.  Gracias a la tecnología .NET el proyecto GNOME consigue lo que siempre había buscado, independencia del lenguaje para programar en dicho desktop. Por este motivo surgió el <a title="Proyecto MONO" href="http://www.mono-project.com/" target="_blank">proyecto Mono</a> y así conseguir que GNOME, en un futuro, sea un desktop mejor y más atractivo tanto para los usuarios como para los programadores.</p>
<p>Actualmente, <strong>Mono </strong>es la solución madura para desarrollar con la tecnología .Net en todos los sistemas operativos, aunque para Windows le queda mucho por recorrer. Para que os hagáis una idea, se están rematando los últimos detalles de la versión de Mono 2.0 que implementa el Framework 2.0 mientras que Microsoft ya ha lanzado la versión 3.5 del Framework. Lo que imposibilita que las aplicaciones desarrolladas con las versiones superiores no pueden migrarse completamente a Mono.</p>
<p>Y es que una de las virtudes de <strong>Mono</strong>, es la posibilidad de ejecutar aplicaciones desarrolladas con Visual Studio sin tener que modificar ni una línea de código y viceversa, claro está con alguna limitación. Al parecer todas las aplicaciones migrables de Windows a Linux son aquellas que sólo utilizan el API definido dentro del namespace System y que no usan P/Invoke. Aunque no lo he mencionado, estas aplicaciones también funcionarían en HP-UX, Solaris, MacOS X, entre otros; ya que la aplicación utiliza un Entorno de Ejecución para poder funcionar, que está disponible en la pagina Web de Mono.</p>
<p>Como no siempre lo que leemos es totalmente cierto, realicé la prueba con varias aplicaciones que tenía de cuando empecé con .NET. Me llevé una grata impresión al ver que compilaban correctamente casi todas ellas sin tener que modificar ni una línea de código. Pero no creáis que fue todo tan bonito, también me surgieron algunos ‘problemillas’:</p>
<ul>
<li>El proceso de instalación del producto me causó más de un quebradero de cabeza, no sé si fue debido a tener instalado el Visual Studio o que todavía no funciona correctamente con Windows. Pero tratándose de este Sistema Operativo puede ser por cualquier motivo.</li>
<li>Hay que tener en cuenta la versión del .NET Framework que tenemos instalado al no ser totalmente compatible con el Framework 3.5. Aunque no he encontrado ninguna mención a este problema en la página del proyecto Mono.</li>
<li>Otra de las cosas que no soporta es el uso de código “no manejado”, pero por un buen motivo… El código se basa en el uso de los recursos del propio sistema operativo haciendo nuestra aplicación más rápida pero más insegura, pero es dependiente directamente del sistema operativo.</li>
</ul>
<p>Experiencias como estas podréis encontrarlas en muchos foros especializados, tal y como se comenta, hay que entender que es un proyecto que está empezando aunque en poco tiempo ha realizado avances significativos.</p>
<p>Una de las grandes sorpresas, ha sido la aplicación de Mono en el mundo de los videojuegos, para que os hagáis una idea podéis descargar la versión de prueba del entorno <a title="Unity" href="http://unity3d.com/" target="_blank">Unity </a>para desarrollo de videojuegos. Tanto ha sido su éxito que Jim Purbrick (Babbage) de Linden Labs ha anunciado la <a title="Migración de Scripts a MONO" href="http://blog.secondlife.com/2008/08/20/mono-launch/" target="_blank">migración de todos los scripts de Second Life a Mono</a>, por las siguientes razones:</p>
<ul>
<li>Uso de la mitad de recursos de memoria.</li>
<li>Los scripts funcionan hasta 220 veces más rápido.</li>
</ul>
<p>y es que estamos hablando de una granja de aproximadamente 6000 servidores!.</p>
<p>Para concluir, creo que las empresas deberán tener en cuenta este entorno de desarrollo como una solución de software libre alternativa a la de Microsoft. Sólo nos falta saber los siguientes pasos que dará “El gigante de Redmond”.</p>
<p><em>Oscar Delgado<br />
Consultor IT, Consultoría y Formación</em></p>
]]></content:encoded>
			<wfw:commentRss>http://tecnoblog.entel.es/?feed=rss2&amp;p=71</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Modelos pedagógicos para el e-learning</title>
		<link>http://tecnoblog.entel.es/?p=69</link>
		<comments>http://tecnoblog.entel.es/?p=69#comments</comments>
		<pubDate>Thu, 17 Jul 2008 11:01:33 +0000</pubDate>
		<dc:creator>adsanchez</dc:creator>
				<category><![CDATA[E-learning]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://tecnoblog.entel.es/?p=69</guid>
		<description><![CDATA[En busca de un buen modelo pedagógico
Uno de los factores clave en el éxito a la hora de diseñar cursos e-learning, es saber elegir un buen modelo pedagógico que permita a los alumnos realizar el proceso enseñanza / aprendizaje con total garantía.
Estos son los puntos fuertes a tener en cuenta:

Se debe adaptar a las necesidades [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 6pt 0cm; text-align: justify; mso-layout-grid-align: none;"><strong style="mso-bidi-font-weight: normal;"><span style="font-family: Verdana;"><span style="font-size: small;">En busca de un buen modelo pedagógico</span></span></strong></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: justify; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: Verdana;">Uno de los factores clave en el <strong style="mso-bidi-font-weight: normal;">éxito</strong> a la hora de diseñar cursos e-learning, es saber elegir un <strong style="mso-bidi-font-weight: normal;">buen</strong> modelo pedagógico que permita a los alumnos realizar el proceso enseñanza / aprendizaje con total garantía.</span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: justify; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: Verdana;">Estos son los puntos fuertes a tener en cuenta:</span></p>
<ul>
<li><span style="font-size: 10pt; font-family: Verdana;">Se debe <strong style="mso-bidi-font-weight: normal;">adaptar</strong> a las necesidades y posibilidades del estudiante a quien va dirigido.</span></li>
</ul>
<ul>
<li><span style="font-size: 10pt; font-family: Verdana;">Debe <strong style="mso-bidi-font-weight: normal;">acompañarlo</strong> para que sienta apoyado, marcándole el camino para que sepa cómo avanza y hacia dónde se dirige.</span></li>
</ul>
<ul>
<li><span style="font-size: 10pt; font-family: Verdana;">Que sienta que lo que aprende es útil, tanto los conceptos teóricos como sus aplicaciones prácticas.</span></li>
</ul>
<ul>
<li><span style="font-size: 10pt; font-family: Verdana;">Un entorno y unos docentes que ayuden a crear un sentimiento de pertenencia a una comunidad, por los beneficios conjuntos que pueden alcanzarse a través de la interacción entre sus miembros, que <strong style="mso-bidi-font-weight: normal;">comparten</strong> conocimientos y aprenden.</span></li>
</ul>
<ul>
<li><span style="font-size: 10pt; font-family: Verdana;">Una formación basada en una planificación y un contexto más que en materiales dispersos.</span></li>
</ul>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: justify; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: Verdana;">Pero también:</span> <span style="font-size: 10pt; font-family: Verdana;"><span id="more-69"></span></span></p>
<ul>
<li><span style="font-size: 10pt; font-family: Verdana;"><span style="font-size: 10pt; font-family: Verdana;">Un modelo que sea capaz de gestionar e incrementar la <strong style="mso-bidi-font-weight: normal;">flexibilidad</strong>, la <strong style="mso-bidi-font-weight: normal;">personalización</strong>, la <strong style="mso-bidi-font-weight: normal;">interacción</strong> y la <strong style="mso-bidi-font-weight: normal;">cooperación</strong>: aportar soluciones formativas a medida de las necesidades de los usuarios, teniendo en cuenta los condicionantes vinculados al tiempo, a la distancia, y a una estructuración de los contenidos.</span></span></li>
</ul>
<ul>
<li><span style="font-size: 10pt; font-family: Verdana;"><span style="font-size: 10pt; font-family: Verdana;">Ofrecer a las empresas un sistema formativo que tenga en cuenta las <strong style="mso-bidi-font-weight: normal;">competencias</strong> de sus trabajadores y cuál es el <strong style="mso-bidi-font-weight: normal;">diferencial</strong> que deben adquirir para cubrir sus necesidades formativas.</span></span></li>
</ul>
<ul>
<li><span style="font-size: 10pt; font-family: Verdana;"><span style="font-size: 10pt; font-family: Verdana;">Potenciar la <strong style="mso-bidi-font-weight: normal;">interactividad</strong>, no sólo entre los estudiantes y el contenido, sino también entre los estudiantes y los formadores o facilitadores.</span></span></li>
</ul>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: justify; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: Verdana;"><span style="font-size: 10pt; font-family: Verdana;">Todas estas características hacen que los participantes deben asumir un rol mucho </span></span><span style="font-family: Verdana;"><span style="font-size: small;"><span style="font-size: 10pt; font-family: Verdana;">más activo</span></span></span><span style="font-size: 10pt; font-family: Verdana;"><span style="font-size: 10pt; font-family: Verdana;">, pues van a ser los que van a tomar las decisiones sobre su propio proceso de aprendizaje. </span></span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: justify; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: Verdana;"><strong style="mso-bidi-font-weight: normal;"><span style="font-family: Verdana;"><span style="font-size: small;">¿Cuáles son los posibles riesgos?</span></span></strong></span></p>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: justify; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: Verdana;"><span style="font-size: 10pt; font-family: Verdana;">Cuando se busca un modelo un modelo pedagógico, existen una serie de riesgos que se deben tener en cuenta:</span></span></p>
<ul>
<li><span style="font-size: 10pt; font-family: Verdana;"><span style="font-size: 10pt; font-family: Verdana;">Riesgos de convertir la formación en una mera mercancía, que se transporta a través de Internet. Eso puede suceder si se reduce la formación a lo que se denomina </span></span><span style="font-family: Verdana;"><span style="font-size: small;"><span style="font-size: 10pt; font-family: Verdana;">“</span></span></span><span style="font-size: 10pt; font-family: Verdana;"><strong style="mso-bidi-font-weight: normal;"><em style="mso-bidi-font-style: normal;"><span style="font-size: 10pt; font-family: Verdana;">e-Reading</span></em></strong><span style="font-family: Verdana;"><span style="font-size: small;"> “</span></span><span style="font-size: 10pt; font-family: Verdana;">o una mera </span><span style="font-family: Verdana;"><span style="font-size: small;">“</span></span><strong style="mso-bidi-font-weight: normal;"><span style="font-size: 10pt; font-family: Verdana;">descarga</span></strong><span style="font-family: Verdana;"><span style="font-size: small;">” </span></span><span style="font-size: 10pt; font-family: Verdana;">de información. </span></span></li>
</ul>
<ul>
<li><span style="font-size: 10pt; font-family: Verdana;"><span style="font-size: 10pt; font-family: Verdana;">No es prudente contribuir a la confusión conceptual entre conocimiento e información. Incluso cuando se quiere, únicamente, capacitar a alguien en unas competencias determinadas. Existe el riesgo de suponer que el conocimiento es algo estático, cuando no es cierto. Se puede tener información, pero ¿se dispone de conocimiento?.</span></span></li>
</ul>
<ul>
<li><span style="font-size: 10pt; font-family: Verdana;"><span style="font-size: 10pt; font-family: Verdana;">Por otro lado, si bien es cierto que la formación es un proceso, y que como tal puede gestionarse, también lo es que determinados posicionamientos se están centrando excesivamente en la propia gestión, olvidándose de quiénes son los sujetos de la formación, y qué elementos metodológicos están jugando un papel determinado y cómo lo están haciendo. En este sentido, las interpretaciones que consideran los conceptos LMS (Learning Management Systems) y LCMS (Learning Content Management Systems) en sí mismos como sistemas y, a veces, incluso como modelos de formación, son claramente reduccionistas.</span></span></li>
</ul>
<ul>
<li><span style="font-size: 10pt; font-family: Verdana;"><span style="font-size: 10pt; font-family: Verdana;">Finalmente, otro riesgo bastante común es el de imaginar que el e-learning es un modelo de <strong style="mso-bidi-font-weight: normal;">autoformación</strong>. Algunas propuestas de e-learning entienden que un verdadero sistema de este tipo, no necesita la existencia de formador. La autoformación, o el autoaprendizaje, <strong style="mso-bidi-font-weight: normal;">no son </strong>conceptos propios del e-learning, sino que forman parte de los sistemas más tradicionales de educación a distancia. El papel del formador puede convertirse en crucial para desarrollar un sistema de e-learning competitivo y de alto valor añadido.</span></span></li>
</ul>
<p class="MsoNormal" style="margin: 6pt 0cm; text-align: justify; mso-layout-grid-align: none;"><span style="font-size: 10pt; font-family: Verdana;"><span style="font-size: 10pt; font-family: Verdana;">En conclusión, teniendo en cuenta tanto los <strong style="mso-bidi-font-weight: normal;">puntos fuertes </strong>como los <strong style="mso-bidi-font-weight: normal;">factores de riesgo </strong>mencionados en este artículo, un buen modelo pedagógico para el e-learning es aquel que se deriva del concepto emergente de </span></span><span style="font-size: 10pt; font-family: Verdana;"><em><span style="font-family: Verdana;"><span style="font-size: small;">“</span></span></em><strong style="mso-bidi-font-weight: normal;"><em><span style="font-size: 10pt; font-family: Verdana;">comunidad virtual de aprendizaje</span></em></strong><span style="font-size: small;"><em><span style="font-family: Verdana;">”</span></em><span style="font-family: Verdana;">,</span></span><span style="font-size: 10pt; font-family: Verdana;"> donde cada persona es un <strong style="mso-bidi-font-weight: normal;">autor</strong> y <strong style="mso-bidi-font-weight: normal;">usuario</strong> al mismo tiempo del proceso enseñanza – aprendizaje.</span></span></p>
<p class="MsoNormal" style="margin: 0cm -21.35pt 0pt 0cm; line-height: normal; text-align: justify;"> </p>
<p class="MsoNormal" style="margin: 0cm -21.35pt 0pt 0cm; line-height: normal; text-align: justify;"> </p>
<p>Adelardo Sánchez<br />
Responsable de la Línea de Servicio e-learning </p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://tecnoblog.entel.es/?feed=rss2&amp;p=69</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Google App Engine: amor a primera vista</title>
		<link>http://tecnoblog.entel.es/?p=68</link>
		<comments>http://tecnoblog.entel.es/?p=68#comments</comments>
		<pubDate>Wed, 07 May 2008 18:12:46 +0000</pubDate>
		<dc:creator>Pablo Ruiz Múzquiz</dc:creator>
				<category><![CDATA[FOSS]]></category>

		<guid isPermaLink="false">http://tecnoblog.entel.es/?p=68</guid>
		<description><![CDATA[Google Appengine consiste en tres elementos fundamentales:

Un SDK (cómo no) del estilo &#8220;aplicaciones web desarrolladas a toda velocidad&#8221;.
Un panel de control web para monitorizar la aplicación (picos de CPU, errores, versionado, etc).
La infraestructura distribuida de Google para almacenamiento, cálculo, escalabilidad, APIs, etc.

Hay una serie de vídeos muy ilustrativos en la página oficial de este proyecto [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Página Web de Google App Engine" href="http://code.google.com/appengine/">Google Appengine</a> consiste en tres elementos fundamentales:</p>
<ol>
<li>Un SDK (cómo no) del estilo &#8220;aplicaciones web desarrolladas a toda velocidad&#8221;.</li>
<li>Un panel de control web para monitorizar la aplicación (picos de CPU, errores, versionado, etc).</li>
<li>La infraestructura distribuida de Google para almacenamiento, cálculo, escalabilidad, APIs, etc.</li>
</ol>
<p>Hay una serie de vídeos muy ilustrativos en la página oficial de este proyecto de Google.</p>
<p>Preguntas que yo me hice y respuestas que obtuve:</p>
<p><span id="more-68"></span></p>
<ol>
<li>¿A quién va dirigido?: A cualquier desarrollador web con cualquier nivel de experiencia. Lógicamente, a mayor experiencia, mejores resultados en menos tiempo.</li>
<li>¿Qué lenguaje de programación soporta?: Muchos en el futuro, actualmente python.</li>
<li>¿Usa algún framework preexistente por debajo del que podamos hacer uso?: Sí, Django ¡!</li>
<li>¿Cuánto cuesta el &#8220;hosting&#8221; de Google para tus aplicaciones?: No queda claro pero tiene pinta de que será gratis en una versión &#8220;normal&#8221; y si tienes una megaweb de millones usuarios tendrás que comprar espacio en disco, más CPU, etc.</li>
<li>¿Cómo se hace un deploy de tu aplicación web?: la idea es que usas el SDK en tu máquina local y en cualquier momento ejecutas una orden en consola que se conecta a Google y almacena la nueva versión de aplicación. Interesante saber que desde el panel de control web puedes reactivar una versión antigua de tu aplicación instantáneamente (por ejemplo, una que no contuviera un error malvado).</li>
<li>¿Limitaciones en la API?: tres: nada de abrir sockets alegremente, los encapsulan con una API de Google. nada de guardar archivos en el disco duro (no hay), usas su base de datos a través de la API. Nada de threads, la arquitectura hardware y el Django que hay por debajo ya se encargan de todo eso por ti. Así que son limitaciones pero Google te ofrece una alternativa adecuada.</li>
<li>¿Qué sistemas operativos pueden usar el SDK localmente?: GNU/Linux, Mac y Windows. En realidad, cualquier entorno que soporte Python nativamente.</li>
<li>¿Esto es una beta o qué?: Sí pero es bastante funcional y merece la pena probarlo.</li>
<li>¿Dónde puedo ver aplicaciones realizadas con GAE?: <a title="Ejemplos de GAE" href="http://appgallery.appspot.com/">aquí</a>.</li>
<li>¿Es otro paso para la dominación del mundo por Google?: es posible. Imagino que quieren crear una red de aplicaciones web fácilmente integrables con sus otros servicios (google maps y gmail son jugosos ejemplos) y quizá promuevan el uso de su programa AdSense de anuncios pero al final, viendo los vídeos de presentación y la gente involucrada (el propio Guido, creador de Python), es un conjunto de herramientas que facilitan la creación y mantenimiento de aplicaciones web complejas.</li>
</ol>
<p>Personalmente, me encanta que hayan elegido Python como lenguaje inicial y Django como framework MVC en particular. Google es muy pro-python pero hasta ahora se circunscribía fundamentalmente a desarrollos internos. Con este paso promueven este lenguaje, muy maduro y flexible, para desarrollos de terceros.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecnoblog.entel.es/?feed=rss2&amp;p=68</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recordatorio: participa en el tecnoblog</title>
		<link>http://tecnoblog.entel.es/?p=17</link>
		<comments>http://tecnoblog.entel.es/?p=17#comments</comments>
		<pubDate>Tue, 08 Jan 2008 15:43:10 +0000</pubDate>
		<dc:creator>Pablo Ruiz Múzquiz</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://tecnoblog.entel.es/?p=17</guid>
		<description><![CDATA[Una breve nota recordatoria para que os animéis a enviar a blog@entel.es artículos no muy extensos en donde habléis de:

Un aspecto de la tecnología.
Que sea curioso o destacable.
y, a ser posible, relacionado con vuestra actividad (para poner algún ejemplo cercano).

Así que, ánimo, dedica media hora a sacar unos párrafos en un tono técnico y desenfadado [...]]]></description>
			<content:encoded><![CDATA[<p>Una breve nota recordatoria para que os animéis a enviar a blog@entel.es artículos no muy extensos en donde habléis de:</p>
<ol>
<li>Un aspecto de la tecnología.</li>
<li>Que sea curioso o destacable.</li>
<li>y, a ser posible, relacionado con vuestra actividad (para poner algún ejemplo cercano).</li>
</ol>
<p>Así que, ánimo, dedica media hora a sacar unos párrafos en un tono técnico y desenfadado al mismo tiempo y te lo colgamos aquí mismo.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecnoblog.entel.es/?feed=rss2&amp;p=17</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Regalos para esta Navidad</title>
		<link>http://tecnoblog.entel.es/?p=63</link>
		<comments>http://tecnoblog.entel.es/?p=63#comments</comments>
		<pubDate>Tue, 04 Dec 2007 16:48:43 +0000</pubDate>
		<dc:creator>Pablo Ruiz Múzquiz</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://tecnoblog.entel.es/?p=63</guid>
		<description><![CDATA[Se acercan las fechas entrañables de las uvas, el cava, el roscón y la familia. Bueno, y los regalos. Muchos resultan una auténtica decepción, otros son los denominados regalos VIPS (no porque seas importante, sino por el establecimiento de origen y las urgencias que acompañan), luego están los que sorprenden y finalmente los que hasta [...]]]></description>
			<content:encoded><![CDATA[<p>Se acercan las fechas entrañables de las uvas, el cava, el roscón y la familia. Bueno, y los regalos. Muchos resultan una auténtica decepción, otros son los denominados regalos VIPS (no porque seas importante, sino por el establecimiento de origen y las urgencias que acompañan), luego están los que sorprenden y finalmente los que hasta gustan.</p>
<p>Como éste es un blog tecnológico de una empresa tecnológica, había pensado en publicar una entrada animando a proponer regalos curiosos que, por probabilidad, deberían agradarnos a nosotros, los <em>techies</em>, <em>geeks</em>, gadgetomaníacos, etc.</p>
<p>Para no lanzar la piedra y esconder la mano, aquí va mi propuesta: <a href="http://mindstorms.lego.com/" title="Web de Lego Mindstorms">Lego Mindstorms</a>. Os comento qué es esto&#8230;</p>
<p><span id="more-63"></span><br />
Antes de que nadie piense que he tenido un ataque de nostalgia, os diré que Lego Mindstorms es un producto relativamente reciente de diseño, construcción y programación de robots con un sinfín de posibilidades.  Hace un año sacaron al mercado la segunda generación de este producto, llamado NXT, que es el que se vende en la tienda online de Lego (ojo, no es barato pero son múltiples robots en uno y, en ese sentido, es una ganga).</p>
<p>La clave es la combinación de piezas Lego Technic (u otras, siempre que encajen) con una unidad de procesamiento independiente a la que se pueden conectar servos, sensores de luz, de sonido, de distancia, de color, de dirección, de presión, etc. Todo este hardware funciona perfectamente y hay muchas piezas para comprar por separado y montar robots verdaderamente complejos.</p>
<p>El último elemento es la programación. ¿Cómo programo un robot? En el caso de Lego Mindstorms tuvieron una idea brillante: desarrollaron un interfaz de programación visual en el que se usan bloques que representan los sensores (un motor A), las acciones (gira en sentido de las agujas a 75% de potencia) y las condiciones (si el sensor de presión detecta obstáculo). Para los que tengáis hijos o sobrinos de entre 10 y 16 años es una forma práctica pero completa de iniciarse en la programación (imperativa). Pero esto no acaba ahí, al abrir el firmware de su CPU, otros desarrolladores crearon compiladores específicos que comprenden sintaxis que se parece a C, Java, Fortran, Pascal, etc. A mí me gusta especialmente NXC (Not eXactly C) porque no tienes que modificar el firmware original y aunque no tiene capacidad de números flotantes, permite estructuras muy complejas. Probablemente os decantéis por esta línea o directamente en ensamblador si os emociona jugar directamente con registros.</p>
<p>Para terminar con mi recomendación os diré que la CPU (llamado también el brick) es un ARM con 64KB de RAM (y ahí caben muchas instrucciones) y 256KB de memoria Flash (en donde se almacenan los programas o ficheros temporales generados por ellos).</p>
<p>Enlaces útiles:</p>
<ul>
<li><a href="http://shop.lego.com/product/?p=B8527&amp;LangId=2057&amp;ShipTo=ES">Tienda online de Lego Mindstorms</a></li>
<li><a href="http://youtube.com/watch?v=sRTcHnjNd5E"> Vídeo curioso en Youtube</a></li>
</ul>
<p>Ahora os toca a vosotros dar ideas o, por qué no, pedir a ver si cuela&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://tecnoblog.entel.es/?feed=rss2&amp;p=63</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Entel participa en la VII Semana de la Ciencia en Madrid</title>
		<link>http://tecnoblog.entel.es/?p=62</link>
		<comments>http://tecnoblog.entel.es/?p=62#comments</comments>
		<pubDate>Tue, 06 Nov 2007 10:26:29 +0000</pubDate>
		<dc:creator>Pablo Ruiz Múzquiz</dc:creator>
				<category><![CDATA[FOSS]]></category>

		<guid isPermaLink="false">http://tecnoblog.entel.es/?p=62</guid>
		<description><![CDATA[Bajo el título «Mesa redonda sobre software y conocimiento libre», participarán conjuntamente profesionales ligados de una u otra forma a la difusión y desarrollo del software libre y sus ramificaciones (o raíces, según se mire) en torno al conocimiento libre. El lugar será la Sala de Grados de la Facultad de CC. Físicas de la [...]]]></description>
			<content:encoded><![CDATA[<p>Bajo el título «Mesa redonda sobre software y conocimiento libre», participarán conjuntamente profesionales ligados de una u otra forma a la difusión y desarrollo del software libre y sus ramificaciones (o raíces, según se mire) en torno al conocimiento libre. El lugar será la Sala de Grados de la Facultad de CC. Físicas de la Universidad Complutense de Madrid (Ciudad Universitaria) este jueves 8 a las 18.00h.</p>
<p>Por parte de Entel asistirá Pablo Ruiz Múzquiz, Director FOSS, y le acompañarán tanto representantes del mundo académico como del sector informático y tecnológico. El punto de vista de una empresa que cuenta con un área específica de software libre servirá de base para comentar el perfil de las nuevas generaciones de licenciados y los cambios de percepción en las empresas.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecnoblog.entel.es/?feed=rss2&amp;p=62</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Desplegar una aplicación GWT en Tomcat</title>
		<link>http://tecnoblog.entel.es/?p=61</link>
		<comments>http://tecnoblog.entel.es/?p=61#comments</comments>
		<pubDate>Tue, 14 Aug 2007 11:44:55 +0000</pubDate>
		<dc:creator>Pablo Alba Chao</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://tecnoblog.entel.es/?p=61</guid>
		<description><![CDATA[En el departamento de FOSS siempre nos gusta estar al día de las tecnologías más novedosas.   Con esa filosofía, hemos aprovechado que teníamos que realizar un programa interno para comenzar a hacer experimentos con GWT. GWT (Google Web Toolkit) es la solución de Google para escribir aplicaciones AJAX. Es un framework de desarrollo [...]]]></description>
			<content:encoded><![CDATA[<p>En el departamento de FOSS siempre nos gusta estar al día de las tecnologías más novedosas.   Con esa filosofía, hemos aprovechado que teníamos que realizar un programa interno para comenzar a hacer experimentos con <a href="http://code.google.com/webtoolkit/" title="Google Web Toolkit">GWT</a>. GWT (Google Web Toolkit) es la solución de Google para escribir aplicaciones AJAX. Es un framework de desarrollo Open Source, basado en Java, y que facilita mucho el desarrollo de las aplicaciones.</p>
<p>Sin embargo, a la hora de desplegar una aplicación en un <a href="http://tomcat.apache.org/">Tomcat</a>  nos hemos encontrado con diversos problemas. Despues de nuestra labor de investigación y pruebas, hemos conseguido la &#8220;receta&#8221; para poder desplegar las aplicaciones.</p>
<p><span id="more-61"></span></p>
<p>1- El primer paso es obviamente conseguir que funcione correctamente en el entorno de GWT. Mientras no funcione ahí, no es planteable desplegarlo en el Tomcat.</p>
<p>2- Compilarla, bien mediante el comando aplicacion-compile, bien mediante el botón de compilación del propio entorno GWT</p>
<p>3- En el directorio de webapps del Tomcat, crear la siguiente estructura de directorios (en Ubuntu está en /var/lib/tomcat5.5/webapps):</p>
<pre>
webapps/Aplicacion
webapps/Aplicacion/WEB-INF
webapps/Aplicacion/WEB-INF/classes
webapps/Aplicacion/WEB-INF/lib
</pre>
<p>4- Cuando se compila la aplicación (en el segundo paso), se genera en el directorio de la aplicación un subdirectorio llamado www. Y dentro de él otro subdirectorio llamado &lt;nombre del paquete&gt;.&lt;nombre de la aplicación&gt;. Pues bien, ahora hay que copiar todos el contenido de ese directorio a webapps/Aplicacion</p>
<p>Ej:</p>
<pre>
cp -R /home/user/java/workspace/App/www/es.prueba.App/* /var/lib/tomcat5.5/webapps/Aplicacion
</pre>
<p>5- Copiar el contenido del directorio de la aplicación/bin a webapps/Aplicacion/WEB-INF/classes</p>
<p>Ej:</p>
<pre>
cp -R /home/user/java/workspace/App/bin/com /var/lib/tomcat5.5/webapps/Aplicacion/WEB-INF/classes/com
</pre>
<p>6- Crear el fichero  webapps/Aplicacion/WEB-INF/web.xml con el siguiente contenido:</p>
<pre>&lt;web-app&gt;
   &lt;servlet&gt;
      &lt;servlet-name&gt;Servicio&lt;/servlet-name&gt;
      &lt;servlet-class&gt;es.prueba.Servicio&lt;/servlet-class&gt;
   &lt;/servlet&gt;
   &lt;servlet-mapping&gt;
      &lt;servlet-name&gt;Servicio&lt;/servlet-name&gt;
      &lt;url-pattern&gt;/Servicio&lt;/url-pattern&gt;
   &lt;/servlet-mapping&gt;
&lt;/web-app&gt;</pre>
<p>Los valores son los mismos que los definidos en el fichero gwt.xml de la aplicación</p>
<p>7- Este paso es muy importante, y nos dio un montón de problemas hasta que lo conseguimos. Hace falta copiar las bibliotecas de GWT gwt-servlet.jar y gwt-user.jar al directorio webapps/Aplicacion/WEB-INF/lib.  Pero gwt-user.jar incluye las librerías javax, que por temas de licencias están prohibidas en tomcat. Por lo tanto, hay que editar el contenido de ese jar y eliminar el directorio javax. Por ejemplo, con el ark es fácil.</p>
<p>Con estos siete pasos, ya tenemos un par de aplicaciones funcionando sin problemas en nuestros servidores.</p>
]]></content:encoded>
			<wfw:commentRss>http://tecnoblog.entel.es/?feed=rss2&amp;p=61</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
	</channel>
</rss>
