<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0AGQ3Y4fSp7ImA9WxRUEEk.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384</id><updated>2008-11-18T23:02:02.835+01:00</updated><title>el holgazán</title><subtitle type="html">Tecnologías y proyectos de desarrollo de software, algo de filosofía y sobre todo humor y ocio. Sólo para holgazanes.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.elholgazan.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.elholgazan.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>242</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-nd/2.5/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><link rel="self" href="http://feeds.feedburner.com/elholgazan" type="application/atom+xml" /><feedburner:emailServiceId>1099755</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;D0AGQ3Y_fip7ImA9WxRUEEk.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-2733187566250962587</id><published>2008-11-18T22:57:00.002+01:00</published><updated>2008-11-18T23:02:02.846+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-18T23:02:02.846+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="filosofía" /><title>Me gustaba la física...</title><content type="html">Al hilo de &lt;a href="http://www.ensilicio.com/2008/11/cerrar-bucles-y-unir-puntos.html"&gt;Cerrar bucles y unir puntos&lt;/a&gt;, de &lt;a href="http://www.ensilicio.com"&gt;ensilicio.com&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;Me gustaba la física por los siguientes motivos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Nos permite&lt;span style="font-weight: bold;"&gt; predecir&lt;/span&gt; algunos acontecimientos futuros con cierta exactitud.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Nos permite diseñar y &lt;span style="font-weight: bold;"&gt;construir&lt;/span&gt; herramientas y otros sistemas que pueden mejorar nuestra forma de vida.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Pero sobre todo: me parece maravillosa la idea de que exista una ley universal que unifique todas las teorías de la física. Me produce una satisfacción filosófica el hecho de &lt;span style="font-weight: bold;"&gt;conocer "la causa de todo"&lt;/span&gt;. Satisfacción por el conocimiento como fin en sí mismo.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Digo me gustaba porque he dejado de prácticarlo. Me he vuelto terriblemente pragmático y holgazán.</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/2733187566250962587/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=2733187566250962587" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/2733187566250962587?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/2733187566250962587?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/457691847/me-gustaba-la-fsica.html" title="Me gustaba la física..." /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/11/me-gustaba-la-fsica.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQARXo7eSp7ImA9WxRWGU8.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-3185791669915146382</id><published>2008-11-05T22:51:00.003+01:00</published><updated>2008-11-05T22:59:04.401+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-05T22:59:04.401+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="negocios" /><title>¿Cómo nos va afectar la crisis?</title><content type="html">Iban dos muchachos de safari por la selva, cuando de repente, entre unos arbustos aparece un león.&lt;br /&gt;&lt;br /&gt;Ellos en un primer momento quedaron inmóviles. Pero de repente uno se quita la mochila y saca unos playeros más ligeros que las botas que llevaba y se las empieza a poner.&lt;br /&gt;&lt;br /&gt;&lt;span id="more-251"&gt;&lt;/span&gt;El otro, soprendido ante la reacción del amigo y con el miedo en el cuerpo le pregunta: “&lt;span style="font-weight: bold;"&gt;¿Para qué te cambias los playeros si corre más que tú y te va a coger igual?&lt;/span&gt;”.&lt;br /&gt;&lt;br /&gt;A lo que el que se estaba poniendo las playeros le contesta: “&lt;span style="font-weight: bold;"&gt;Puede ser, pero lo que yo quiero es correr más que tú&lt;/span&gt;”.&lt;br /&gt;&lt;br /&gt;(Vía &lt;a href="http://direccionhabilidosa.wordpress.com/2008/11/03/hoy-vamos-de-cuentistas/"&gt;Habilidades Directivas&lt;/a&gt;).</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/3185791669915146382/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=3185791669915146382" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/3185791669915146382?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/3185791669915146382?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/443713222/cmo-nos-va-afectar-la-crisis.html" title="¿Cómo nos va afectar la crisis?" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/11/cmo-nos-va-afectar-la-crisis.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYGSXw-fCp7ImA9WxRWFkk.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-2862447063705776561</id><published>2008-11-02T16:33:00.013+01:00</published><updated>2008-11-02T18:15:28.254+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-02T18:15:28.254+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="proyectos" /><title>10 ideas para la reducción de defectos del software</title><content type="html">&lt;span style="font-weight: bold;"&gt;Encontrar y arreglar un problema en el software después de la entrega suele ser 100 veces más caro que encontrarlo y arreglarlo durante la fase de análisis y diseño.&lt;/span&gt;&lt;br /&gt;Por ello la importancia de verificar y validar el software desde fases tempranas recurriendo a prototipos y simulaciones.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Los proyectos de desarrollo de software invierten entre el 40% y el 50% de sus esfuerzos en trabajo evitable.&lt;/span&gt;&lt;br /&gt;La mayoría de este tiempo se invierte resolviendo problemas que se podrían haber descubierto antes y resuelto a menor coste o incluso evitado.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;El 80% del trabajo evitable proviene del 20% de los defectos.&lt;/span&gt;&lt;br /&gt;Las 2 mayores fuentes de trabajo evitable tienen que ver con requisitos, diseños y arquitecturas que se especifican de forma precipitada.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;El 80% de los defectos provienen del 20% de los módulos, y la mitad de los módulos suelen estar libres de defectos.&lt;/span&gt;&lt;br /&gt;Por tanto, merece la pena identificar las características de los módulos que son más propensos a errores.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;El 90% del tiempo de mal funcionamiento proviene, como mucho, del 10% de los defectos.&lt;/span&gt;&lt;br /&gt;Por tanto, es importante prestar especial atención a los escenarios de alto riesgo e invertir más en sus pruebas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Las &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://es.wikipedia.org/wiki/Revisi%C3%B3n_por_pares#Revisi.C3.B3n_por_pares_en_el_desarrollo_de_software"&gt;revisiones por pares&lt;/a&gt;&lt;span style="font-weight: bold;"&gt; (peer reviews) detectan el 60% de los defectos.&lt;/span&gt;&lt;br /&gt;A veces se detectan más defectos de esta forma que mediante pruebas y otras herramientas análisis.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Las revisiones basadas en perspectiva detectan el 35% más de defectos que las revisiones no dirigidas.&lt;/span&gt;&lt;br /&gt;Las técnicas de lectura basadas en escenarios se aplican en documentos de requisitos, diseño orientado a objetos e interfaces. Además, la inspección de estos documentos facilitan la formación del personal más inexperto y mejora la comunicación.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Las prácticas del personal más disciplinado y ordenado pueden reducir el 75% de los defectos.&lt;/span&gt;&lt;br /&gt;Conviene analizar la causa raíz de los defectos y elaborar checklists y prácticas para evitar la recurrencia futura.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cuesta el 50% más desarrollar productos altamente fiables que productos de menor fiabilidad.&lt;/span&gt;&lt;br /&gt;Sin embargo, la inversión merece la pena si el proyecto entraña altos costes de operación y mantenimiento.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Entre el 40% y el 50% de las aplicaciones contienen defectos no triviales, aunque los desarrolladores piensen que los programas son fiables.&lt;/span&gt;&lt;br /&gt;Con el aumento del número de programadores será cada vez más fácil encontrarse con programadores con poca experiencia encargándose de la detección de riesgos.&lt;br /&gt;Es importante por tanto que las herramientas de desarrollo ofrezcan cada vez más mecanismos de seguridad.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Fuente: &lt;a href="http://www.cs.umd.edu/projects/SoftEng/ESEG/papers/82.78.pdf"&gt;Artículo de Boehm y Basili&lt;/a&gt;.</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/2862447063705776561/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=2862447063705776561" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/2862447063705776561?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/2862447063705776561?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/440113888/10-ideas-para-la-reduccin-de-defectos.html" title="10 ideas para la reducción de defectos del software" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/11/10-ideas-para-la-reduccin-de-defectos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IESH47fCp7ImA9WxRWFk8.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-9201259015412124886</id><published>2008-11-02T12:50:00.005+01:00</published><updated>2008-11-02T13:38:29.004+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-02T13:38:29.004+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Ejecución remota de procesos en paralelo</title><content type="html">&lt;a href="http://www.jppf.org/"&gt;JPPF&lt;/a&gt; es un framework Java de computación distribuida que facilita la ejecución de procesos en paralelo de forma remota en diferentes ordenadores (nodos), proporcionando la información y reuniendo los resultados desde un ordenador central (driver).&lt;br /&gt;&lt;br /&gt;Así, un driver puede tener múltiples nodos y cada uno de estos nodos puede ser a su vez un driver con otros nodos, configurando así un &lt;a href="http://www.jppf.org/wiki/index.php?title=Architecture"&gt;arquitectura&lt;/a&gt; peer to peer.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://www.jppf.org/images/JPPF-Topology.gif" alt="" border="0" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Es particularmente apropiado para resolver problemas de los denominados "&lt;a href="http://en.wikipedia.org/wiki/Embarrassingly_parallel"&gt;embarassingly parallel problems&lt;/a&gt;", donde un problema o programa puede dividirse en muchas tareas independientes y cada tarea puede ser ejecutada en paralelo.&lt;br /&gt;&lt;br /&gt;Un ejemplo de este tipo de problemas es el conocido &lt;a href="http://en.wikipedia.org/wiki/SETI@home" title="SETI@home"&gt;SETI@home&lt;/a&gt;, que analiza información recibida del espacio para detectar posibles señales extraterrestres, usando para ello el ordenador de un gran número de personas que participan a través de Internet.&lt;br /&gt;&lt;br /&gt;Ver la &lt;a href="http://www.jppf.org/JPPFQuickStart/docs/toc.html"&gt;guía de inicio&lt;/a&gt; y las &lt;a href="http://www.jppf.org/wiki/index.php?title=Installing"&gt;instrucciones para instalar y ejecutar el driver y los nodos&lt;/a&gt;.</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/9201259015412124886/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=9201259015412124886" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/9201259015412124886?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/9201259015412124886?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/439901716/ejecucin-remota-de-procesos-en-paralelo.html" title="Ejecución remota de procesos en paralelo" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/11/ejecucin-remota-de-procesos-en-paralelo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cCSHc5fyp7ImA9WxRXE08.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-4807393627710729010</id><published>2008-10-18T13:15:00.002+02:00</published><updated>2008-10-18T13:24:29.927+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-18T13:24:29.927+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="citas" /><title>Tiempo y dinero</title><content type="html">&lt;p class="frase"&gt;No puedo permitirme gastar tiempo en ganar dinero.&lt;/p&gt;&lt;div style="text-align: right;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Louis_Agassiz"&gt;Louis Agassiz&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.norvig.com/quotations.html"&gt;Otras citas sobre la vida, el universo, los ordenadores y todo lo demás&lt;/a&gt;, en la web de &lt;a href="http://www.norvig.com/"&gt;Peter Norvig&lt;/a&gt;, Director de Desarrollo de Google.</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/4807393627710729010/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=4807393627710729010" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/4807393627710729010?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/4807393627710729010?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/424533760/tiempo-y-dinero.html" title="Tiempo y dinero" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/10/tiempo-y-dinero.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQARXw4eCp7ImA9WxRQGEk.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-6856965629527013772</id><published>2008-10-12T21:46:00.005+02:00</published><updated>2008-10-12T23:19:04.230+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-12T23:19:04.230+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="proyectos" /><category scheme="http://www.blogger.com/atom/ns#" term="negocios" /><title>Commodities y factorías de software</title><content type="html">Existe un gran debate en torno al funcionamiento del modelo de desarrollo de software &lt;a href="http://es.wikipedia.org/wiki/Offshore"&gt;offshore&lt;/a&gt; (centros de trabajo en lugares de menor renta).&lt;br /&gt;&lt;br /&gt;Argumentos a favor:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;El software es una &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://es.wikipedia.org/wiki/Commodities"&gt;commodity&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;:&lt;/span&gt; Con buenas especificaciones, formación, herramientas y automatización, el desarrollo es una actividad de bajo riesgo, no son las tareas de mayor valor añadido y pueden externalizarse fácilmente.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;El offshoring reduce los costes:&lt;/span&gt; Ya que el desarrollo tiene lugar en lugares de menor renta.&lt;/li&gt;&lt;/ul&gt;Argumentos en contra:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;El software no es una commodity:&lt;/span&gt; Porque en gran medida es una disciplina compleja y creativa. Los requisitos y las tecnologías son cambiantes. El riesgo es alto.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;El offshoring no reduce los costes:&lt;/span&gt; Ya que se requiere cierta inversión inicial, la coordinación/planificación/documentación es más costosa y usualmente se requiere mayor esfuerzo para asegurar la calidad.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;He hablado de "especificaciones" a propósito, ya que en algún caso podría ser un catálogo de requisitos y en otros casos podría ser un diseño detallado, según se quiera que el diseño esté de un lado o de otro. En caso de que el diseño esté en la parte externalizada, las exigencias de cualificación del personal serán obviamente mayores.&lt;br /&gt;&lt;br /&gt;Al hablar de análisis, diseño y construcción no quiero decir que obligatoriamente haya que aplicar un modelo clásico en cascada. También podrían utilizarse metodologías ágiles, y en este caso el análisis/diseño/construcción sería iterativo y a pequeñas proporciones. Ver &lt;a href="http://www.martinfowler.com/articles/agileOffshore.html"&gt;este artículo de Martin Fowler sobre metodologías ágiles y desarrollo offshore&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;En conclusión:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Si los equipos son suficientemente buenos para el problema en cuestión (es decir, uno genera buenas especificaciones y otro desarrolla con alta calidad y buenos tiempos), y no hay demasiados cambios en los requisitos, seguramente el offshoring favorezca la productividad.&lt;/li&gt;&lt;li&gt;En otro caso (y creo que es habitual que los recursos disponibles para resolver un determinado problema sean escasos, en número y en perfil), seguramente no merezca la pena dividir el trabajo.&lt;/li&gt;&lt;li&gt;Por otra parte, puede ocurrir que en un proyecto de desarrollo, por los motivos anteriores, convenga externalizar sólo cierto tipo de tareas más "mecánicas", si su volumen fuera suficiente.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;¿Y tú que opinas?</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/6856965629527013772/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=6856965629527013772" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/6856965629527013772?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/6856965629527013772?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/418894793/commodities-y-factoras-de-software.html" title="Commodities y factorías de software" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/10/commodities-y-factoras-de-software.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYFQHg5cCp7ImA9WxRQEUw.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-1827635858235024985</id><published>2008-10-04T11:52:00.001+02:00</published><updated>2008-10-04T11:55:11.628+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-04T11:55:11.628+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="diseño" /><category scheme="http://www.blogger.com/atom/ns#" term="programación" /><title>Desarrollar sistemas CSS mantenibles</title><content type="html">De Natalie Downe en Barcamp London:&lt;br /&gt;&lt;div style="width: 425px; text-align: left;" id="__ss_623386"&gt;&lt;a style="margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;" href="http://www.slideshare.net/nataliedowne/css-systems-presentation?type=powerpoint" title="CSS Systems"&gt;CSS Systems&lt;/a&gt;&lt;object style="margin: 0px;" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=csssystemsslides-1222639135449752-9&amp;amp;stripped_title=css-systems-presentation"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=csssystemsslides-1222639135449752-9&amp;amp;stripped_title=css-systems-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;View SlideShare &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/nataliedowne/css-systems-presentation?type=powerpoint" title="View CSS Systems on SlideShare"&gt;presentation&lt;/a&gt; or &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/upload?type=powerpoint"&gt;Upload&lt;/a&gt; your own. (tags: &lt;a style="text-decoration: underline;" href="http://slideshare.net/tag/bulletproof"&gt;bulletproof&lt;/a&gt; &lt;a style="text-decoration: underline;" href="http://slideshare.net/tag/robustness"&gt;robustness&lt;/a&gt;)&lt;/div&gt;&lt;/div&gt;&lt;img style="visibility: hidden; width: 0px; height: 0px;" src="http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyMjMxMTM4NjY3MzgmcHQ9MTIyMzExMzg4MDI4NyZwPTEwMTkxJmQ9Jm49Jmc9MiZ*PSZvPTBhNjk3ZGQ3ZTM4ZjQ2MmI4MDhjMjVkYmEwZTNiODY1.gif" border="0" width="0" height="0" /&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/1827635858235024985/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=1827635858235024985" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/1827635858235024985?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/1827635858235024985?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/410996647/desarrollar-sistemas-css-mantenibles.html" title="Desarrollar sistemas CSS mantenibles" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/10/desarrollar-sistemas-css-mantenibles.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4MSX4zcCp7ImA9WxRRFU4.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-5997177103430391715</id><published>2008-09-27T17:11:00.008+02:00</published><updated>2008-09-27T17:56:28.088+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-27T17:56:28.088+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Model Driven Development en práctica</title><content type="html">Un diagrama muy bueno sobre la forma de estructurar las aplicaciones siguiendo el llamado &lt;a href="http://www.infoq.com/articles/ddd-in-practice"&gt;Model Driven Development&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://2.bp.blogspot.com/_j7c0Q8AS2HM/SN5NkEQJb1I/AAAAAAAACEk/9zriTm87l2k/s400/ArchitectureDiagram_lg.gif" alt="" id="BLOGGER_PHOTO_ID_5250719497572675410" border="0" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Cada cosa en su sitio. Cada capa se encarga de lo que tiene que hacer, sin contener código que debiera estar en otras capas y de forma desacoplada.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La capa de &lt;span style="font-weight: bold;"&gt;acceso a daos&lt;/span&gt; (DAOs) usa las funciones del motor de persistencia para ofrecer los servicios de creación, recuperación, actualización, eliminación y búsqueda de información. Utiliza objetos de dominio. Las transacciones (@Transactional) y el contexto de persistencia (@PersistenceContext) se definen mediante anotaciones Spring y JPA, respectivamente. En esta capa no se capturan las excepciones.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Los &lt;span style="font-weight: bold;"&gt;objetos de dominio&lt;/span&gt; (DOs) son objetos planos (POJOS) que definen los atributos (estado) y métodos de negocio. Algunos de estos métodos pueden ser campos calculados o bien métodos de creación, recuperación, actualización, eliminación y búsqueda, usando la capa de acceso a datos mediante inyección de dependencia (@Autowired en Spring). Si son persistentes tienen la información del mapeo objeto relacional de forma no intrusiva, mediante anotaciones JPA (@Entity, @Id, @GeneratedValue(strategy = GenerationType.AUTO), etc). En esta capa se controlan las excepciones que puedan ocurrir en las capas inferiores.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;La &lt;span style="font-weight: bold;"&gt;capa de servicios&lt;/span&gt; utiliza directamente los objetos de dominio (mediante inyección de dependencia), intercambiando información con la capa de presentación en forma de DTOs, XML, etc. No añade lógica de negocio, sólo conversiones de tipos de datos y control del flujo de las operaciones. Ver: &lt;a href="http://www.elholgazan.com/2008/09/mapeo-de-dtos-y-objetos-de-dominio.html"&gt;mapeo de DTOs y objetos de dominio&lt;/a&gt;, &lt;a href="http://www.elholgazan.com/2008/09/de-objetos-java-xml-y-viceversa.html"&gt;de objetos Java a XML&lt;/a&gt;, &lt;a href="http://www.elholgazan.com/2008/09/restful-web-services-con-jax-rs.html"&gt;RESTful web services&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;El &lt;span style="font-weight: bold;"&gt;controlador de aplicación&lt;/span&gt; puede ser JSF, Struts, Spring MVC, etc. Maneja la trasferencia de información entre la &lt;span style="font-weight: bold;"&gt;capa de presentación&lt;/span&gt; y la de servicios, mediante &lt;span style="font-weight: bold;"&gt;DTOs&lt;/span&gt; u otras formas de representación (XML, JSON...).&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Los &lt;span style="font-weight: bold;"&gt;componentes de infraestructura&lt;/span&gt;, como el manejo de excepciones, la gestión de transacciones, la seguridad, el control de operaciones (logging), etc. estarán disponibles desde todas las capas de forma no intrusiva.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/5997177103430391715/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=5997177103430391715" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/5997177103430391715?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/5997177103430391715?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/404751868/model-driven-development-en-prctica.html" title="Model Driven Development en práctica" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_j7c0Q8AS2HM/SN5NkEQJb1I/AAAAAAAACEk/9zriTm87l2k/s72-c/ArchitectureDiagram_lg.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/09/model-driven-development-en-prctica.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYFQHk7eyp7ImA9WxRRFU8.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-9211536923689848242</id><published>2008-09-27T16:30:00.006+02:00</published><updated>2008-09-27T16:51:51.703+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-27T16:51:51.703+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>Mapeo de DTOs y Objetos de Dominio</title><content type="html">Cuando desarrollamos una aplicación con múltiples capas es deseable que los objetos que se intercambian la &lt;span style="font-weight: bold;"&gt;capa de presentación&lt;/span&gt; y la &lt;span style="font-weight: bold;"&gt;capa de servicios&lt;/span&gt; sean diferentes de los objetos de dominio o entidades persistentes.&lt;br /&gt;&lt;br /&gt;El motivo es sobre todo de &lt;span style="font-weight: bold;"&gt;seguridad&lt;/span&gt;: el objeto a intercambiar con la capa de presentación (DTOs) no tiene por qué presentar la misma granularidad y todos los atributos/métodos que tienen los objetos de dominio (DOs). Sobre todo en aplicaciones en las que la capa de presentación y la capa de servicios no se ejecutan en la misma máquina (SOA).&lt;br /&gt;&lt;br /&gt;En este caso se recurre al patrón de diseño &lt;a href="http://www.martinfowler.com/eaaCatalog/dataTransferObject.html"&gt;Assembler&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dozer.sourceforge.net/documentation/gettingstarted.html"&gt;Dozer&lt;/a&gt; es una utilidad de mapeo que implementa este patrón.&lt;br /&gt;El mapeo entre clases se define mediante ficheros de configuración XML. Ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://3.bp.blogspot.com/_j7c0Q8AS2HM/SN5GMHSqduI/AAAAAAAACEc/NUe04eqC0Vg/s400/scenario1.jpg" alt="" id="BLOGGER_PHOTO_ID_5250711389490280162" border="0" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;La conversión, que puede realizarse en ambas direcciones, sería de la forma:&lt;br /&gt;&lt;blockquote&gt;MapperIF mapper = new DozerBeanMapper();&lt;br /&gt;DestinationObject destObject =&lt;br /&gt;(DestinationObject) mapper.map(sourceObject, DestinationObject.class);&lt;/blockquote&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/9211536923689848242/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=9211536923689848242" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/9211536923689848242?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/9211536923689848242?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/404711377/mapeo-de-dtos-y-objetos-de-dominio.html" title="Mapeo de DTOs y Objetos de Dominio" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_j7c0Q8AS2HM/SN5GMHSqduI/AAAAAAAACEc/NUe04eqC0Vg/s72-c/scenario1.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/09/mapeo-de-dtos-y-objetos-de-dominio.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEFRn47fSp7ImA9WxRRFk0.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-5696605230782728323</id><published>2008-09-27T11:49:00.010+02:00</published><updated>2008-09-28T15:13:37.005+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-28T15:13:37.005+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ajax" /><title>Árbol Ajax con jQuery</title><content type="html">Es el que más e convence de los que he visto. Más incluso que los de &lt;a href="http://extjs.com/deploy/dev/examples/samples.html"&gt;Ext JS&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://abeautifulsite.net/notebook.php?article=58"&gt;jQuery File Tree&lt;/a&gt; (&lt;a href="http://abeautifulsite.net/notebook_files/58/demo/"&gt;ver demo&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href="http://abeautifulsite.net/notebook_files/58/demo/"&gt;&lt;img src="http://1.bp.blogspot.com/_j7c0Q8AS2HM/SN4DKdJDhVI/AAAAAAAACEU/qQNaY9Yw6dk/s400/jquery-file-tree.png" alt="" id="BLOGGER_PHOTO_ID_5250637693716759890" border="0" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;Dispone de conectores en servidor para mostrar un sistema de ficheros, en distintos lenguajes (PHP, ASP, JSP, Python, Ruby, ColdFusion y Lasso).&lt;br /&gt;&lt;br /&gt;También puedes hacerte tu propio conector. Basta que devuelva una estructura con dos listas simples sin anidar, una de carpetas y otra de ficheros. jQuery se encarga de formar el árbol atendiendo a la ruta especificada para cada elemento: "/this/folder/", "/this/folder/filename.txt"...&lt;blockquote&gt;&amp;lt;ul class="jqueryFileTree" style="display: none;"&amp;gt;&lt;br /&gt;&amp;lt;li class="directory collapsed"&amp;gt;&amp;lt;a href="#" rel="/this/folder/"&amp;gt;Folder Name&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;(additional folders here)&lt;br /&gt;&amp;lt;li class="file ext_txt"&amp;gt;&amp;lt;a href="#" rel="/this/folder/filename.txt"&amp;gt;filename.txt&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;(additional files here)&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;Además es personalizable mediante CSS y tiene la posibilidad de cambiar los iconos según sea la extensión de los archivos.&lt;br /&gt;&lt;br /&gt;Ver también:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://plugins.jquery.com/"&gt;Otros plugins de jQuery&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.kollermedia.at/archive/2007/11/21/the-ultimate-jquery-plugin-list/"&gt;Más de 240 plugins de jQuery&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.noupe.com/category/jquery"&gt;Recursos jQuery en Noupe&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.webdesignerwall.com/tutorials/jquery-tutorials-for-designers/"&gt;Tutorial de jQuery en WebDesignerWall&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://ajaxian.com/by/topic/jquery"&gt;jQuery en Ajaxian&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/5696605230782728323/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=5696605230782728323" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/5696605230782728323?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/5696605230782728323?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/404570007/rbol-ajax-con-jquery.html" title="Árbol Ajax con jQuery" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_j7c0Q8AS2HM/SN4DKdJDhVI/AAAAAAAACEU/qQNaY9Yw6dk/s72-c/jquery-file-tree.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/09/rbol-ajax-con-jquery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIAQH8-fyp7ImA9WxRRFEg.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-4580186359808365224</id><published>2008-09-26T19:23:00.003+02:00</published><updated>2008-09-26T19:35:41.157+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-26T19:35:41.157+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>RESTFul Web Services con JAX-RS</title><content type="html">Estas son algunas implementaciones de la especificación JAX-RS (&lt;a href="https://jsr311.dev.java.net/"&gt;JSR-311&lt;/a&gt;) para construir &lt;a href="http://es.wikipedia.org/wiki/Representational_State_Transfer"&gt;RESTFul&lt;/a&gt; Web Services:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://jersey.dev.java.net/" onclick="javascript:pageTracker._trackPageview ('/outbound/jersey.dev.java.net');"&gt;Jersey&lt;/a&gt; - Parte de &lt;a href="https://glassfish.dev.java.net/" onclick="javascript:pageTracker._trackPageview ('/outbound/glassfish.dev.java.net');"&gt;Glassfish&lt;/a&gt; (Servidor JEE open source de SUN).&lt;/li&gt;&lt;li&gt;&lt;a href="http://cxf.apache.org/" onclick="javascript:pageTracker._trackPageview ('/outbound/cxf.apache.org');"&gt;CXF&lt;/a&gt; - Antes XFire, de Apache.&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.jboss.org/wiki/RESTeasy" onclick="javascript:pageTracker._trackPageview ('/outbound/wiki.jboss.org');"&gt;RESTeasy&lt;/a&gt; - Implementación de JBoss.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.restlet.org/" onclick="javascript:pageTracker._trackPageview ('/outbound/www.restlet.org');"&gt;Restlet&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Ver &lt;a href="http://java.dzone.com/articles/putting-java-rest"&gt;este ejemplo en DZone&lt;/a&gt; donde se mapean los servicios mediante anotaciones:&lt;br /&gt;  &lt;blockquote&gt;@Path("/orders") &lt;br /&gt;  public class OrderEntryService { &lt;br /&gt;        @GET &lt;br /&gt;        @Path("{id}") &lt;br /&gt;        @Produces("application/xml") &lt;br /&gt;        public String getOrder(@PathParm("id") int orderId) &lt;br /&gt;        { &lt;br /&gt;           ... &lt;br /&gt;        } &lt;br /&gt;  }  &lt;/blockquote&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/4580186359808365224/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=4580186359808365224" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/4580186359808365224?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/4580186359808365224?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/403978967/restful-web-services-con-jax-rs.html" title="RESTFul Web Services con JAX-RS" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/09/restful-web-services-con-jax-rs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAGSX0yfip7ImA9WxRSGEk.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-1232547621138937855</id><published>2008-09-18T22:34:00.004+02:00</published><updated>2008-09-19T19:18:48.396+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-19T19:18:48.396+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programación" /><title>Fluent Interface</title><content type="html">Qué fácil es utilizar una interfaz de la forma:&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;&lt;br /&gt;customer.newOrder().with(6, "TAL")&lt;br /&gt;                .with(5, "HPK").skippable()&lt;br /&gt;                .with(3, "LGV")&lt;br /&gt;                .priorityRush();&lt;br /&gt;&lt;/blockquote&gt;&lt;/pre&gt;&lt;br /&gt;en vez de:&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;Order o1 = new Order();&lt;br /&gt;     customer.addOrder(o1);&lt;br /&gt;     OrderLine line1 = new OrderLine(6, Product.find("TAL"));&lt;br /&gt;     o1.addLine(line1);&lt;br /&gt;     OrderLine line2 = new OrderLine(5, Product.find("HPK"));&lt;br /&gt;     o1.addLine(line2);&lt;br /&gt;     OrderLine line3 = new OrderLine(3, Product.find("LGV"));&lt;br /&gt;     o1.addLine(line3);&lt;br /&gt;     line2.setSkippable(true);&lt;br /&gt;     o1.setRush(true);&lt;/blockquote&gt;&lt;br /&gt;&lt;/pre&gt;Ver más sobre fluent interface en la web de &lt;a href="http://martinfowler.com/bliki/FluentInterface.html"&gt;Martin Fowler&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Un ejemplo de herramienta con este tipo de interfaz es &lt;a href="http://code.google.com/p/xmltool/wiki/Manual"&gt;xmltool&lt;/a&gt;, para manipular documentos XML.</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/1232547621138937855/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=1232547621138937855" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/1232547621138937855?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/1232547621138937855?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/396552645/fluent-interface.html" title="Fluent Interface" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/09/fluent-interface.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IFRX45cCp7ImA9WxRSE08.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-338171076044374652</id><published>2008-09-13T17:43:00.002+02:00</published><updated>2008-09-13T17:58:34.028+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-13T17:58:34.028+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>De objetos Java a XML y viceversa</title><content type="html">Estos son algunos motores de mapeo O/X, es decir, utilidades que permiten serializar un objeto Java a XML (también llamado "marshalling") o parsear un fichero XML para construir un objeto Java ("unmarshalling").&lt;br /&gt;El objeto Java a mapear podrá contener otros objetos y así sucesivamente, formando grafos arbitrariamente complejos.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://jaxb.dev.java.net/"&gt;JAXB&lt;/a&gt; de Glassfish.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.castor.org/"&gt;Castor&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://xmlbeans.apache.org/"&gt;XMLBeans&lt;/a&gt; de Apache.&lt;/li&gt;&lt;li&gt;&lt;a href="http://jibx.sourceforge.net/"&gt;JiXB&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://xstream.codehaus.org/"&gt;XStream&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://static.springframework.org/spring-ws/sites/1.5/reference/html/oxm.html"&gt;Spring OXM&lt;/a&gt; es un framework que es capaz de encapsular cualquiera de estas utilidades con una interfaz común, aunque con diferentes opciones de funcionamiento y configuración según el producto seleccionado.&lt;br /&gt;Esta abstracción de Spring permite que la configuración sea más sencilla, proporciona una interfaz y unas excepciones homogéneas, de forma que se pueda sustituir un producto por otro sin realizar cambios en la programación (o con pequeños cambios).&lt;br /&gt;&lt;br /&gt;En fin: al estilo de Spring...</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/338171076044374652/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=338171076044374652" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/338171076044374652?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/338171076044374652?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/391634813/de-objetos-java-xml-y-viceversa.html" title="De objetos Java a XML y viceversa" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/09/de-objetos-java-xml-y-viceversa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MNR38yeSp7ImA9WxRTGUQ.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-4230528093550822761</id><published>2008-09-09T23:13:00.004+02:00</published><updated>2008-09-09T23:24:56.191+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-09T23:24:56.191+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Groovy" /><title>Ejecución de scripts desde Java</title><content type="html">&lt;a href="http://www.springframework.org/" title="Spring Framework"&gt;Spring&lt;/a&gt; es capaz de integrar la ejecución de scripts de lenguajes dinámicos como &lt;a href="http://groovy.codehaus.org/" title="Groovy"&gt;Groovy&lt;/a&gt;, JRuby y BeanShell.&lt;br /&gt;&lt;br /&gt;En el caso de Groovy basta añadir las librerías groovy-1.0.jar, asm-2.2.2.jar y antlr-2.7.6.jar que vienen con la propia distribución del producto.&lt;br /&gt;De esta manera, implementando una clase en Groovy y su interfaz en Java, podrá verse como cualquier otro bean de Spring configurando el contexto de la siguiente manera:&lt;br /&gt;&lt;pre class="xml xml"  style="font-family:monospace;"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;&lt;lang:groovy&gt;&lt;/lang:groovy&gt;&lt;/span&gt; &lt;span style="color: rgb(0, 0, 102);"&gt;&amp;lt;id&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;"messenger"&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;        &lt;span style="color: rgb(0, 0, 102);"&gt;script-source&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;"classpath:Messenger.groovy"&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;        &lt;span style="color: rgb(0, 0, 102);"&gt;refresh-check-delay&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 0);"&gt;"1000"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); font-weight: bold;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;Además, indicando el parámetro &lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;refresh-check-delay&lt;/span&gt;&lt;/span&gt;  podrán realizarse cambios en caliente !!&lt;br /&gt;&lt;br /&gt;Ya se me ocurren algunas formas de usarlo...&lt;br /&gt;&lt;br /&gt;(Vía&lt;a href="http://wiki.dosideas.com/Groovy_Con_Spring"&gt; DosIdeas.com&lt;/a&gt;).</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/4230528093550822761/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=4230528093550822761" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/4230528093550822761?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/4230528093550822761?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/388034681/ejecucin-de-scripts-desde-java.html" title="Ejecución de scripts desde Java" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/09/ejecucin-de-scripts-desde-java.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYCRnc9fip7ImA9WxRTGE8.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-5845936405130668108</id><published>2008-09-07T23:14:00.005+02:00</published><updated>2008-09-07T23:49:27.966+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-07T23:49:27.966+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blogger" /><title>Una semana sin blog</title><content type="html">Es lo que puede ocurrir cuando no controlas todos los hilos...&lt;br /&gt;&lt;br /&gt;Cuando intentamos mapear un subdominio propio (web.elholgazan.com) con el servicio Google Pages de &lt;a href="http://www.google.com/a"&gt;Google Apps&lt;/a&gt;, por un error en el propio Google Pages perdimos la asociación del dominio principal alojado en Blogger (www.elholgazan.com),  ya que Google Apps y Blogger comparten repositorio de DNS.&lt;br /&gt;El resultado: un &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;"&lt;span style="font-weight: bold;"&gt;Server Not Found. Error 404&lt;/span&gt;"  que se ha estado viendo durante una semana cuando se intentaba acceder a "el holgazán".&lt;br /&gt;&lt;br /&gt;La solución que daban en Blogger era la de eliminar la asociación del blog con el dominio personalizado y volver a crearla... pero entonces ocurría un &lt;span style="font-weight: bold;"&gt;error bX-f42977 de Blogger&lt;/span&gt; que parece ser que ya han resuelto.&lt;br /&gt;&lt;br /&gt;Ver más información en los &lt;a href="http://knownissues.blogspot.com/2008/08/some-users-with-custom-domains-are.html"&gt;errores conocidos de Blogger&lt;/a&gt; o en &lt;a href="http://www.google.com/search?q=bX-f42977"&gt;numerosas páginas de Internet que hablan de ello&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Moraleja: hay que tener siempre un plan B, una acción de contingencia.&lt;br /&gt;&lt;br /&gt;¿Otra cuenta de Blogger de respaldo? ¿Otro alojamiento? ¿Es sencillo migrar de Blogger a WordPress?</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/5845936405130668108/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=5845936405130668108" title="3 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/5845936405130668108?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/5845936405130668108?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/386099398/una-semana-sin-blog.html" title="Una semana sin blog" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/09/una-semana-sin-blog.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UMQX0zfyp7ImA9WxdaGU8.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-1117532177998733716</id><published>2008-08-28T15:12:00.002+02:00</published><updated>2008-08-28T15:14:40.387+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-28T15:14:40.387+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="proyectos" /><category scheme="http://www.blogger.com/atom/ns#" term="citas" /><title>El cerdo y la gallina</title><content type="html">Tomado de la wikipedia, en relación a la metodología &lt;a href="http://es.wikipedia.org/wiki/Scrum"&gt;SCRUM&lt;/a&gt;:&lt;br /&gt;&lt;p class="frase"&gt;Un cerdo y una gallina se encuentran en la calle. La gallina mira al cerdo y dice, "Hey, ¿por qué no abrimos un restaurante?" El cerdo mira a la gallina y le dice, "Buena idea, ¿cómo se llamaría el restaurante?" La gallina piensa un poco y contesta, "¿Por qué no lo llamamos 'Huevos con jamón'? "Lo siento pero no", dice el cerdo, "Yo estaría comprometido pero tu solamente estarías involucrada".&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/1117532177998733716/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=1117532177998733716" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/1117532177998733716?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/1117532177998733716?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/377129501/el-cerdo-y-la-gallina.html" title="El cerdo y la gallina" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/08/el-cerdo-y-la-gallina.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YBSXc-fyp7ImA9WxdaGU8.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-4002621188163195648</id><published>2008-08-28T14:50:00.004+02:00</published><updated>2008-08-28T15:12:38.957+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-28T15:12:38.957+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="proyectos" /><category scheme="http://www.blogger.com/atom/ns#" term="programación" /><title>A qué huelen los proyectos</title><content type="html">A veces hemos escuchado decir "esté código huele mal"... pues bien, en &lt;a href="http://wiki.java.net/bin/view/People/SmellsToRefactorings"&gt;este catálogo&lt;/a&gt; se recopilan los "olores" relacionados con la refactorización del &lt;span style="font-weight: bold;"&gt;código&lt;/span&gt;, es decir, aquellos indicios de que algo no se está haciendo del todo bien y de que puede ser necesario realizar algún tipo de refactorización.&lt;br /&gt;Algunos ejemplos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Comentarios&lt;/span&gt;: deben usarse sólo para aclarar el "por qué" y no el "qué". Demasiados comentarios pueden reducir la claridad. En estos casos se puede &lt;a href="Extract%20Method%20Rename%20Method%20Introduce%20Assertion"&gt;extraer un método&lt;/a&gt;, &lt;a href="http://www.refactoring.com/catalog/renameMethod.html"&gt;renombrar un método&lt;/a&gt; o&lt;a href="http://www.refactoring.com/catalog/introduceAssertion.html"&gt; introducir una aserción&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Métodos largos&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Demasiados parámetros&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.java.net/bin/view/People/SmellsToRefactorings"&gt;Etc&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;De la misma manera, si la &lt;span style="font-weight: bold;"&gt;metodología &lt;/span&gt;que utilizais en el proyecto es &lt;a href="http://es.wikipedia.org/wiki/Scrum"&gt;SCRUM&lt;/a&gt;, en &lt;a href="http://scrumcommunity.pbwiki.com/Scrum+Smells"&gt;este catálogo&lt;/a&gt; se recojen aquellos "olores" que indican que algo puede ir mal y se presentan algunas alternativas para resolverlos.&lt;br /&gt;Ejemplos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.scrumalliance.org/articles/34-scrum-smells-loss-of-rhythm"&gt;Pérdida de ritmo&lt;/a&gt;: las reuniones periódicas dejan de mantenerse, o cambian de horario constantemente, o se vuelven incosistentes, etc.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.scrumalliance.org/articles/33-scrum-smells-talking-chickens"&gt;Gallinas parlanchinas&lt;/a&gt;: personal externo que habla en las reuniones diarias, prioridades o planificaciones que cambian fuera de estas reuniones, etc. Algunos remedios: no permitir hablar a las gallinas, mantener a las gallinas fuera de la pocilga de los cerdos, etc.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.scrumalliance.org/articles/49-missing-pigs"&gt;Desaparecen los cerdos&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://scrumcommunity.pbwiki.com/Scrum+Smells"&gt;Etc&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;Demasiados olores, ¿no?&lt;br /&gt;¿Algo que huela mejor?</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/4002621188163195648/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=4002621188163195648" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/4002621188163195648?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/4002621188163195648?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/377117173/qu-huelen-los-proyectos.html" title="A qué huelen los proyectos" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/08/qu-huelen-los-proyectos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YDQXY5eip7ImA9WxRTEE0.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-5307483934312170751</id><published>2008-08-28T11:49:00.008+02:00</published><updated>2008-08-29T11:12:50.822+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-29T11:12:50.822+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="proyectos" /><title>Rebaños de caballos y carreras de ovejas</title><content type="html">&lt;a href="http://www.infoq.com/presentations/Developing-Expertise-Dave-Thomas"&gt;Dave Tomas&lt;/a&gt; comenta que el software lo hacen las personas, no las herramientas, los procesos y las metodologías.&lt;br /&gt;De hecho, señala cómo el número de bugs en 1000 líneas de código se mantiene desde hace 25 años: aunque las herramientas han evolucionado, las personas son similares, y seguimos cometiendo los mismos errores.&lt;br /&gt;&lt;br /&gt;Con "rebaños de caballos y carreras de ovejas" se refiere a la práctica muy común de tratar a todos los miembros de un equipo de la misma manera, esperando respuestas brillantes de los principiantes y tratando a los expertos como si fueran novatos.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Dave muestra el modelo Dreyfus, que presenta 5 niveles de experiencia en las personas:&lt;/p&gt; &lt;ol&gt;&lt;li&gt;&lt;strong&gt;Principiante:&lt;/strong&gt; sin experiencia o con poca experiencia. Necesitan que se les diga qué hacer y requieren objetivos a corto plazo.  &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Principiante Avanzado:&lt;/strong&gt; tienen más experiencia, han comenzado a observar patrones en su propia actividad, han empezado a integrar cosas por sí mismos, pero aún requieren que se les diga qué hay que hacer. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Competente:&lt;/strong&gt; saben lo que hay que hacer y pueden planificar su actividad. Son buenos en su dominio.  &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Hábiles:&lt;/strong&gt; han descubierto otros dominios además del suyo propio y comienzan a explorarlo.  &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Expertos:&lt;/strong&gt; son los genios de sus equipos, puedan dar todo tipo de respuestas en muchos ámbitos, y están interesados e probar cosas simplemente para ver si funcionan. &lt;/li&gt;&lt;/ol&gt;Un pequeño consejo que nos da:&lt;br /&gt;&lt;p class="frase"&gt;No permitas nunca a un experto que elija la arquitectura de un nuevo proyecto. Simplemente sienten la necesidad de ver si la solución funciona.&lt;/p&gt;(Vía &lt;a href="http://www.infoq.com/news/2008/07/Developing-Expertise-Dave-Thomas"&gt;InfoQ&lt;/a&gt;).</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/5307483934312170751/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=5307483934312170751" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/5307483934312170751?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/5307483934312170751?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/377006955/rebaos-de-caballos-y-carreras-de-obejas.html" title="Rebaños de caballos y carreras de ovejas" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/08/rebaos-de-caballos-y-carreras-de-obejas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUENSXYzfCp7ImA9WxdaGEk.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-6025160206279902045</id><published>2008-08-27T16:06:00.005+02:00</published><updated>2008-08-27T16:34:58.884+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-27T16:34:58.884+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="móvil" /><category scheme="http://www.blogger.com/atom/ns#" term="Internet" /><title>Comunícate con códigos QR</title><content type="html">Puedes &lt;a href="http://qrcode.kaywa.com/"&gt;generar&lt;/a&gt; el código QR para una URL, un texto, un número de teléfono o un SMS, en diferentes tamaños.&lt;br /&gt;Este es el código pequeño de http://www.elholgazan.com:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;img src="http://qrcode.kaywa.com/img.php?s=5&amp;amp;d=http%3A%2F%2Fwww.elholgazan.com" alt="qrcode"  /&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://qrcode.kaywa.com/img.php?s=5&amp;amp;d=http%3A%2F%2Fwww.elholgazan.com" alt="qrcode" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;¿Que cuál es su utilidad?&lt;br /&gt;Con &lt;a href="http://reader.kaywa.com/"&gt;Kaywa Reader&lt;/a&gt; instalado en tu móvil puedes hacer una fotografía del código y obtener así la información subyacente.&lt;br /&gt;&lt;br /&gt;Vamos a probarlo: adivina qué es esto!&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://1.bp.blogspot.com/_j7c0Q8AS2HM/SLVltZ4AUDI/AAAAAAAABnk/zyygHK0LzSg/s400/qrcode.png" alt="" id="BLOGGER_PHOTO_ID_5239205572229746738" border="0" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;OJO: Al hacer la foto puede que tengas que poner la camara apaisada. Suerte!</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/6025160206279902045/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=6025160206279902045" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/6025160206279902045?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/6025160206279902045?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/376231503/comuncate-con-cdigos-qr.html" title="Comunícate con códigos QR" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_j7c0Q8AS2HM/SLVltZ4AUDI/AAAAAAAABnk/zyygHK0LzSg/s72-c/qrcode.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/08/comuncate-con-cdigos-qr.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4GRX46eyp7ImA9WxdaGU8.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-8714436707942633577</id><published>2008-08-27T15:05:00.009+02:00</published><updated>2008-08-28T13:28:44.013+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-28T13:28:44.013+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>OSGi no es otro buzzword</title><content type="html">&lt;a href="http://sebastien-arbogast.com/"&gt;Estamos de acuerdo&lt;/a&gt; en que &lt;a href="http://www.osgi.org/"&gt;OSGi&lt;/a&gt; va a cambiar nuestra forma de desarrollar, que la "orientación a servicios" va a ser algo más que otro &lt;a href="http://en.wikipedia.org/wiki/Buzzword"&gt;buzzword&lt;/a&gt; (SOA).&lt;br /&gt;&lt;br /&gt;Algunas plataformas de orientación a servicios OSGi, que permiten instalar, iniciar, detener, desinstalar, etc. los llamados "bundles" (módulos):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://felix.apache.org/"&gt;Apache Felix&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/equinox/"&gt;Eclipse Equinox&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.knopflerfish.org/"&gt;Knopflerfish&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://www.springframework.org/osgi"&gt;Spring Dynamic Modules&lt;/a&gt; facilita el desarrollo con plataformas OSGi.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://techdistrict.kirkk.com/2008/04/17/simple-osgi-service/"&gt;Un ejemplo de servicio OSGi "Hola mundo"&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Un bundle servidor &lt;a href="http://code.google.com/p/kcode/source/browse/trunk/osgi/HelloWorld/service/src/com/extensiblejava/hello/service/impl/HelloServiceImpl.java"&gt;HelloServiceImpl&lt;/a&gt; implementa y &lt;a href="http://code.google.com/p/kcode/source/browse/trunk/osgi/HelloWorld/service/META-INF/Manifest.mf"&gt;exporta&lt;/a&gt; la interfaz &lt;a href="http://code.google.com/p/kcode/source/browse/trunk/osgi/HelloWorld/service/src/com/extensiblejava/hello/service/HelloService.java"&gt;HelloService&lt;/a&gt;.  Además, implementa la interfaz &lt;span style="font-style: italic;"&gt;BundleActivator&lt;/span&gt;, de forma que la plataforma OSGi ejecute los métodos &lt;span style="font-style: italic;"&gt;start &lt;/span&gt;y &lt;span style="font-style: italic;"&gt;stop &lt;/span&gt;cuando la plataforma inicie o detenga el bundle. En este método &lt;span style="font-style: italic;"&gt;start &lt;/span&gt;el objeto puede registrarse como servicio en la plataforma.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Un bundle cliente &lt;a href="http://code.google.com/p/kcode/source/browse/trunk/osgi/HelloWorld/client/src/com/extensiblejava/hello/client/HelloConsumer.java"&gt;HelloConsumer&lt;/a&gt; usa e &lt;a href="http://code.google.com/p/kcode/source/browse/trunk/osgi/HelloWorld/client/META-INF/Manifest.mf"&gt;importa&lt;/a&gt; el servicio HelloService. Siendo también un &lt;span style="font-style: italic;"&gt;BundleActivator&lt;/span&gt;, en el método &lt;span style="font-style: italic;"&gt;start &lt;/span&gt;obtiene el contexto de la plataforma OSGi, a partir del cual puede obtener el servicio y utilizarlo.&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://techdistrict.kirkk.com/2007/10/17/enterprise-osgi/"&gt;Algunas ventajas&lt;/a&gt; de estos sistemas de módulos dinámicos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Desarrollo e instalación más modular.&lt;/li&gt;&lt;li&gt;Mejor gestión de las dependencias.&lt;/li&gt;&lt;li&gt;Módulos con gestión de versiones.&lt;/li&gt;&lt;li&gt;(Re)Despliegue individualizado y dinámico de los módulos.&lt;/li&gt;&lt;li&gt;Control de activación/desactivación de los módulos.&lt;/li&gt;&lt;/ul&gt;Aunque el &lt;a href="http://www.infoq.com/news/2007/08/osgi-jsr277-debate"&gt;debate entre OSGi (JSR 291) y la JSR 277 continúa&lt;/a&gt;...</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/8714436707942633577/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=8714436707942633577" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/8714436707942633577?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/8714436707942633577?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/376201626/osgi-no-es-un-buzzword.html" title="OSGi no es otro buzzword" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/08/osgi-no-es-un-buzzword.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMDQHs4eyp7ImA9WxdaF0k.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-8857453578945102784</id><published>2008-08-26T11:35:00.004+02:00</published><updated>2008-08-26T11:54:31.533+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-26T11:54:31.533+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ajax" /><title>SmartClient: a la altura de Ext JS</title><content type="html">&lt;a href="http://www.smartclient.com"&gt;SmartClient&lt;/a&gt; es un framework Ajax con bastantes capacidades (a la altura de &lt;a href="http://extjs.com/"&gt;Ext JS&lt;/a&gt;), con diferentes opciones de &lt;a href="http://www.smartclient.com/product/licensing.jsp"&gt;licencia&lt;/a&gt; (una de ellas LGPL) y buena &lt;a href="http://www.smartclient.com/product/documentation.jsp"&gt;documentación&lt;/a&gt;. Además, parece ser bastante maduro y &lt;a href="http://www.smartclient.com/product/showcase.jsp"&gt;está siendo usado&lt;/a&gt; por bastantes sistemas en producción.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.smartclient.com/index.jsp#_Welcome"&gt;Ver demos&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Merece la pena &lt;a href="http://www.smartclient.com/product/download.jsp"&gt;descargarlo&lt;/a&gt; y echarle un vistazo.&lt;br /&gt;&lt;br /&gt;¿Alguien lo ha usado? ¿algún comentario?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.isomorphic.dreamhosters.com/?p=51"&gt;Una noticia reciente&lt;/a&gt;: &lt;a href="http://www.jroller.com/sjivan/" target="_blank"&gt;Sanjiv Jivan&lt;/a&gt;, el creador de &lt;a href="http://gwt-ext.com/"&gt;GWT-Ext&lt;/a&gt;, anuncia SmartGWT, un wrapper GWT para SmartClient.</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/8857453578945102784/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=8857453578945102784" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/8857453578945102784?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/8857453578945102784?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/375094018/smartclient-la-altura-de-ext-js.html" title="SmartClient: a la altura de Ext JS" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/08/smartclient-la-altura-de-ext-js.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMHRnw9eCp7ImA9WxdaF00.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-2439919920270628744</id><published>2008-08-25T21:42:00.003+02:00</published><updated>2008-08-26T00:30:37.260+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-26T00:30:37.260+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BBDD" /><title>Paginar datos con una sola query</title><content type="html">Un requisito bastante frecuente es el de realizar una consulta en una base de datos que devuelva sólo los &lt;span style="font-weight: bold;"&gt;registros correspondientes a una página concreta&lt;/span&gt; (para no recibir y almacenar todos los registros, que pueden ser bastantes), a la vez que devuelve también el &lt;span style="font-weight: bold;"&gt;total de registros&lt;/span&gt; existentes en la base de datos.&lt;br /&gt;Habitualmente se recurre a realizar 2 consultas diferentes (con el consiguiente efecto en el rendimiento de la aplicación).&lt;br /&gt;He aquí una forma de resolverlo con &lt;span style="font-weight: bold;"&gt;una única consulta&lt;/span&gt; en &lt;span style="font-weight: bold;"&gt;Oracle&lt;/span&gt;, usando &lt;a href="http://www.orafaq.com/node/55"&gt;funciones analíticas&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;SELECT product_name,&lt;br /&gt; product_details,&lt;br /&gt; total_rows&lt;br /&gt;FROM   (&lt;br /&gt;  SELECT product_name,&lt;br /&gt;         product_details,&lt;br /&gt;         total_rows,&lt;br /&gt;         rownum row_counter&lt;br /&gt;  FROM   (&lt;br /&gt;          SELECT product_name,&lt;br /&gt;                 product_details,&lt;br /&gt;                 count(*) OVER () total_rows&lt;br /&gt;          FROM   products&lt;br /&gt;          WHERE product_name like '%Television%'&lt;br /&gt;          ORDER BY product_name&lt;br /&gt;         )&lt;br /&gt; )&lt;br /&gt;WHERE row_counter between v_start_row and v_end_row;&lt;/blockquote&gt;&lt;/pre&gt;&lt;br /&gt;En &lt;a href="http://www.singlequery.com/2007/05/oracle-web-development-pagination-with-a-single-query/"&gt;SingleQuery.com&lt;/a&gt; nos muestran también una forma en que se puede optimizar la consulta cuando la ordenación es por un identificador único numérico.&lt;br /&gt;Además muestran como resolver el caso en que se requiera mantener una misma imagen de los datos aunque se inserten o eliminen registros.</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/2439919920270628744/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=2439919920270628744" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/2439919920270628744?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/2439919920270628744?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/374558854/paginar-datos-con-una-sola-query.html" title="Paginar datos con una sola query" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/08/paginar-datos-con-una-sola-query.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UGRHwyfip7ImA9WxdaFkU.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-6516454321677937775</id><published>2008-08-25T18:16:00.003+02:00</published><updated>2008-08-25T18:20:25.296+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-25T18:20:25.296+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BBDD" /><title>Crea un índice para todas tus foreign keys</title><content type="html">Una query muy útil para comprobar si todas tus foreign keys tienen un índice.&lt;br /&gt;Es para &lt;span style="font-weight: bold;"&gt;Oracle&lt;/span&gt;. Parece ser que MySQL hace esto automáticamente.&lt;br /&gt;&lt;blockquote&gt;SELECT OWNER, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME&lt;br /&gt; FROM DBA_CONS_COLUMNS c&lt;br /&gt; WHERE position=1 AND&lt;br /&gt;  (OWNER, TABLE_NAME, COLUMN_NAME) IN&lt;br /&gt;  (SELECT c.OWNER, c.TABLE_NAME,cc.COLUMN_NAME&lt;br /&gt;     FROM DBA_CONSTRAINTS  c, DBA_CONS_COLUMNS cc&lt;br /&gt;    WHERE c.CONSTRAINT_NAME = cc.CONSTRAINT_NAME&lt;br /&gt;      AND c.TABLE_NAME       = cc.TABLE_NAME&lt;br /&gt;      AND c.OWNER           = cc.OWNER&lt;br /&gt;      AND c.CONSTRAINT_TYPE = 'R'&lt;br /&gt;      AND cc.POSITION       = 1&lt;br /&gt;      AND c.OWNER           LIKE UPPER('TEST_USER')&lt;br /&gt;    MINUS&lt;br /&gt;   SELECT table_owner, table_name, column_name&lt;br /&gt;     FROM DBA_IND_COLUMNS&lt;br /&gt;    WHERE COLUMN_POSITION = 1&lt;br /&gt;      AND TABLE_OWNER LIKE UPPER('TEST_USER')&lt;br /&gt; )&lt;br /&gt; ORDER BY OWNER, TABLE_NAME, CONSTRAINT_NAME;&lt;br /&gt;&lt;/blockquote&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/6516454321677937775/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=6516454321677937775" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/6516454321677937775?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/6516454321677937775?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/374397390/crea-un-ndice-para-todas-tus-foreign.html" title="Crea un índice para todas tus foreign keys" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/08/crea-un-ndice-para-todas-tus-foreign.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMGQn0-eSp7ImA9WxdbFEk.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-4055036551953869930</id><published>2008-08-11T10:17:00.004+02:00</published><updated>2008-08-11T10:30:23.351+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-11T10:30:23.351+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Internet" /><category scheme="http://www.blogger.com/atom/ns#" term="programación" /><title>Tutoriales W3Schools</title><content type="html">&lt;a href="http://w3schools.com/"&gt;W3Shools&lt;/a&gt; tiene unos tutoriales bastante interesantes.&lt;br /&gt;Escuetos y sintéticos: para holgazanes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sobre HTML: &lt;/b&gt;&lt;a class="left" href="http://w3schools.com/html/default.asp" target="_top"&gt;HTML&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/xhtml/default.asp" target="_top"&gt;XHTML&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/css/default.asp" target="_top"&gt;CSS&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/tcpip/default.asp" target="_top"&gt;TCP/IP&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sobre XML: &lt;/b&gt;&lt;a class="left" href="http://w3schools.com/xml/default.asp" target="_top"&gt;XML&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/dtd/default.asp" target="_top"&gt;DTD&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/dom/default.asp" target="_top"&gt;XML DOM&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/xsl/xsl_languages.asp" target="_top"&gt;XSL&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/xsl/default.asp" target="_top"&gt;XSLT&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/xslfo/default.asp" target="_top"&gt;XSL-FO&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/xpath/default.asp" target="_top"&gt;XPath&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/xquery/default.asp" target="_top"&gt;XQuery&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/xlink/default.asp" target="_top"&gt;XLink&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/xlink/default.asp" target="_top"&gt;XPointer&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/schema/default.asp" target="_top"&gt;Schema&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/xforms/default.asp" target="_top"&gt;XForms&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/soap/default.asp" target="_top"&gt;SOAP&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/wsdl/default.asp" target="_top"&gt;WSDL&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/rdf/default.asp" target="_top"&gt;RDF&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/rss/default.asp" target="_top"&gt;RSS&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/wap/default.asp" target="_top"&gt;WAP&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/webservices/default.asp" target="_top"&gt;Web Services&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sobre scripts en cliente: &lt;/b&gt;&lt;a class="left" href="http://w3schools.com/js/default.asp" target="_top"&gt;JavaScript&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/htmldom/default.asp" target="_top"&gt;HTML DOM&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/dhtml/default.asp" target="_top"&gt;DHTML&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/vbscript/default.asp" target="_top"&gt;VBScript&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/ajax/default.asp" target="_top"&gt;AJAX&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/e4x/default.asp" target="_top"&gt;E4X&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/wmlscript/default.asp" target="_top"&gt;WMLScript&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sobre scripts en servidor: &lt;/b&gt;&lt;a class="left" href="http://w3schools.com/sql/default.asp" target="_top"&gt;SQL&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/asp/default.asp" target="_top"&gt;ASP&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/ado/default.asp" target="_top"&gt;ADO&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/php/default.asp" target="_top"&gt;PHP&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sobre .NET: &lt;/b&gt;&lt;a class="left" href="http://w3schools.com/ngws/default.asp" target="_top"&gt;.NET Microsoft&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/aspnet/default.asp" target="_top"&gt;.NET ASP&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/dotnetmobile/default.asp" target="_top"&gt;.NET Mobile&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sobre multimedia&lt;/b&gt;: &lt;a class="left" href="http://w3schools.com/media/default.asp" target="_top"&gt;Media&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/smil/default.asp" target="_top"&gt;SMIL&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/svg/default.asp" target="_top"&gt;SVG&lt;/a&gt;, &lt;a class="left" href="http://w3schools.com/flash/default.asp" target="_top"&gt;Flash&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Incluye además algunas &lt;span style="font-weight: bold;"&gt;guías de referencia&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a class="right" href="http://w3schools.com/tags/default.asp" target="_top"&gt;HTML 4.01&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="right" href="http://w3schools.com/tags/default.asp" target="_top"&gt;XHTML 1.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="right" href="http://w3schools.com/css/css_reference.asp" target="_top"&gt;CSS 2.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="right" href="http://w3schools.com/jsref/default.asp" target="_top"&gt;JavaScript&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="right" href="http://w3schools.com/htmldom/dom_reference.asp" target="_top"&gt;HTML DOM&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="right" href="http://w3schools.com/dom/dom_nodetype.asp" target="_top"&gt;XML DOM&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="right" href="http://w3schools.com/php/php_ref_array.asp" target="_top"&gt;PHP 5.1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="right" href="http://w3schools.com/xsl/xsl_w3celementref.asp" target="_top"&gt;XSLT 1.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="right" href="http://w3schools.com/xpath/xpath_functions.asp" target="_top"&gt;XPath 2.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="right" href="http://w3schools.com/xslfo/xslfo_reference.asp" target="_top"&gt;XSL-FO&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="right" href="http://w3schools.com/wap/wml_reference.asp" target="_top"&gt;WML 1.1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="right" href="http://w3schools.com/tags/ref_colornames.asp" target="_top"&gt;HTML Colors&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;¿Conoces algún otro sitio con tutoriales así de sencillos?&lt;br /&gt;         &lt;b&gt;&lt;/b&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/4055036551953869930/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=4055036551953869930" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/4055036551953869930?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/4055036551953869930?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/361754848/tutoriales-w3schools.html" title="Tutoriales W3Schools" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/08/tutoriales-w3schools.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YGR309fip7ImA9WxdbEko.&quot;"><id>tag:blogger.com,1999:blog-7066997711286640384.post-5680441773434206766</id><published>2008-08-09T11:03:00.009+02:00</published><updated>2008-08-09T11:45:26.366+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-09T11:45:26.366+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="proyectos" /><title>Aplicaciones para la gestión de proyectos</title><content type="html">Algunas aplicaciones expuestas en &lt;a href="http://tutorialblog.org/freelancers-manage-your-projects/"&gt;tutorialblog.org&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.basecamphq.com/"&gt;Basecamp&lt;/a&gt; - De 37 signals. &lt;a href="http://www.basecamphq.com/signup"&gt;Ver precios&lt;/a&gt;, entre 24$ y 149$ mes.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.activecollab.com/"&gt;Active Collab&lt;/a&gt; - Puedes &lt;a href="http://www.activecollab.com/pricing/"&gt;comprar el producto&lt;/a&gt;, código fuente incluido, entre 199$ y 399$ (soporte y actualizaciones a parte).&lt;/li&gt;&lt;li&gt;&lt;a href="http://goplan.info/"&gt;Go Plan&lt;/a&gt; - Puedes usarlo a diferentes &lt;a href="http://goplan.info/plans/"&gt;precios&lt;/a&gt;, entre 10$ y 100$ mes, según capacidad de almacenamiento.  Tiene una opción gratuita limitada en funcionalidad.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.copperproject.com/"&gt;Copper&lt;/a&gt; - Se puede comprar (499$ - 2999$) o bien usar las opciones de alojamiento en sus servidores (29$ - 199$ mes). &lt;a href="http://www.copperproject.com/buy.php"&gt;Ver más&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.wrike.com/"&gt;Wrike&lt;/a&gt; - Entre &lt;a href="https://www.wrike.com/gotoregistration.htm?account=paid"&gt;3,99$ y 11,99$&lt;/a&gt; por usuario y mes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nozbe.com/"&gt;Nozbe&lt;/a&gt; - Utiliza el método "Getting Things Done" ("Organízate con Eficacia"). Se puede usar a &lt;a href="http://www.nozbe.com/es/signup"&gt;diferentes precios&lt;/a&gt;, según número de usuarios, capacidad y forma de pago.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.redmine.org/"&gt;Redmine &lt;/a&gt;- Open source (GPLv2). Realizado en Ruby on Rails. &lt;a href="http://rubyforge.org/frs/?group_id=1850"&gt;Descargar&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.actionthis.com/"&gt;ActionThis&lt;/a&gt; - 10$ al mes, grátis para uso personal. &lt;a href="http://www.actionthis.com/HowToBuy"&gt;Ver más&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.achievo.org/"&gt;Achievo&lt;/a&gt; - Open Source. &lt;a href="http://www.achievo.org/download/"&gt;Descargar&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://projects.zoho.com/"&gt;Zoho Projects&lt;/a&gt; - Se puede usar gratis para un proyecto o para proyectos open source. Hasta 80$ mes para empresas sin límites de proyectos. &lt;a href="https://projects.zoho.com/signupplan.na"&gt;Ver más&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.project2manage.com/"&gt;Project 2 Manage&lt;/a&gt; - Se puede usar gratuitamente.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.devshop.com/"&gt;DevShop&lt;/a&gt; - Gratis para un usuario, 24$ por usuario y mes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.openworkbench.org/"&gt;Open Workbench&lt;/a&gt; - Open source. Para Windows. &lt;a href="http://www.openworkbench.org/index.php?option=com_docman&amp;amp;Itemid=55"&gt;Descargar&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.dotproject.net/"&gt;dot Project&lt;/a&gt; - Aplicación PHP open source. &lt;a href="http://www.dotproject.net/modules.php?op=modload&amp;amp;name=News&amp;amp;file=article&amp;amp;sid=126"&gt;Descargar&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.taskjuggler.org/"&gt;Task Juggler&lt;/a&gt; - Open source. Principalmente para Linux. &lt;a href="http://www.taskjuggler.org/download.php"&gt;Descargar&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;Otros:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://project.net/"&gt;Project.net&lt;/a&gt;. Open source comercial.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://openproj.org/"&gt;Openproj&lt;/a&gt;. Alternativa open source a Microsoft Project.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.elholgazan.com/feeds/5680441773434206766/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=7066997711286640384&amp;postID=5680441773434206766" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/5680441773434206766?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7066997711286640384/posts/default/5680441773434206766?v=2" /><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/elholgazan/~3/360212951/aplicaciones-para-la-gestin-de.html" title="Aplicaciones para la gestión de proyectos" /><author><name>el holgazán</name><uri>http://www.blogger.com/profile/06957959468971558977</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://www.elholgazan.com/2008/08/aplicaciones-para-la-gestin-de.html</feedburner:origLink></entry></feed>
