<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-35169245</id><updated>2011-12-13T15:59:42.513+01:00</updated><category term='grid computing'/><category term='volunteer computing'/><category term='java web start'/><category term='glassfish'/><category term='cáncer'/><category term='java'/><category term='groovy'/><category term='swing'/><category term='investigación'/><category term='jndi'/><category term='BOINC'/><title type='text'>Andrés González</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-35169245.post-7324263915379289510</id><published>2008-05-24T21:22:00.002+02:00</published><updated>2008-05-24T21:25:04.414+02:00</updated><title type='text'>No, no me gusta pasar la aspiradora: iRobot</title><content type='html'>Venga, regálaselo a tu pareja, a tí mismo, o a ambos:&lt;br /&gt;&lt;br /&gt;http://mcidor.blogspot.com/2008/05/irobot.html&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;disclaimer: no me dan un chavo por esto. Supongo que a Miguel Cid tampoco, jeje"&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-7324263915379289510?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/7324263915379289510/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=7324263915379289510' title='22 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/7324263915379289510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/7324263915379289510'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/05/no-no-me-gusta-pasar-la-aspiradora.html' title='No, no me gusta pasar la aspiradora: iRobot'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-669003509296576776</id><published>2008-05-12T17:01:00.002+02:00</published><updated>2008-05-12T17:03:58.552+02:00</updated><title type='text'>Nina Simone: My baby just cares for me</title><content type='html'>Sabía que la canción estaba genial, pero... ¿y el vídeo? Eeeeeeeeeeeeeestupendo&lt;br /&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/eYSbUOoq4Vg&amp;amp;hl=en"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/eYSbUOoq4Vg&amp;amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-669003509296576776?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/669003509296576776/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=669003509296576776' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/669003509296576776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/669003509296576776'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/05/nina-simone-my-baby-just-cares-for-me.html' title='Nina Simone: My baby just cares for me'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-4620610708648125559</id><published>2008-05-02T20:16:00.001+02:00</published><updated>2008-05-02T20:18:09.248+02:00</updated><title type='text'>Excelente interpretación del Júpiter de Holst</title><content type='html'>Disfruten de la &lt;span&gt;Osaka Philharmonic Orchestra (el director lo flipa un poco, pero la ejecución es soberbia, según mi humilde opinión):&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;http://www.youtube.com/watch?v=3B49N46I39Y&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-4620610708648125559?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/4620610708648125559/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=4620610708648125559' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/4620610708648125559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/4620610708648125559'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/05/excelente-interpretacin-del-jpiter-de.html' title='Excelente interpretación del Júpiter de Holst'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-9013190273489091362</id><published>2008-04-26T11:00:00.002+02:00</published><updated>2008-04-26T11:12:56.031+02:00</updated><title type='text'>Desactivar la previsualización automática en el explorer de Windows</title><content type='html'>Muchas veces el que el explorador de windows te "previsualice" un vídeo, una imagen, archivo de audio o similar, da más problemas que ventajas. Cuando queremos cortar y pegar uno de esos archivos, o cambiarle el nombre, o borrarlo... nos encontramos con que dicha acción no se puede llevar a cabo porque el archivo "está siendo usado por otra aplicación".&lt;br /&gt;&lt;br /&gt;Os recomiendo desactivar esa opción ejecutando los siguientes comandos (Inicio -&gt; Ejecutar):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;regsvr32 /u shimgvw.dll&lt;br /&gt;&lt;/code&gt;&lt;code&gt; regsvr32 /u shmedia.dll&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Si queremos restablecer la previsualización basta con ejecutar:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;regsvr32 shimgvw.dll&lt;br /&gt;regsvr32 shmedia.dll&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;Fuente &lt;a href="http://ings.ca/jim/2007/08/29/disable-avi-preview-in-windows-explorer/"&gt;http://ings.ca/jim/2007/08/29/disable-avi-preview-in-windows-explorer/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-9013190273489091362?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/9013190273489091362/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=9013190273489091362' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/9013190273489091362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/9013190273489091362'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/04/desactivar-la-previsualizacin-automtica.html' title='Desactivar la previsualización automática en el explorer de Windows'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-5356678913568008377</id><published>2008-04-22T16:01:00.004+02:00</published><updated>2008-04-22T16:07:04.672+02:00</updated><title type='text'>Los Planetas de Gustav Holst para piano</title><content type='html'>Originalmente, Gustav Holst compuso los Planetas pensando en un dueto de piano.&lt;br /&gt;&lt;br /&gt;¿Quereis haceros una idea de cómo suenan?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.emusic.com/album/Len-Vorster-HOLST-Music-for-Two-Pianos-MP3-Download/10870658.html"&gt;http://www.emusic.com/album/Len-Vorster-HOLST-Music-for-Two-Pianos-MP3-Download/10870658.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;O bien esta versión completa de Marte:&lt;br /&gt;&lt;br /&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/cSgqcH9eYyk&amp;amp;hl=en"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/cSgqcH9eYyk&amp;amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-5356678913568008377?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/5356678913568008377/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=5356678913568008377' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5356678913568008377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5356678913568008377'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/04/los-planetas-de-gustav-holst-para-piano.html' title='Los Planetas de Gustav Holst para piano'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-4368679582797410361</id><published>2008-04-18T10:11:00.003+02:00</published><updated>2008-04-18T10:44:55.978+02:00</updated><title type='text'>Jin Shin Jyutsu: Seminario de formación en Vigo - Chaoki El Ahel</title><content type='html'>&lt;p style="text-indent: -0.19cm; margin-bottom: 0cm; line-height: 0.49cm;" align="center" lang="es-ES"&gt; &lt;span style="font-family:Arial,sans-serif;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:Tahoma,sans-serif;"&gt;&lt;span lang="es-ES"&gt;&lt;b&gt;JIN SHIN JYUTSU&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;sup&gt;&lt;span style="font-family:Tahoma,sans-serif;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span lang="es-ES"&gt;&lt;b&gt;®&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/sup&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;Es una Fisio-Filosofia, un arte antiguo de armonización de la energía vital en el cuerpo nacido&lt;br /&gt;de la innata sabiduría y transmitido oralmente de generación en generación durante siglos, el arte estaba casi olvidado cuando el maestro Japonés Jiro Murai lo rescató de forma espectacular al Principio del siglo XX.&lt;br /&gt;&lt;br /&gt;Al haber tenido éxito en liberarse él mismo de una enfermedad que amenazaba su vida, el maestro Murai dedicó el resto de sus días a la investigación y al desarrollo del JIN SHIN JYUTSU basándose en una gama muy amplia de experiencias personales y en recursos de manuscritos tal como KOJIKI (libro de cosas antiguas) resulta de ello, el conjunto de  descubrimientos que fueron más tarde traducidos por MARY BURMEISTER quien lo trajo a los Estados Unidos en los años cincuenta.&lt;br /&gt;&lt;br /&gt;El JIN SHIN JYUTSU se sirve de 26 &lt;cierres&gt; situados sobre los circuitos energéticos que alimentan el cuerpo de energía vital. Cuando uno o varios de estos&lt;br /&gt;circuitos están bloqueados el estancamiento que resulta de ello puede perturbar la zona que concierne, a continuación desarmonizar los flujos energéticos en su totalidad.&lt;br /&gt;&lt;br /&gt;Tocando uno o varios de estos cierres combinados pueden entonces tomar una parte activa en el buen funcionamiento de nuestro equilibrio Físico, mental y emocional.&lt;br /&gt;&lt;br /&gt;La práctica del JIN SHIN JYUTSU nos compromete en el estudio y la ayuda a sí mismo y a través de este proceso, tomamos conciencia de la sabiduría de nuestro cuerpo y aprendemos a interpretar sus mensajes y a utilizarlos para restablecer el Equilibrio.&lt;br /&gt;&lt;br /&gt;El JIN SHIN JYUTSU puede aplicarse como ayuda a sí mismo o por  un practicante formado. Una sesión de JIN SHIN JYUTSU dura generalmente una hora. No incluye masaje, ni manipulación de los músculos, ni el empleo de medicamentos y otras sustancias. Es un arte suave&lt;br /&gt;que se practica con la punta de los dedos (encima de la ropa) sobre los cierres de seguridad de la energía útiles a la armonización y a la restauración de la circulación energética.&lt;br /&gt;&lt;br /&gt;Este arte puede practicarse sobre sí mismo o sobre los demás. Sirve para todos, a los bebés y a los ancianos, a los enfermos y a los que están bien y a todos los que quieren estar bien.&lt;br /&gt;&lt;br /&gt;&lt;/cierres&gt;&lt;h2 class="western" style="line-height: 0.49cm;" lang="es-ES"&gt;&lt;span style="font-family:Tahoma,sans-serif;"&gt;EL SEMINARIO DE FORMACIÓN&lt;/span&gt;&lt;/h2&gt;Este seminario es dirigido a todos: a las personas que les gustaría descubrir este arte y aquellas que desearían profundizar sus conocimientos. Para una eventual práctica profesional la participación en los seminarios de formación es indispensable. Un certificado será entregado&lt;br /&gt;después de haber asistido la primera vez a la primera y segunda parte en los seminarios de formación de cinco días. Otro diploma será entregado después de haber asistido tres veces a la primera y segunda parte para considerarse “practicante de JIN SHIN JYUTSU”.&lt;br /&gt;&lt;br /&gt;Chaoki El Ahel, es un profesional muy comprometido con sus pacientes, la terapia y la medicina alternativa y vibracional. Es quien hizo posible que se conociera Jin Shin Jyutsu en España. A raíz de descubrir la rapidez, la eficacia del JSJ y el cambio de vida y la madurez que producía en sus pacientes, Chaoki se comprometió en darlo a conocer a pesar de todos los contratiempos que ha podido encontrar y encuentra. Con su respeto al código de ética e inculcando este respeto a todos los practicantes guardando así el bienestar y los intereses del paciente. Logró que en España tengamos el más alto y prestigioso nivel de JSJ de Europa.&lt;br /&gt;&lt;h2 class="western" style="line-height: 0.49cm;" lang="es-ES"&gt;&lt;span&gt;&lt;span style="font-family:Tahoma,sans-serif;"&gt;DETALLES SEMINARIO&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;Lugar: Vigo - Escuela de enfermería (C/ Aragón nº 197)&lt;br /&gt;Horario: 9h. - 19h.&lt;br /&gt;Fechas: primer fin de semana de mayo y tercer fin de semana de mayo (pdte. de confirmar).&lt;br /&gt;Participación: 600€ (400€ para segundos participantes)&lt;br /&gt;Anulación: toda cantidad pagada será íntegramente devuelta si su orden de anulación se realiza antes del 25 de Abril de 2008.&lt;br /&gt;Teléfono de contacto: 886134259&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-4368679582797410361?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/4368679582797410361/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=4368679582797410361' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/4368679582797410361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/4368679582797410361'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/04/jin-shin-jyutsu-seminario-de-formacin.html' title='Jin Shin Jyutsu: Seminario de formación en Vigo - Chaoki El Ahel'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-3241469843659912331</id><published>2008-04-15T12:28:00.002+02:00</published><updated>2008-04-15T12:32:37.661+02:00</updated><title type='text'>Fotos con categoría</title><content type='html'>Link del colega tevi, quien sin duda acabará haciendo fotos tan buenas como éstas :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.timecatcher.com/main.cfm?p=04_100"&gt;http://www.timecatcher.com/main.cfm?p=04_100&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No tienen desperdicio, ninguna. Recomiendo guardar enlace en favoritos y ver un par de ellas cada día...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-3241469843659912331?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/3241469843659912331/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=3241469843659912331' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/3241469843659912331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/3241469843659912331'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/04/fotos-con-categora.html' title='Fotos con categoría'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-5315745033440545050</id><published>2008-04-09T11:20:00.002+02:00</published><updated>2008-04-09T11:56:39.118+02:00</updated><title type='text'>Fotos panorámicas</title><content type='html'>Gracias a &lt;a href="http://mcidor.blogspot.com/2008/04/el-mundo-en-panormicas.html"&gt;Miguel Cid&lt;/a&gt; por el enlace: &lt;a href="http://viewat.org/"&gt;http://viewat.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No dejeis de echarle un vistazo, merece la pena. Fotos panorámicas de distintos lugares del mundo, animadas por flash, de forma que puedes ver el sitio casi como si estuvieras allí.&lt;br /&gt;&lt;br /&gt;Un par de panorámicas interesantes, para abriros el apetito:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://viewat.org/?i=es&amp;amp;tp_pn=ark&amp;amp;sec=pn&amp;amp;id_pn=1273"&gt;Machu Picchu&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://viewat.org/?sec=pn&amp;amp;i=es&amp;amp;tp_pn=arq&amp;amp;id_pn=1315"&gt;Museo Nacional de Arte de Cataluña&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-5315745033440545050?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/5315745033440545050/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=5315745033440545050' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5315745033440545050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5315745033440545050'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/04/fotos-panormicas.html' title='Fotos panorámicas'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-3131197985131747971</id><published>2008-03-31T16:44:00.002+02:00</published><updated>2008-03-31T16:48:22.980+02:00</updated><title type='text'>El libro de las Ilusiones</title><content type='html'>Acabo de terminarlo... !Qué bueno! Desde luego este Paul Auster tiene un estilo genial.&lt;br /&gt;&lt;br /&gt;Os lo recomiendo a todos.&lt;br /&gt;&lt;br /&gt;Ahora... toca cambio de estilo: novéla histórica. Enola Gay, de Gordon Thomas, "una apasionante investigación sobre la bomba atómica de Hiroshima".&lt;br /&gt;&lt;br /&gt;Un verdadero placer recuperar la lectura, la tenía bastante abandonada y... desde luego   ahora mismo agradezo mucho más sentarme a leer un buen libro que encender la televisión...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-3131197985131747971?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/3131197985131747971/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=3131197985131747971' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/3131197985131747971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/3131197985131747971'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/03/el-libro-de-las-ilusiones.html' title='El libro de las Ilusiones'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-6135950553869193143</id><published>2008-03-17T11:23:00.001+01:00</published><updated>2008-03-17T11:23:54.595+01:00</updated><title type='text'>Horowitz y la Polonesa más famosa de Chopin</title><content type='html'>&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/KZGi49Bnghs&amp;hl=en"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/KZGi49Bnghs&amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-6135950553869193143?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/6135950553869193143/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=6135950553869193143' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/6135950553869193143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/6135950553869193143'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/03/horowitz-y-la-polonesa-ms-famosa-de.html' title='Horowitz y la Polonesa más famosa de Chopin'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-2637895259425150115</id><published>2008-03-08T12:29:00.003+01:00</published><updated>2008-03-16T16:32:56.781+01:00</updated><title type='text'>Jin Shin Jyutsu: taller de autoayuda en Vigo - Marzo 2008</title><content type='html'>El último fin de semana de este mes (Marzo, 2008), es decir, los días 29 y 30, el Maestro Chaoki El Ahel impartirá en Vigo un taller de autoayuda de Jin Shin Jyutsu.&lt;br /&gt;&lt;br /&gt;El programa será el siguiente:&lt;br /&gt;&lt;br /&gt;  I. El significado de los 26 cierres de seguridad de la energía&lt;br /&gt; II. Los flujos de la trinidad.&lt;br /&gt;III. La noción de profunidad en el cuerpo&lt;br /&gt; IV. La fisio-filosofía del Jin Shin Jyutsu&lt;br /&gt;  v. Prácticas varias veces al día.&lt;br /&gt;&lt;br /&gt; El Jin Shin Jyutsu es un arte suave y simple que se practica por imposición de la punta de los dedos sobre ciertos puntos de nuestro cuerpo ( encima de la ropa ).&lt;br /&gt; Es un arte Japonés muy antiguo para la armonización de la energía vital en nuestro cuerpo.&lt;br /&gt; El Jin Shin Jyutsu se sirve de 26 Puntos , "cierres de seguridad de la energía", situados sobre los circuitos energéticos que alimentan el cuerpo de energía vital. Cuando uno o varios de estos circuitos están bloqueados el estancamiento que resulta de ello puede perturbar la zona que concierne, y a continuación desarmonizar los flujos energéticos en su totalidad.Tocando uno o varios de estos puntos combinados pueden entonces tomar una parte activa en el buen funcionamiento de nuestro equilibrio físico, mental y emocional...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; Chaoki El Ahel, es un profesional muy comprometido con sus pacientes, la terapia y la medicina alternativa y vibracional. Es quien hizo posible que se conociera Jin Shin Jyutsu en España. A raíz de descubrir la rapidez, la eficacia del JSJ y el cambio de vida y la madurez que producía en sus pacientes, Chaoki se comprometió en darlo a conocer a pesar de todos los contratiempos que ha podido encontrar y encuentra. Con su respeto al código de ética e inculcando este respeto a todos los practicantes guardando así el bienestar y los intereses del paciente. Logró que en España tengamos el más alto y prestigioso nivel de JSJ de Europa.&lt;br /&gt;&lt;br /&gt; Los interesados en conocer más detalles dejen un comentario en esta entrada con un correo electrónico o teléfono de contacto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-2637895259425150115?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/2637895259425150115/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=2637895259425150115' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/2637895259425150115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/2637895259425150115'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/03/jin-shin-jyutsu-taller-de-autoayuda-en.html' title='Jin Shin Jyutsu: taller de autoayuda en Vigo - Marzo 2008'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-9123350387396818932</id><published>2008-03-01T12:48:00.002+01:00</published><updated>2008-03-01T12:51:38.239+01:00</updated><title type='text'>Horowitz: Primera Balada de Chopin</title><content type='html'>12 años después de no actuar delante del público, el gran Horowitz vuelve a sentarse delante de una audiencia expectante. Finaliza el concierto con la siguiente interpretación:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/XhnRIuGZ_dc"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/XhnRIuGZ_dc" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-9123350387396818932?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/9123350387396818932/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=9123350387396818932' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/9123350387396818932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/9123350387396818932'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/03/horowitz-primera-balada-de-chopin.html' title='Horowitz: Primera Balada de Chopin'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-2979279722994369354</id><published>2008-02-21T15:17:00.003+01:00</published><updated>2008-02-21T23:33:50.460+01:00</updated><title type='text'>La otra Galicia</title><content type='html'>Desde luego, qué cosas descubre uno leyendo a Paul Auster (&lt;span style="font-style: italic;"&gt;El libro de las ilusiones&lt;/span&gt;, qué bueno):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://es.wikipedia.org/wiki/Galicia_%28Europa_Central%29"&gt;http://es.wikipedia.org/wiki/Galicia_(Europa_Central)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A modo resumido: antigua provincia de Polonia, actualmente dividida entre Polonia y Ucrania. En español se le llama "Galitzia", simplemente para diferenciarla &lt;span style="font-style: italic;"&gt;da nosa Galicia&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-2979279722994369354?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/2979279722994369354/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=2979279722994369354' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/2979279722994369354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/2979279722994369354'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/02/la-otra-galicia.html' title='La otra Galicia'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-7720330990363593583</id><published>2008-01-18T09:41:00.000+01:00</published><updated>2008-01-21T10:19:26.446+01:00</updated><title type='text'>FAQ: BOINC - GridRepublic</title><content type='html'>&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;¿Qué es el &lt;span style="font-style: italic;"&gt;volunteer computing&lt;/span&gt;?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;La computación voluntaria se basa en que los recursos de computación para un proyecto dado son proporcionados por usuarios de Internet, de forma voluntaria. Dichos usuarios instalan en sus PCs, servidores, etc. una pequeña aplicación cliente que se encargará de conectarse a los proyectos en los que hayamos decidido participar, descargándose los ficheros (ejecutables, datos de entrada, etc.) necesarios. Si el número de usuarios colaboradores es elevado, la potencia de computación conseguida puede ser realmente impresionante. Ello permite que proyectos que llevarían cientos o miles de años en un único ordenador se completen en un tiempo mucho más reducido. Además, el coste que todo esto supone para los responsables del proyecto es nulo. Aquéllos proyectos que despierten el interés del público contarán con un gran apoyo y, por tanto, con una mayor potencia de computación.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;¿Qué es BOINC?&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://boinc.berkeley.edu/"&gt;BOINC&lt;/a&gt; es una plataforma software que proporciona los medios necesarios para crear un proyecto basado en el &lt;span style="font-style: italic;"&gt;volunteer computing&lt;/span&gt;. Desarrollado por la Universidad de Berkley a partir del primer proyecto de este tipo de la historia, SETI@home, que trata de descubrir vida inteligente en otros planetas analizando las radiaciones cósmicas que llegan a la tierra continuamente. Hoy en día BOINC es utilizado por multitud de &lt;a href="http://boinc.berkeley.edu/projects.php"&gt;proyectos&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;¿Qué es GridRepublic?&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Se trata de un administrador de cuentas para proyectos BOINC. Utilizando directamente el cliente de BOINC, el usuario tiene que darse de alta y vincularse a cada proyecto en el que quiera participar, de uno en uno. &lt;a href="http://www.gridrepublic.org/"&gt;Grid Republic&lt;/a&gt; ofrece una interfaz unificada, en la cual basta con crear una cuenta y marcar todos los proyectos en los que queremos participar. El proceso de instalación es muy sencillo y está descrito en esta &lt;a href="http://coyotevil.blogspot.com/2007/12/dona-el-tiempo-libre-de-tu-ordenador.html"&gt;entrada&lt;/a&gt; anterior.&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-weight: bold;"&gt;&lt;li&gt;¿Es necesario estar permanentemente conectado a Internet?&lt;/li&gt;&lt;/ul&gt;    En absoluto, basta con conectarse de vez en cuando (todos los días, 1 vez cada 3 días, una vez a la semana...). La aplicación cliente (el programilla que se ejecuta en nuestro ordenador) aprovecha cuando se establece una conexión para descargar "tareas" a realizar del servidor y para informar de los resultados que ya haya obtenido.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Y si me paso un mes sin conectarme... ¿qué pasa?&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;    Cada tarea tiene un plazo determinado para informar al servidor del resultado, entre 3 y 8 días normalmente (depende de cada cuánto tiempo nos conectemos, información que tiene en cuenta la aplicación cliente para descargarse tareas que tengan un plazo de entrega de resultados suficientemente alto para nuestras costumbres de conexión). Si pasa mucho tiempo desde la última conexión lo que ocurrirá, probablemente, es que las tareas ejecutadas se descartarán (los archivos que se descargaron con esa tarea serán borrados del disco) y se volverán a bajar unas tareas nuevas del servidor. Esto no significa que esas tareas hayan estado "paradas un mes por nuestra culpa". Si llega el plazo de entrega y el servidor no tiene todos los resultados que necesita inmediatamente enviará las tareas pendientes a otro usuario para que las realize.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;¿Se puede instalar GridRepublic / BOINC si se dispone de una conexión muy lenta a Internet, tipo módem?&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;    Se puede hacer y el sistema funcionará sin complicaciones. El único inconveniente es que, muy probablemente, mientras se descargan tareas nuevas la conexión estará "saturada" y si intentamos navegar por Internet al mismo tiempo notaremos que todo va muy lento. Lo mejor es esperar a que el programa acabe de descargar las tareas pendientes (se puede ver qué está haciendo el programa yendo a la "Advanced View" en la pestaña de "Mensajes") y después comenzar la navegación.&lt;br /&gt;&lt;br /&gt;En cualquier caso, el programa tiene una opción accesible pinchando con el botón derecho del ratón en el icono de la barra de tareas, que permite "pausar" o "dormitar" la aplicación, de forma que podemos pararla mientras navegamos por internet, si notamos que nos está "molestando". Eso sí, en algún momento tendremos que dejarle algo "de conexión" para que se pueda descargar las tareas nuevas, informar de resultados, etc.&lt;br /&gt;&lt;br /&gt;Para quien quiera currárselo un poco más, puede usar los parámetros Maximun download rate y Maximum upload rate (a 0 indica "ilimitado") accesibles en mi caso desde el menú de la vista avanzada, en &lt;span style="color: rgb(0, 0, 0);"&gt;Avanzado-&gt;Preferences-&gt;Uso de la red.&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-weight: bold;"&gt; ¿Existe riesgo de infección por virus al usar este sistema?&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Existe el mismo riesgo que cuando nos descargamos un programa de Google, el programa "PADRE" de la AEAT (Agencia Española de Administración Tributaria), etc. Es decir, muy bajo o nulo. Si nos descargamos un ejecutable de algún sitio y lo ejecutamos será porque confiamos en ese sitio (Google, Microsoft, AEAT, etc.). Los ejecutables que nos descargamos al ejecutar el sistema BOINC en nuestro ordenador serán, además del mismo BOINC, los de cada proyecto en el que participemos. Dichos proyectos pertenecen a entidades de renombre como el &lt;span style="font-style: italic;"&gt;Ontario Cancer Research Institute&lt;/span&gt;, la Universidad de Berkley, la de Nueva York, etc. Por lo que parece "prudente" creer que dichas entidades se dedican a cosas más serias que a la propagación de virus. Por otro lado, aunque un hacker consiguiera entrar en el servidor de un proyecto dado y quisiera cambiar los ejecutables albergados en ese servidor por otros infectados, el propio sistema BOINC detectaría que dichos programas han sido cambiados y proceden de una fuente no fiable (los ejecutables de cada proyecto se firman utilizando técnicas de criptografía y firma digital) y no serían descargados a nuestro ordenador.&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;script&gt;&lt;!-- D(["mb","\u003c/span\u003e\u003c/p\u003e\u003cp style\u003d\"margin-bottom:0in\" align\u003d\"justify\" lang\u003d\"es-ES\"\u003e\u003cbr\u003e\u003cspan style\u003d\"color:rgb(0, 0, 0)\"\u003e\u003c/span\u003e\u003c/p\u003eNo sé, en el caso de usar una conexión tan lenta como la vuestra no creo que sea viable lo de instalarse este programilla. Más que nada por vuestro \u0026quot;patrón de uso\u0026quot; de Internet. Cuando quereis ver algo os conectais, veis lo que necesitais y despues lo desconectais. Este programilla está pensado para gente que tenga tarifa plana y una conexión un poco más decentilla.\n\u003cp style\u003d\"margin-bottom:0in\" align\u003d\"justify\" lang\u003d\"es-ES\"\u003e\n\u003cbr\u003e\n\u003c/p\u003e\n\u003cp style\u003d\"margin-bottom:0in\" align\u003d\"justify\" lang\u003d\"es-ES\"\u003e\n\u003c/p\u003e\u003cp style\u003d\"margin-bottom:0in;color:rgb(255, 0, 0)\" align\u003d\"justify\" lang\u003d\"es-ES\"\u003e5. Creo que me lo contaste en su día pero… paresque no\nquedó en mi cabeza de mosquito… vamos a ver…\neste programa lo que hace es facilitar la conexión de este\nordenador con la página web de gridrepublic desde la que se\ndistribuyen cachitos de proyectos para ser ejecutados en nuestro\nordenador sin molestarnos. \n\u003c/p\u003e\n\u003cp style\u003d\"margin-bottom:0in;color:rgb(255, 0, 0)\" align\u003d\"justify\" lang\u003d\"es-ES\"\u003e\n\u003cbr\u003e\n\u003c/p\u003e\n\u003cspan style\u003d\"color:rgb(255, 0, 0)\"\u003e\n¿Son ejecutados????\u003c/span\u003e\u003cp style\u003d\"margin-bottom:0in;color:rgb(255, 0, 0)\" align\u003d\"justify\" lang\u003d\"es-ES\"\u003e\n\u003c/p\u003e\n\u003cp style\u003d\"margin-bottom:0in\" align\u003d\"justify\" lang\u003d\"es-ES\"\u003e\n\u003cbr\u003e\n\u003c/p\u003e\n\n\u003cspan style\u003d\"color:rgb(0, 0, 0)\"\u003e-\u0026gt; Totalmente, si el tío que configura el proyecto mete un ejecutable infectado estais pringados.\u003cbr\u003e\u003cbr\u003eAhora, estos proyectos están configurados por institutos de investigación de prestigio, universidades como la berkley, etc. En dónde se debe depositar la confianza es en esa gente, que no se va a dedicar a infectar ordenadores. Es como cuando te bajas algo de google y lo instalas o algo de microsoft, o algo de la agencia tributaria española (el programa PADRE para hacer la declaración). Realmente son ejecutables que te bajas y ejecutas.\n\u003cbr\u003e\u003cbr\u003ePersonalmente, yo confío en el propósito de esa gente y... bueno, de todas formas, tener un buen antivirus instalado es condición indispensable hoy en día para navegar por internet (si no te infectas más rápido que Sancho en Tanzania un sábado noche)\n",1] );  //--&gt;&lt;/script&gt;&lt;/span&gt;&lt;p style="margin-bottom: 0in;" align="justify" lang="es-ES"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-7720330990363593583?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/7720330990363593583/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=7720330990363593583' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/7720330990363593583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/7720330990363593583'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/01/faq-boinc-gridrepublic.html' title='FAQ: BOINC - GridRepublic'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-8324430473653986620</id><published>2008-01-16T18:03:00.000+01:00</published><updated>2008-01-16T18:06:53.037+01:00</updated><title type='text'>Sun compra Mysql</title><content type='html'>Después de esta &lt;a href="http://blogs.mysql.com/kaj/sun-acquires-mysql.html/"&gt;noticia&lt;/a&gt;, quién sabe, hasta puede que el driver JDBC de MySQL empiece a soportar el &lt;a href="http://forums.mysql.com/read.php?39,137457"&gt;&lt;span style="font-style: italic;"&gt;fetchSize&lt;/span&gt;&lt;/a&gt; :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-8324430473653986620?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/8324430473653986620/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=8324430473653986620' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/8324430473653986620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/8324430473653986620'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/01/sun-compra-mysql.html' title='Sun compra Mysql'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-9038668108791707779</id><published>2008-01-07T15:31:00.000+01:00</published><updated>2008-12-09T01:50:18.842+01:00</updated><title type='text'>Instalar BOINC en Ubuntu</title><content type='html'>Los chicos de &lt;a href="http://www.gridrepublic.org/"&gt;http://www.gridrepublic.org&lt;/a&gt; todavía no disponen de una versión de su aplicación cliente para linux. Pero eso no supone mayor problema. Para poder formar parte del &lt;a href="http://coyotevil.blogspot.com/2007/12/grid-volunteer-computing-boinc.html"&gt;volunteer computing&lt;/a&gt; desde linux tendremos que crearnos una cuenta en gridrepublic.org, tal y como se describe en los primeros pasos de esta &lt;a href="http://coyotevil.blogspot.com/2007/12/dona-el-tiempo-libre-de-tu-ordenador.html"&gt;entrada&lt;/a&gt; (pasos 1-6), y después instalarnos la aplicación cliente de &lt;a href="http://boinc.berkeley.edu/"&gt;BOINC&lt;/a&gt; en Linux.&lt;br /&gt;&lt;br /&gt;En esta entrada describo cómo instalar dicha aplicación en una distribución Ubuntu u otra basada en Ubuntu (como, por ejemplo, &lt;a href="http://www.guadalinex.org/"&gt;Guadalinex&lt;/a&gt;). Los pasos a dar son los siguientes_&lt;br /&gt;&lt;br /&gt;1) Abrir una "línea de comandos" o "terminal de trabajo" (normalmente Aplicaciones -&gt; Accesorios -&gt; Terminal)&lt;br /&gt;&lt;br /&gt;2) Introducir el siguiente comando: &lt;span style="font-weight: bold;"&gt;sudo apt-get install boinc-client boinc-manager&lt;/span&gt;. Este comando nos pedirá la contraseña (&lt;span style="font-style: italic;"&gt;passwd&lt;/span&gt;) del usuario administrador (&lt;span style="font-style: italic;"&gt;root&lt;/span&gt;). Si no se conoce preguntar al responsable del equipo.&lt;br /&gt;&lt;br /&gt;3) En algunas ocasiones, durante la ejecución del comando anterior, el sistema nos preguntará si queremos instalar los paquetes seleccionados. Evidentemente debemos decirle que sí.&lt;br /&gt;&lt;br /&gt;4) Las líneas finales de la ejecución del comando anterior deben ser similares a estas:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Configurando boinc-client (5.8.17-2build1~feisty1) ...&lt;/span&gt; &lt;span style="font-style: italic;"&gt;&lt;br /&gt;   * Starting BOINC core client: boinc_client&lt;/span&gt; &lt;span style="font-style: italic;"&gt;   ...done.&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Configurando boinc-manager (5.8.17-2build1~feisty1) ...&lt;/span&gt;  &lt;br /&gt;&lt;br /&gt;5) Ahora configuramos el BOINC para que se vincule a nuestra cuenta de GridRepublic. Para ello ejecutamos el comando "&lt;span style="font-weight: bold;"&gt;boincmgr&lt;/span&gt;" (en la línea de comandos). Con ello arrancaremos el interfaz gráfico del gestor (&lt;span style="font-style: italic;"&gt;manager&lt;/span&gt;) del BOINC. Al ser la primera vez que se ejecuta, veremos una pantalla en la que se nos invita a unirnos a algún proyecto:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_J_x9kPKKtTI/R4J5zTwdmcI/AAAAAAAAALY/y3HNWg20ifc/s1600-h/wizard.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_J_x9kPKKtTI/R4J5zTwdmcI/AAAAAAAAALY/y3HNWg20ifc/s800/wizard.bmp" alt="" id="BLOGGER_PHOTO_ID_5152814846049098178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6) Debemos cancelar dicho asistente pulsando "Cancelar" (nos pide una confirmación de la cancelación). El aspecto de la aplicación después de cancelar dicho asistente será:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_J_x9kPKKtTI/R4J5zzwdmdI/AAAAAAAAALg/SVuuEMg6xGA/s1600-h/boincmgr.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_J_x9kPKKtTI/R4J5zzwdmdI/AAAAAAAAALg/SVuuEMg6xGA/s800/boincmgr.bmp" alt="" id="BLOGGER_PHOTO_ID_5152814854639032786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7) Ahora debemos pasar a la vista "Advanced" por lo que haremos click con el ratón en el botón "Advanced View". El aspecto de la aplicación ahora será:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_J_x9kPKKtTI/R4J50DwdmeI/AAAAAAAAALo/yyE4BHIe5So/s1600-h/boincmgr2.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_J_x9kPKKtTI/R4J50DwdmeI/AAAAAAAAALo/yyE4BHIe5So/s800/boincmgr2.bmp" alt="" id="BLOGGER_PHOTO_ID_5152814858934000098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;8) Ahora, en el menú "Herramientas", seleccionaremos la opción "Unirse a un administrador de cuentas...". Esto nos llevará al siguiente asistente:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_J_x9kPKKtTI/R4KMjjwdmfI/AAAAAAAAALw/tJfhh_RqzS0/s1600-h/ac1.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_J_x9kPKKtTI/R4KMjjwdmfI/AAAAAAAAALw/tJfhh_RqzS0/s800/ac1.bmp" alt="" id="BLOGGER_PHOTO_ID_5152835466187086322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;9) Pulsando "Siguiente" obtenemos:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_J_x9kPKKtTI/R4KMjzwdmgI/AAAAAAAAAL4/jiltX1edeMo/s1600-h/ac2.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_J_x9kPKKtTI/R4KMjzwdmgI/AAAAAAAAAL4/jiltX1edeMo/s800/ac2.bmp" alt="" id="BLOGGER_PHOTO_ID_5152835470482053634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;10) En el campo "URL del Administrador de Cuentas" debemos introducir la siguiente URL:&lt;br /&gt;&lt;br /&gt;        &lt;span style="font-weight: bold;"&gt;http://www.gridrepublic.org/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pulsando "Siguiente" veremos como, durante un rato, la aplicación está estableciendo la conexión con el servidor de gridrepublic.org:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_J_x9kPKKtTI/R4KMjzwdmhI/AAAAAAAAAMA/S0atE6WLOp8/s1600-h/ac3.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_J_x9kPKKtTI/R4KMjzwdmhI/AAAAAAAAAMA/S0atE6WLOp8/s800/ac3.bmp" alt="" id="BLOGGER_PHOTO_ID_5152835470482053650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;11) Después de dicha pantalla aparecerá la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_J_x9kPKKtTI/R4KMkDwdmiI/AAAAAAAAAMI/N9gTJzFAwCY/s1600-h/ac4.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_J_x9kPKKtTI/R4KMkDwdmiI/AAAAAAAAAMI/N9gTJzFAwCY/s800/ac4.bmp" alt="" id="BLOGGER_PHOTO_ID_5152835474777020962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;12) Aquí debemos introducir el correo electrónico y la clave que utilizamos al crear nuestra cuenta en gridrepublic.org y pulsar "Siguiente". De nuevo, aparece una pantalla en la que se ve cómo la aplicación se está comunicando con el servidor. Finalmente aparecerá la siguiente pantalla:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_J_x9kPKKtTI/R4KMkDwdmjI/AAAAAAAAAMQ/pM9seW6le4o/s1600-h/ac6.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_J_x9kPKKtTI/R4KMkDwdmjI/AAAAAAAAAMQ/pM9seW6le4o/s800/ac6.bmp" alt="" id="BLOGGER_PHOTO_ID_5152835474777020978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;13) Pulsamos "Finalizar" con lo que se cerrará el asistente y volveremos a la pantalla inicial de la aplicación. En esta ocasión, probablemente, ya veamos una lista de tareas pendientes de ser ejecutadas. Esto es, ya tenemos nuestro ordenador colaborando con los proyectos de nuestra cuenta de gridrepublic.org:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_J_x9kPKKtTI/R4KOhjwdmkI/AAAAAAAAAMY/r9tNtVjj4YU/s1600-h/boincmgr3.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_J_x9kPKKtTI/R4KOhjwdmkI/AAAAAAAAAMY/r9tNtVjj4YU/s800/boincmgr3.bmp" alt="" id="BLOGGER_PHOTO_ID_5152837630850603586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Por otro lado, no tenemos que preocuparnos de iniciar esta aplicación manualmente cada vez que se encienda el ordenador, puesto que durante la instalación (comando &lt;span style="font-style: italic;"&gt;apt-get install&lt;/span&gt;), ya se ha configurado para que se inicie automáticamente con el arranque del ordenador.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-9038668108791707779?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/9038668108791707779/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=9038668108791707779' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/9038668108791707779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/9038668108791707779'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2008/01/instalar-boinc-en-ubuntu.html' title='Instalar BOINC en Ubuntu'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_J_x9kPKKtTI/R4J5zTwdmcI/AAAAAAAAALY/y3HNWg20ifc/s72-c/wizard.bmp' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-5098256916966993749</id><published>2007-12-24T15:15:00.000+01:00</published><updated>2008-12-09T01:50:20.083+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='volunteer computing'/><category scheme='http://www.blogger.com/atom/ns#' term='grid computing'/><category scheme='http://www.blogger.com/atom/ns#' term='BOINC'/><category scheme='http://www.blogger.com/atom/ns#' term='investigación'/><category scheme='http://www.blogger.com/atom/ns#' term='cáncer'/><title type='text'>Dona el tiempo libre de tu ordenador para una buena causa</title><content type='html'>Ya que estamos en tiempo de Navidad me gustaría proponeros una buena acción para este nuevo año que se aproxima. Su ejecución tan sólo os requerirá una pequeña inversión de vuestro bien más preciado: vuestro tiempo. Pero os garantizo que la inversión será mínima y que el resultado merecerá la pena.&lt;br /&gt;&lt;br /&gt;En una &lt;a href="http://coyotevil.blogspot.com/2007/12/grid-volunteer-computing-boinc.html"&gt;entrada anterior&lt;/a&gt; os hablé del &lt;span style="font-style: italic;"&gt;volunteer computing&lt;span style="font-style: italic;"&gt;.  &lt;/span&gt;&lt;/span&gt;En esta ocasión os indicaré lo sencillo que es conseguir que el tiempo libre de vuestro ordenador sea usado de forma efectiva en investigaciones que intentan luchar contra enfermedades como el cáncer, el SIDA o la malaria.&lt;br /&gt;&lt;br /&gt;Como os comenté en dicha entrada, el sistema &lt;a href="http://boinc.berkeley.edu/"&gt;BOINC&lt;/a&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt; es usado por multitud de proyectos (medicina, física, matemáticas, etc.) en la actualidad. Instalarse la aplicación (el "cliente" de BOINC) que permite a cualquier persona participar en dichos proyectos y suscribirse después a los proyectos que nos interesen puede ser un poco tedioso. Por eso os recomiendo que useis el siguiente portal:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gridrepublic.org/"&gt;http://www.gridrepublic.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dicha web nos ofrece un punto de entrada único y sencillo para crear una cuenta de usuario y elegir aquéllos proyectos que más nos interesen de entre una lista siempre actualizada. En menos de dos minutos tendréis vuestro ordenador configurado para contribuir sus ciclos de CPU a las investigaciones más punteras y humanitarias del planeta.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;PASOS A SEGUIR:&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt; Entrar en  &lt;a href="http://www.gridrepublic.org/"&gt;http://www.gridrepublic.org/&lt;/a&gt;y pulsar "Join"&lt;a href="http://www.gridrepublic.org/"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_J_x9kPKKtTI/R2_Dxzwdl9I/AAAAAAAAAGg/BzyqGkYvZ7I/s1600-h/home.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_J_x9kPKKtTI/R2_Dxzwdl9I/AAAAAAAAAGg/BzyqGkYvZ7I/s640/home.bmp" alt="" id="BLOGGER_PHOTO_ID_5147548159582246866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;li&gt;Introducir los datos de la cuenta. Podemos poner cualquier cosa en &lt;span style="font-style: italic;"&gt;Name&lt;/span&gt; y &lt;span style="font-style: italic;"&gt;Password&lt;/span&gt;. La &lt;span style="font-style: italic;"&gt;E-mail Address&lt;/span&gt; debería ser (aunque no es necesario) nuestra dirección de correo habitual (nota: &lt;span style="font-weight: bold;"&gt;el &lt;span style="font-style: italic;"&gt;Password&lt;/span&gt; introducido no tiene que ser la contraseña de vuestro correo electrónico!! podeis inventaros uno cualquiera&lt;/span&gt;) y pulsar "Continue"&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_J_x9kPKKtTI/R2_Epzwdl-I/AAAAAAAAAGo/Z9r9ptQWMA0/s1600-h/crearcuenta.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_J_x9kPKKtTI/R2_Epzwdl-I/AAAAAAAAAGo/Z9r9ptQWMA0/s640/crearcuenta.bmp" alt="" id="BLOGGER_PHOTO_ID_5147549121654921186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;li&gt;Obtendremos la lista con los proyectos disponibles. Por desgracia, la descripción de cada proyecto sólo está disponible en inglés de momento (más adelante la esta web será multi-idioma).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_J_x9kPKKtTI/R2_Fizwdl_I/AAAAAAAAAGw/XjIGsZOrj-0/s1600-h/proyectos.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_J_x9kPKKtTI/R2_Fizwdl_I/AAAAAAAAAGw/XjIGsZOrj-0/s800/proyectos.bmp" alt="" id="BLOGGER_PHOTO_ID_5147550100907464690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;li&gt;Si en el campo donde pone "All Projects" seleccionamos, por ejemplo, Biology/Medicine (estos son los proyectos que yo recomiendo, cada uno que eliga libremente), y seleccionamos todos los proyectos que aparecen (Rosetta@home, etc.) (el de Proteins@Home no los marcamos porque da problemas), teniendo en cuenta que el proyecto "World Community Grid" consta a su vez de varios proyectos que también seleccionaremos, deberíamos tener la siguiente pantalla como resultado&lt;/li&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_J_x9kPKKtTI/R2_JrjwdmCI/AAAAAAAAAHI/yRnzHWN5qNg/s1600-h/proyectosmedicina.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_J_x9kPKKtTI/R2_JrjwdmCI/AAAAAAAAAHI/yRnzHWN5qNg/s800/proyectosmedicina.bmp" alt="" id="BLOGGER_PHOTO_ID_5147554649277831202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;li&gt;Pulsando el botón "Continue" nos saldrá la siguiente página en la que se nos pide que aceptemos la licencia de World Community Grid&lt;/li&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_J_x9kPKKtTI/R2_V6jwdmLI/AAAAAAAAAIQ/ZtS3RtTx28Q/s1600-h/LicenciaWCG.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_J_x9kPKKtTI/R2_V6jwdmLI/AAAAAAAAAIQ/ZtS3RtTx28Q/s800/LicenciaWCG.bmp" alt="" id="BLOGGER_PHOTO_ID_5147568101115402418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Nota: es posible que, si usamos un "nombre" ya existente en los proyectos del World Community Grid, nos salga la siguiente pantalla&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_J_x9kPKKtTI/R4ILbDwdmaI/AAAAAAAAALI/QczyrVJu0Qg/s1600-h/username_taken.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_J_x9kPKKtTI/R4ILbDwdmaI/AAAAAAAAALI/QczyrVJu0Qg/s800/username_taken.bmp" alt="" id="BLOGGER_PHOTO_ID_5152693483158215074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;En este caso deberemos cambiar el nombre (User name) hasta que demos con uno que no esté ya utilizado (cambiando el nombre y pulsando en "Continue").&lt;br /&gt;&lt;li&gt;Pulsando "Accept" nos saldrá una página que dice:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Please note: World Community Grid will be sending you an email...&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pulsando "Continue" llegaremos a la página final, donde aparece un botón de "Download" para bajarnos la aplicación cliente que se ejecutará en nuestro ordenador de forma continua&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_J_x9kPKKtTI/R4IPITwdmbI/AAAAAAAAALQ/_C2cHLE8hKc/s1600-h/Download.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_J_x9kPKKtTI/R4IPITwdmbI/AAAAAAAAALQ/_C2cHLE8hKc/s800/Download.bmp" alt="" id="BLOGGER_PHOTO_ID_5152697559082178994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ahora debemos pulsar en "Download" y guardar el archivo en nuestro ordenador. Cuando la descarga haya finalizado deberemos ejecutar dicho archivo (GridRepublicSetup.exe). Al ejecutarlo nos saldrá el típico diálogo de instalación de un programa windows. Ya sabéis,  se le dice a todo que sí y palante. La pantalla final debería ser:&lt;/li&gt;&lt;/ol&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_J_x9kPKKtTI/R3DDZDwdmMI/AAAAAAAAAIY/Br32glXt_ew/s1600-h/install.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_J_x9kPKKtTI/R3DDZDwdmMI/AAAAAAAAAIY/Br32glXt_ew/s800/install.bmp" alt="" id="BLOGGER_PHOTO_ID_5147829209357195458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Una vez que pulsamos "Next" la aplicación se ejecutará y podremos ver una ventana en el modo llamado "Simple View". Además, el programa se ha añadido al menú de Inicio, de forma que siempre se ejecutará al iniciar sesión en windows. Si cerramos la ventana (pulsando en la "X") la ventana se cerrará, pero la aplicación sigue ejecutándose en segundo plano. Podemos abrir de nuevo la ventana haciendo doble click en el icono situado alado del reloj, en la barra de herramientas.&lt;br /&gt;&lt;br /&gt;En mi caso, cuando abro la ventana del GridRepublic Desktop mi aplicación tiene el siguiente aspecto:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_J_x9kPKKtTI/R3DFXzwdmNI/AAAAAAAAAIg/9ZtBK6MYmZo/s1600-h/GRD.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_J_x9kPKKtTI/R3DFXzwdmNI/AAAAAAAAAIg/9ZtBK6MYmZo/s800/GRD.bmp" alt="" id="BLOGGER_PHOTO_ID_5147831386905614546" border="0" /&gt;&lt;/a&gt;Podemos observar que actualmente estoy participando en el proyecto "MalariaControl". Lo que realmente ocurre es que estoy ejecutando una "&lt;span style="font-style: italic;"&gt;work unit&lt;/span&gt;" de ese proyecto, esto es, un trozo de dicho proyecto. Mi ordenador lleva 26 minutos dedicados a esa &lt;span style="font-style: italic;"&gt;work unit&lt;/span&gt; y todavía le faltan 1 hora y 12 minutos para acabarla. Cuando eso ocurra, de forma automática la aplicación pasará a ejecutar otra &lt;span style="font-style: italic;"&gt;work unit&lt;/span&gt; pero de otro proyecto disinto. Es decir, mi ordenador participa de forma equitativa en todos los proyectos a los cuales estoy suscrito.&lt;br /&gt;&lt;br /&gt;Desde aquí os animo a que participeis en estos proyectos humanitarios (todos pertenecen a instituciones sin ánimo de lucro y los resultados son publicados al resto de la comunidad científica) y a que animéis a vuestros amigos, familiares, compañeros de trabajo, etc. a que también lo hagan.&lt;br /&gt;&lt;br /&gt;Comentad en este blog cualquier problema o duda que tengáis durante la instalación o ejecución del programa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-5098256916966993749?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/5098256916966993749/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=5098256916966993749' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5098256916966993749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5098256916966993749'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/12/dona-el-tiempo-libre-de-tu-ordenador.html' title='Dona el tiempo libre de tu ordenador para una buena causa'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_J_x9kPKKtTI/R2_Dxzwdl9I/AAAAAAAAAGg/BzyqGkYvZ7I/s72-c/home.bmp' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-3281362798323222427</id><published>2007-12-23T15:46:00.000+01:00</published><updated>2007-12-25T14:27:18.038+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grid computing'/><title type='text'>Grid-Volunteer Computing: BOINC</title><content type='html'>Muchos de vosotros conoceréis el famoso proyecto &lt;a href="http://en.wikipedia.org/wiki/Seti%40home"&gt;SETI@home&lt;/a&gt;, en el cual personas de todo el mundo "donaban" el tiempo libre de sus PCs para analizar las señales de radio provenientes del espacio en busca de vida inteligente en otros planetas.&lt;br /&gt;&lt;br /&gt;El software de dicho proyecto ha evolucionado para convertirse en una plataforma de computación distribuida genérica llamada &lt;a href="http://boinc.berkeley.edu/"&gt;BOINC&lt;/a&gt;, que permite crear proyectos similares al SETI@home. El potencial del llamado &lt;a href="http://en.wikipedia.org/wiki/Volunteer_computing"&gt;volunteer computing&lt;/a&gt; es impresionante. Teniendo en cuenta los siguientes factores:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;una gran parte del tiempo nuestro ordenador (el de casa o el del trabajo) no lo estamos usando&lt;/li&gt;&lt;li&gt;cuando lo usamos, normalmente no utilizamos el 100% de sus recursos (CPU, memoria)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;la potencia de los ordenadores personales es cada año mucho mayor&lt;/li&gt;&lt;li&gt;el número de ordenadores personales en el mundo es cada año mayor&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;podemos entender resultados tan sorprendentes como, por ejemplo, que el proyecto &lt;a href="http://www.worldcommunitygrid.org/stat/viewProject.do?projectShortName=hdc"&gt;Help Defeat the Cancer&lt;/a&gt;, lanzado el 20 de Julio de 2006 y completado en Abril de 2007, utilizó un tiempo de procesamiento total equivalente de &lt;span class="contentText"&gt;2909 años, 260 días, 10 horas, 43 minutos y 29 segundos. Es decir, si el proyecto se hubiese ejecutado en un único ordenador, hubiese tardado casi 3,000 años en vez de nueve meses. ¿No está mal verdad?&lt;br /&gt;&lt;br /&gt;Las posibilidades que esta tecnología nos brinda son inmensas. Antes, a menudo, un investigador tenía que descartar de antemano la ejecución de una simulación o un análisis determinado debido a que llevaría "miles de años" ejecutarlo. Con la computación distribuida y, en el caso de la computación voluntaria, con coste cero, muchos de dichos procesos pueden llevarse a cabo, con lo que los planteamientos iniciales de una línea de investigación dada pueden cambiar radicalmente.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Además, el hecho de que cada usuario decida de forma individual en qué proyectos quiere participar, hace que este sistema adquiera un tinte "democrático": son los usuarios quienes deciden a qué proyectos dan su apoyo. Por ejemplo, un proyecto que investigue las proteínas en busca de nuevos medicamentos para el cáncer es probable que tenga mucho mayor apoyo que un proyecto que busque la forma de aumentar la potencia de las armas atómicas.&lt;br /&gt;&lt;br /&gt;Los proyectos ejecutados con este sistema suelen pertenecer a disciplinas tales como la astronomía, física, química, biología, medicina, matemáticas, etc.&lt;br /&gt;&lt;br /&gt;En la siguiente página podemos ver una lista de algunos de los proyectos que utilizan BOINC:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://boinc.berkeley.edu/projects.php"&gt;http://boinc.berkeley.edu/projects.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Otros proyectos que usan BOINC pertenecientes al sistema World Community Grid:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.worldcommunitygrid.org/projects_showcase/viewResearch.do"&gt;http://www.worldcommunitygrid.org/projects_showcase/viewResearch.do&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Es muy probable que este novedoso paradigma de computación crezca cada año de forma que un mayor número de instituciones (universidades, centros de investigación, etc.) se beneficie de sus ventajas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-3281362798323222427?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/3281362798323222427/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=3281362798323222427' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/3281362798323222427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/3281362798323222427'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/12/grid-volunteer-computing-boinc.html' title='Grid-Volunteer Computing: BOINC'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-4366480252342851770</id><published>2007-09-29T23:54:00.000+02:00</published><updated>2007-09-29T23:58:24.299+02:00</updated><title type='text'>La Mula debería usar HTTP GET para descargarse el WSDL</title><content type='html'>No tiene mucho sentido utilizar HTTP POST para acceder al WSDL de un servicio web dado, verdad?&lt;br /&gt;&lt;br /&gt;http://mule.mulesource.org/jira/browse/MULE-2460&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-4366480252342851770?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/4366480252342851770/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=4366480252342851770' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/4366480252342851770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/4366480252342851770'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/09/la-mula-debera-usar-http-get-para.html' title='La Mula debería usar HTTP GET para descargarse el WSDL'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-5665954005312737229</id><published>2007-09-25T18:04:00.000+02:00</published><updated>2007-09-25T18:08:37.000+02:00</updated><title type='text'>WFetch</title><content type='html'>Esta herramienta, originalmente diseñada para testear servidores ISS Microsoft, es realmente útil para testear manualmente cualquier tipo de servidor HTTP, pemitiendo generar todo tipo de peticiones de forma visual y sencilla:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=b134a806-d50e-4664-8348-da5c17129210&amp;amp;displaylang=en"&gt;WFetch 1.4&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PD: Sí emilio, estoy usando windows, esto de trabajar con equipos del cliente es lo que tiene :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-5665954005312737229?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/5665954005312737229/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=5665954005312737229' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5665954005312737229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5665954005312737229'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/09/wfetch.html' title='WFetch'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-1700624268859482459</id><published>2007-09-15T01:11:00.000+02:00</published><updated>2007-09-15T01:40:03.933+02:00</updated><title type='text'>Control de flujo en JMS</title><content type='html'>Como en cualquier proceso de comunicación, si un &lt;span style="font-style: italic;"&gt;productor&lt;/span&gt; genera información de forma más rápida que un &lt;span style="font-style: italic;"&gt;consumidor&lt;/span&gt; podemos tener problemas como pérdida de mensajes, bloqueos, etc.&lt;br /&gt;&lt;br /&gt;El mecanismo por excelencia para coordinar las tasas de productores y consumidores de información a nivel de protocolo es el llamado &lt;span style="font-weight: bold;"&gt;control de flujo&lt;/span&gt;. El caso más típico es el del protocolo TCP, que proporciona dicho control empleando una ventana de transmisión y con mecanismos tales como el &lt;span style="font-style: italic;"&gt;slow start&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;congestion avoidance, fast retransmit, &lt;/span&gt;etc.&lt;br /&gt;&lt;br /&gt;JMS, el estándar de mensajería de java ee, no define ningún mecanismo de control de flujo a nivel de estándar. De todas formas, ciertos proveedores sí que proporcionan dicha funcionalidad de forma propietaria:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Bea: &lt;a href="http://edocs.bea.com/wls/docs92/ConsoleHelp/pagehelp/JMSjmsconnectionjmsconnectionfactoryconfigflowcontrolparamstitle.html"&gt;http://edocs.bea.com/wls/docs92/ConsoleHelp/pagehelp/JMSjmsconnectionjmsconnectionfactoryconfigflowcontrolparamstitle.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Swift MQ: &lt;a href="http://www.swiftmq.com/developers/howto_huge_messages/index.html"&gt;http://www.swiftmq.com/developers/howto_huge_messages/index.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;SJSMQ: &lt;a href="http://docs.sun.com/app/docs/doc/819-4467/6n6k98br7?a=view"&gt;http://docs.sun.com/app/docs/doc/819-4467/6n6k98br7?a=view&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Active MQ:&lt;a href="http://activemq.apache.org/producer-flow-control.html"&gt; http://activemq.apache.org/producer-flow-control.html&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-1700624268859482459?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/1700624268859482459/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=1700624268859482459' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/1700624268859482459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/1700624268859482459'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/09/control-de-flujo-en-jms.html' title='Control de flujo en JMS'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-6541499531181082398</id><published>2007-09-08T21:34:00.000+02:00</published><updated>2007-09-08T21:36:50.046+02:00</updated><title type='text'>Como unir ficheros en windows sin el hacha</title><content type='html'>Nada más fácil. Desde la consola:&lt;br /&gt;&lt;br /&gt;COPY /B fichero.1+fichero.2+fichero.3... /B fichero&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-6541499531181082398?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/6541499531181082398/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=6541499531181082398' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/6541499531181082398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/6541499531181082398'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/09/como-unir-ficheros-en-windows-sin-el.html' title='Como unir ficheros en windows sin el hacha'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-5194859029434233308</id><published>2007-07-23T11:29:00.000+02:00</published><updated>2007-07-23T11:37:19.834+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='glassfish'/><category scheme='http://www.blogger.com/atom/ns#' term='jndi'/><title type='text'>Buscando en el JNDI de Glassfish</title><content type='html'>Me ha llevado un buen rato, así que os lo cuento por si os sirve para ahorraros unos minutillos dando vueltas por la web: para poder acceder al contexto JNDI del Glassfish desde una JVM distinta (local o remota) debeis utilizar las siguientes propiedades:&lt;br /&gt;&lt;br /&gt;       Properties props = new Properties();&lt;br /&gt;       props.setProperty("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory");&lt;br /&gt;       props.setProperty("org.omg.CORBA.ORBInitialHost","localhost");&lt;br /&gt;       props.setProperty("org.omg.CORBA.ORBInitialPort","3700");      &lt;br /&gt;       InitialContext ic = new InitialContext(props);&lt;br /&gt;&lt;br /&gt;Por supuesto, este código no será portable para su ejecución contra otro servidor de aplicaciones. Si os preocupa la portabilidad un fichero &lt;span style="font-style: italic;"&gt;jndi.properties&lt;/span&gt; con las propiedades anteriores facilitará la migración en un futuro.&lt;br /&gt;&lt;br /&gt;Versión usada: Sun Java System Application Server 9.1 (build b50g-beta3) = Glassfish v2 beta 3&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Saludos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-5194859029434233308?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/5194859029434233308/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=5194859029434233308' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5194859029434233308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5194859029434233308'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/07/buscando-en-el-jndi-de-glassfish.html' title='Buscando en el JNDI de Glassfish'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-6258434949505842423</id><published>2007-05-31T12:56:00.000+02:00</published><updated>2007-05-31T13:04:08.495+02:00</updated><title type='text'>Uniendo JSF y EJB 3.0: Seam</title><content type='html'>Buscando la forma de unir el mundo JSF y el mundo EJB 3.0 he descubierto que &lt;a href="http://www.jboss.com/products/seam"&gt;Seam&lt;/a&gt; es la tecnología ideal para ese fin. Este artículo explica perfectamente por qué:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.itarchitect.co.uk/articles/display.asp?id=251"&gt;http://www.itarchitect.co.uk/articles/display.asp?id=251&lt;/a&gt;&lt;br /&gt; &lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-6258434949505842423?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/6258434949505842423/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=6258434949505842423' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/6258434949505842423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/6258434949505842423'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/05/uniendo-jsf-y-ejb-30-seam.html' title='Uniendo JSF y EJB 3.0: Seam'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-7512443536803989372</id><published>2007-05-24T10:56:00.000+02:00</published><updated>2007-05-24T17:20:17.174+02:00</updated><title type='text'>Struts vs. JSF</title><content type='html'>En una arquitectura típica de &lt;a href="http://www.jguru.com/faq/view.jsp?EID=125072"&gt;tres capas&lt;/a&gt; tenemos varias opciones para la capa de presentación: jsf, webwork, tapestry, struts, spring mvc...&lt;br /&gt;&lt;br /&gt;La opción más extendida a día de hoy es Struts, aunque JSF cada vez está cogiendo más fuerza. Hoy he mantenido una conversación interesante en el canal #jsf de freenode con &lt;a href="http://blogs.sun.com/paulsen/"&gt;Ken Paulsen&lt;/a&gt; creador del &lt;span style="font-style: italic;"&gt;framework&lt;/span&gt; &lt;a href="https://jsftemplating.dev.java.net/"&gt;JSFTemplating&lt;/a&gt;, quien me comentó las siguientes ventajas de JSF:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El soporte de JSF en IDEs como Eclipse, Netbeans, etc. es mucho mejor&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Constantemente se crean nuevos componentes JSF&lt;/li&gt;&lt;li&gt;Gran soporte de JSF en la industria&lt;/li&gt;&lt;li&gt;JSF es parte de Java EE (Struts no)&lt;/li&gt;&lt;li&gt;Todos los servidores de aplicaciones, por tanto, incluyen JSF&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.indeed.com/trendgraph/jobgraph.png?q=jsf%2C+ruby+rails%2C+spring+mvc%2C+webwork%2C+struts2%2C+tapestry"&gt;Tendencias&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Finalmente, para sacar la máxima productividad posible de JSF, Ken me recomendó que empezara echándole un vistazo a &lt;a href="https://facelets.dev.java.net/"&gt;Facelets&lt;/a&gt; o a &lt;a href="https://jsftemplating.dev.java.net/"&gt;JSFTemplating&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Más tarde, Joseph Ottinger (editor the TheServerSide) me recomendó el siguiente thread:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=45519"&gt;http://www.theserverside.com/news/thread.tss?thread_id=45519&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Es una discusión muy interesante, en la que se lanzan opiniones de todo tipo, a favor y en contra the JSF. Algunas ideas que parecen compartir muchos de los participantes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El diseño de Struts es horrible (aunque en su momento era mejor que nada)&lt;/li&gt;&lt;li&gt;Usar JSP como &lt;span style="font-style: italic;"&gt;rendering engine&lt;/span&gt; es una de las principales causas de las críticas a JSF. Es mucho más productivo usar Facelets.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-7512443536803989372?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/7512443536803989372/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=7512443536803989372' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/7512443536803989372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/7512443536803989372'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/05/struts-vs-jsf.html' title='Struts vs. JSF'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-1773256263464464766</id><published>2007-05-18T14:35:00.000+02:00</published><updated>2007-05-18T14:46:35.368+02:00</updated><title type='text'>Balanceo de Carga del JMS de Glassfish != Round Robin</title><content type='html'>Haciendo pruebas con el &lt;a href="https://mq.dev.java.net/"&gt;proveedor JMS&lt;/a&gt; de Glassfish, usando dos consumidores en una misma &lt;em&gt;Queue &lt;/em&gt;para comprobar cómo se producía el balanceo de carga observé un peculiar comportamiento: bajo ciertas condiciones sólo uno de los consumidores recibía los mensajes enviados.&lt;br /&gt;&lt;br /&gt;Mi primera impresión fue que se trataba de un &lt;em&gt;bug&lt;/em&gt;, pues esperaba que el algoritmo de balanceo de carga fuera &lt;a href="http://en.wikipedia.org/wiki/Round-robin_scheduling"&gt;&lt;em&gt;round-robin&lt;/em&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Finalmente, gracias a la estupenda comunidad que hay detrás de Glassfish, descubrí que realmente dicho comportamiento no era un &lt;em&gt;bug&lt;/em&gt;, si no el resultado de un algoritmo de balanceo de carga mucho más inteligente.&lt;br /&gt;&lt;br /&gt;Si quereis ver los detalles del asunto:&lt;br /&gt;&lt;br /&gt;  &lt;a href="http://forums.java.net/jive/thread.jspa?messageID=216950"&gt;http://forums.java.net/jive/thread.jspa?messageID=216950&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-1773256263464464766?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/1773256263464464766/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=1773256263464464766' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/1773256263464464766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/1773256263464464766'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/05/balanceo-de-carga-del-jms-de-glassfish.html' title='Balanceo de Carga del JMS de Glassfish != Round Robin'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-4339619010223116066</id><published>2007-05-15T10:29:00.000+02:00</published><updated>2007-05-15T12:21:11.304+02:00</updated><title type='text'>Glassfish y JMS: más de un consumidor en una cola</title><content type='html'>&lt;a href="http://java.sun.com/javaee/5/docs/tutorial/doc/JMS.html#wp84181"&gt;JMS&lt;/a&gt; es una tecnología realmente interesante que todos deberíamos conocer e incorporar a nuestro maletín de herramientas. En está página podeis encontrar varios links interesantes:&lt;br /&gt;&lt;br /&gt;  &lt;a href="http://vossnet.org/jms-links.html"&gt;http://vossnet.org/jms-links.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En mi empresa estamos probando &lt;a href="https://glassfish.dev.java.net/"&gt;Glassfish&lt;/a&gt; con su proveedor JMS por defecto (&lt;a href="https://mq.dev.java.net/"&gt;SJSMQ&lt;/a&gt;) y nos llevamos una pequeña sorpresilla cuando intentamos configurar más de un consumidor en una misma cola. En el log del servidor nos encontrábamos con el siguiente mensaje:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[#|2007-05-14T17:00:04.597+0200|WARNING|sun-appserver-pe9.0|javax.enterprise.system.stream.err|_ThreadID=15;_ThreadName=Thread-jms[6];_RequestID=b9d1fdf3-bd50-4328-8798-7fc80308e559;|[14/may/2007:17:00:04 CEST] WARNING [B2009]: Creation of consumer  from connection guest@192.168.0.18:32883 on destination QMultipleConsumers failed:&lt;br /&gt;com.sun.messaging.jmq.jmsserver.util.BrokerException: [B4182]: Consumer can not be added to destination QMultipleConsumers [Queue], limit of 1 consumers would be exceeded&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;Después de investigar un poco llegué a&lt;br /&gt;&lt;br /&gt;   &lt;a href="https://glassfish.dev.java.net/javaee5/docs/AG/abljw.html"&gt;https://glassfish.dev.java.net/javaee5/docs/AG/abljw.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;donde leemos:&lt;br /&gt;&lt;p style="font-style: italic;"&gt;maxNumActiveConsumers -&gt; The maximum number of consumers that can be active in load-balanced delivery from a queue destination. A value of -1 means an unlimited number. The default is1. (Platform Edition limits this value to 2.)&lt;a name="indexterm-138"&gt;&lt;/a&gt;&lt;a name="indexterm-139"&gt;&lt;/a&gt;&lt;/p&gt;Entonces, tratamos de modificar esa propiedad usando la consola del Glassfish, pero ello producía el siguiente error:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;java.lang.Exception: MBean DestinationManagerConfig: Problem encountered while invoking operation create: com.sun.messaging.jmq.jmsserver.util.BrokerException: Unable to set/update attributes destination: QMultipleConsumers, because [B4180]: Support for feature [B0050]: More than 2 Primary Consumers on a Destination is unavailable on destination QMultipleConsumers [Queue], please upgrade to the Enterprise Edition to enable this feature&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finalmente, tras investigar un poco en el IRC, donde comprobamos que había gente usando colas con varios consumidores sin problemas, decidimos bajarnos la última &lt;span style="font-style: italic;"&gt;build&lt;/span&gt; del Glassfish (v2-b41d) y... tachán!, problema solucionado.&lt;br /&gt;&lt;br /&gt;Ya se sabe, esto de actualizar la versión suele dar resultados... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-4339619010223116066?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/4339619010223116066/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=4339619010223116066' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/4339619010223116066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/4339619010223116066'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/05/glassfish-y-jms-ms-de-un-consumidor-en.html' title='Glassfish y JMS: más de un consumidor en una cola'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-8444136414376682723</id><published>2007-05-11T17:57:00.000+02:00</published><updated>2007-05-11T18:00:35.407+02:00</updated><title type='text'>Escuchar en el mismo puerto desde distintas ip's</title><content type='html'>&lt;tt&gt;¿Sabíais que podemos tener varios procesos en uina máquina Linux escuchando el mismo puerto? El truco está en usar una ip distinta para cada proceso. Por ejemplo, si ejecutamos:&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;#ifconfig eht0:0 192.168.1.1&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;#ifconfig eht0:1 192.168.1.2&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;tendremos dos ip's virtuales, a parte de la que ya tenga la máquina.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;Si ejecutamos el siguiente código java:&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;---------------------------------------------------------------------&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;            InetAddress ip1 = InetAddress.getByName("192.168.1.1");&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;            InetAddress ip2 = InetAddress.getByName("192.168.1.2");&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;            ServerSocket ss1 = new ServerSocket(14000,0,ip1);&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;            ServerSocket ss2 = new ServerSocket(14000,0,ip2);&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;            &lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;            Thread.sleep(12000);&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;            System.exit(0);&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;---------------------------------------------------------------------&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;Tendremos dos servidores escuchando en el puerto 14000, cada uno en una&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;ip distinta. Podemos ejecutar en una consola:&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;#telnet 192.168.1.1 14000&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Trying 192.168.0.211...&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Connected to 192.168.0.211.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Escape character is '^]'.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;y en otra consola:&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;#telnet 192.168.1.2 14000&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Trying 192.168.0.211...&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Connected to 192.168.0.211.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;Escape character is '^]'.&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;También he probado a arrancar dos mysql's sobre el mismo puerto y&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;distinta ip virtual y funciona.&lt;/tt&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-8444136414376682723?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/8444136414376682723/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=8444136414376682723' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/8444136414376682723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/8444136414376682723'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/05/escuchar-en-el-mismo-puerto-desde.html' title='Escuchar en el mismo puerto desde distintas ip&apos;s'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-6383619470283343792</id><published>2007-05-11T17:50:00.000+02:00</published><updated>2007-05-11T17:54:27.905+02:00</updated><title type='text'>Cómo sacar todas las líneas de un log a partir de cierta hora</title><content type='html'>Pues muy fácil (en Linux):&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;~# cat x.log | awk '{ if ($3&gt;"16:46:00") print $0}'&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;DEBUG 2006-02-14 16:46:04,408 [http-64.91.4.78-91-Processor21] etc.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;DEBUG 2006-02-14 16:46:08,559 [http-64.91.4.78-91-Processor11] etc.&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;DEBUG 2006-02-14 16:46:15,087 [http-64.91.4.78-91-Processor11] etc.&lt;/tt&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-6383619470283343792?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/6383619470283343792/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=6383619470283343792' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/6383619470283343792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/6383619470283343792'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/05/cmo-sacar-todas-las-lneas-de-un-log.html' title='Cómo sacar todas las líneas de un log a partir de cierta hora'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-3062206821895408062</id><published>2007-05-02T20:18:00.000+02:00</published><updated>2008-12-09T01:50:20.745+01:00</updated><title type='text'>Cambio de look</title><content type='html'>Bueno, parece que está de moda esto de subir los cambios de &lt;span style="font-style: italic;"&gt;look&lt;/span&gt; al blog, así que ahí va el antes y el despues de mi último corte de pelo :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Antes:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_J_x9kPKKtTI/RjjXAUMicbI/AAAAAAAAACA/euWjqCgXht4/s1600-h/antes.JPG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_J_x9kPKKtTI/RjjXAUMicbI/AAAAAAAAACA/euWjqCgXht4/s320/antes.JPG" alt="" id="BLOGGER_PHOTO_ID_5060030581772022194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Despues:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_J_x9kPKKtTI/RjjXA0MiccI/AAAAAAAAACI/K5qU1iw2_ag/s1600-h/despues.JPG"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_J_x9kPKKtTI/RjjXA0MiccI/AAAAAAAAACI/K5qU1iw2_ag/s320/despues.JPG" alt="" id="BLOGGER_PHOTO_ID_5060030590361956802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;nota: solo se admiten piropos :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-3062206821895408062?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/3062206821895408062/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=3062206821895408062' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/3062206821895408062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/3062206821895408062'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/05/cambio-de-look.html' title='Cambio de look'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_J_x9kPKKtTI/RjjXAUMicbI/AAAAAAAAACA/euWjqCgXht4/s72-c/antes.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-2413651591683412258</id><published>2007-04-27T17:40:00.000+02:00</published><updated>2007-04-27T17:43:03.079+02:00</updated><title type='text'>Groovy fix: Thread.setDefaultUncaughtExceptionHandler</title><content type='html'>Perfecto! Ya podemos controlar las excepciones no capturadas en Groovy con Thread.setDefaultUncaughtExceptionHandler:&lt;br /&gt;&lt;br /&gt;&lt;a onclick="return top.js.OpenExtLink(window,event,this)" href="http://jira.codehaus.org/browse/GROOVY-1788" target="_blank"&gt;http://jira.codehaus.org&lt;wbr&gt;/browse/GROOVY-1788&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Viva la comunidad open source (¿cuántas veces he dicho esto ya?).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-2413651591683412258?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/2413651591683412258/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=2413651591683412258' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/2413651591683412258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/2413651591683412258'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/04/groovy-fix-threadsetdefaultuncaughtexce.html' title='Groovy fix: Thread.setDefaultUncaughtExceptionHandler'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-7690727587892728744</id><published>2007-04-17T17:00:00.000+02:00</published><updated>2007-04-17T17:03:47.600+02:00</updated><title type='text'>Google usa Hibernate</title><content type='html'>En una &lt;a href="http://coyotevil.blogspot.com/2006/12/por-favor-no-ms-sql-los-orms-se.html"&gt;entrada anterior&lt;/a&gt;  defendí el empleo de los ORM's.&lt;br /&gt;&lt;br /&gt;Hoy me llevé una pequeña sorpresilla al descubrir que ni más ni menos que Google usa Hibernate. De hecho han contribuido a su desarrollo recientemente:&lt;br /&gt;&lt;br /&gt;http://www.infoq.com/news/2007/03/hibernate-shards&lt;br /&gt;&lt;br /&gt;¿Si Google lo usa no será tan malo verdad? ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-7690727587892728744?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/7690727587892728744/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=7690727587892728744' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/7690727587892728744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/7690727587892728744'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/04/google-usa-hibernate.html' title='Google usa Hibernate'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-4510850441153791206</id><published>2007-02-28T10:15:00.000+01:00</published><updated>2007-02-28T10:19:56.536+01:00</updated><title type='text'>Grails RFE</title><content type='html'>Genial! los chicos de &lt;a href="http://grails.codehaus.org/"&gt;Grails&lt;/a&gt; han implementado la RFE ("&lt;span style="font-style: italic;"&gt;Request For Enhacement&lt;/span&gt;") que propuse hace un par de meses:&lt;br /&gt;&lt;br /&gt;   &lt;a href="http://jira.codehaus.org/browse/GRAILS-520"&gt;http://jira.codehaus.org/browse/GRAILS-520 &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una vez más, tres puntos para el modelo de desarrollo del mundo &lt;span style="font-style: italic;"&gt;open source&lt;/span&gt;. Si alguien conoce algún producto propietario con este nivel de interactividad entre usuarios/desarrolladores que me lo cuente... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-4510850441153791206?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/4510850441153791206/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=4510850441153791206' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/4510850441153791206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/4510850441153791206'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/02/grails-rfe.html' title='Grails RFE'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-8330071748226897221</id><published>2007-02-06T10:28:00.000+01:00</published><updated>2008-12-09T01:50:21.459+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='java web start'/><category scheme='http://www.blogger.com/atom/ns#' term='swing'/><title type='text'>Java Web Start: una opción interesante</title><content type='html'>A día de hoy, cuando un programador debe desarrollar una nueva aplicación debe decidir, entre otras cosas, qué tipo de aplicación realizará: web o de escritorio. En el caso de java tenemos multitud de opciones a la hora de implementar una aplicación web: J2EE, Spring, JSF, Struts, ... las opciones son inmensas. En el caso de la aplicación de escritorio el abanico de opciones es más reducido: Swing o SWT, básicamente.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Las ventajas de las aplicaciones web son evidentes: son fácilmente distribuibles, su instalación y actualizaciones están centralizadas en un único punto (el servidor), etc. En cambio, el grado de interactividad que se puede lograr con el usuario quizá esté más limitado que en una aplicación de escritorio.&lt;br /&gt;&lt;br /&gt;Bien, imaginemos que estamos cómodos programando en Swing, y que tenemos que desarrollar una aplicación corporativa dentro de nuestra empresa (para uso interno, vamos). El tener que instalar la aplicación en cada puesto cliente es un tanto tedioso. Y no hablemos de las actualizaciones. ¿No podríamos instalar la aplicación en un único sitio, de forma que todos los clientes usaran siempre la misma versión, y de forma que cada vez que queramos actualizarla baste con hacerlo en un único punto? Pues sí podemos, usando &lt;a href="http://java.sun.com/products/javawebstart/"&gt;Java Web Start&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Y, no creais, no requiere mucho esfuerzo. Lo único que necesitamos es un servidor web y dar un toque personal a nuestra aplicación, "firmándola". En realidad sólo necesitamos firmar la aplicación si ésta necesita acceder a disco, abrir conexiones de red a otros servidores etc. Otra posibilidad implica utilizar la API que el JWS proporciona para acceder a los recusos de la máquina cliente, pero esta opción es más compleja y limitada. Mi recomendación es firmar la aplicación y solicitar el acceso total a los recursos de la máquina cliente, como veremos más adelante (el cliente deberá conceder dicho acceso, pues java mostrará un diálogo preguntando si "confía" en la firma mostrada).&lt;br /&gt;&lt;br /&gt;No voy a describir Java Web Start en sí. La siguiente guía de Sun es bastante completa:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/contents.html"&gt;http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/contents.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lo que haré será describir concisamente los pasos necesarios para distribuir una aplicación Swing mediante JWS. La aplicación de este ejemplo se desarrollará con Netbeans 5.5, Hibernate 3.2, MySQL 5.0 y Tomcat 5.5, aunque el método sería muy similar para cualquier otro entorno de desarrollo. Al estar creado con "&lt;span style="font-style: italic;"&gt;Matisse&lt;/span&gt;" (el magnífico asistente para crear GUIs en el Netbeans) y al utilizar Hibernate y MySQL, el directorio "&lt;span style="font-style: italic;"&gt;dist&lt;/span&gt;" del proyecto presenta la siguiente estructura:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_J_x9kPKKtTI/RaJAKkqAhJI/AAAAAAAAABI/xocpsFLbzqc/s1600-h/nb1.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_J_x9kPKKtTI/RaJAKkqAhJI/AAAAAAAAABI/xocpsFLbzqc/s320/nb1.jpg" alt="" id="BLOGGER_PHOTO_ID_5017643485226894482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Efectivamente, nuestra aplicación depende de una serie de librerías. Por tanto, para poder ejecutarla vía JWS necesitamos firmar no solo el archivo ParrillaTeleventa.jar, sino todos los archivos JAR de las citadas librerías. Para ello usamos la tarea (&lt;em&gt;task&lt;/em&gt;) &lt;a href="http://ant.apache.org/manual/CoreTasks/signjar.html"&gt;signjar&lt;/a&gt; del ANT. Deberemos crear un par de claves (en este &lt;a href="http://coyotevil.blogspot.com/2006/11/configurar-el-tomcat-con-certificado.html"&gt;post&lt;/a&gt; anterior describo como crear una &lt;span style="font-style: italic;"&gt;keystore&lt;/span&gt;) y modificar el fichero &lt;span style="font-style: italic;"&gt;build.xml&lt;/span&gt; del proyecto de la siguiente forma:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_J_x9kPKKtTI/RaEpCUqAhEI/AAAAAAAAAAM/e-UQaHg97zs/s1600-h/jws1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5017336579748824130" style="" alt="" src="http://1.bp.blogspot.com/_J_x9kPKKtTI/RaEpCUqAhEI/AAAAAAAAAAM/e-UQaHg97zs/s320/jws1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Pero... si intentamos firmar las librerías directamente obtendremos una pequeña sorpresilla:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_J_x9kPKKtTI/RaE_4EqAhII/AAAAAAAAAAw/U1kjiPqr4Tw/s1600-h/jws5.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5017361692422603906" style="" alt="" src="http://4.bp.blogspot.com/_J_x9kPKKtTI/RaE_4EqAhII/AAAAAAAAAAw/U1kjiPqr4Tw/s320/jws5.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Efectivamente, ciertas librerías ya están firmadas, pero no con nuestra firma, si no con la de su distribuidor. Para poder aplicarles nuestra firma debemos antes "borrar" la firma original. A día de hoy no existe (yo no la he encontrado, al menos) ninguna tarea del ANT o similar para "desfirmar" (&lt;em&gt;unsign&lt;/em&gt;) archivos JAR, o para sobreescribir la firma. Pero dado que un archivo JAR no es más que un ZIP con una cierta estructura de directorios podemos eliminar las firmas originales manualmente, descomprimiendo cada librería, eliminando los archivos de tipo &lt;span style="font-style: italic;"&gt;*.DSA, *.SF o *.RSA&lt;/span&gt; que conforman la firma, y volviendo a comprimirlo. El siguiente script nos ayudará a automatizar el proceso:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;unsignjars.sh&lt;br /&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;TMPDIR=unsignTmpDir&lt;br /&gt;JAR=/usr/local/java/bin/jar&lt;br /&gt;for i in *.jar&lt;br /&gt;do&lt;br /&gt;mkdir $TMPDIR&lt;br /&gt;mv $i $TMPDIR&lt;br /&gt;cd $TMPDIR&lt;br /&gt;jar xf $i&lt;br /&gt;rm -f $i&lt;br /&gt;rm -f META-INF/{*.DSA,*.SF,*.RSA}&lt;br /&gt;jar cf $i .&lt;br /&gt;mv $i ..&lt;br /&gt;cd ..&lt;br /&gt;rm -rf $TMPDIR&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Una vez eliminada la firma original de las librerías ya podemos firmar todos los componentes (*.jar) de nuestra aplicación. &lt;/div&gt;&lt;br /&gt;Ahora sólo resta crear un descriptor JNLP de nuestra aplicación, que no es más que un fichero xml. En nuestro caso, su contenido podría ser:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;jnlp spec="0.2 1.0"&lt;br /&gt;codebase="http://192.168.0.10:8084/ServiciosInternos/parrillateleventa/"&lt;br /&gt;href="parrillateleventa.jnlp"&amp;gt;&lt;br /&gt;&amp;lt;information&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Parrilla Televenta 1.0&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;vendor&amp;gt;Acme S.L.&amp;lt;/vendor&amp;gt;&lt;br /&gt;&amp;lt;description&amp;gt;Sistema de Planificación de las Campañas del Departamento de Televenta&amp;lt;/description&amp;gt;&lt;br /&gt;&amp;lt;description kind="short"&amp;gt;Planificador de Campañas&amp;lt;/description&amp;gt;&lt;br /&gt;&amp;lt;offline-allowed/&amp;gt;&lt;br /&gt;&amp;lt;/information&amp;gt;&lt;br /&gt;&amp;lt;resources&amp;gt;&lt;br /&gt;&amp;lt;j2se version="1.5"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="ParrillaTeleventa.jar" main="true" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/Generales.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/activation.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/antlr-2.7.6.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/asm.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/asm-attrs.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/cglib-2.1.3.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/commons-collections-2.1.1.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/commons-logging-1.0.4.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/dom4j-1.6.1.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/hibernate3.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/jta.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/log4j-1.2.11.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/mail.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/mysql-connector-java-3.1.10-bin.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/swing-layout-1.0.1.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;jar href="lib/xerces-2.6.2.jar" download="eager"/&amp;gt;&lt;br /&gt;&amp;lt;/resources&amp;gt;&lt;br /&gt;&amp;lt;application-desc main-class="com.acme.televenta.rejillateleventa.Main"/&amp;gt;&lt;br /&gt;&amp;lt;security&amp;gt;&lt;br /&gt;&amp;lt;all-permissions/&amp;gt;&lt;br /&gt;&amp;lt;/security&amp;gt;&lt;br /&gt;&amp;lt;/jnlp&amp;gt;&lt;br /&gt;&lt;br /&gt;La sintaxis de este fichero puede consultarse en&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/syntax.html"&gt;http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/syntax.html&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Y ya estamos listos para desplegar nuestra aplicación en el Tomcat. La forma más sencilla de hacer esto es creando un archivo WAR, en el que se incluiría nuestra aplicación, sus librerías, el descriptor JNLP y una página web de presentación. Veamos el aspecto de dicha página:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_J_x9kPKKtTI/RchNBgX22-I/AAAAAAAAABo/loBzNzv3HQs/s1600-h/jws2.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_J_x9kPKKtTI/RchNBgX22-I/AAAAAAAAABo/loBzNzv3HQs/s320/jws2.jpg" alt="" id="BLOGGER_PHOTO_ID_5028353672224365538" border="0" /&gt;&lt;/a&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;En la página de presentación hemos incluido un mensaje informando de la necesidad de tener java instalado, lo cual siempre es conveniente pues la máquina cliente puede que no tenga java.&lt;/div&gt;&lt;br /&gt;Si pinchamos en el enlace mostrado (es un enlace al archivo .jnlp) observaremos la siguiente ventana:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_J_x9kPKKtTI/RaE_30qAhGI/AAAAAAAAAAg/Ms8mZsDfNVg/s1600-h/jws3.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5017361688127636578" style="" alt="" src="http://3.bp.blogspot.com/_J_x9kPKKtTI/RaE_30qAhGI/AAAAAAAAAAg/Ms8mZsDfNVg/s320/jws3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;Finalmente nos aparecerá un diálogo informando de que la firma no se puede verificar. Simplemente pinchamos en la opción "&lt;span style="font-style: italic;"&gt;confiar siempre en el contenido de este editor&lt;/span&gt;" y pulsamos "&lt;span style="font-style: italic;"&gt;Ejecutar"&lt;/span&gt;. La maravillosa Parrilla aparecerá entonces en nuestra pantalla, ejecutándose localmente, como si se hubiera instalado manualmente en la máquina cliente.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Feliz distribución de aplicaciones de escritorio! :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-8330071748226897221?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/8330071748226897221/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=8330071748226897221' title='16 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/8330071748226897221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/8330071748226897221'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/01/java-web-start-una-opcin-interesante.html' title='Java Web Start: una opción interesante'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_J_x9kPKKtTI/RaJAKkqAhJI/AAAAAAAAABI/xocpsFLbzqc/s72-c/nb1.jpg' height='72' width='72'/><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-5718625489709678688</id><published>2007-01-31T17:26:00.000+01:00</published><updated>2007-01-31T18:18:51.179+01:00</updated><title type='text'>Logueando tráfico https...</title><content type='html'>En ocasiones es útil monitorizar el tráfico TCP a bajo nivel para investigar problemas de conexión con un servidor dado.&lt;br /&gt;&lt;br /&gt;En principio, con la herramienta &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;tcpdump&lt;/span&gt;&lt;/span&gt; (disponible en todos los Linux que conozco) podríamos capturar todo el tráfico en distintos logs diarios invocando el  siguiente script desde el &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;cron&lt;/span&gt;&lt;/span&gt; diariamente:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;LOG_FILE_BASE=/home/andres/tcpdata&lt;br /&gt;LOG_FILE=$LOG_FILE_BASE.`date +%Y%m%d`.log&lt;br /&gt;FILTRO='port 80'&lt;br /&gt;killall tcpdump &amp;gt; /dev/null 2&amp;gt;&amp;1&lt;br /&gt;&lt;br /&gt;if [ $UID -ne 0 ]&lt;br /&gt;then&lt;br /&gt;echo "Debes ejecutar el script como root."&lt;br /&gt;exit 1&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;echo "*************************" &amp;gt;&amp;gt; $LOG_FILE&lt;br /&gt;echo "** `date +\'%Y%m%d %T\'`" &amp;gt;&amp;gt; $LOG_FILE&lt;br /&gt;echo "*************************" &amp;gt;&amp;gt; $LOG_FILE&lt;br /&gt;&lt;br /&gt;# el "&amp;gt;/dev/null 2&amp;gt;&amp;1" es necesario para que el proceso&lt;br /&gt;# que queda en segundo plano no mantenga "file descriptors"&lt;br /&gt;# abiertos (sino, al llamarse desde el crond, daria como&lt;br /&gt;# resultado un proceso zombie)&lt;br /&gt;&lt;br /&gt;/usr/sbin/tcpdump -n -s0 -w $LOG_FILE $FILTRO  &amp;gt;/dev/null 2&amp;gt;&amp;1 &amp;amp;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;pero..., ¿qué pasa si el servidor está configurado con HTTPS en vez de con HTTP?, pues que el tráfico TCP estará encriptado, por lo que deberemos descifrarlo para poder entender su contenido.&lt;br /&gt;&lt;br /&gt;Una fácil solución pasa por usar la herramienta &lt;a href="http://sourceforge.net/projects/ssldump/"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ssldump&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Imaginemos que tenemos un &lt;a href="http://tomcat.apache.org/"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;tomcat&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; configurado con https. Para usar &lt;span style="font-weight: bold;"&gt; &lt;span style="font-style: italic;"&gt;ssldump&lt;/span&gt;&lt;/span&gt; debemos obtener la clave privada del servidor. Para ello recomiendo usar la clase ExportPriv.java descrita en&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mark.foster.cc/kb/openssl-keytool.html"&gt;     http://mark.foster.cc/kb/openssl-keytool.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Con la clave privada del &lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;tomcat&lt;/span&gt;&lt;/span&gt; guardada en un fichero (¡con los permisos de lectura restringidos por supuesto!) &lt;span style="font-style: italic;"&gt;.tomcat.pem&lt;/span&gt; el siguiente script logueará el tráfico de forma descifrada:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;DUMP_FILE=/home/andres/ssl.dump&lt;br /&gt;PRIVATE_KEY=/home/andres/.tomcat.pem&lt;br /&gt;LOG_FILE_BASE=/home/andres/ssldump_log&lt;br /&gt;killall tcpdump &amp;gt; /dev/null 2&amp;gt;&amp;1&lt;br /&gt;&lt;br /&gt;if [ $UID -ne 0 ]&lt;br /&gt;then&lt;br /&gt;  echo &amp;quot;Debes ejecutar el script como root.&amp;quot;&lt;br /&gt;  exit 1&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;LOG_FILE=$LOG_FILE_BASE.`date +%Y%m%d`.log&lt;br /&gt;&lt;br /&gt;if [ -f $DUMP_FILE ]&lt;br /&gt;then&lt;br /&gt;   echo &amp;quot;*************************&amp;quot; &amp;gt;&amp;gt; $LOG_FILE&lt;br /&gt;   echo &amp;quot;** `date +\'%Y%m%d %T\'`&amp;quot; &amp;gt;&amp;gt; $LOG_FILE&lt;br /&gt;   echo &amp;quot;*************************&amp;quot; &amp;gt;&amp;gt; $LOG_FILE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   /usr/local/sbin/ssldump -d -k $PRIVATE_KEY -A -X -q -r $DUMP_FILE \\&lt;br /&gt;   &amp;gt;&amp;gt; $LOG_FILE&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;# el &amp;quot;&amp;gt;/dev/null 2&amp;gt;&amp;1&amp;quot; es necesario para que el proceso&lt;br /&gt;# que queda en segundo plano no mantenga &amp;quot;file descriptors&amp;quot;&lt;br /&gt;# abiertos (sino, al llamarse desde el crond, daria como&lt;br /&gt;# resultado un proceso zombie)&lt;br /&gt;&lt;br /&gt;/usr/sbin/tcpdump -n -s0 -w $DUMP_FILE port 443 &amp;gt;/dev/null 2&amp;gt;&amp;1 &amp;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Feliz monitorización :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-5718625489709678688?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/5718625489709678688/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=5718625489709678688' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5718625489709678688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5718625489709678688'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/01/logueando-trfico-https.html' title='Logueando tráfico https...'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-6109107181219204087</id><published>2007-01-19T11:54:00.000+01:00</published><updated>2007-01-19T12:04:13.334+01:00</updated><title type='text'>HttpUnit (y 3): problemas con la codificación (UTF-8 vs. ISO-8859-1)</title><content type='html'>¿Quién no ha experimentado alguna vez el placer de tener problemas con los famosos &lt;span style="font-style: italic;"&gt;charsets &lt;/span&gt;o codificaciones del texto?&lt;br /&gt;&lt;br /&gt;En este caso, nuestro viejo amigo &lt;a href="http://httpunit.sourceforge.net/"&gt;HttpUnit&lt;/a&gt; tampoco se libra de ello. En el siguiente &lt;a href="http://sourceforge.net/mailarchive/forum.php?thread_id=31491314&amp;forum_id=5833"&gt;mail&lt;/a&gt; de la lista de desarrollo describo el problema en sí.&lt;br /&gt;&lt;br /&gt;La cuestión es que necesitaba una solución urgente así que, en vez de esperar a que los desarrolladores oficiales arreglen el problema y saquen una nueva versión (últimamente entre cada &lt;span style="font-style: italic;"&gt;release &lt;/span&gt;del HttpUnit pasa casi un año) me bajé el código fuente, arreglé el bug, compilé y... listo! Ya tengo mi httpunit-tuneado.jar :)&lt;br /&gt;&lt;br /&gt;Conclusión: ¡ viva el &lt;span style="font-style: italic;"&gt;open source&lt;/span&gt;!. La flexibilidad y fiabilidad del programador al usar este tipo de productos es mucho mayor que al utilizar productos propietarios.&lt;br /&gt;&lt;br /&gt;Os animo a todos a que utiliceis productos de código abierto y que no tengais reparos a la hora de bajarse el código fuente y "meterle mano". Se aprende mucho y... !se solucionan los problemas con mayor rápidez!&lt;br /&gt;&lt;br /&gt;Hasta otra...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-6109107181219204087?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/6109107181219204087/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=6109107181219204087' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/6109107181219204087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/6109107181219204087'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/01/httpunit-y-3-problemas-con-la.html' title='HttpUnit (y 3): problemas con la codificación (UTF-8 vs. ISO-8859-1)'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-3346998006923614628</id><published>2007-01-09T13:21:00.000+01:00</published><updated>2008-12-09T01:50:21.651+01:00</updated><title type='text'>Linux (Ubuntu), firefox y plugin de java</title><content type='html'>La verdad, no fue nada sencillo, aunque finalmente lo conseguí: instalar el plugin de java en el firefox 2.0. El comando viene siendo algo así como:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/opt/firefox-2.0/plugins$ ln -s /usr/local/jdk1.6.0/jre/plugin/i386/ns7/libjavaplugin_oji.so&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para comprobar que el plugin está correctamente instalado... ¿cómo hacemos? En el menu del firefox, vemos que nos deja ver los "&lt;span style="font-style:italic;"&gt;Add-ons&lt;/span&gt;" (Menú "&lt;span style="font-style:italic;"&gt;Tools&lt;/span&gt;") pero nada de los plugins. Lo que debemos hacer es escribir &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  &lt;span style="font-weight:bold;"&gt;about:plugins&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;en la barra de direcciones del firefox con lo que obtendremos el siguiente informe:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_J_x9kPKKtTI/RaOKSEqAhKI/AAAAAAAAABU/JXzidad82co/s1600-h/firefox.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_J_x9kPKKtTI/RaOKSEqAhKI/AAAAAAAAABU/JXzidad82co/s320/firefox.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5018006452913079458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Parece que ya tenemos java disponible... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-3346998006923614628?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/3346998006923614628/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=3346998006923614628' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/3346998006923614628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/3346998006923614628'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/01/linux-ubuntu-firefox-y-plugin-de-java.html' title='Linux (Ubuntu), firefox y plugin de java'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_J_x9kPKKtTI/RaOKSEqAhKI/AAAAAAAAABU/JXzidad82co/s72-c/firefox.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-5939633278610470357</id><published>2007-01-09T10:50:00.000+01:00</published><updated>2007-01-09T11:09:47.754+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Groovy: accediendo a la base de datos</title><content type='html'>Hace tiempo que los lenguajes dinámicos (Ruby, PHP, Python, etc.) están pegando fuerte. Bajo mi punto de vista son un complemento ideal a lenguajes fuertemente tipados como Java o C#. La principal ventaja es la "agilidad" proporcionada por dichos lenguajes.&lt;br /&gt;&lt;br /&gt;Mi opción personal es &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt;, debido a su perfecta integración con Java.&lt;br /&gt;&lt;br /&gt;Un ejemplo de agilidad: imaginemos que queremos acceder a una base de datos para hacer un par de consultas, generar un informe y enviarlo por correo electrónico. Una tarea tan sencilla y "aislada" como ésta hace que valores como "terminar la tarea" o "permitir cambios en la implementación de forma inmediata" prevalezcan sobre valores como "reusabilidad del código". En éste caso un lenguaje dinámico interpretado es la mejor opción.&lt;br /&gt;&lt;br /&gt;Veamos lo sencillo que es implementar dicha tarea en Groovy:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// Groovy source file&lt;br /&gt;import groovy.sql.Sql&lt;br /&gt;import java.text.SimpleDateFormat&lt;br /&gt;&lt;br /&gt;sql = Sql.newInstance("jdbc:mysql://localhost/db", "usuario",&lt;br /&gt;                      "clave", "com.mysql.jdbc.Driver")&lt;br /&gt;fecha = new SimpleDateFormat("dd/MM/yyyy").format(new Date())&lt;br /&gt;INFORME=""&lt;br /&gt;&lt;br /&gt;INFORME += "+---------------------------------------------+\n"&lt;br /&gt;INFORME += "| *** INFORME DE ACTIVIDAD DEL ULTIMO MES *** |\n"&lt;br /&gt;INFORME += "+---------------------------------------------+\n"&lt;br /&gt;INFORME += "\n"&lt;br /&gt;INFORME += "Fecha: ${fecha}\n"&lt;br /&gt;INFORME += "\n"&lt;br /&gt;&lt;br /&gt;sql.execute("LOCK TABLES MENSAJES READ, COLASALIDA READ")&lt;br /&gt;sql.execute("SELECT @primeroDelMesPasado:=DATE_FORMAT(NOW()-INTERVAL 1 MONTH,'%Y-%m-01')");&lt;br /&gt;sql.execute("SELECT @primeroDelMesActual:=DATE_FORMAT(NOW(),'%Y-%m-01');");&lt;br /&gt;sql.execute("""&lt;br /&gt;  SELECT @OPERADORA1_A:=COUNT(*) FROM MENSAJES&lt;br /&gt;  WHERE idcanal IN (1,3)&lt;br /&gt;  AND fh &gt;= @primeroDelMesPasado&lt;br /&gt;  AND fh &lt;  @primeroDelMesActual&lt;br /&gt;""")&lt;br /&gt;sql.execute("""&lt;br /&gt;  SELECT @OPERADORA1_B:=COUNT(*) FROM EM_COLASALIDA&lt;br /&gt;  WHERE idcanal IN (1,3)&lt;br /&gt;  AND fh &gt;= @primeroDelMesPasado&lt;br /&gt;  AND fh &lt;  @primeroDelMesActual&lt;br /&gt;""")&lt;br /&gt;sql.execute("""&lt;br /&gt;  SELECT @OPERADORA2_A:=COUNT(*) FROM MENSAJES&lt;br /&gt;  WHERE idcanal IN (2,4)&lt;br /&gt;  AND fh &gt;= @primeroDelMesPasado&lt;br /&gt;  AND fh &lt;  @primeroDelMesActual&lt;br /&gt;""")&lt;br /&gt;sql.execute("""&lt;br /&gt;  SELECT @OPERADORA2_B:=COUNT(*) FROM EM_COLASALIDA&lt;br /&gt;  WHERE idcanal IN (2,4)&lt;br /&gt;  AND fh &gt;= @primeroDelMesPasado&lt;br /&gt;  AND fh &lt;  @primeroDelMesActual&lt;br /&gt;""")&lt;br /&gt;sql.execute("UNLOCK TABLES")&lt;br /&gt;sql.eachRow("""&lt;br /&gt;  SELECT CONCAT("OPERADORA1.......: ", @OPERADORA1_A       + @OPERADORA1_B , " msjs.")&lt;br /&gt;  UNION&lt;br /&gt;  SELECT CONCAT("OPERADORA2.......: ", @OPERADORA2_A       + @OPERADORA2_B , " msjs.")&lt;br /&gt;"""){&lt;br /&gt;   INFORME += it[0]+"\n"&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;new AntBuilder().mail(mailhost: 'smtp.miservidor.net', subject: " Informe Mensual ${fecha}") {&lt;br /&gt;  from(address:   'informes@miservidor.net')&lt;br /&gt;     to  (address: 'informes@miservidor.net')&lt;br /&gt;     message( "${INFORME}" )&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Finalmente, bastará con añadir las entradas pertinentes en el &lt;span style="font-style:italic;"&gt;cron&lt;/span&gt; para que dicho script se ejecute periódicamente.&lt;br /&gt;&lt;br /&gt;Para modificar la generación del informe bastará con conectarse al servidor y editar el fichero .groovy directamente.&lt;br /&gt;&lt;br /&gt;Sencillo ¿verdad?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-5939633278610470357?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/5939633278610470357/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=5939633278610470357' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5939633278610470357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/5939633278610470357'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/01/groovy-accediendo-la-base-de-datos.html' title='Groovy: accediendo a la base de datos'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-4117206428551030570</id><published>2007-01-09T10:41:00.000+01:00</published><updated>2007-01-09T10:47:25.857+01:00</updated><title type='text'>iconv: Cambiar la codificación de un fichero en linux</title><content type='html'>Imaginemos que tenemos un conjunto de ficheros .java codificados en ISO 8859-1 y queremos pasarlos a UTF-8. En linux podemos hacer algo tan sencillo como:&lt;br /&gt;&lt;br /&gt;for i in `find -name *.java`&lt;br /&gt;do&lt;br /&gt; iconv -f ISO_8859-1 -t UTF-8 $i &gt; tmpfile&lt;br /&gt; mv -f tmpfile $i&lt;br /&gt;done&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-4117206428551030570?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/4117206428551030570/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=4117206428551030570' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/4117206428551030570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/4117206428551030570'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2007/01/iconv-cambiar-la-codificacin-de-un.html' title='iconv: Cambiar la codificación de un fichero en linux'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-116679270429691828</id><published>2006-12-22T12:57:00.000+01:00</published><updated>2006-12-22T16:33:14.146+01:00</updated><title type='text'>HttpUnit (y 2): esa fuga de memoria (memory leak)...</title><content type='html'>El concepto de recolector de basura de java tiene muchas ventajas, y algún inconveniente: las fugas de memoria (&lt;span style="font-style: italic;"&gt;memory leaks&lt;/span&gt;). En java el programador no tiene que preocuparse de liberar la memoria de los objetos creados. Cuando éstos dejan de ser necesarios el recolector libera su memoria automáticamente. El problema es el concepto "ser necesario". Puede que nosotros ya no necesitemos ciertos objetos pero que éstos estén almacenados en alguna colección (&lt;span style="font-style: italic;"&gt;ArrayList&lt;/span&gt; por ejemplo), por lo que el recolector no los liberará.&lt;br /&gt;&lt;br /&gt;Otros lenguajes de programación como C o C++ no tienen este problema, pero claro, ello se debe a que &lt;span style="font-weight: bold;"&gt;no tienen recolector de basura&lt;/span&gt;, por lo que tienen otros problemas mucho mayores (punteros mal gestionados etc.).&lt;br /&gt;&lt;br /&gt;Pues bien, en el desarrollo de una aplicación Swing que emplea la librería &lt;a href="http://httpunit.sourceforge.net/"&gt;HttpUnit&lt;/a&gt; de la que ya hablé en un&lt;span style="font-style: italic;"&gt; &lt;a href="http://coyotevil.blogspot.com/2006/10/httpunit-se-cuelgao-eso-parece.html"&gt;post&lt;/a&gt;&lt;/span&gt; anterior tuve la "suerte" de toparme con una fuga de memoria. Esto se hizo evidente cuando el &lt;a href="http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html"&gt;jconsole&lt;/a&gt; me proporcionó la siguiente información:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/662/3908/1600/25082/jconsole1.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/x/blogger/662/3908/400/65238/jconsole1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En ella observamos que el consumo de memoria crece de forma constante e indefinida.&lt;br /&gt;&lt;br /&gt;Al intentar analizar cuál podía ser la causa de la fuga en mi cerebro se entabló una lucha interna entre mi orgullo y mi prudencia. El uno decía "está claro, tu código no tiene ningún problema, es culpa de alguna librería". La otra decía "las librerías que estás utilizando las usan muchas otras personas, seguro que el problema es de tu código". Ya sabeis, el típico síndrome de "¿a quién le echamos la culpa?" tan famoso como inútil en la mayoría de los casos ;-)&lt;br /&gt;&lt;br /&gt;Después de analizar (sin pararme demasiado tampoco) mi código, parecía que no había cometido ninguno de los &lt;a href="http://www.javaworld.com/javaworld/jw-03-2006/jw-0313-leak.html"&gt;típicos errores&lt;/a&gt; que favorecen las fugas de memoria, por lo que decidí, adoptando una actitud más positiva y productiva, utilizar una potente herramienta para identificar el culpable (para solucionar el problema, no para señalarle con el dedo, jeje): el increible &lt;a href="http://profiler.netbeans.org/"&gt;profiler&lt;/a&gt; del NetBeans.&lt;br /&gt;&lt;br /&gt;La configuración del profiler usada fue la siguiente:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/662/3908/1600/956133/profiler1.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/x/blogger/662/3908/400/205419/profiler1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En ella observamos que he seleccionado la opción que hace que el profiler sólo muestre los objetos que están "vivos" (&lt;span style="font-style: italic;"&gt;Record both object creation and garbage collection&lt;/span&gt;) en cada momento. Al principio me llevé una pequeña sorpresa cuando observé que el total de memoria total usada por la JVM era mucho mayor que la que el profiler me presentaba en su categorización de uso de la memoria por clases. Preguntando por la razón de esta inconsistencia usando la lista de correo del profiler, &lt;a href="http://weblogs.java.net/blog/gsporar/"&gt;Gregg Sporar&lt;/a&gt;, un programador veterano de Sun, actualmente "Technical Evagelist" del Netbeans, que conocí en Madrid en los &lt;span style="font-style: italic;"&gt;&lt;a href="http://developers.sun.com/events/techdays/2006/madrid/index_es.html"&gt;Sun Tech Days&lt;/a&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;/span&gt;de este año y que ya me echó una mano en &lt;a href="http://weblogs.java.net/blog/gsporar/archive/2006/04/about_that_trus.html"&gt;otra ocasión,&lt;/a&gt; me respondió en la lista explicando que el parámetro "&lt;span style="font-style: italic;"&gt;Track every 10 obect allocations&lt;/span&gt;" hace que el profiler sólo registre el 10% de todos los objetos creados. Esto hace que el &lt;span style="font-style: italic;"&gt;profiling&lt;/span&gt; no afecte demasiado al rendimiento de la aplicación, aunque dicho 10% normalmente sea más que suficiente para identificar el patrón de fuga de memoria.&lt;br /&gt;&lt;br /&gt;En mi caso así fue, tras unas tres horas de ejecución realicé una captura (&lt;span style="font-style: italic;"&gt;snapshot&lt;/span&gt;) del uso de memoria y obtuve el siguiente resultado:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/662/3908/1600/872569/profiler2.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/x/blogger/662/3908/400/360258/profiler2.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Claramente el problema se debía a la proliferación de arrays de caracteres. Lo más probable es que se trataran de &lt;span style="font-weight: bold;"&gt;String&lt;/span&gt;'s (una String de java usa un &lt;span style="font-weight: bold;"&gt;char[]&lt;/span&gt;  internamente para el almacenamiento de los caracteres). Pinchando con el botón derecho del ratón sobre la primera fila de la captura (la de los &lt;span style="font-weight: bold;"&gt;char[]&lt;/span&gt;) y seleccionando la opción &lt;span style="font-style: italic;"&gt;Show Allocation Stack Traces, &lt;/span&gt;que nos permite ver quién/quienes crearon dichos objetos obtuve la clave del asunto:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/662/3908/1600/13927/profiler3.jpg"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/x/blogger/662/3908/400/176572/profiler3.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El problema estaba en el método&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;   handleScriptException( Exception e, String badScript )&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;de la clase &lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight: bold;"&gt;com.meterware.httpunit.javascript.JavaScript$JavaScriptEngine&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Viendo el código fuente descubrí que el HtppUnit guarda todas las excepciones lanzadas por su intérprete de JavaScript (&lt;a href="http://www.mozilla.org/rhino/"&gt;rhino&lt;/a&gt;) en un ArrayList, y que dicho array debe ser "limpiado" manualmente por el usuario de la librería, usando la función&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;  HttpUnitOptions.clearScriptErrorMessages();&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Los siguientes pasos fueron inmediatos:&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;Modificar el código para llamar a dicha función periódicamente&lt;/li&gt;&lt;li&gt;Enviar un correo a la lista &lt;b&gt;&lt;span class="nw" id="_user_httpunit-develop@lists.sourceforge.net"&gt;httpunit-develop@lists.sourceforge.net &lt;/span&gt;&lt;/b&gt;&lt;span class="nw" id="_user_httpunit-develop@lists.sourceforge.net"&gt;comentando este problema.&lt;/span&gt;&lt;/li&gt;&lt;/span&gt;&lt;/span&gt;&lt;/ol&gt;(El segundo punto es verdaderamente importante para cualquier herramienta &lt;span style="font-style: italic;"&gt;open source.&lt;/span&gt; Os animo a todos a que, cuando os encontreis con un problema, si conseguís resolverlo informeis a la "comunidad" para que todos podamos beneficiarnos de esa solución)&lt;br /&gt;&lt;br /&gt;Una vez realizada la modificación mencionada, reiniciamos la aplicación y el jconsole nos proporcionó esta bella panorámica:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/662/3908/1600/49416/jconsole2.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/x/blogger/662/3908/400/877353/jconsole2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Adios a la fuga de memoria!&lt;br /&gt;&lt;br /&gt;Feliz Navidad a todos.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-116679270429691828?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/116679270429691828/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=116679270429691828' title='9 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/116679270429691828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/116679270429691828'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2006/12/httpunit-y-2-esa-fuga-de-memoria.html' title='HttpUnit (y 2): esa fuga de memoria (memory leak)...'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-116654321102107506</id><published>2006-12-19T16:14:00.000+01:00</published><updated>2006-12-19T16:46:51.176+01:00</updated><title type='text'>Por favor, no más SQL, los ORM's se inventaron hace tiempo...</title><content type='html'>Ahora que ya capté tu atención, aclararemos que el título de este post no es cierto del todo :). El SQL todavía tiene su lugar, y es un lugar importante, pero estoy convencido de que el 90% del código que se escribe hoy en día debería emplear un ORM y no SQL "a pelo". Más aún, los ORMs decentes te permitirán bajarte al nivel del SQL en ese 10% de los casos.&lt;br /&gt;&lt;br /&gt;Por supuesto, parto de la base de que ya hemos superado el pleistoceno y estamos programando en un lenguaje orientado a objetos (de nuevo, no todos los desarrollos del mundo deben usar la OOP, pero casi), usando herencia, encapsulación, definiendo interfaces, programando consumiendo dichas interfaces ,etc.&lt;br /&gt;&lt;br /&gt;Bien, ¿cuántas veces hemos escrito la típica aplicación de gestión con Clientes, Pedidos, etc.? Seguro que muchos de nosotros todavía hacemos algo del tipo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class Cliente{&lt;br /&gt; String   nombre;&lt;br /&gt; Calendar fechaNacimiento;&lt;br /&gt; String   telefono;&lt;br /&gt; ...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class GestorCliente{&lt;br /&gt;&lt;br /&gt;  //bdd: simplificación de la API JDBC&lt;br /&gt;  public void nuevoCliente(Cliente c){&lt;br /&gt;    bdd.execute("INSERT INTO clientes VALUES(nombre,fechaNacimiento,telefono) ("+ Sql.escapa(c.nombre) +","+ c.fechaNacimiento +","+...);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void modificaCliente(Cliente c){&lt;br /&gt;    bdd.execute("UPDATE clientes SET nombre="+ Sql.escapa(c.nombre) +","+ ...);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public Cliente obtenCliente(int id){&lt;br /&gt;     ResultSet rs = bdd.consultar("SELECT nombre,fechaNacimiento,telefono FROM clientes WHERE id="+ id);&lt;br /&gt;     if (!rs.next()) throw new RuntimeException("Cliente no encontrado");&lt;br /&gt;     Cliente c = new Cliente(rs.getString(1),rs.getDate(2),rs.getString(3));&lt;br /&gt;     return c;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void eliminarCliente(int id){&lt;br /&gt;     bdd.execute("DELETE FROM clientes WHERE id="+ id);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Además tendremos una serie de scripts SQL para la creación de las tablas en la base de datos:&lt;br /&gt;&lt;br /&gt;clientes.sql:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;CREATE TABLE clientes{&lt;br /&gt; id            INTEGER       NOT NULL PRIMARY KEY   auto_increment,&lt;br /&gt; nombre        VARCHAR(255) NOT NULL,&lt;br /&gt; telefono      VARCHAR(100) NOT NULL,&lt;br /&gt; fhnac         DATETIME     NOT NULL&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;¿Os dais cuenta de cuántas veces hemos tenido que escribir cada campo de la entidad "Cliente"? ¡Seis! ni más ni menos que seis veces. Esto no es duplicación de código, esto es "sextuplicación"! :)&lt;br /&gt;&lt;br /&gt;Existe un concepto acuñado por Dave Thomas y Andy Hunt denominado &lt;a href="http://en.wikipedia.org/wiki/Don" t_repeat_yourself=""&gt;DRY&lt;/a&gt;, es decir, "no te repitas". Cuando escribes algo más de una o dos veces piensa que posiblemente algo puede mejorarse en tu código.&lt;br /&gt;&lt;br /&gt;Bien, con un ORM como &lt;a href="http://www.hibernate.org/"&gt;Hibernate&lt;/a&gt; toda esta requeterepetición de identificadores se ve reducida a la mínima expresión:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;@Entity&lt;br /&gt;public class Cliente implements Serializable {&lt;br /&gt;   Long   id;&lt;br /&gt;   String nombre;&lt;br /&gt;   Date   fechaNacimiento;&lt;br /&gt;   String telefono;&lt;br /&gt;&lt;br /&gt;   @Id&lt;br /&gt;   public Long getId() { return id; }&lt;br /&gt;&lt;br /&gt;   public void setId(Long id) { this.id = id; }&lt;br /&gt;&lt;br /&gt;   //getters y setters del resto de propiedades&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ahora, para crear un cliente basta con hacer:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Cliente c = new Cliente("luis",new Date(),"600111222333");&lt;br /&gt;session.save(c);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Para modificar un cliente:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;session.update(c);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Para obtener un cliente por id:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;c = session.get(Cliente.class, id);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Para eliminar un cliente:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;session.delete(c);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;¿Bastante mejor no? Incluso el propio Hibernate se puede encargar de crear el esquema en la base de datos, por lo que también nos libramos de los scripts SQL para la generación de las tablas.&lt;br /&gt;&lt;br /&gt;Ahora bien, no nos engañemos. Hibernate es una solución compleja a un problema complejo, que es la unión del mundo relacional y el OOP. Como tal, su uso no es algo trivial. La gestión de las sesiones, asociaciones entre clases etc. requiere de un poco de práctica y de lectura de documentación con sosiego, pero os lo puedo asegurar, merece la pena superar esta pequeña curva de aprendizaje inicial. Hibernate no sólo hará que escribáis código de forma mucho más productiva y menos aburrida, sino que os proporcionará una visión más clara de lo que deben ser las transacciones y las conversaciones que la aplicación mantiene con la base de datos.&lt;br /&gt;&lt;br /&gt;Ánimo y, ¡adios al aburrido SQL! (siii.... en el 90% de los casos).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-116654321102107506?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/116654321102107506/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=116654321102107506' title='7 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/116654321102107506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/116654321102107506'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2006/12/por-favor-no-ms-sql-los-orms-se.html' title='Por favor, no más SQL, los ORM&apos;s se inventaron hace tiempo...'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-116377902255403065</id><published>2006-11-17T16:36:00.000+01:00</published><updated>2006-11-17T17:06:12.223+01:00</updated><title type='text'>Borrar un archivo permanentemente en el Subversion</title><content type='html'>Como muchos sabreis el &lt;span style="font-style: italic;"&gt;Subversion&lt;/span&gt; es un &lt;span style="font-style: italic;"&gt;Source Control System&lt;/span&gt; que viene a sustituir al &lt;span style="font-style: italic;"&gt;CVS&lt;/span&gt;, mejorándolo en una serie de aspectos. Para una introducción al mismo y a su integración en el NetBeans 5.5 recomiendo el siguiente &lt;span style="font-style: italic;"&gt;WebCast:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://https://collabnet.webex.com/collabnet/onstage/tool/record/viewrecording1.php?EventID=245164111&amp;Rnd=0.8441946756428462."&gt;https://collabnet.webex.com/collabnet/onstage/tool/record/viewrecording1.php?EventID=245164111&amp;amp;Rnd=0.8441946756428462&lt;/a&gt;&lt;/span&gt;&lt;a href="http://https://collabnet.webex.com/collabnet/onstage/tool/record/viewrecording1.php?EventID=245164111&amp;Rnd=0.8441946756428462."&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;En el Suversion, resulta que se lleva control de versión de absolutamente todo: ficheros, directorios, eliminación de ficheros, etc. Por ejemplo, si subimos un fichero con información sensible (passwords, datos personales, etc.) al repositorio, cuando queramos borrar dicha información descubriremos que... no se puede! Si usamos el comando "&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;svn delete&lt;/span&gt;&lt;/span&gt;" lo único que conseguiremos es borrar el fichero de la última revisión (&lt;span style="font-style: italic;"&gt;HEAD).&lt;/span&gt; Pero en la(s) revisione(s) anterior(es) seguirá estando el fichero disponible para que, todos aquellos que tengan acceso de lectura al repositorio puedan consultarlo.&lt;br /&gt;&lt;br /&gt;Pues bien, una solución fácil y sencilla para excluir definitivamente un fichero de un repositorio dado es la siguiente. Primero realizamos un volcado del repositorio entero:&lt;br /&gt;&lt;br /&gt;&lt;pre class="programlisting"&gt;mv repositorioXXX repositorioXXX.bak&lt;br /&gt;svnadmin dump repositorioXXX.bak &amp;gt; repositorioXXX.data&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;               A continuación volvemos a volcar el repositorio pero esta vez aplicando un filtro:&lt;br /&gt;&lt;br /&gt;&lt;pre class="programlisting"&gt;svndumpfilter exclude trunk/proyectoXXX/.passwords &amp;lt; repositorioXXX.data &amp;gt; repositorioXXX.data.filtrado&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ya solo resta volver a crear el repositorio y cargar los datos filtrados:&lt;br /&gt;&lt;br /&gt;&lt;pre class="programlisting"&gt;svnadmin create --fs-type fsfs repositorioXXX&lt;br /&gt;svnadmin load repositorioXXX &amp;lt; repositorioXXX.data.filtrado&lt;/pre&gt;&lt;br /&gt;Finalmente, en aquellas copias locales del repositorio habrá que eliminar el fichero (&lt;span style="font-style: italic;"&gt;svn delete&lt;/span&gt;, mi cliente subversion no se quejó de que no existiera el fichero en el repositorio) para que la copia local quede sincronizada con el repositorio del servidor. En cualquier caso, una solución que siempre funcionará será hacer un &lt;span style="font-style: italic;"&gt;checkout&lt;/span&gt; entero del repositorio.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-116377902255403065?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/116377902255403065/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=116377902255403065' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/116377902255403065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/116377902255403065'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2006/11/borrar-un-archivo-permanentemente-en.html' title='Borrar un archivo permanentemente en el Subversion'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-116242307378399821</id><published>2006-11-01T22:43:00.000+01:00</published><updated>2006-11-02T00:17:53.830+01:00</updated><title type='text'>Configurar el tomcat con certificado de cliente</title><content type='html'>&lt;p&gt;Cuando queremos restringir el acceso a cierto recurso de nuestro&lt;br /&gt;sistema podemos optar por el clásico esquema de proteger dicho&lt;br /&gt;recurso con un par usuario/clave. Pero existe un tipo de accesos o&lt;br /&gt;comunicaciones en el que dicho patrón no es adecuado. Estamos&lt;br /&gt;hablando de las comunicaciones &lt;b&gt;B2B&lt;/b&gt; (&lt;i&gt;Business to Business&lt;/i&gt;),&lt;br /&gt;es decir, de las comunicaciones entre sistemas, en contraste con las&lt;br /&gt;comunicaciones &lt;b&gt;B2C&lt;/b&gt; (&lt;i&gt;Business to Client&lt;/i&gt;).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Pongamos un ejemplo: supongamos que tenemos un floreciente negocio&lt;br /&gt;consistente en la venta de minutos de música on-line. Un&lt;br /&gt;cliente puede comprar una licencia para escuchar música&lt;br /&gt;on-line durante un cierto tiempo limitado. Para acceder al sistema el&lt;br /&gt;usuario deberá conectarse a un determinado portal web e&lt;br /&gt;&lt;b&gt;identificarse&lt;/b&gt; tecleando su usuario y contraseña.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Ahora bien, cuando el tiempo de su licencia se agota, puede acudir&lt;br /&gt;a la sección &lt;b&gt;Recargas&lt;/b&gt; del portal y efectuar una recarga&lt;br /&gt;de, por ejemplo, seis horas. Tras abonar el importe de la recarga&lt;br /&gt;mediante una pasarela de pago, automáticamente su licencia se&lt;br /&gt;recargará con seis horas. Pero mira por dónde, resulta&lt;br /&gt;que el portal web y el sistema que gestiona las recargas de licencias&lt;br /&gt;están alojados en máquinas diferentes y deben&lt;br /&gt;comunicarse a través de internet. Para hacer posible esta&lt;br /&gt;comunicación, el sistema de recargas proporciona un &lt;b&gt;servicio&lt;br /&gt;web&lt;/b&gt;(&lt;i&gt;web service&lt;/i&gt;) accesible directamente usando HTTP.&lt;br /&gt;Evidentemente, dicho servicio debe estar protegido, de forma que sólo&lt;br /&gt;nuestro sistema pueda acceder a él.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;En los dos párrafos anteriores se describen dos procesos de&lt;br /&gt;comunicación distintos. El primero, el efectuado entre el&lt;br /&gt;cliente y el portal web es la típica comunicación &lt;b&gt;B2C&lt;/b&gt;,&lt;br /&gt;donde la autenticación se realiza mediante un par&lt;br /&gt;usuario/clave. En cambio, la segunda comunicación, entre el&lt;br /&gt;portal web y el sistema de recargas es una comunicación &lt;b&gt;B2B&lt;/b&gt;.&lt;br /&gt;En dicho caso no tiene sentido que generemos un par usuario/clave,&lt;br /&gt;puesto que quien se está &lt;b&gt;identificando&lt;/b&gt; en esta ocasión&lt;br /&gt;es un sistema, no una persona. En dicho escenario la solución&lt;br /&gt;más adecuada es utilizar un &lt;b&gt;certificado de cliente&lt;/b&gt;, que&lt;br /&gt;identificará en este caso al portal web ante el sistema de&lt;br /&gt;recargas.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Otro escenario donde quizá se vea mejor la utilidad de los&lt;br /&gt;&lt;b&gt;certificados cliente&lt;/b&gt; es el siguiente. Imaginemos que quien&lt;br /&gt;efectúa las recargas es nuestra encantadora secretaria, Paula.&lt;br /&gt;Paula tiene instalado en su PC un pequeño programilla que le&lt;br /&gt;permite efectuar las recargas cuando un cliente llama por teléfono.&lt;br /&gt;Imaginemos que en vez de utilizar un certificado cliente para&lt;br /&gt;identificar el programa ante el sistema de recargas utilicemos un&lt;br /&gt;esquema usuario/clave y codifiquemos directamente dichos valores en&lt;br /&gt;el programilla en cuestión. ¿Qué pasaría&lt;br /&gt;si dicho programilla se grabara en un CD para hacérselo llegar&lt;br /&gt;a Paula y dicho CD se extraviara y llegara a manos del avispado&lt;br /&gt;Maximino? Pues que Maximino podría instalar el programilla en&lt;br /&gt;su casita y efectuar todas las recargas que quisiera sin pagar un&lt;br /&gt;duro... En cambio, si lo que hacemos es identificar &lt;b&gt;el PC&lt;/b&gt; que&lt;br /&gt;efectúa la recarga mediante un certificado de cliente (se&lt;br /&gt;instala en el propio sistema operativo, en el caso de Windows por&lt;br /&gt;ejemplo) el programilla dejará de tener acceso al sistema de&lt;br /&gt;recargas si se instala en otro ordenador.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Bueno, después de este rollo patatero vamos a lo que vamos,&lt;br /&gt;a configurar nuestro tomcat para permitir este esquema de&lt;br /&gt;autenticación. El tomcat permite configurar una autenticación&lt;br /&gt;de este tipo, pero debe realizarse a nivel de "&lt;i&gt;Connector&lt;/i&gt;"&lt;br /&gt;(no se puede hacer a nivel de "&lt;i&gt;Context&lt;/i&gt;" por&lt;br /&gt;ejemplo). Lo que esto implica es que si queremos habilitar esta&lt;br /&gt;autenticación para un servicio determinado debemos configurar&lt;br /&gt;dicho servicio en un "&lt;i&gt;Connector&lt;/i&gt;" independiente (con&lt;br /&gt;su puerto, etc.)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Los parámetros de configuración del elemento&lt;br /&gt;"&lt;i&gt;Connector&lt;/i&gt;" que debemos establecer son: &lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;clientAuth: &lt;/strong&gt;&lt;em&gt;true (Tomcat will require all SSL clients to present a client Certificate in order to use this socket)&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;TruststoreFile: &lt;/strong&gt;&lt;em&gt;the TrustStore file to use to validate client certificates&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;truststorePass: &lt;/strong&gt;&lt;em&gt;the password to access the TrustStore&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;truststoreType: &lt;/strong&gt;&lt;em&gt;JKS(formato de Java) o PKCS12(formato MSIE, Firefox)&lt;/em&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p style="MARGIN-BOTTOM: 0cm"&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Por supuesto, el &lt;i&gt;Connector&lt;/i&gt; a configurar deberá estar configurado con &lt;b&gt;SSL&lt;/b&gt; (ver &lt;a href="http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html"&gt;http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html&lt;/a&gt; ) Por ejemplo, para configurar un servicio&lt;br /&gt;en el puerto 8443 que requiera un certificado de cliente válido&lt;br /&gt;para acceder a él debermos configurar un &lt;i&gt;Connector&lt;/i&gt;&lt;br /&gt;(TOMCAT_HOME/conf/server.xml) similar al siguiente:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;Connector port="8443"maxHttpHeaderSize="8192"&lt;br /&gt;        maxThreads="150"minSpareThreads="25" maxSpareThreads="75"&lt;br /&gt;        enableLookups="false"disableUploadTimeout="true"&lt;br /&gt;        acceptCount="100"scheme="https" secure="true"&lt;br /&gt;        clientAuth="true"sslProtocol="TLS"&lt;br /&gt;        truststoreFile="/home/recargas/truststore" truststorePass="bliblibli"/&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;El parámetro más importante es &lt;b&gt;truststoreFile&lt;/b&gt;,&lt;br /&gt;que indica la &lt;i&gt;keystore&lt;/i&gt; (almacén de certificados de&lt;br /&gt;java) donde se encuentran los certificados (bueno, las claves&lt;br /&gt;públicas de los certificados, para ser más exactos) de&lt;br /&gt;los clientes que podrán acceder a este servicio. Los pasos&lt;br /&gt;para generar un certificado cliente (necesitaremos tener el JDK&lt;br /&gt;instalado, para poder utilizar la herramienta &lt;b&gt;&lt;i&gt;keytool&lt;/i&gt;&lt;/b&gt;)&lt;br /&gt;son los siguientes:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;p&gt;Creamos el par de claves del cliente (formato PKCS12, para&lt;br /&gt;poder importar después el certificado en nuestro explorador y&lt;br /&gt;poder testear la configuración del tomcat):&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;/home/andres$ keytool -v -keystore&lt;br /&gt;keystore.p12 -genkey -keyalg rsa -alias RECARGAS -storetype pkcs12 &lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;El &lt;i&gt;keytool&lt;/i&gt; nos pedirá una contraseña para el&lt;br /&gt;almacén de certificados que va a crear (keystore.p12).&lt;br /&gt;Introduce, por ejemplo, &lt;i&gt;blablabla&lt;/i&gt;. Después nos pedirá&lt;br /&gt;una serie de datos para el certificado (no son importante, pero hay&lt;br /&gt;que rellenarlos):&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;¿Cuáles son su nombre y apellido?: &lt;i&gt;Portal Web&lt;br /&gt;musica.com&lt;/i&gt; &lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;¿Cuál es el nombre de su unidad de&lt;br /&gt;organización?: &lt;i&gt;Dpto. web&lt;/i&gt; &lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;¿Cuál es el nombre de su ciudad o localidad?:&lt;br /&gt;&lt;i&gt;Baiona&lt;/i&gt; &lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;¿Cuál es el nombre de su estado o provincia?:&lt;br /&gt;&lt;i&gt;Pontevedra&lt;/i&gt; &lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;¿Cuál es el código de país de dos&lt;br /&gt;letras de la unidad?: &lt;i&gt;es&lt;/i&gt; &lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;¿Es correcto CN=Portal Web musica.com, OU=Dpto. web,&lt;br /&gt;O=musica.com, L=Baiona, ST=Pontevedra, C=es?: &lt;i&gt;si&lt;/i&gt; &lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Generando bit 1.024 par de claves rsa y certificado&lt;br /&gt;autofirmado (MD5WithRSA) para: CN=Portal Web musica.com, OU=Dpto.&lt;br /&gt;web, O=musica.com, L=Baiona, ST=Pontevedra, C=es &lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Escriba la contraseña clave para &amp;lt;RECARGAS&amp;gt; &lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Finalmente, la herramienta keytool nos preguntará una&lt;br /&gt;contraseña nueva para la clave privada de este certificado.&lt;br /&gt;Le damos a INTRO para que utilice la misma que la del almacén.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;li&gt;&lt;p&gt;Exportamos el certificado (nos pedirá la clave del&lt;br /&gt;almacén, introducir &lt;i&gt;blablabla&lt;/i&gt;):&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;/home/andres$ keytool -export -file&lt;br /&gt;recargas.cert -alias RECARGAS -keystore keystore.p12 -storetype&lt;br /&gt;pkcs12 &lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;li&gt;&lt;p&gt;Importamos ese certificado en la &lt;i&gt;truststore&lt;/i&gt; del&lt;br /&gt;tomcat. En este paso estaremos creando un nuevo almacén de&lt;br /&gt;certificados, esta vez para el tomcat, por lo que se nos pide una&lt;br /&gt;nueva clave para este nuevo almacén. Introduce &lt;i&gt;bliblibli&lt;/i&gt;:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;/home/recargas$ keytool -import -keystore&lt;br /&gt;/home/recargas/.truststore -file recargas.cert &lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Se nos preguntará si confiamos en el certificado después&lt;br /&gt;de mostrar sus datos por pantalla. Diremos que &lt;i&gt;si&lt;/i&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;Ahora solo resta reiniciar el tomcat. Para comprobar que la&lt;br /&gt;configuración es correcta podemos intentar acceder a una&lt;br /&gt;página web del tomcat con nuestro explorador. Por ejemplo,&lt;br /&gt;imaginemos que accedemos a &lt;b&gt;https://recargas.musica.com:8443/&lt;/b&gt;,&lt;br /&gt;donde tenemos un tomcat recién instalado y configurado con SSL&lt;br /&gt;en el puerto 8443. Veríamos la siguiente página sin&lt;br /&gt;mayor problema:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/tomcat1.1.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/400/tomcat1.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Ahora, si seguimos los pasos aquí descritos, reiniciamos el&lt;br /&gt;tomcat y refrescamos la página veremos lo siguiente:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/tomcat2.4.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/400/tomcat2.4.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;El explorador detecta que el servidor está solicitando un&lt;br /&gt;certificado de cliente, por lo que muestra un diálogo al&lt;br /&gt;usuario instándole a que seleccione el certificado a utilizar.&lt;br /&gt;Muy probablemente no tengamos ningún certificado de cliente&lt;br /&gt;instalado, por lo que dicho diálogo nos muestra una lista&lt;br /&gt;vacía. Le damos a "Esc" para cerrar el diálogo&lt;br /&gt;y efectuamos los siguientes pasos para instalar el almacén de&lt;br /&gt;certificados "keystore.p12" generado anteriormente en el&lt;br /&gt;almacén de certificados de Windows (nota: probablemente, al&lt;br /&gt;cerrar el diálogo el Explorer nos muestre la página del&lt;br /&gt;tomcat de nuevo. Esto no quiere decir que el Explorer sea un genio y&lt;br /&gt;se haya saltado nuestro mecanismo de autenticación,&lt;br /&gt;simplemente nos está mostrando una página guardada en&lt;br /&gt;la caché):&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;p&gt;En el Explorer seleccionamos &lt;b&gt;Herramientas-&amp;gt;Opciones de&lt;br /&gt;Internet &lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;li&gt;&lt;p&gt;Seleccionamos la pestaña &lt;b&gt;Contenido&lt;/b&gt; y pinchamos&lt;br /&gt;en &lt;b&gt;Certificados&lt;/b&gt;. En la pestaña actual (&lt;b&gt;Personal&lt;/b&gt;)&lt;br /&gt;pinchamos en &lt;b&gt;Importar&lt;/b&gt; y seguimos los pasos del asistente.&lt;br /&gt;Deberemos seleccionar el archivo "keystore.p12" generado&lt;br /&gt;anteriormente e introducir la contraseña del mismo&lt;br /&gt;("blablabla"). En el último paso dejamos marcada la&lt;br /&gt;opción &lt;b&gt;Seleccionar automáticamente el almacén&lt;br /&gt;de certificados en base al tipo de certificado&lt;/b&gt;, pulsamos&lt;br /&gt;&lt;b&gt;Siguiente&lt;/b&gt; y &lt;b&gt;Finalizar&lt;/b&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;li&gt;&lt;p&gt;Ahora debemos cerrar todas las ventanas del Explorer y volver&lt;br /&gt;a arrancarlo.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Si intentamos acceder de nuevo a &lt;b&gt;https://recargas.musica.com:8443/&lt;/b&gt;&lt;br /&gt;veremos lo siguiente:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/tomcat3.3.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/400/tomcat3.3.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Pinchamos en &lt;b&gt;Aceptar&lt;/b&gt; para que el Explorer utilice el&lt;br /&gt;certificado mostrado para autenticarse y... ¡estamos dentro! :)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Una nota final. La clave privada asociada al certificado&lt;br /&gt;regargas.cert se encuentra en el almacén "keystore.p12".&lt;br /&gt;Cuando se exporta el certificado dicha clave no es exportada (lo cual&lt;br /&gt;es bastante evidente, pero como todo esto es un poco lioso no está&lt;br /&gt;de más señalarlo). Por tanto, para importar el&lt;br /&gt;certificado de cliente en el firefox, por ejemplo, éste debe&lt;br /&gt;acceder a "keystore.p12", no a recargas.cert&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Hasta la próxima.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-116242307378399821?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/116242307378399821/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=116242307378399821' title='25 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/116242307378399821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/116242307378399821'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2006/11/configurar-el-tomcat-con-certificado.html' title='Configurar el tomcat con certificado de cliente'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>25</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-116136715618516904</id><published>2006-10-20T19:43:00.000+02:00</published><updated>2006-10-20T20:02:11.840+02:00</updated><title type='text'>Configurar dos conexiones a internet en una máquina linux</title><content type='html'>Antes de nada, un par de links sobre el tema (pues lo de configurar dos conexiones puede aplicarse para diversos fines, y en estas páginas comentan varios): &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://linux-ip.net/html/adv-multi-internet.html"&gt;http://linux-ip.net/html/adv-multi-internet.html&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://lartc.org/howto/lartc.rpdb.multiple-links.html"&gt;http://lartc.org/howto/lartc.rpdb.multiple-links.html&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ahora, el ejemplo concreto que he realizado. Estos días he estado implementando un sistema &lt;b&gt;MONITOR&lt;/b&gt;, el cual realiza peticiones HTTP periódicamente a los distintos subsistemas de mi empresa, midiendo tiempos de respuesta, errores en la conexión, etc.&lt;br /&gt;&lt;br /&gt;El sistema se configuró  para que empleara las dos conexiones a internet que tenemos en la empresa (cable y ADSL), de forma que las peticiones HTTP se hiciesen tanto por una conexión como por la otra. Esto aporta una serie de ventajas, como puede ser la comparación de un ISP con otro, etc. &lt;br /&gt;&lt;br /&gt;La idea era hacer eso instalando el sistema &lt;b&gt;MONITOR&lt;/b&gt; en una localización única (no valía poner dos monitores corriendo en máquinas distintas una configurada con el ADSL y otra con R) por lo que surgió la duda de cómo configurar un linux para que&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;tenga dos conexiones a internet disponibles&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;decidir, a voluntad, qué conexión se quiere utilizar en cada momento&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;[Otra posibilidad, discutida en uno de los links anteriores, sería realizar un balanceo de carga automático y utilizar las dos (o más conexiones) de forma transparente.]&lt;br /&gt;&lt;br /&gt;Según he visto, no es posible hacer esto con los comandos clásicos "ifconfig" y "route" del linux. Es necesario emplear las tools "iproute2" (vienen con todos los linux de hoy en día, &lt;i&gt;no problem&lt;/i&gt;). La navaja suiza de dicha suite es el comando "ip". Con él podemos hacer absolutamente todo lo relacionado con la configuración de la capa ip del kernel.&lt;br /&gt;&lt;br /&gt;Datos varios:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;IP gateway ADSL: 192.168.0.253&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;IP gateway cable: 192.168.1.200&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;IP host MONITOR: 192.168.0.150&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;(Nota del autor: este documento será absolutamente práctico. Para comprender los conceptos detras de todo esto por favor acudan a &lt;a href="http://linux-ip.net/"&gt;http://linux-ip.net/&lt;/a&gt;, que el tío se explica mejor que yo O:))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pasos necesarios: &lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;  &lt;li&gt; Añadir una IP en la red 192.168.1.0/24 (crear un alias)&lt;br /&gt;&lt;br /&gt;            &lt;b&gt;# ip address add 192.168.1.150 brd + dev eth0 label eth0:R&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt; Crear una tabla de enrutado nueva llamada "R", p.e. en el slot 200:&lt;br /&gt;&lt;br /&gt;            &lt;b&gt;# echo 200 R &gt;&gt; /etc/iproute2/rt_tables&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt; Añadir una regla de enrutado que diga "si la dirección ip fuente, es la 192.168.1.150 trata de enrutar el datagrama IP usando *primero* la tabla R":&lt;br /&gt;&lt;br /&gt;            &lt;b&gt;# ip rule add from 192.168.1.150 table R&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt; Añadir la siguiente ruta a la tabla 'main' (suelta por eth0 todos los datagramas dirigidos a la red 192.168.0/24):&lt;br /&gt;&lt;br /&gt;            &lt;b&gt;# ip route add 192.168.1.0/24 dev eth0&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt; Añade el gateway de R a la tabla R:&lt;br /&gt;&lt;br /&gt;            &lt;b&gt;# ip route add default via 192.168.1.200 table R&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt; Un último paso (por prudencia): limpia la cache de enrutado&lt;br /&gt;&lt;br /&gt;            &lt;b&gt;# ip route flush cache&lt;/b&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Y ya está. Cuando queramos "salir" por R tendremos que especificar a la aplicación que usemos que utilice "192.168.1.150" como ip fuente. Para testear el correcto funcionamiento de los pasos dados podemos comprobar qué ip pública nos devuelve www.whatismyip.com utilizando wget:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;   &lt;li&gt; &lt;b&gt;wget www.whatismyip.com -O - | grep "WhatIsMyIP.com -"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;           Titulo: &lt;i&gt;WhatIsMyIP.com - 80.135.23.45&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;   li&gt; &lt;b&gt;wget --bind-address 192.168.1.150 www.whatismyip.com -O - | grep "WhatIsMyIP.com -"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;           Titulo: &lt;i&gt;WhatIsMyIP.com - 123.45.67.32&lt;/i&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;    Por supuesto, toda esta configuración se irá al garete al reiniciar la máquina. De alguna forma hay que hacer esas instrucciones se ejecuten al arrancar el sistema (/etc/rc.local por ejemplo).&lt;br /&gt;&lt;br /&gt;Hasta la próxima!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-116136715618516904?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/116136715618516904/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=116136715618516904' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/116136715618516904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/116136715618516904'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2006/10/configurar-dos-conexiones-internet-en.html' title='Configurar dos conexiones a internet en una máquina linux'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-115995517899382084</id><published>2006-10-04T11:10:00.000+02:00</published><updated>2006-10-04T11:50:04.153+02:00</updated><title type='text'>HttpUnit se cuelga...o eso parece.</title><content type='html'>Pues ya está bien de tanta fiesta jolgorrio, un poco de seriedad y cultura geek.&lt;br /&gt;&lt;br /&gt;Muchos conocereis la suite HttpUnit. Se trata de una pequeña maravilla que permite implementar unidades de test al estilo JUnit, pero donde los módulos a testear son páginas web (servlets, páginas jsp, php, cgi's, lo que sea...). HttpUnit nos permite simular el acceso a un portal web, hacer "click" en los links, consultar las cookies, ejecutar código Java Script, etc.&lt;br /&gt;&lt;br /&gt;Pues bien, en la ejecución de un test comprobé que el test se quedaba colgado. Para consultar en qué punto se congelaba la ejecución del test, en vez de hacer una sesión de debug o de plagar el código de líneas de logueado (soy demasiado vago para hacer eso...) utilicé otra pequeña maravilla, el JConsole.&lt;br /&gt;&lt;br /&gt;Este lindo programilla nos permite conectarnos a una JVM y comprobar el estado de la memoria, los threads, el tiempo de ejecución y muchas otras cosas interesantes. Para que el JConsole se pueda conectar a una JVM ésta deberá arrancarse (java 5.0) con la propiedad&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;   -Dcom.sun.management.jmxremote&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(en el NetBeans podemos especificar esta propiedad en las propiedades del proyecto: &lt;span style="font-style: italic;"&gt;Run-&gt;VM Options&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;El JConsole, al arrancar, nos muestra una pequeña ventanita donde lista los PIDs de las aplicaciones java que permiten el "Remote Management". Una vez conectado a una JVM concreta nos mostrará información sobre la misma.&lt;br /&gt;&lt;br /&gt;La que nos interesa en este punto es la relativa a los distintos hilos de la aplicación en cuestión. En la parte inferior de la pestaña &lt;span style="font-style: italic;"&gt;Threads&lt;/span&gt; veremos una lista con todos los hilos vivos. En mi caso, dado que la ejecución del test no es multi-hilo el thread que me interesa es el llamado &lt;span style="font-style: italic;"&gt;main&lt;/span&gt; (primer hilo de toda aplicación java). Seleccionando dicho hilo podré ver la &lt;span style="font-style: italic;"&gt;stack trace&lt;/span&gt; del mismo y ver en qué punto de la ejecución se encuentra.&lt;br /&gt;&lt;br /&gt;En mi caso el resultado fue el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/662/3908/1600/jconsole.0.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/662/3908/400/jconsole.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Refrescando la &lt;span style="font-style: italic;"&gt;stack trace&lt;/span&gt; del hilo &lt;span style="font-style: italic;"&gt;main&lt;/span&gt; (simplemente pulsando las flechas abajo y arriba, para deseleccionar y volver a seleccionarlo) comprobé que el hilo estaba bloqueado en el método &lt;span style="font-style: italic;"&gt;java.net.SocketInputStream.socketRead0()&lt;/span&gt;, es decir, en una operación de lectura sobre un socket.&lt;br /&gt;&lt;br /&gt;Mmmm, esto tenía toda la pinta de ser un problema con la configuración de los &lt;span style="font-style: italic;"&gt;timeouts&lt;/span&gt; de los sockets. Busqué en el código de &lt;span style="font-style: italic;"&gt;HttpUnit&lt;/span&gt; (ya sabeis, a falta de una buena documentación bueno es el código, jeje) y vi que en ningún sitio (salvo en un par de tests, no en la librería en sí) se invocaba el método &lt;span style="font-style: italic;"&gt;setSoTimeout()&lt;/span&gt;, que establece el &lt;span style="font-style: italic;"&gt;timeout&lt;/span&gt; de lectura de un socket dado.&lt;br /&gt;&lt;br /&gt;Leyendo por ahí comprobé que el timeout por defecto es, infinito!. Ahí la razón del "cuelgue".  La simple solución, dado que estoy utilizando una librería y, a pesar de ser de código abierto, no quiero pasar el engorro de modificar el código fuente y recompilar (por vagancia, una vez más, y porque de esa forma estaría creando un "fork" nuevo, incompatible con posibles actualizaciones de la librería...), pasa por establecer las siguientes propiedades:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;sun.net.client.defaultConnectTimeout&lt;/span&gt; (timeout en ms. usado en el establecimiento de la conexión)&lt;br /&gt;&lt;span style="font-style: italic;"&gt;sun.net.client.defaultReadTimeout&lt;/span&gt;    (timeout en ms. usado en las operaciones de lectura de una conexión ya establecida)&lt;br /&gt;&lt;br /&gt;Para ello podemos invocar la JVM con los parámetros&lt;br /&gt; -D&lt;span style="font-style: italic;"&gt;sun.net.client.defaultConnectTimeout=20000&lt;br /&gt;&lt;/span&gt;  -D&lt;span style="font-style: italic;"&gt;sun.net.client.defaultReadTimeout=20000&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;o, como finalmente hice, hacerlo programáticamente:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; System.setProperty("sun.net.client.defaultConnectTimeout", "20000");  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; System.setProperty("sun.net.client.defaultReadTimeout", "20000");  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A partir de ese momento, el test no se colgó más pero..., claro, excepción &lt;span style="font-style: italic;"&gt;java.net.SocketTimeoutException&lt;/span&gt; al canto cada vez que hay un timeout! (como no podía ser de otro modo). Sin embargo, dicha excepción puede ser capturada y controlada, de forma que la ejecución del test de larga duración no se quede colgada.&lt;br /&gt;&lt;br /&gt;Hasta otra.&lt;br /&gt;&lt;br /&gt;&lt;HR&gt;&lt;br /&gt;&lt;br /&gt;Referencias:&lt;br /&gt;&lt;br /&gt;JConsole:&lt;br /&gt;   - Using JConsole&lt;br /&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;    &lt;span style="font-family: monospace;"&gt;         &lt;/span&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html"&gt;http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html&lt;/a&gt;&lt;br /&gt;   - Using JConsole to Monitor Applications&lt;br /&gt;           &lt;a href="http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html"&gt;http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;HttpUnit:&lt;br /&gt;   - HttpUnit Home    &lt;br /&gt;          &lt;a href="http://httpunit.sourceforge.net"&gt;&lt;span style="font-family: monospace;"&gt;&lt;/span&gt; http://httpunit.sourceforge.net&lt;/a&gt;&lt;br /&gt;   - Black Box Web Testing with HttpUnit&lt;br /&gt;          &lt;a href="http://www.onjava.com/pub/a/onjava/2003/05/07/blackboxwebtest.html"&gt;http://www.onjava.com/pub/a/onjava/2003/05/07/blackboxwebtest.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Java Socket Timeouts:&lt;br /&gt;   - Java Networking Properties&lt;br /&gt;              &lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/net/properties.html"&gt;http://java.sun.com/j2se/1.5.0/docs/guide/net/properties.html&lt;/a&gt;&lt;br /&gt;   - Handling Network Timeouts in Java&lt;br /&gt;              &lt;a href="http://www.javacoffeebreak.com/articles/network_timeouts"&gt;http://www.javacoffeebreak.com/articles/network_timeouts&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-115995517899382084?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/115995517899382084/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=115995517899382084' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/115995517899382084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/115995517899382084'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2006/10/httpunit-se-cuelgao-eso-parece.html' title='HttpUnit se cuelga...o eso parece.'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-115974154712224447</id><published>2006-10-01T23:59:00.000+02:00</published><updated>2006-10-02T00:25:47.143+02:00</updated><title type='text'>Turismo por Cantabria: II - Cantabria</title><content type='html'>Más fotucas desta linda tierra...&lt;br /&gt;&lt;br /&gt;Santo Toribio de Liébana (centro de peregrinaje, cercano a los picos de europa, famoso por... poseer el trozo más grande de la cruz de Cristo!!, vayamuviiiiiiiiiiiiida!):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/Sto.Toribio%20de%20Li??bana.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/320/Sto.Toribio%20de%20Li%3F%3Fbana.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Haciendo amigos en una noche de marcha en Castro Urdiales:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/amigos%20felinos.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/320/amigos%20felinos.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Esa nueva amistad fruto del alcohol, jeje:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/Gatitos%20in%20the%20night.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/320/Gatitos%20in%20the%20night.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/IMG_1431.jpg"&gt;&lt;/a&gt;Esa bonita Mariasun!:&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/IMG_1431.0.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/320/IMG_1431.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mariasun en Santillana del Mar:&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/colegiata.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/320/colegiata.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/IMG_1436.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/320/IMG_1436.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Y, para acabar..., la prueba de que Mortadelo existe!!! (aunque en la realidad no es tan alto como en los comics):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mañana vuelta al curro... qué ganas! (grrrrr...)&lt;br /&gt;&lt;br /&gt;Ustedes lo pasen bien.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-115974154712224447?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/115974154712224447/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=115974154712224447' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/115974154712224447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/115974154712224447'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2006/10/turismo-por-cantabria-ii-cantabria.html' title='Turismo por Cantabria: II - Cantabria'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-115952417967317889</id><published>2006-09-29T09:43:00.000+02:00</published><updated>2006-09-30T15:26:49.523+02:00</updated><title type='text'>Turismo por Cantabria: I - Bilbao</title><content type='html'>Cousa bonita esta Cantabria! Montañas encima del mar, prados verdes, vacas por todos lados... qué más se puede pedir? jeje&lt;br /&gt;Ahí van unas fotucas (así dicen por aquí...). Algunas de Cantabria y algunas de Bilbao (aivalaostia!).&lt;br /&gt;&lt;br /&gt;Esta es la bonita playa de Ris, en Noja:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/IMG_1312.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/320/IMG_1312.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aquí vemos a un Andrés impresionado por las bellas vistas del nacimiento del Asón (si alguna vez pasais por Laredo/Santoña/Castro Urdiales no dejeis de visitar este curioso nacimiento):&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/IMG_1326.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/320/IMG_1326.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ahora unas cuantas fotillas de Bilbo.&lt;br /&gt;&lt;br /&gt;Ese vilete marcando bíceps con el teatro Arriaga de fondo:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/IMG_1378.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/320/IMG_1378.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Esa bonita Mariasun, mi guía turística en Cantabria/Euskadi:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/IMG_1376.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/320/IMG_1376.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Aquí se me ve en el impresionante guggen... estooo, guggenheim? :)&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/IMG_1374.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/320/IMG_1374.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/IMG_1364.0.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/320/IMG_1364.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;Ese peaso de guardián del guggen, el "pupi":&lt;/p&gt;&lt;p align="left"&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/IMG_1362.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/662/3908/320/IMG_1362.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;a href="http://photos1.blogger.com/blogger/662/3908/1600/IMG_1364.0.jpg"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Y de momento ya está bien, tengo más fotos de Cantabria pero tengo que bajarlas de la cámara.&lt;br /&gt;&lt;br /&gt;Me voy a comer rico marmite de la abuela de Mariasun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-115952417967317889?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/115952417967317889/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=115952417967317889' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/115952417967317889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/115952417967317889'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2006/09/turismo-por-cantabria-i-bilbao.html' title='Turismo por Cantabria: I - Bilbao'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35169245.post-115943440210505444</id><published>2006-09-28T11:04:00.001+02:00</published><updated>2008-03-02T23:31:03.261+01:00</updated><title type='text'>The beginning...</title><content type='html'>Bien, ya era hora. 28 años, programador desde hace dos y medio y sin blog, esto no podía continuar así...&lt;br /&gt;&lt;br /&gt;Benvidos ao meu blog!&lt;br /&gt;Bienvenidos a mi blog!&lt;br /&gt;Welcome to my blog!&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-818207-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35169245-115943440210505444?l=coyotevil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://coyotevil.blogspot.com/feeds/115943440210505444/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35169245&amp;postID=115943440210505444' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/115943440210505444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35169245/posts/default/115943440210505444'/><link rel='alternate' type='text/html' href='http://coyotevil.blogspot.com/2006/09/beginning.html' title='The beginning...'/><author><name>andresgr</name><uri>http://www.blogger.com/profile/02204800220095963157</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp3.blogger.com/_J_x9kPKKtTI/R9uJ-A3-kfI/AAAAAAAAAO0/2httt_WYZaI/S220/vil.jpg'/></author><thr:total>6</thr:total></entry></feed>
