<?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-31156664</id><updated>2011-11-27T19:38:46.686-06:00</updated><category term='linux'/><category term='linux eclipse html'/><category term='problemas'/><category term='jsf'/><category term='javascript'/><category term='mysql'/><category term='java'/><category term='hg VCS'/><category term='swing'/><category term='rsync'/><category term='php'/><category term='sqlalchemy'/><category term='locale'/><category term='phpmyadmin'/><category term='jstl'/><category term='appfuse'/><category term='jsp'/><category term='uml-basico'/><category term='tomcat'/><category term='diff'/><category term='displaytag'/><category term='bash'/><category term='studio creator'/><category term='apache2'/><category term='c'/><category term='maemo'/><category term='n800'/><category term='python'/><category term='spring'/><category term='turbogears'/><category term='uml'/><category term='genshi'/><category term='ubuntu'/><category term='csv'/><category term='svn'/><category term='subversion'/><category term='backup'/><category term='patch'/><title type='text'>jupabeans</title><subtitle type='html'>Para consultar rápidamente códigos, métodos y rutinas que utilizo frecuentemente</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-31156664.post-2321480043304366211</id><published>2011-05-18T23:49:00.001-06:00</published><updated>2011-05-18T23:49:00.315-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='genshi'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='locale'/><title type='text'>Python, Genshi, fechas y UnicodeDecodeError</title><content type='html'>Hace unas semanas &lt;a href="http://jupabeans.blogspot.com/2011/04/agregando-locale-especifico-en-ubuntu.html"&gt;agregué el locale es_MX.UTF-8&lt;/a&gt; para publicar fechas en español.  Me llevó poco más de una hora descubrir un error en una aplicación que había funcionado perfectamente ayer.  Los errores de python no siempre son los más claros.&lt;br /&gt;&lt;br /&gt;La causa, 'UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)', yo creo el error más odiado para los hispano parlantes de python. La función que uso para publicar la fecha de hoy en Genshi es:&lt;br /&gt;&lt;code&gt;&lt;blockquote&gt;&lt;pre style='color:#141312;background-color:#ffffff;'&gt;...&lt;br /&gt;&lt;b&gt;&amp;lt;link&lt;/b&gt;&lt;span style='color:#006e28;'&gt; rel=&lt;/span&gt;&lt;span style='color:#aa0000;'&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt;&lt;span style='color:#006e28;'&gt; type=&lt;/span&gt;&lt;span style='color:#aa0000;'&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt;&lt;span style='color:#006e28;'&gt; media=&lt;/span&gt;&lt;span style='color:#aa0000;'&gt;&amp;quot;screen&amp;quot;&lt;/span&gt;&lt;span style='color:#006e28;'&gt; href=&lt;/span&gt;&lt;span style='color:#aa0000;'&gt;&amp;quot;${tg.url('/css/tables.css')}&amp;quot;&lt;/span&gt; &lt;b&gt;/&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;/head&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;?python&lt;/b&gt;&lt;br /&gt;import locale&lt;br /&gt;locale.setlocale(locale.LC_ALL, 'es_MX.utf8')&lt;br /&gt;import datetime&lt;br /&gt;&lt;b&gt;?&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;body&amp;gt;&lt;/b&gt;&lt;br /&gt; &lt;b&gt;&amp;lt;div&lt;/b&gt;&lt;span style='color:#006e28;'&gt; id=&lt;/span&gt;&lt;span style='color:#aa0000;'&gt;&amp;quot;wrap&amp;quot;&lt;/span&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;&amp;lt;h2&amp;gt;&lt;/b&gt;&lt;br /&gt;  Cotizaci&lt;span style='color:#b08000;'&gt;&amp;amp;oacute;&lt;/span&gt;n&lt;br /&gt;   &lt;b&gt;&amp;lt;span&amp;gt;&lt;/b&gt;${datetime.datetime.now().strftime(&amp;quot;%a %d de %B del %Y&amp;quot;).upper()}&lt;b&gt;&amp;lt;/span&amp;gt;&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;&amp;lt;/h2&amp;gt;&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;&amp;lt;div&lt;/b&gt;&lt;span style='color:#006e28;'&gt; id=&lt;/span&gt;&lt;span style='color:#aa0000;'&gt;&amp;quot;navcontainer&amp;quot;&lt;/span&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;br /&gt;...&lt;/pre&gt;&lt;/blockquote&gt;&lt;/code&gt;&lt;br /&gt;Nunca se me ocurrió que tenía que preocuparme por días como hoy, Mi&lt;b&gt;é&lt;/b&gt;rcoles.&lt;br /&gt;La función queda así:&lt;br /&gt;&lt;code&gt;&lt;blockquote&gt;&lt;pre style='color:#141312;background-color:#ffffff;'&gt;...&lt;br /&gt;&lt;b&gt;&amp;lt;link&lt;/b&gt;&lt;span style='color:#006e28;'&gt; rel=&lt;/span&gt;&lt;span style='color:#aa0000;'&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt;&lt;span style='color:#006e28;'&gt; type=&lt;/span&gt;&lt;span style='color:#aa0000;'&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt;&lt;span style='color:#006e28;'&gt; media=&lt;/span&gt;&lt;span style='color:#aa0000;'&gt;&amp;quot;screen&amp;quot;&lt;/span&gt;&lt;span style='color:#006e28;'&gt; href=&lt;/span&gt;&lt;span style='color:#aa0000;'&gt;&amp;quot;${tg.url('/css/tables.css')}&amp;quot;&lt;/span&gt; &lt;b&gt;/&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;/head&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;?python&lt;/b&gt;&lt;br /&gt;import locale&lt;br /&gt;locale.setlocale(locale.LC_ALL, 'es_MX.utf8')&lt;br /&gt;import datetime&lt;br /&gt;&lt;b&gt;?&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;body&amp;gt;&lt;/b&gt;&lt;br /&gt; &lt;b&gt;&amp;lt;div&lt;/b&gt;&lt;span style='color:#006e28;'&gt; id=&lt;/span&gt;&lt;span style='color:#aa0000;'&gt;&amp;quot;wrap&amp;quot;&lt;/span&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;&amp;lt;h2&amp;gt;&lt;/b&gt;&lt;br /&gt;  Cotizaci&lt;span style='color:#b08000;'&gt;&amp;amp;oacute;&lt;/span&gt;n&lt;br /&gt;   &lt;b&gt;&amp;lt;span&amp;gt;&lt;/b&gt;${datetime.datetime.now().strftime(&amp;quot;%a %d de %B del %Y&amp;quot;).&lt;strong&gt;decode('utf-8')&lt;/strong&gt;.upper()}&lt;b&gt;&amp;lt;/span&amp;gt;&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;&amp;lt;/h2&amp;gt;&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;&amp;lt;div&lt;/b&gt;&lt;span style='color:#006e28;'&gt; id=&lt;/span&gt;&lt;span style='color:#aa0000;'&gt;&amp;quot;navcontainer&amp;quot;&lt;/span&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;br /&gt;...&lt;/pre&gt;&lt;/blockquote&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Agregar &lt;code&gt;.decode('utf-8')&lt;/code&gt; funciona la mayoría de las veces que se presenta el UnicodeDecodeError.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-2321480043304366211?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/2321480043304366211/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=2321480043304366211' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/2321480043304366211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/2321480043304366211'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2011/05/python-genshi-fechas-y.html' title='Python, Genshi, fechas y UnicodeDecodeError'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-6314805501123808543</id><published>2011-05-11T08:45:00.000-06:00</published><updated>2011-05-11T08:45:00.181-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='csv'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Importando desde CSV con Python</title><content type='html'>Siendo Excel la herramienta más común en todas las pequeñas y medianas empresas, es casi ley que los proyectos inicien con datos ya capturados en tablas.  Estas tablas las exporto y las ordeno de acuerdo a mis necesidades.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-2OvBUERNa3Y/TbYzmft83_I/AAAAAAAAAHs/MEZJhArXMZw/s1600/screenshot_001.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-2OvBUERNa3Y/TbYzmft83_I/AAAAAAAAAHs/MEZJhArXMZw/s320/screenshot_001.png" /&gt;&lt;/a&gt;&lt;/div&gt;Comúnmente las exporto a CSV, delimitado por coma con doble comilla como separador.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-r92Ipil9t2w/TbY0E31eYMI/AAAAAAAAAH0/sApM3ob-Lvw/s1600/screenshot_002.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-r92Ipil9t2w/TbY0E31eYMI/AAAAAAAAAH0/sApM3ob-Lvw/s320/screenshot_002.png" /&gt;&lt;/a&gt;&lt;/div&gt;Creo mi modelo en forma declarativa.&lt;br /&gt;&lt;blockquote&gt;&lt;pre style='color:#141312;background-color:#ffffff;'&gt;&lt;b&gt;class&lt;/b&gt; CoberturaCame(DeclarativeBase):&lt;br /&gt;&lt;i&gt;&lt;span style='color:#585858;'&gt;    &amp;quot;&amp;quot;&amp;quot; Beneficios Adicionales &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;    __tablename__ &lt;b&gt;=&lt;/b&gt; &lt;span style='color:#bf0303;'&gt;&amp;quot;came&amp;quot;&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;i&gt;&lt;span style='color:#585858;'&gt;#{ Columns&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style='color:#0057ae;'&gt;id&lt;/span&gt; &lt;b&gt;=&lt;/b&gt; Column(Integer, autoincrement&lt;b&gt;=&lt;/b&gt;&lt;span style='color:#006e28;'&gt;True&lt;/span&gt;, primary_key&lt;b&gt;=&lt;/b&gt;&lt;span style='color:#006e28;'&gt;True&lt;/span&gt;)    &lt;br /&gt;    tipo &lt;b&gt;=&lt;/b&gt; Column(Integer)&lt;br /&gt;    vendedor &lt;b&gt;=&lt;/b&gt; Column(Unicode(&lt;span style='color:#b08000;'&gt;32&lt;/span&gt;))&lt;br /&gt;    edad_inf &lt;b&gt;=&lt;/b&gt; Column(&lt;span style='color:#bf0303;'&gt;u'edad_inf'&lt;/span&gt;, Integer, nullable&lt;b&gt;=&lt;/b&gt;&lt;span style='color:#006e28;'&gt;True&lt;/span&gt;)&lt;br /&gt;    edad_sup &lt;b&gt;=&lt;/b&gt; Column(&lt;span style='color:#bf0303;'&gt;u'edad_sup'&lt;/span&gt;, Integer, nullable&lt;b&gt;=&lt;/b&gt;&lt;span style='color:#006e28;'&gt;True&lt;/span&gt;)&lt;br /&gt;    hombre &lt;b&gt;=&lt;/b&gt; Column(Float(precision&lt;b&gt;=&lt;/b&gt;&lt;span style='color:#b08000;'&gt;2&lt;/span&gt;), default&lt;b&gt;=&lt;/b&gt;&lt;span style='color:#b08000;'&gt;0.0&lt;/span&gt;)&lt;br /&gt;    mujer &lt;b&gt;=&lt;/b&gt; Column(Float(precision&lt;b&gt;=&lt;/b&gt;&lt;span style='color:#b08000;'&gt;2&lt;/span&gt;), default&lt;b&gt;=&lt;/b&gt;&lt;span style='color:#b08000;'&gt;0.0&lt;/span&gt;)&lt;br /&gt;    &lt;br /&gt;    &lt;i&gt;&lt;span style='color:#585858;'&gt;#}&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;i&gt;&lt;span style='color:#585858;'&gt;#{ Helpers&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;    &lt;b&gt;def&lt;/b&gt; from_csv_row(&lt;span style='color:#006e28;'&gt;self&lt;/span&gt;, row):&lt;br /&gt;        &lt;span style='color:#006e28;'&gt;self&lt;/span&gt;.tipo &lt;b&gt;=&lt;/b&gt; row[&lt;span style='color:#b08000;'&gt;1&lt;/span&gt;]&lt;br /&gt;        &lt;span style='color:#006e28;'&gt;self&lt;/span&gt;.vendedor &lt;b&gt;=&lt;/b&gt; row[&lt;span style='color:#b08000;'&gt;2&lt;/span&gt;]&lt;br /&gt;        &lt;span style='color:#006e28;'&gt;self&lt;/span&gt;.edad_inf &lt;b&gt;=&lt;/b&gt; row[&lt;span style='color:#b08000;'&gt;3&lt;/span&gt;]&lt;br /&gt;        &lt;span style='color:#006e28;'&gt;self&lt;/span&gt;.edad_sup &lt;b&gt;=&lt;/b&gt; row[&lt;span style='color:#b08000;'&gt;4&lt;/span&gt;]&lt;br /&gt;        &lt;span style='color:#006e28;'&gt;self&lt;/span&gt;.hombre &lt;b&gt;=&lt;/b&gt; row[&lt;span style='color:#b08000;'&gt;5&lt;/span&gt;]&lt;br /&gt;        &lt;span style='color:#006e28;'&gt;self&lt;/span&gt;.mujer &lt;b&gt;=&lt;/b&gt; row[&lt;span style='color:#b08000;'&gt;5&lt;/span&gt;]&lt;br /&gt;            &lt;br /&gt;    &lt;br /&gt;    &lt;span style='color:#8f6b32;'&gt;@classmethod&lt;/span&gt;&lt;br /&gt;    &lt;b&gt;def&lt;/b&gt; by_edad_tipo(cls, edad, tipo):&lt;br /&gt;&lt;i&gt;&lt;span style='color:#585858;'&gt;        &amp;quot;&amp;quot;&amp;quot;Return the BenAdicionales object whose edad is between``edad``.&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;        &lt;b&gt;return&lt;/b&gt; DBSession.query(cls).&lt;span style='color:#0057ae;'&gt;filter&lt;/span&gt;(&lt;br /&gt;            and_(cls.edad_inf &lt;b&gt;&amp;lt;=&lt;/b&gt; edad, &lt;br /&gt;                cls.edad_sup &lt;b&gt;&amp;gt;=&lt;/b&gt; edad,&lt;br /&gt;                cls.tipo&lt;b&gt;==&lt;/b&gt;tipo)).first()&lt;br /&gt;        &lt;br /&gt;    &lt;i&gt;&lt;span style='color:#585858;'&gt;#}&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;y agrego una simple rutina de importación.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre style='color:#141312;background-color:#ffffff;'&gt;&lt;span style='color:#ff80e0;'&gt;from&lt;/span&gt; miproyecto &lt;span style='color:#ff80e0;'&gt;import&lt;/span&gt; model&lt;br /&gt;&lt;span style='color:#ff80e0;'&gt;import&lt;/span&gt; cvs&lt;br /&gt;&lt;br /&gt;csvreader &lt;b&gt;=&lt;/b&gt; csv.reader(&lt;span style='color:#0057ae;'&gt;open&lt;/span&gt;(&lt;span style='color:#bf0303;'&gt;'res/janem_cobertura_came.csv'&lt;/span&gt;))&lt;br /&gt;&lt;i&gt;&lt;span style='color:#585858;'&gt;# skip first row&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;csvreader.next()&lt;br /&gt;&lt;b&gt;for&lt;/b&gt; row &lt;b&gt;in&lt;/b&gt; csvreader:&lt;br /&gt;    &lt;b&gt;if&lt;/b&gt; &lt;span style='color:#0057ae;'&gt;len&lt;/span&gt;(row) &lt;b&gt;==&lt;/b&gt; &lt;span style='color:#b08000;'&gt;0&lt;/span&gt;:&lt;br /&gt;        &lt;b&gt;continue&lt;/b&gt;&lt;br /&gt;    d &lt;b&gt;=&lt;/b&gt; model.CoberturaCame()&lt;br /&gt;    &lt;br /&gt;    d.from_csv_row(row)&lt;br /&gt;    &lt;br /&gt;    model.DBSession.add(d)&lt;br /&gt;&lt;br /&gt;model.DBSession.flush()&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;La función miembro &lt;b&gt;from_csv_row(row)&lt;/b&gt; definida en el modelo, es una ayuda visual y no tiene otro propósito mas que copiar los valores de la fila a un objeto nuevo.  En algunos casos pudiera servir para realizar alguna transformación como fechas, minúsculas y mayúsculas o alguna operación aritmética antes de entrar.  Aunque yo aconsejo realizar todas esas transformaciones desde la tabla de Excel y exportar el CSV ya listo para importar.&lt;br /&gt;&lt;br /&gt;Cabe mencionar que las cantidades numéricas deben de estar sin formato, por que los caractéres '$' o las ',' dentro de las cifras confunden el lector de python.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-6314805501123808543?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/6314805501123808543/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=6314805501123808543' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/6314805501123808543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/6314805501123808543'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2011/05/importando-desde-csv-con-python.html' title='Importando desde CSV con Python'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-2OvBUERNa3Y/TbYzmft83_I/AAAAAAAAAHs/MEZJhArXMZw/s72-c/screenshot_001.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-8159407700186460721</id><published>2011-05-03T10:41:00.001-06:00</published><updated>2011-05-03T10:41:00.089-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='phpmyadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='apache2'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Forzando phpmyadmin sobre SSL en Ubuntu Lucid (10.04)</title><content type='html'>Un día me quedé sin conexión a Internet así que decidí tomar prestada la de algún vecino. &amp;nbsp;Después de algunas horas de trabajo, me vino un extraño pensamiento ... '¿y si mi vecino captura todos los passwords que pasan por su red como lo hago yo?' He entrado a los phpmyadmins de tres servidores haciendo modificaciones, fácilmente pudo capturar tres credenciales de root.&lt;br /&gt;&lt;br /&gt;Resulta que no está bien documentado en la red cómo asegurar phpmyadmin en un Ubuntu Lucid.&lt;br /&gt;&lt;br /&gt;Tengo que crear las llaves de seguridad&lt;br /&gt;&lt;blockquote&gt;# apt-get update&lt;br /&gt;# apt-get upgrade&lt;br /&gt;# apt-get install openssl&lt;br /&gt;# mkdir /etc/ssl/localcerts&lt;br /&gt;# openssl req -new -x509 -days 365 -nodes -out /etc/ssl/localcerts/apache.pem -keyout /etc/ssl/localcerts/apache.key&lt;br /&gt;# chmod 600 /etc/ssl/localcerts/apache*&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Habilitar el módulo SSL del Apache&lt;br /&gt;&lt;blockquote&gt;# cd /etc/apache2/mods-enabled&lt;br /&gt;# ln -s ../mods-available/ssl.* .&lt;/blockquote&gt;&lt;br /&gt;Habilitar el sitio por default SSL de Apache&lt;br /&gt;&lt;blockquote&gt;# cd /etc/apache2/sites-enabled&lt;br /&gt;# ln -s ../sites-available/default-ssl .&lt;/blockquote&gt;&lt;br /&gt;Modificar default-ssl&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;- &amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;------&lt;br /&gt;  &amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;+ &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Modificar /etc/apache2/ports.conf&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;lt;IfModule mod_ssl.c&amp;gt;&lt;br /&gt;    # If you add NameVirtualHost *:443 here, you will also have to change&lt;br /&gt;    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl&lt;br /&gt;    # to &amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;    # Server Name Indication for SSL named virtual hosts is currently not&lt;br /&gt;    # supported by MSIE on Windows XP.&lt;br /&gt;+   &lt;b&gt;NameVirtualHost *:443&lt;/b&gt;&lt;br /&gt;    Listen 443&lt;br /&gt;&amp;lt/IfModule&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Adaptar /etc/apache2/conf.d/phpmyadmin.conf, aquí yo envuelvo la configuración dentro de un VirtualHost con el nombre de mi servidor, en este ejemplo &lt;i&gt;my.servername.com&lt;/i&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;+&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;+       ServerName my.servername.com&lt;br /&gt;+       ServerAdmin webmaster@servername.com&lt;br /&gt;+&lt;br /&gt;+ DocumentRoot /var/www&lt;br /&gt;  Alias /phpmyadmin /usr/share/phpmyadmin&lt;/pre&gt;&lt;/blockquote&gt;al inicio y &lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;+   #   SSL Engine Switch:&lt;br /&gt;+   #   Enable/Disable SSL for this virtual host.&lt;br /&gt;+   SSLEngine on&lt;br /&gt;+&lt;br /&gt;+   #   A self-signed (snakeoil) certificate can be created by installing&lt;br /&gt;+   #   the ssl-cert package. See&lt;br /&gt;+   #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.&lt;br /&gt;+   #   If both key and certificate are stored in the same file, only the&lt;br /&gt;+   #   SSLCertificateFile directive is needed.&lt;br /&gt;+   SSLCertificateFile    /etc/ssl/localcerts/apache.pem&lt;br /&gt;+   SSLCertificateKeyFile /etc/ssl/localcerts/apache.key&lt;br /&gt;+&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;al final.  Reiniciamos el servidor y probamos.&lt;br /&gt;&lt;br /&gt;Parece mucho trabajo para algo que debería de ser aún más simple, sin embargo, los beneficios en seguridad valen la pena.&lt;br /&gt;&lt;br /&gt;Mas info en: &lt;a href="http://bit.ly/fyAhAJ"&gt;Creating a Self-Signed Certificate&lt;/a&gt;, &lt;a href="http://bit.ly/gVQ73b"&gt;phpmyadmin Documentation&lt;/a&gt;, &lt;a href="http://tek.io/gmmJ1h"&gt;Configure Apache to support multiple SSL sites on a single IP address&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-8159407700186460721?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/8159407700186460721/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=8159407700186460721' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/8159407700186460721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/8159407700186460721'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2011/05/forzando-phpmyadmin-sobre-ssl-en-ubuntu.html' title='Forzando phpmyadmin sobre SSL en Ubuntu Lucid (10.04)'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-1258179025179321577</id><published>2011-04-20T07:02:00.006-06:00</published><updated>2011-04-20T07:02:00.683-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='patch'/><category scheme='http://www.blogger.com/atom/ns#' term='diff'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Subversion. Creando un patch y aplicándolo en otro branch</title><content type='html'>Cuando manejo dos branches o ramas de un mismo proyecto, me encuentro con bugfixes que deben de quedar en los dos, para ello creo un patch en la versión que arreglé para aplicarlo en la otra versión.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ svn diff -c 372 &gt; bugfix_patch&lt;/code&gt;&lt;/blockquote&gt;372 es la revisión que contiene el bugfix, el archivo creado contiene la información del patch&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;Index: update_script.py&lt;br /&gt;===================================================================&lt;br /&gt;--- update_script.py (revision 371)&lt;br /&gt;+++ update_script.py (revision 372)&lt;br /&gt;@@ -20,7 +20,7 @@&lt;br /&gt;     ids = model.Product.getAll_filtered()&lt;br /&gt;     &lt;br /&gt;     for i in ids:&lt;br /&gt;-        l.append(i.model)&lt;br /&gt;+        l.append(i.model.strip() if i.model != None else '')&lt;br /&gt;     &lt;br /&gt;     rpc.updateList(l)&lt;br /&gt; &lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;luego copio el archivo bugfix_patch al working directory de mi otro branch y aplico el patch.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ patch -p0 &lt; patch2&lt;/code&gt;&lt;/blockquote&gt;&lt;small&gt;&lt;b&gt;-p0&lt;/b&gt; hace que los nombres de los archivos contenidos en el patch mantengan completo su path&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;Mas info en &lt;a href="http://bit.ly/gv3jwL"&gt;patch manpage&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-1258179025179321577?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/1258179025179321577/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=1258179025179321577' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/1258179025179321577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/1258179025179321577'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2011/04/subversion-creando-un-patch-y.html' title='Subversion. Creando un patch y aplicándolo en otro branch'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-7512975797920041894</id><published>2011-04-15T18:37:00.001-06:00</published><updated>2011-04-15T18:37:55.092-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Subversion. Moviendo un repositorio svn</title><content type='html'>Necesito mover un repositorio de un servidor a otro.  En este caso es un viejo proyecto que no quiero perder que está alojado en un viejo servidor.  Parece que en svn la mejor opción es hacer un dump, y luego un load.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;$ svnadmin dump /home/svn/crmdev &gt; crmdev.dump&lt;br /&gt;* Dumped revision 0.&lt;br /&gt;* Dumped revision 1.&lt;br /&gt;* Dumped revision 2.&lt;br /&gt;* Dumped revision 3.&lt;br /&gt;* Dumped revision 4.&lt;br /&gt;...&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;small&gt;* Notar que svnadmin dump sólo funciona para paths y no urls.&lt;/small&gt;&lt;br /&gt;Se crea un archivo de 184M&lt;br /&gt;&lt;blockquote&gt;...&lt;br /&gt;184M -rw-r--r-- 1 lukesw lukesw 184M 2011-04-15 11:04 crmdev.dump&lt;br /&gt;...&lt;/blockquote&gt;Lo comprimo...&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ bzip2 crmdev.dump&lt;/code&gt;&lt;/blockquote&gt;... y queda en unos 141M&lt;br /&gt;&lt;blockquote&gt;141M -rw-r--r-- 1 pablito pablito 141M 2011-04-15 11:04 crmdev.dump.bz2&lt;br /&gt;&lt;/blockquote&gt;Me ahorré 40M de transferencia entre servers, que con la tasa de transferencia de Infinitum son bastante considerables.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ scp crmdev.dump.bz2 svn@super.newserver.com:/home/svn&lt;/code&gt;&lt;/blockquote&gt;En el nuevo servidor creo el repositorio y lo cargo con el dump&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;$ svnadmin create crmdev&lt;br /&gt;$ svnadmin load crmdev &lt; crmdev.dump&lt;br /&gt;...&lt;br /&gt;&lt;&lt;&lt; Started new transaction, based on original revision 1&lt;br /&gt;     * adding path : trunk/umlconcepts ... done.&lt;br /&gt;     * adding path : trunk/umlconcepts/.classpath ... done.&lt;br /&gt;     * adding path : trunk/umlconcepts/.myumldata ... done.&lt;br /&gt;     * adding path : trunk/umlconcepts/.project ... done.&lt;br /&gt;     * adding path : trunk/umlconcepts/.settings ... done.&lt;br /&gt;     * adding path : trunk/umlconcepts/.settings/com.genuitec.eclipse.core.prefs ... done.&lt;br /&gt;     * adding path : trunk/umlconcepts/uml.umr ... done.&lt;br /&gt;...&lt;br /&gt;&lt;&lt;&lt; Started new transaction, based on original revision 63&lt;br /&gt;     * editing path : trunk/productsweb/WebRoot/WEB-INF/jsp/footer.jsp ... done.&lt;br /&gt;&lt;br /&gt;------- Committed revision 63 &gt;&gt;&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;Listo, el repositorio ha sido copiado/movido&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-7512975797920041894?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/7512975797920041894/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=7512975797920041894' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/7512975797920041894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/7512975797920041894'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2011/04/subversion-moviendo-un-repositorio-svn.html' title='Subversion. Moviendo un repositorio svn'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-7807162013503514690</id><published>2011-04-12T18:55:00.001-06:00</published><updated>2011-04-12T18:56:11.604-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hg VCS'/><title type='text'>.hgignore para proyectos Turbogears 2+</title><content type='html'>&lt;a href="http://subversion.apache.org/"&gt;Subversion&lt;/a&gt; es mi &lt;a href="http://en.wikipedia.org/wiki/Revision_control"&gt;VCS&lt;/a&gt; favorito, sin embargo uso mucho &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; para cambios pequeños, pruebas de código y parches.  Tengo repositorios híbridos (SVN/HG) que me funcionan muy bien. Copio mi archivo &lt;a href="http://www.selenic.com/mercurial/hgignore.5.html"&gt;.hgignore&lt;/a&gt; para futura referencia.&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;# use glob syntax.&lt;br /&gt;syntax: glob&lt;br /&gt;*.svn   &lt;span style="color: navy;"&gt;# repositorio híbrido&lt;/span&gt;&lt;br /&gt;*.pyc   &lt;span style="color: navy;"&gt;# compilados&lt;/span&gt;&lt;br /&gt;*~      &lt;span style="color: navy;"&gt;# temporales&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;syntax: regexp&lt;br /&gt;^lib$   &lt;span style="color: navy;"&gt;# librería específica del proyecto&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;* Tengo que hacer una referencia rápida para Mercurial&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-7807162013503514690?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/7807162013503514690/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=7807162013503514690' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/7807162013503514690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/7807162013503514690'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2011/04/hgignore-para-proyectos-turbogears-2.html' title='.hgignore para proyectos Turbogears 2+'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-6818559550956518254</id><published>2011-04-04T21:32:00.002-06:00</published><updated>2011-04-04T21:38:56.407-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlalchemy'/><title type='text'>Multiple relación a la misma tabla con Declarative SQLAlchemy 0.6</title><content type='html'>En el manual de SQLAlchemy la solución no es muy clara para la forma declarative, me arrojaba el siguiente error&lt;blockquote&gt;sqlalchemy.exc.ArgumentError: Column-based expression object expected for argument 'primaryjoin'; got: 'False'&lt;/blockquote&gt;Al ver Column-based expression supuse que era el mismo tipo que en los filtros y así fué. La solución es simple como siempre, la pongo aquí para referencia.&lt;blockquote&gt;&lt;font face="monospace"&gt;&lt;font color="#a52a2a"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color="#008b8b"&gt;Registro&lt;/font&gt;(DeclarativeBase):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__tablename__ = &lt;font color="#ff00ff"&gt;'registro'&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;#{ Columns&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#008b8b"&gt;id&lt;/font&gt;&amp;nbsp;= Column(Integer, primary_key=&lt;font color="#008b8b"&gt;True&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;# folio único&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;folio = Column(Integer, nullable=&lt;font color="#008b8b"&gt;True&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;medic_id = Column(&lt;font color="#ff00ff"&gt;u'medic_id'&lt;/font&gt;, Integer, ForeignKey(&lt;font color="#ff00ff"&gt;'medic.id'&lt;/font&gt;))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nursea_id = Column(&lt;font color="#ff00ff"&gt;u'nursea_id'&lt;/font&gt;, Integer, ForeignKey(&lt;font color="#ff00ff"&gt;'nurse.id'&lt;/font&gt;), nullable=&lt;font color="#008b8b"&gt;True&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nurseb_id = Column(&lt;font color="#ff00ff"&gt;u'nurseb_id'&lt;/font&gt;, Integer, ForeignKey(&lt;font color="#ff00ff"&gt;'nurse.id'&lt;/font&gt;), nullable=&lt;font color="#008b8b"&gt;True&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;room_id = Column(&lt;font color="#ff00ff"&gt;u'room_id'&lt;/font&gt;, Integer, ForeignKey(&lt;font color="#ff00ff"&gt;'room.id'&lt;/font&gt;))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status_id = Column(&lt;font color="#ff00ff"&gt;u'status_id'&lt;/font&gt;, Integer, ForeignKey(&lt;font color="#ff00ff"&gt;'status.id'&lt;/font&gt;))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fecha = Column(&lt;font color="#ff00ff"&gt;u'fecha'&lt;/font&gt;, Date(timezone=&lt;font color="#008b8b"&gt;False&lt;/font&gt;), primary_key=&lt;font color="#008b8b"&gt;False&lt;/font&gt;, nullable=&lt;font color="#008b8b"&gt;True&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;patient = Column(&lt;font color="#ff00ff"&gt;u'patient'&lt;/font&gt;, Unicode(&lt;font color="#ff00ff"&gt;255&lt;/font&gt;), nullable=&lt;font color="#008b8b"&gt;False&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;patient_age = Column(&lt;font color="#ff00ff"&gt;u'patient_age'&lt;/font&gt;, Integer, nullable=&lt;font color="#008b8b"&gt;True&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mat = Column(&lt;font color="#ff00ff"&gt;u'mat'&lt;/font&gt;, Unicode(&lt;font color="#ff00ff"&gt;255&lt;/font&gt;), nullable=&lt;font color="#008b8b"&gt;False&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;kit_id = Column(&lt;font color="#ff00ff"&gt;u'kit_id'&lt;/font&gt;, Integer, ForeignKey(&lt;font color="#ff00ff"&gt;'kit.id'&lt;/font&gt;))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hour_in = Column(&lt;font color="#ff00ff"&gt;u'hour_in'&lt;/font&gt;, Unicode(&lt;font color="#ff00ff"&gt;16&lt;/font&gt;), nullable=&lt;font color="#008b8b"&gt;False&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hour_out = Column(&lt;font color="#ff00ff"&gt;u'hour_out'&lt;/font&gt;, Unicode(&lt;font color="#ff00ff"&gt;16&lt;/font&gt;), nullable=&lt;font color="#008b8b"&gt;False&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;diagnosis = Column(&lt;font color="#ff00ff"&gt;u'diagnosis'&lt;/font&gt;, Text(length=&lt;font color="#008b8b"&gt;None&lt;/font&gt;, convert_unicode=&lt;font color="#008b8b"&gt;True&lt;/font&gt;, &lt;font color="#6a5acd"&gt;\&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert_unicode=&lt;font color="#008b8b"&gt;None&lt;/font&gt;), primary_key=&lt;font color="#008b8b"&gt;False&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;procedure = Column(&lt;font color="#ff00ff"&gt;u'procedure'&lt;/font&gt;, Unicode(&lt;font color="#ff00ff"&gt;255&lt;/font&gt;), nullable=&lt;font color="#008b8b"&gt;False&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;notes = Column(&lt;font color="#ff00ff"&gt;u'notes'&lt;/font&gt;, Text(length=&lt;font color="#008b8b"&gt;None&lt;/font&gt;, convert_unicode=&lt;font color="#008b8b"&gt;True&lt;/font&gt;, &lt;font color="#6a5acd"&gt;\&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;assert_unicode=&lt;font color="#008b8b"&gt;None&lt;/font&gt;), primary_key=&lt;font color="#008b8b"&gt;False&lt;/font&gt;)&lt;br&gt;&lt;/font&gt;&lt;/blockquote&gt;la relación dentro la misma clase queraría así&lt;blockquote&gt;&lt;font face="monospace"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;#{ Relations&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;medic = relation(Medic)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;kit = relation(Kit)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status = relation(Status)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;room = relation(Room)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nursea = relation(Nurse, primaryjoin=nursea_id == Nurse.&lt;font color="#008b8b"&gt;id&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;nurseb = relation(Nurse, primaryjoin=nurseb_id == Nurse.&lt;font color="#008b8b"&gt;id&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;#}&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-6818559550956518254?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/6818559550956518254/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=6818559550956518254' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/6818559550956518254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/6818559550956518254'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2011/04/multiple-relacion-la-misma-tabla-con.html' title='Multiple relación a la misma tabla con Declarative SQLAlchemy 0.6'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-7659514885930561654</id><published>2011-04-01T13:05:00.007-06:00</published><updated>2011-04-28T14:44:37.118-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='locale'/><title type='text'>Python y locale.setlocale</title><content type='html'>Quiero desplegar las fechas de mis páginas hechas con &lt;a href="http://jupabeans.blogspot.com/2010/03/cms-en-python.html"&gt;Turbogears2.0&lt;/a&gt; en español. &amp;nbsp;Ahora tengo esta salida.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt; In&lt;/span&gt; [5]: datetime.datetime.now().strftime("%a %d de %B del %Y")&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #990000;"&gt; Out&lt;/span&gt;[5]: 'Fri 01 de April del 2011'&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Reviso los locale que tengo instalados en mi servidor, en este caso un Ubuntu Lucid (10.04)&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;root@kirk:~# locale -a&lt;/code&gt;&lt;br /&gt;&lt;code&gt;C&lt;/code&gt;&lt;br /&gt;&lt;code&gt;POSIX&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_AG&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_AU.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_BW.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_CA.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_DK.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_GB.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_HK.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_IE.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_IN&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_NG&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_NZ.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_PH.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_SG.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_US.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_ZA.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_ZW.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;root@kirk:~# &lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Si no está el locale que requiero, lo genero, en este caso es: es_MX.UTF-8&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;root@kirk:~# /usr/sbin/locale-gen es_MX.UTF-8                                &lt;/code&gt;&lt;br /&gt;&lt;code&gt;Generating locales...&lt;/code&gt;&lt;br /&gt;&lt;code&gt;es_MX.UTF-8... done&lt;/code&gt;&lt;br /&gt;&lt;code&gt;Generation complete.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;root@kirk:~# &lt;/code&gt;&lt;/blockquote&gt;La generación de locales en Lucid difiere un poco de como lo hacía en &lt;a href="http://jupabeans.blogspot.com/2009/03/arreglando-locale-en-ubuntu-810.html"&gt;Intrepid&lt;/a&gt;&lt;br /&gt;Confirmo la generación del locale&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;root@kirk:~# locale -a&lt;/code&gt;&lt;br /&gt;&lt;code&gt;C&lt;/code&gt;&lt;br /&gt;&lt;code&gt;POSIX&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_AG&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_AU.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_BW.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_CA.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_DK.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_GB.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_HK.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_IE.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_IN&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_NG&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_NZ.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_PH.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_SG.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_US.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_ZA.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;en_ZW.utf8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;b&gt;es_MX.utf8&lt;/b&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;root@kirk:~# &lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Bien, ya tengo un locale en español que puedo utilizar.  Lo activo dentro de mi ambiente python y compruebo.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt; In&lt;/span&gt; [6]: import locale&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt; In&lt;/span&gt; [7]: locale.setlocale(locale.LC_ALL, 'es_MX.utf8')&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #990000;"&gt; Out&lt;/span&gt;[7]: 'es_MX.utf8'&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt; In&lt;/span&gt; [8]: datetime.datetime.now().strftime("%a %d de %B del %Y")&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #990000;"&gt; Out&lt;/span&gt;[8]: 'vie 01 de abril del 2011'&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Algo realmente simple me entretuvo mucho tiempo, ya que obtenía errores como:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt; In&lt;/span&gt; [9]: locale.setlocale(locale.LC_ALL, 'es_MX')&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #cc0000;"&gt; Error&lt;/span&gt;                                     Traceback (most recent call last)&lt;br /&gt;&lt;br /&gt;/usr/lib/python2.6/locale.pyc in setlocale(category, locale)&lt;br /&gt;511         # convert to string&lt;br /&gt;&lt;br /&gt;512         locale = normalize(_build_localename(locale))&lt;br /&gt;--&amp;gt; 513     return _setlocale(category, locale)&lt;br /&gt;514 &lt;br /&gt;515 def resetlocale(category=LC_ALL):&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #cc0000;"&gt;Error&lt;/span&gt;: unsupported locale setting&lt;/b&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;... y encontré poca documentación al respecto, lo pongo aquí para futuras referencias.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-7659514885930561654?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/7659514885930561654/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=7659514885930561654' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/7659514885930561654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/7659514885930561654'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2011/04/agregando-locale-especifico-en-ubuntu.html' title='Python y locale.setlocale'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-5505335301810335891</id><published>2010-07-03T12:04:00.001-06:00</published><updated>2010-07-03T12:17:10.590-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='rsync'/><title type='text'>rsync - Guía Rápida</title><content type='html'>Linux tiene muchas herramientas para copiar y respaldar información.  rsync es la favorita para muchos administradores. &lt;br /&gt;&lt;br /&gt;rsync utiliza un algoritmo que permite transmitir eficientemente una estructura (como un archivo) a  través de un canal de comunicación cuando el receptor ya tiene una  versión diferente de la misma estructura. (&lt;a href="http://es.wikipedia.org/wiki/Rsync"&gt;wikipedia&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Copiar localmente&lt;/h2&gt;En su forma más simple lo podemos utilizar para copiar directorios enteros de forma local.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ rsync -av /home/user/Docs /media/usb/backup/&lt;/code&gt;&lt;/blockquote&gt;-av lo ejecuta en modo verbose y archivo, práctica común para copia recursiva, conservar permisos y symlinks.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Copiar remotamente&lt;/h2&gt;Tanto el origen como el destino pueden ser otra computadora en la red.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ rsync -avz /home/user/Docs user@online.backups.com:/backups/&lt;/code&gt;&lt;/blockquote&gt;agregamos -z para comprimir los datos sobre la red.&lt;br /&gt;&lt;br /&gt;rsync puede tambier borrar archivos que ya no se encuentran en el origen pero si en el destino causa de alguna copia anterior.  Es decir, que pasa si ya borramos algunos archivos de nuestro directorio de trabajo y queremos que también sean borrados de nuestro respaldo.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ rsync -avz --del /home/user/Docs user@online.backups.com:/backups/&lt;/code&gt;&lt;/blockquote&gt;--del indica a rsync que borre los archivos que ya no están en el origen.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Directorio o archivos&lt;/h2&gt;Importante el último slash '/'. en:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ rsync -avz --del /home/user/Docs user@online.backups.com:/backups/&lt;/code&gt;&lt;/blockquote&gt;estoy copiando el directorio 'Docs' dentro del directorio 'backups' pero si&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$ rsync -avz --del /home/user/Docs/ user@online.backups.com:/backups/&lt;/code&gt;&lt;/blockquote&gt;estaré copiando los archivos dentro del directorio 'Docs' al directorio 'backups'&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Copia incremental&lt;/h2&gt;&lt;blockquote&gt;&lt;code&gt;$ rsync --backup --backup-dir=`date +%Y.%m.%d` -av /home/user/Docs/ /media/usb/backup/Docs/&lt;/code&gt;&lt;/blockquote&gt;--backup crea un respaldo --backup-dir crea el respaldo dentro de la jerarquía del directorio de destino.  También se puede usar --suffix=SUFFIX para agregar un sufijo.&lt;br /&gt;&lt;br /&gt;Apenas rascando la superficie de esta poderosa utilería.  Para más información &lt;a href="http://www.samba.org/ftp/rsync/rsync.html"&gt;manpage&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-5505335301810335891?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/5505335301810335891/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=5505335301810335891' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/5505335301810335891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/5505335301810335891'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2010/07/rsync-guia-rapida.html' title='rsync - Guía Rápida'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-6118277305203511729</id><published>2010-03-22T17:49:00.005-06:00</published><updated>2010-03-22T18:20:15.523-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlalchemy'/><category scheme='http://www.blogger.com/atom/ns#' term='turbogears'/><title type='text'>MVC en Python</title><content type='html'>Últimamente he utilizado herramientas como &lt;a href="http://www.sqlalchemy.org/"&gt;SQLAlchemy&lt;/a&gt; y &lt;a href="http://www.turbogears.org/2.0/"&gt;Turbogears&lt;/a&gt; en Python.  La verdad me ha gustado mucho la flexibilidad y facilidad con la que puedo escribir scripts para procesar información con SQLAlchemy y me ha gustado mucho el modelo MVC de Turbogears 2, parecido al de Spring en Java, por lo que voy a comenzar a implementar más cosas en python.&lt;br /&gt;Comenzaré con un blog/cms en Turbogears, yo sé que existen muchísimas opciones ya desarrolladas que seguramente son mejores a cualquiera que yo pueda hacer, sin embargo, me sirve para familiarizarme en ambiente de trabajo con TG2.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Instalando Turbogears.&lt;/span&gt;&lt;br /&gt;La mejor opción es con Virtualenv, que crea un "ambiente virtual" de python para cargar dependencias, librerías y versiones, etc.  Sin embargo en producción a mi me ha funcionado instalarlo junto con el resto de python del servidor.  Las instrucciones para instalarlo son sencillas y están &lt;a href="http://www.turbogears.org/2.0/docs/main/DownloadInstall.html"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Creando un proyecto&lt;/span&gt;&lt;br /&gt;Es muy simple iniciar un proyecto en Turbogears.&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;$ paster quickstart&lt;br /&gt;Enter project name: Altadefinicion                          &lt;br /&gt;Enter package name [altadefinicion]:&lt;br /&gt;Do you need authentication and authorization in this project? [yes]&lt;br /&gt;Selected and implied templates:&lt;br /&gt; tg.devtools#turbogears2  TurboGears 2.0 Standard Quickstart Template&lt;br /&gt;&lt;br /&gt;Variables:&lt;br /&gt; auth:        sqlalchemy&lt;br /&gt; egg:         Altadefinicion&lt;br /&gt; geo:         None&lt;br /&gt; package:     altadefinicion&lt;br /&gt; project:     Altadefinicion&lt;br /&gt; sqlalchemy:  True&lt;br /&gt; sqlobject:   False&lt;br /&gt; tgversion:   2.0.3&lt;br /&gt;Creating template turbogears2&lt;br /&gt;Creating directory ./Altadefinicion&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;reading manifest template 'MANIFEST.in'&lt;br /&gt;writing manifest file 'Altadefinicion.egg-info/SOURCES.txt'&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Si no recibimos ningún mensaje de error, podemos iniciar la aplicación con:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;$ paster serve --reload development.ini&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Y apuntando nuestro explorador a http://localhost:8080 podremos ver una página de bienvenida.&lt;br /&gt;&lt;a target='_blank' href='http://img185.imageshack.us/i/screenshot018y.png/'&gt;&lt;img src='http://img185.imageshack.us/img185/2251/screenshot018y.th.png' border='0'/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Entrando al directorio del proyecto podemos observar una simple estructura:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;$ tree -d&lt;br /&gt;.&lt;br /&gt;|-- Altadefinicion.egg-info&lt;br /&gt;|-- altadefinicion&lt;br /&gt;|   |-- config&lt;br /&gt;|   |-- controllers&lt;br /&gt;|   |-- i18n&lt;br /&gt;|   |   `-- ru&lt;br /&gt;|   |       `-- LC_MESSAGES&lt;br /&gt;|   |-- lib&lt;br /&gt;|   |-- model&lt;br /&gt;|   |-- public&lt;br /&gt;|   |   |-- css&lt;br /&gt;|   |   `-- images&lt;br /&gt;|   |-- templates&lt;br /&gt;|   `-- tests&lt;br /&gt;|       |-- functional&lt;br /&gt;|       `-- models&lt;br /&gt;|-- data&lt;br /&gt;|   `-- sessions&lt;br /&gt;`-- ez_setup&lt;br /&gt;&lt;br /&gt;25 directories&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Por default TG2 usa SQLite como motor de base de datos y almacena todo en un archivo llamado &lt;i&gt;devdata.db&lt;/i&gt; para crear la base de datos por default con datos de prueba hay que correr otro comando de paster:&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;$ paster setup-app development.ini&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Con esto ya tenemos lista la cimentación para construir una aplicación con python, usando Turbogears 2 y SQLalchemy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-6118277305203511729?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/6118277305203511729/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=6118277305203511729' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/6118277305203511729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/6118277305203511729'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2010/03/cms-en-python.html' title='MVC en Python'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-5107202308365501643</id><published>2010-02-02T14:38:00.001-06:00</published><updated>2010-02-02T14:42:04.105-06:00</updated><title type='text'>Neither BindingResult nor plain target object for bean name "command"...</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Este error me sale frecuentemente y sobre todo después de muchas correcciones o adecuaciones a nuevos controllers en spring-mvc.&lt;br/&gt;&lt;br/&gt;Siempre pierdo mucho tiempo tratando de encontrar el error, por que cuando veo el código tanto del jsp como del controllores todo parace perfecto, sin embargo el error persiste.&lt;br/&gt;&lt;br/&gt;Cuando encuentro la solución siempre recuerdo que ya lo había hecho así antes y ahora quiero ponerlo aquí para que no se me olvide.&lt;br/&gt;&lt;br/&gt;El error sale cuando inserto un nuevo objeto para persistir, no cuando edito uno ya existente y la respuesta está en la salida con succesView&lt;br/&gt;&lt;code&gt; return new ModelAndView(success);&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;Si &lt;i&gt;successView&lt;/i&gt; no está definido me arroja el error, cuando se modifica el objeto &lt;i&gt;successView&lt;/i&gt; es editado para mostrar nuevamente la forma de edición, sin embargo cuando el objeto es nuevo, pasa el parámetro de &lt;i&gt;successView&lt;/i&gt; que está definido en el dispatcher.  Entonces, si no hay &lt;i&gt;successView&lt;/i&gt; definido en el dispatcher, me encuentro con ese error.&lt;br/&gt;&lt;code&gt;&lt;br/&gt;    &lt;font color='#00ffff'&gt;&amp;lt;&lt;/font&gt;&lt;font color='#00ffff'&gt;bean&lt;/font&gt;&lt;font color='#00ffff'&gt; &lt;/font&gt;&lt;font color='#00ff00'&gt;id&lt;/font&gt;=&lt;font color='#ff6060'&gt;"catalogoEstrategiasFormController"&lt;/font&gt;&lt;font color='#00ffff'&gt; &lt;/font&gt;&lt;font color='#00ff00'&gt;class&lt;/font&gt;=&lt;font color='#ff6060'&gt;"com.deuxbits.ssaspps.webapp.controller.CatalogoEstrategiasFormController"&lt;/font&gt;&lt;font color='#00ffff'&gt;&amp;gt;&lt;/font&gt;&lt;br/&gt;        &lt;font color='#8080ff'&gt;&amp;lt;!&lt;/font&gt;&lt;font color='#8080ff'&gt;-- property name="validator" ref="beanValidator"/ --&lt;/font&gt;&lt;font color='#8080ff'&gt;&amp;gt;&lt;/font&gt;&lt;br/&gt;        &lt;font color='#00ffff'&gt;&amp;lt;&lt;/font&gt;&lt;font color='#00ffff'&gt;property&lt;/font&gt;&lt;font color='#00ffff'&gt; &lt;/font&gt;&lt;font color='#00ff00'&gt;name&lt;/font&gt;=&lt;font color='#ff6060'&gt;"successView"&lt;/font&gt;&lt;font color='#00ffff'&gt; &lt;/font&gt;&lt;font color='#00ff00'&gt;value&lt;/font&gt;=&lt;font color='#ff6060'&gt;"redirect:catalogoestrategias.html"&lt;/font&gt;&lt;font color='#00ffff'&gt;/&amp;gt;&lt;/font&gt;&lt;br/&gt;        &lt;font color='#00ffff'&gt;&amp;lt;&lt;/font&gt;&lt;font color='#00ffff'&gt;property&lt;/font&gt;&lt;font color='#00ffff'&gt; &lt;/font&gt;&lt;font color='#00ff00'&gt;name&lt;/font&gt;=&lt;font color='#ff6060'&gt;"catalogoEstrategiasManager"&lt;/font&gt;&lt;font color='#00ffff'&gt; &lt;/font&gt;&lt;font color='#00ff00'&gt;ref&lt;/font&gt;=&lt;font color='#ff6060'&gt;"catalogoEstrategiasManager"&lt;/font&gt;&lt;font color='#00ffff'&gt;/&amp;gt;&lt;/font&gt;&lt;br/&gt;        &lt;font color='#00ffff'&gt;&amp;lt;&lt;/font&gt;&lt;font color='#00ffff'&gt;property&lt;/font&gt;&lt;font color='#00ffff'&gt; &lt;/font&gt;&lt;font color='#00ff00'&gt;name&lt;/font&gt;=&lt;font color='#ff6060'&gt;"userManager"&lt;/font&gt;&lt;font color='#00ffff'&gt; &lt;/font&gt;&lt;font color='#00ff00'&gt;ref&lt;/font&gt;=&lt;font color='#ff6060'&gt;"userManager"&lt;/font&gt;&lt;font color='#00ffff'&gt; /&amp;gt;&lt;/font&gt;&lt;br/&gt;        &lt;font color='#00ffff'&gt;&amp;lt;&lt;/font&gt;&lt;font color='#00ffff'&gt;property&lt;/font&gt;&lt;font color='#00ffff'&gt; &lt;/font&gt;&lt;font color='#00ff00'&gt;name&lt;/font&gt;=&lt;font color='#ff6060'&gt;"catalogoProgramasManager"&lt;/font&gt;&lt;font color='#00ffff'&gt; &lt;/font&gt;&lt;font color='#00ff00'&gt;ref&lt;/font&gt;=&lt;font color='#ff6060'&gt;"catalogoProgramasManager"&lt;/font&gt;&lt;font color='#00ffff'&gt; /&amp;gt;&lt;/font&gt;    &lt;br/&gt;    &lt;font color='#00ffff'&gt;&amp;lt;/bean&amp;gt;&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=55b25acf-3bcb-8ce5-86cd-e5e97ee62c9b' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-5107202308365501643?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/5107202308365501643/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=5107202308365501643' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/5107202308365501643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/5107202308365501643'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2010/02/neither-bindingresult-nor-plain-target.html' title='Neither BindingResult nor plain target object for bean name &amp;quot;command&amp;quot;...'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-6789837702895626617</id><published>2009-03-20T10:42:00.004-06:00</published><updated>2009-03-20T10:54:23.130-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Arreglando locale en Ubuntu 8.10 Intrepid</title><content type='html'>En una nueva instalación del Ubuntu Intrepid, en su versión a 64 bits, batallé dos días para arreglar el problema con el locale, principalmente con perl.&lt;br /&gt;&lt;br /&gt;El mensaje era el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;perl: warning: Setting locale failed.&lt;br /&gt;perl: warning: Please check that your locale settings:&lt;br /&gt;     LANGUAGE = "en_US:en",&lt;br /&gt;     LC_ALL = (unset),&lt;br /&gt;     LANG = "en_US.UTF-8"&lt;br /&gt; are supported and installed on your system.&lt;br /&gt;perl: warning: Falling back to the standard locale ("C").&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Intenté de varias formas arreglar el locale con:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# locale-gen en_US.UTF-8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;# update-locale en_US.UTF-8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;# update-locale-config en_US.UTF-8&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ajustando la configuración de "/etc/environment":&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"&lt;br /&gt;LANGUAGE="en_US:en"&lt;br /&gt;LANG="en_US.UTF-8"&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;y la configuración de "/etc/default/locale":&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;LANG=en_US.UTF-8&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Pero el error seguía, en mi estación también tengo el Intrepid instalado pero en su versión de 32 bits, y llegué a pensar que el problema venía en los paquetes de 64 bits.&lt;br /&gt;&lt;br /&gt;Buscando en google nunca dí con una solución clara al problema y entonces decidí buscar sin especificar la distribución de linuz, para obtener resultados más genéricos y encontré la línea que me ayudó a resolver el problema.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# localedef --no-archive -i en_US -c -f UTF-8 en_US.UTF-8&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;y después las subsecuentes...&lt;br /&gt;&lt;br /&gt;&lt;code&gt;# locale-gen en_US.UTF-8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;# update-locale en_US.UTF-8&lt;/code&gt;&lt;br /&gt;&lt;code&gt;# update-locale-config en_US.UTF-8&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;y problema resuelto.&lt;br /&gt;&lt;br /&gt;Lo copio aquí para próximas instalaciones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-6789837702895626617?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/6789837702895626617/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=6789837702895626617' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/6789837702895626617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/6789837702895626617'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2009/03/arreglando-locale-en-ubuntu-810.html' title='Arreglando locale en Ubuntu 8.10 Intrepid'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-7104901171552151717</id><published>2009-02-24T19:34:00.003-06:00</published><updated>2009-02-24T19:47:26.686-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux eclipse html'/><title type='text'>MyEclipse 7.0 y Visual HTML Designer</title><content type='html'>Es necesario de vez en cuando editar HTML y en Linux a la fecha no hay un editor decente, para mi.  Sé que existen y he usado el &lt;a href="http://quanta.kdewebdev.org/"&gt;Quanta+&lt;/a&gt; y el difunto &lt;a href="http://www.net2.com/nvu"&gt;NVU&lt;/a&gt;, pero ninguno de los dos se compara con el &lt;a href="http://www.adobe.com/products/dreamweaver/"&gt;Dreamweaver&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Entonces escribo código en Linux y luego hago los arreglos cosméticos en la Mac.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.myeclipseide.com/"&gt;MyEclipse&lt;/a&gt;, es la herramienta de desarrollo que más utilizo ahora, tiene un editor decente de html con preview, pero desde hace años sigue en modo "experimental" que es una forma de cubrirse por si tiene algún error.&lt;br /&gt;&lt;br /&gt;Lo puedo activar agregando al laucher &lt;code&gt;-Dlinux.experimental=true&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;En MyEclipse 7.0, se agrega al final de&lt;br /&gt;&lt;code&gt;~/Genuitec/MyEclipse 7.0/myeclipse.ini&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Quedando mi configuración así:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;-startup&lt;br /&gt;../Common/plugins/org.eclipse.equinox.launcher_1.0.101.R34x_v20080819.jar&lt;br /&gt;--launcher.library&lt;br /&gt;../Common/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.0.101.R34x_v20080805&lt;br /&gt;-clean&lt;br /&gt;-configuration&lt;br /&gt;/home/pablito/Genuitec/MyEclipse 7.0/configuration&lt;br /&gt;-vm&lt;br /&gt;/home/pablito/Genuitec/Common/binary/com.sun.java.jre.linux.x86_1.5.0.011/bin/java&lt;br /&gt;-vmargs&lt;br /&gt;-Xms256M&lt;br /&gt;-Xmx512M&lt;br /&gt;-XX:PermSize=128M&lt;br /&gt;-XX:MaxPermSize=256M&lt;br /&gt;-Dlinux.experimental=true&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;No olvidar instalar la librería &lt;span style="font-style: italic;"&gt;libstdc++5&lt;/span&gt; de lo contrario MyEclipse no arrancará arrojando un error poco claro.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-7104901171552151717?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/7104901171552151717/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=7104901171552151717' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/7104901171552151717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/7104901171552151717'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2009/02/myeclipse-70-y-visual-html-designer.html' title='MyEclipse 7.0 y Visual HTML Designer'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-7668230161672173948</id><published>2009-01-09T20:48:00.003-06:00</published><updated>2009-01-10T09:16:59.464-06:00</updated><title type='text'>Hibernate Annotations y DELETE_ORPHAN</title><content type='html'>DELETE_ORPHAN aún no es soportado por JPA, pero es una opción muy útil cuando manejamos colecciones.&lt;br /&gt;&lt;br /&gt;Afortunadamente Hibernate 3+ tiene esta opción.&lt;br /&gt;&lt;br /&gt;Agregamos "@OneToMany(cascade=CascadeType.ALL)" pero esta cascada no incluirá el borrado de registros huérfanos que después de algún tiempo se pueden aglutinar en la base de datos.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ff40ff"&gt;@OneToMany&lt;/font&gt;(cascade=CascadeType.ALL)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ff40ff"&gt;@Cascade&lt;/font&gt;({org.hibernate.annotations.CascadeType.DELETE_ORPHAN})&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#00ff00"&gt;public&lt;/font&gt;&amp;nbsp;List&amp;lt;BillDetails&amp;gt; getBillDetails()&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;return&lt;/font&gt;&amp;nbsp;billDetails;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-7668230161672173948?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/7668230161672173948/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=7668230161672173948' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/7668230161672173948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/7668230161672173948'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2009/01/hibernate-annotations-y-deleteorphan.html' title='Hibernate Annotations y DELETE_ORPHAN'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-8943925742341549459</id><published>2008-08-09T12:36:00.005-06:00</published><updated>2008-08-09T13:33:59.133-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='n800'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>Extendiendo la memoria virtual en el Nokia N800</title><content type='html'>La máxima memoria virtual del N800 es de 128KB, quiero agregar por lo menos 1GB que tomaré de la tarjeta interna.&lt;br /&gt;&lt;br /&gt;La SD interna es de 8GB y la tengo ocupada sólo con respaldos de contactos, correos etc.&lt;br /&gt;&lt;br /&gt;Entro como root desde mi desktop.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;hopper800:~# sfdisk -l /dev/mmcblk0&lt;br /&gt;&lt;br /&gt;Disk /dev/mmcblk0: 250112 cylinders, 4 heads, 16 sectors/track&lt;br /&gt;Warning: The partition table looks like it was made&lt;br /&gt;  for C/H/S=*/103/2 (instead of 250112/4/16).&lt;br /&gt;For this listing I'll assume that geometry.&lt;br /&gt;Units = cylinders of 105472 bytes, blocks of 1024 bytes, counting from 0&lt;br /&gt;&lt;br /&gt;   Device Boot Start     End   #cyls    #blocks   Id  System&lt;br /&gt;/dev/mmcblk0p1         39+  77704-  77665-   7999488    b  W95 FAT32&lt;br /&gt;  start: (c,h,s) expected (39,79,1) found (0,130,3)&lt;br /&gt;  end: (c,h,s) expected (1023,102,2) found (996,102,2)&lt;br /&gt;/dev/mmcblk0p2          0       -       0          0    0  Empty&lt;br /&gt;/dev/mmcblk0p3          0       -       0          0    0  Empty&lt;br /&gt;/dev/mmcblk0p4          0       -       0          0    0  Empty&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;El formato original de la tarjeta ocupa los 8GB en una partición FAT32.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;hopper800:~# sfdisk /dev/mmcblk0 -uM&lt;br /&gt;Checking that no-one is using this disk right now ...&lt;br /&gt;OK&lt;br /&gt;&lt;br /&gt;Disk /dev/mmcblk0: 250112 cylinders, 4 heads, 16 sectors/track&lt;br /&gt;Old situation:&lt;br /&gt;Units = mebibytes of 1048576 bytes, blocks of 1024 bytes, counting from 0&lt;br /&gt;&lt;br /&gt;   Device Boot Start   End    MiB    #blocks   Id  System&lt;br /&gt;/dev/mmcblk0p1         0+  6799   6800-   6963199+   b  W95 FAT32&lt;br /&gt;/dev/mmcblk0p2      6800   7815   1016    1040384   82  Linux swap / Solaris&lt;br /&gt;/dev/mmcblk0p3         0      -      0          0    0  Empty&lt;br /&gt;/dev/mmcblk0p4         0      -      0          0    0  Empty&lt;br /&gt;Input in the following format; absent fields get a default value.&lt;br /&gt;&lt;start&gt; &lt;size&gt; &lt;type [E,S,L,X,hex]&gt; &lt;bootable [-,*]&gt; &lt;c,h,s&gt; &lt;c,h,s&gt;&lt;br /&gt;Usually you only need to specify &lt;start&gt; and &lt;size&gt; (and perhaps &lt;type&gt;).&lt;br /&gt;&lt;br /&gt;/dev/mmcblk0p1 :0,6800,82&lt;br /&gt;/dev/mmcblk0p1         0+  6799   6800-   6963199+  82  Linux swap / Solaris&lt;br /&gt;/dev/mmcblk0p2 :,,83&lt;br /&gt;/dev/mmcblk0p2      6800   7815   1016    1040384   83  Linux&lt;br /&gt;/dev/mmcblk0p3 :&lt;br /&gt;/dev/mmcblk0p3         0      -      0          0    0  Empty&lt;br /&gt;/dev/mmcblk0p4 :&lt;br /&gt;/dev/mmcblk0p4         0      -      0          0    0  Empty&lt;br /&gt;New situation:&lt;br /&gt;Units = mebibytes of 1048576 bytes, blocks of 1024 bytes, counting from 0&lt;br /&gt;&lt;br /&gt;   Device Boot Start   End    MiB    #blocks   Id  System&lt;br /&gt;/dev/mmcblk0p1         0+  6799   6800-   6963199+  82  Linux swap / Solaris&lt;br /&gt;/dev/mmcblk0p2      6800   7815   1016    1040384   83  Linux&lt;br /&gt;/dev/mmcblk0p3         0      -      0          0    0  Empty&lt;br /&gt;/dev/mmcblk0p4         0      -      0          0    0  Empty&lt;br /&gt;Warning: no primary partition is marked bootable (active)&lt;br /&gt;This does not matter for LILO, but the DOS MBR will not boot this disk.&lt;br /&gt;Do you want to write this to disk? [ynq] y&lt;br /&gt;Successfully wrote the new partition table&lt;br /&gt;&lt;br /&gt;Re-reading the partition table ...&lt;br /&gt;&lt;br /&gt;If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)&lt;br /&gt;to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1&lt;br /&gt;(See fdisk(8).)&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;El tamaño de la tarjeta no es exactamente 8GB asi que ajusto el tamaño como sigue:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;/dev/mmcblk0p1 :0,6800,82&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Partición tipo 82 (linux), el resto lo dejo como swap, tipo 83&lt;br /&gt;&lt;br /&gt;&lt;code&gt;/dev/mmcblk0p2 :,,83&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ahora doy formato a la partición swap:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;hopper800:~# mkswap /dev/mmcblk0&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Checo con &lt;b&gt;free&lt;/b&gt; si lo tengo lo hice bien.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;hopper800:~# free&lt;br /&gt;              total         used         free       shared      buffers&lt;br /&gt;  Mem:       126796       113880        12916            0         7712&lt;br /&gt; Swap:      1040376            0      1040376&lt;br /&gt;Total:      1167172       113880      1053292&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Aparentemete el sistema me reconoce el swap de 1GB. weeeeee! y además es de tipo swap cosa que le ahorrará mucho proceso por no pasar por el sistema de archivos FAT32.&lt;br /&gt;&lt;br /&gt;Ahora cada vez que se reinicie el tablet se perderá este swap, lo mejor es configurarlo para que se monte automáticamente.&lt;br /&gt;&lt;br /&gt;Lo podemos agregar en /etc/fstab para que lo carge cada vez que se reinicie.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;hopper800:~# cat /etc/fstab &lt;br /&gt;rootfs /  rootfs defaults,errors=remount-ro,noatime 0 0&lt;br /&gt;/dev/mmcblk0p1  /media/mmc1 vfat rw,noauto,nodev,noexec,nosuid,utf8,uid=29999 0 0&lt;br /&gt;/dev/mmcblk0p2 none swap sw 0 0&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Luego agregar la siguiente línea antes del &lt;i&gt;exit 0&lt;/i&gt; en &lt;b&gt;/etc/init.d/rcS &lt;/b&gt;:&lt;br /&gt;&lt;code&gt;swapon -a&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;OK &lt;b&gt;swap&lt;/b&gt; listo, ahora el resto de la tarjeta la formateamos como ext2, más eficiente que FAT32.&lt;br /&gt;&lt;br /&gt;Tenemos que instalar las librerías necesarias por que no están incluídas por default en el OS2008.Diablo.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;hopper800:~# apt-get install e2fsprogs&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ahora podemos formatear nuestra partición&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;hopper800:~# mkfs.ext2 /dev/mmcblk0p1 &lt;br /&gt;mke2fs 1.37 (21-Mar-2005)&lt;br /&gt;Filesystem label=&lt;br /&gt;OS type: Linux&lt;br /&gt;Block size=4096 (log=2)&lt;br /&gt;Fragment size=4096 (log=2)&lt;br /&gt;870912 inodes, 1740799 blocks&lt;br /&gt;87039 blocks (5.00%) reserved for the super user&lt;br /&gt;First data block=0&lt;br /&gt;54 block groups&lt;br /&gt;32768 blocks per group, 32768 fragments per group&lt;br /&gt;16128 inodes per group&lt;br /&gt;Superblock backups stored on blocks: &lt;br /&gt; 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632&lt;br /&gt;&lt;br /&gt;Writing inode tables: done                            &lt;br /&gt;Writing superblocks and filesystem accounting information: done&lt;br /&gt;&lt;br /&gt;This filesystem will be automatically checked every 32 mounts or&lt;br /&gt;180 days, whichever comes first.  Use tune2fs -c or -i to override.&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Esta partición se monta automáticamente.&lt;br /&gt;&lt;br /&gt;Espero que el desempeño de mi tablet mejore con esta configuración.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-8943925742341549459?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/8943925742341549459/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=8943925742341549459' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/8943925742341549459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/8943925742341549459'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2008/08/extendiendo-la-memoria-virtual-en-el.html' title='Extendiendo la memoria virtual en el Nokia N800'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-4824940523789661822</id><published>2008-07-21T14:36:00.004-06:00</published><updated>2008-07-21T16:51:07.555-06:00</updated><title type='text'>Agregando librerías al proyecto en Maven 2</title><content type='html'>Desarrollando una aplicación para facturación digital, requiero de aplicar un sello de seguridad y la librería de la cual depende ese método no está en los repositorios de Maven2, si quiero mantener el control con Maven2 debo de incluir esta librería al repositorio local.&lt;br /&gt;&lt;br /&gt;La librería es &lt;a href="http://juliusdavies.ca/commons-ssl/"&gt;Not-Yet-Commons-SSL&lt;/a&gt;, que maneja varios protocolos de seguridad y llaves.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paso 1:&lt;/span&gt;&lt;br /&gt;Bajar el jar a un direcotorio temporal.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;curl -C - -O http://juliusdavies.ca/commons-ssl/not-yet-commons-ssl-0.3.10.jar&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;small&gt;*No tengo el wget a la mano en Leopard, así que lo bajé con curl&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paso 2:&lt;/span&gt;&lt;br /&gt;Lo agregamos en el repositorio local de Maven2&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn install:install-file -Dfile=not-yet-commons-ssl-0.3.10.jar -DgroupId=org.apache.commons -DartifactId=not-yet-commons-ssl -Dversion=0.3.10 -Dpackaging=jar&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Paso 3:&lt;/span&gt;&lt;br /&gt;Lo ponemos como dependiencia en nuestro proyecto&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;dependency&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;groupId&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt;org.apache.commons&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;artifactId&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt;not-yet-commons-ssl&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;version&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt;0.3.10&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;scope&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt;compile&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Como uso Eclipse, tengo que volver a ejecutar &lt;code&gt;mvn install eclipse:eclipse&lt;/code&gt; para que la librería sea instalada.&lt;br /&gt;Listo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-4824940523789661822?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/4824940523789661822/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=4824940523789661822' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/4824940523789661822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/4824940523789661822'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2008/07/agregando-libreras-al-proyecto-en-maven.html' title='Agregando librerías al proyecto en Maven 2'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-4398433805293272625</id><published>2008-05-23T22:45:00.004-06:00</published><updated>2008-05-23T22:53:15.506-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jstl'/><category scheme='http://www.blogger.com/atom/ns#' term='jsp'/><category scheme='http://www.blogger.com/atom/ns#' term='displaytag'/><category scheme='http://www.blogger.com/atom/ns#' term='appfuse'/><title type='text'>DisplayTag y TableDecorator</title><content type='html'>DisplayTag es una librería comúnmente utilizada en Spring-MVC y facilita muchísimo el despliegue de información en tablas.&lt;br /&gt;&lt;br /&gt;TableDecorator es una clase, que extendida, permite customizar la salida y presentación de las propiedades del objeto listado.&lt;br /&gt;&lt;br /&gt;Por ejemplo.  Tengo el siguiente objeto.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;@Entity&lt;/font&gt;&lt;br /&gt;&lt;font color="#00ff00"&gt;public&lt;/font&gt; &lt;font color="#00ff00"&gt;class&lt;/font&gt; Partida &lt;font color="#00ff00"&gt;extends&lt;/font&gt; BaseObject &lt;font color="#00ff00"&gt;implements&lt;/font&gt; Serializable {&lt;br /&gt;        &lt;font color="#00ff00"&gt;private&lt;/font&gt; &lt;font color="#00ff00"&gt;static&lt;/font&gt; &lt;font color="#00ff00"&gt;final&lt;/font&gt; &lt;font color="#00ff00"&gt;long&lt;/font&gt; serialVersionUID = -&lt;font color="#ff6060"&gt;3392581174026724271L&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;private&lt;/font&gt; Long id;&lt;br /&gt;        &lt;font color="#00ff00"&gt;private&lt;/font&gt; User user;&lt;br /&gt;        &lt;font color="#00ff00"&gt;private&lt;/font&gt; EntidadFederativa estado;&lt;br /&gt;        &lt;font color="#00ff00"&gt;private&lt;/font&gt; Intervencion intervencion;&lt;br /&gt;        &lt;font color="#00ff00"&gt;private&lt;/font&gt; FuenteFinanciamiento ff;&lt;br /&gt;        &lt;font color="#00ff00"&gt;private&lt;/font&gt; CatalogoPartidas partida;&lt;br /&gt;        &lt;font color="#00ff00"&gt;private&lt;/font&gt; Double recurso;&lt;br /&gt;        &lt;font color="#00ff00"&gt;private&lt;/font&gt; Boolean compraconsolidada;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#ff40ff"&gt;@Id&lt;/font&gt; &lt;font color="#ff40ff"&gt;@GeneratedValue&lt;/font&gt;(strategy=GenerationType.AUTO)&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; Long getId() {&lt;br /&gt;                &lt;font color="#ffff00"&gt;return&lt;/font&gt; id;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#ff40ff"&gt;@ManyToOne&lt;/font&gt;(fetch=FetchType.EAGER)&lt;br /&gt;        &lt;font color="#ff40ff"&gt;@JoinColumn&lt;/font&gt;(name=&lt;font color="#ff6060"&gt;&amp;quot;user_id&amp;quot;&lt;/font&gt;,nullable=&lt;font color="#ff6060"&gt;false&lt;/font&gt;)&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; User getUser() {&lt;br /&gt;                &lt;font color="#ffff00"&gt;return&lt;/font&gt; user;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#ff40ff"&gt;@ManyToOne&lt;/font&gt;(fetch=FetchType.EAGER)&lt;br /&gt;        &lt;font color="#ff40ff"&gt;@JoinColumn&lt;/font&gt;(name=&lt;font color="#ff6060"&gt;&amp;quot;estado_id&amp;quot;&lt;/font&gt;,nullable=&lt;font color="#ff6060"&gt;false&lt;/font&gt;)&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; EntidadFederativa getEstado() {&lt;br /&gt;                &lt;font color="#ffff00"&gt;return&lt;/font&gt; estado;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#ff40ff"&gt;@ManyToOne&lt;/font&gt;(fetch=FetchType.EAGER)&lt;br /&gt;        &lt;font color="#ff40ff"&gt;@JoinColumn&lt;/font&gt;(name=&lt;font color="#ff6060"&gt;&amp;quot;intervencion_id&amp;quot;&lt;/font&gt;,nullable=&lt;font color="#ff6060"&gt;false&lt;/font&gt;)&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; Intervencion getIntervencion() {&lt;br /&gt;                &lt;font color="#ffff00"&gt;return&lt;/font&gt; intervencion;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#ff40ff"&gt;@ManyToOne&lt;/font&gt;(fetch=FetchType.EAGER)&lt;br /&gt;        &lt;font color="#ff40ff"&gt;@JoinColumn&lt;/font&gt;(name=&lt;font color="#ff6060"&gt;&amp;quot;ff_id&amp;quot;&lt;/font&gt;,nullable=&lt;font color="#ff6060"&gt;false&lt;/font&gt;)&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; FuenteFinanciamiento getFf() {&lt;br /&gt;                &lt;font color="#ffff00"&gt;return&lt;/font&gt; ff;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#ff40ff"&gt;@ManyToOne&lt;/font&gt;(fetch=FetchType.EAGER)&lt;br /&gt;        &lt;font color="#ff40ff"&gt;@JoinColumn&lt;/font&gt;(name=&lt;font color="#ff6060"&gt;&amp;quot;partida_id&amp;quot;&lt;/font&gt;,nullable=&lt;font color="#ff6060"&gt;false&lt;/font&gt;)&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; CatalogoPartidas getPartida() {&lt;br /&gt;                &lt;font color="#ffff00"&gt;return&lt;/font&gt; partida;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; Double getRecurso() {&lt;br /&gt;                &lt;font color="#ffff00"&gt;return&lt;/font&gt; recurso;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; Boolean getCompraconsolidada() {&lt;br /&gt;                &lt;font color="#ffff00"&gt;return&lt;/font&gt; compraconsolidada;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; &lt;font color="#00ff00"&gt;void&lt;/font&gt; setId(Long id) {&lt;br /&gt;                &lt;font color="#00ff00"&gt;this&lt;/font&gt;.id = id;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; &lt;font color="#00ff00"&gt;void&lt;/font&gt; setUser(User user) {&lt;br /&gt;                &lt;font color="#00ff00"&gt;this&lt;/font&gt;.user = user;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; &lt;font color="#00ff00"&gt;void&lt;/font&gt; setEstado(EntidadFederativa estado) {&lt;br /&gt;                &lt;font color="#00ff00"&gt;this&lt;/font&gt;.estado = estado;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; &lt;font color="#00ff00"&gt;void&lt;/font&gt; setIntervencion(Intervencion intervencion) {&lt;br /&gt;                &lt;font color="#00ff00"&gt;this&lt;/font&gt;.intervencion = intervencion;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; &lt;font color="#00ff00"&gt;void&lt;/font&gt; setFf(FuenteFinanciamiento ff) {&lt;br /&gt;                &lt;font color="#00ff00"&gt;this&lt;/font&gt;.ff = ff;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; &lt;font color="#00ff00"&gt;void&lt;/font&gt; setPartida(CatalogoPartidas partida) {&lt;br /&gt;                &lt;font color="#00ff00"&gt;this&lt;/font&gt;.partida = partida;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; &lt;font color="#00ff00"&gt;void&lt;/font&gt; setRecurso(Double recurso) {&lt;br /&gt;                &lt;font color="#00ff00"&gt;this&lt;/font&gt;.recurso = recurso;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; &lt;font color="#00ff00"&gt;void&lt;/font&gt; setCompraconsolidada(Boolean compraconsolidada) {&lt;br /&gt;                &lt;font color="#00ff00"&gt;this&lt;/font&gt;.compraconsolidada = compraconsolidada;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#ff40ff"&gt;@Override&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; &lt;font color="#00ff00"&gt;boolean&lt;/font&gt; equals(Object obj) {&lt;br /&gt;                &lt;font color="#ffff00"&gt;if&lt;/font&gt; (&lt;font color="#00ff00"&gt;this&lt;/font&gt; == obj)&lt;br /&gt;                        &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;true&lt;/font&gt;;&lt;br /&gt;                &lt;font color="#ffff00"&gt;if&lt;/font&gt; (getClass() != obj.getClass())&lt;br /&gt;                        &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                &lt;font color="#00ff00"&gt;final&lt;/font&gt; Partida other = (Partida) obj;&lt;br /&gt;                &lt;font color="#ffff00"&gt;if&lt;/font&gt; (compraconsolidada == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) {&lt;br /&gt;                        &lt;font color="#ffff00"&gt;if&lt;/font&gt; (other.compraconsolidada != &lt;font color="#ff6060"&gt;null&lt;/font&gt;)&lt;br /&gt;                                &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                } &lt;font color="#ffff00"&gt;else&lt;/font&gt; &lt;font color="#ffff00"&gt;if&lt;/font&gt; (!compraconsolidada.equals(other.compraconsolidada))&lt;br /&gt;                        &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                &lt;font color="#ffff00"&gt;if&lt;/font&gt; (estado == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) {&lt;br /&gt;                        &lt;font color="#ffff00"&gt;if&lt;/font&gt; (other.estado != &lt;font color="#ff6060"&gt;null&lt;/font&gt;)&lt;br /&gt;                                &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                } &lt;font color="#ffff00"&gt;else&lt;/font&gt; &lt;font color="#ffff00"&gt;if&lt;/font&gt; (!estado.equals(other.estado))&lt;br /&gt;                        &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                &lt;font color="#ffff00"&gt;if&lt;/font&gt; (ff == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) {&lt;br /&gt;                        &lt;font color="#ffff00"&gt;if&lt;/font&gt; (other.ff != &lt;font color="#ff6060"&gt;null&lt;/font&gt;)&lt;br /&gt;                                &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                } &lt;font color="#ffff00"&gt;else&lt;/font&gt; &lt;font color="#ffff00"&gt;if&lt;/font&gt; (!ff.equals(other.ff))&lt;br /&gt;                        &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                &lt;font color="#ffff00"&gt;if&lt;/font&gt; (id == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) {&lt;br /&gt;                        &lt;font color="#ffff00"&gt;if&lt;/font&gt; (other.id != &lt;font color="#ff6060"&gt;null&lt;/font&gt;)&lt;br /&gt;                                &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                } &lt;font color="#ffff00"&gt;else&lt;/font&gt; &lt;font color="#ffff00"&gt;if&lt;/font&gt; (!id.equals(other.id))&lt;br /&gt;                        &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                &lt;font color="#ffff00"&gt;if&lt;/font&gt; (intervencion == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) {&lt;br /&gt;                        &lt;font color="#ffff00"&gt;if&lt;/font&gt; (other.intervencion != &lt;font color="#ff6060"&gt;null&lt;/font&gt;)&lt;br /&gt;                                &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                } &lt;font color="#ffff00"&gt;else&lt;/font&gt; &lt;font color="#ffff00"&gt;if&lt;/font&gt; (!intervencion.equals(other.intervencion))&lt;br /&gt;                        &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                &lt;font color="#ffff00"&gt;if&lt;/font&gt; (partida == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) {&lt;br /&gt;                        &lt;font color="#ffff00"&gt;if&lt;/font&gt; (other.partida != &lt;font color="#ff6060"&gt;null&lt;/font&gt;)&lt;br /&gt;                                &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                } &lt;font color="#ffff00"&gt;else&lt;/font&gt; &lt;font color="#ffff00"&gt;if&lt;/font&gt; (!partida.equals(other.partida))&lt;br /&gt;                        &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                &lt;font color="#ffff00"&gt;if&lt;/font&gt; (recurso == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) {&lt;br /&gt;                        &lt;font color="#ffff00"&gt;if&lt;/font&gt; (other.recurso != &lt;font color="#ff6060"&gt;null&lt;/font&gt;)&lt;br /&gt;                                &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                } &lt;font color="#ffff00"&gt;else&lt;/font&gt; &lt;font color="#ffff00"&gt;if&lt;/font&gt; (!recurso.equals(other.recurso))&lt;br /&gt;                        &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                &lt;font color="#ffff00"&gt;if&lt;/font&gt; (user == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) {&lt;br /&gt;                        &lt;font color="#ffff00"&gt;if&lt;/font&gt; (other.user != &lt;font color="#ff6060"&gt;null&lt;/font&gt;)&lt;br /&gt;                                &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                } &lt;font color="#ffff00"&gt;else&lt;/font&gt; &lt;font color="#ffff00"&gt;if&lt;/font&gt; (!user.equals(other.user))&lt;br /&gt;                        &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;false&lt;/font&gt;;&lt;br /&gt;                &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;true&lt;/font&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#ff40ff"&gt;@Override&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; &lt;font color="#00ff00"&gt;int&lt;/font&gt; hashCode() {&lt;br /&gt;                &lt;font color="#00ff00"&gt;final&lt;/font&gt; &lt;font color="#00ff00"&gt;int&lt;/font&gt; prime = &lt;font color="#ff6060"&gt;31&lt;/font&gt;;&lt;br /&gt;                &lt;font color="#00ff00"&gt;int&lt;/font&gt; result = &lt;font color="#ff6060"&gt;1&lt;/font&gt;;&lt;br /&gt;                result = prime&lt;br /&gt;                                * result&lt;br /&gt;                                + ((compraconsolidada == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) ? &lt;font color="#ff6060"&gt;0&lt;/font&gt; : compraconsolidada&lt;br /&gt;                                                .hashCode());&lt;br /&gt;                result = prime * result + ((estado == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) ? &lt;font color="#ff6060"&gt;0&lt;/font&gt; : estado.hashCode());&lt;br /&gt;                result = prime * result + ((ff == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) ? &lt;font color="#ff6060"&gt;0&lt;/font&gt; : ff.hashCode());&lt;br /&gt;                result = prime * result + ((id == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) ? &lt;font color="#ff6060"&gt;0&lt;/font&gt; : id.hashCode());&lt;br /&gt;                result = prime * result&lt;br /&gt;                                + ((intervencion == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) ? &lt;font color="#ff6060"&gt;0&lt;/font&gt; : intervencion.hashCode());&lt;br /&gt;                result = prime * result + ((partida == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) ? &lt;font color="#ff6060"&gt;0&lt;/font&gt; : partida.hashCode());&lt;br /&gt;                result = prime * result + ((recurso == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) ? &lt;font color="#ff6060"&gt;0&lt;/font&gt; : recurso.hashCode());&lt;br /&gt;                result = prime * result + ((user == &lt;font color="#ff6060"&gt;null&lt;/font&gt;) ? &lt;font color="#ff6060"&gt;0&lt;/font&gt; : user.hashCode());&lt;br /&gt;                &lt;font color="#ffff00"&gt;return&lt;/font&gt; result;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;/**&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;         &lt;/font&gt;&lt;font color="#8080ff"&gt;* &lt;/font&gt;&lt;font color="#ff40ff"&gt;@see &lt;/font&gt;&lt;font color="#00ffff"&gt;java.lang.Object#toString&lt;/font&gt;&lt;font color="#8080ff"&gt;()&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;         */&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; String toString() {&lt;br /&gt;                &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ffff00"&gt;new&lt;/font&gt; ToStringBuilder(&lt;font color="#00ff00"&gt;this&lt;/font&gt;).append(&lt;font color="#ff6060"&gt;&amp;quot;compraconsolidada&amp;quot;&lt;/font&gt;,&lt;br /&gt;                                &lt;font color="#00ff00"&gt;this&lt;/font&gt;.compraconsolidada).append(&lt;font color="#ff6060"&gt;&amp;quot;estado&amp;quot;&lt;/font&gt;, &lt;font color="#00ff00"&gt;this&lt;/font&gt;.estado).append(&lt;br /&gt;                                &lt;font color="#ff6060"&gt;&amp;quot;id&amp;quot;&lt;/font&gt;, &lt;font color="#00ff00"&gt;this&lt;/font&gt;.id).append(&lt;font color="#ff6060"&gt;&amp;quot;intervencion&amp;quot;&lt;/font&gt;, &lt;font color="#00ff00"&gt;this&lt;/font&gt;.intervencion)&lt;br /&gt;                                .append(&lt;font color="#ff6060"&gt;&amp;quot;user&amp;quot;&lt;/font&gt;, &lt;font color="#00ff00"&gt;this&lt;/font&gt;.user).append(&lt;font color="#ff6060"&gt;&amp;quot;ff&amp;quot;&lt;/font&gt;, &lt;font color="#00ff00"&gt;this&lt;/font&gt;.ff).append(&lt;br /&gt;                                                &lt;font color="#ff6060"&gt;&amp;quot;recurso&amp;quot;&lt;/font&gt;, &lt;font color="#00ff00"&gt;this&lt;/font&gt;.recurso)&lt;br /&gt;                                .append(&lt;font color="#ff6060"&gt;&amp;quot;partida&amp;quot;&lt;/font&gt;, &lt;font color="#00ff00"&gt;this&lt;/font&gt;.partida).toString();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;y la siguiente tabla&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;display&lt;font color="#00ffff"&gt;:table &lt;/font&gt;&lt;font color="#00ff00"&gt;name&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;partidaList&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; &lt;/font&gt;&lt;font color="#00ff00"&gt;class&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;table&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; &lt;/font&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;                &lt;/font&gt;&lt;font color="#00ff00"&gt;style&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;width: 100%&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; &lt;/font&gt;&lt;font color="#00ff00"&gt;id&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;partidaList&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; export=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;true&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; pagesize=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;25&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;display&lt;font color="#00ffff"&gt;:column property=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;id&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; &lt;/font&gt;&lt;font color="#00ff00"&gt;media&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;csv excel xml pdf&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;                        titleKey=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;partida.id&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; /&amp;gt;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;display&lt;font color="#00ffff"&gt;:column property=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;ff&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; titleKey=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;partida.ff&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; /&amp;gt;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;display&lt;font color="#00ffff"&gt;:column&amp;gt;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;display&lt;font color="#00ffff"&gt;:column property=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;partida.id&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; titleKey=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;partida.id&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;display&lt;font color="#00ffff"&gt;:column&amp;gt;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;display&lt;font color="#00ffff"&gt;:column property=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;partida.nombre&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; titleKey=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;partida.nombre&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;display&lt;font color="#00ffff"&gt;:column&amp;gt;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;display&lt;font color="#00ffff"&gt;:column property=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;recurso&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; titleKey=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;partida.recurso&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;display&lt;font color="#00ffff"&gt;:column&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;display&lt;font color="#00ffff"&gt;:table&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Me despliega los datos de manera muy simple&lt;br /&gt;&lt;img src="http://lh4.ggpht.com/kandarv/SDeV3hIyK-I/AAAAAAAAACI/RljhZ-MYlyY/%5BUNSET%5D.png"/&gt;&lt;br /&gt;&lt;br /&gt;La columna del recurso (dinero) se ve mal.&lt;br /&gt;&lt;br /&gt;Extendemos ahora la clase TableDecorator.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#00ff00"&gt;public&lt;/font&gt; &lt;font color="#00ff00"&gt;class&lt;/font&gt; WrapperPartida &lt;font color="#00ff00"&gt;extends&lt;/font&gt; TableDecorator {&lt;br /&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;/**&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;         *&lt;/font&gt;&lt;font color="#ff40ff"&gt; DecimalFormat usado para dar formato a getRecurso().&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;         */&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;private&lt;/font&gt; DecimalFormat moneyFormat;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;/**&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;         *&lt;/font&gt;&lt;font color="#ff40ff"&gt; Constructor que asigna el formato, según documentación hace más eficiente la clase&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff40ff"&gt;         &lt;/font&gt;&lt;font color="#8080ff"&gt;*/&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; WrapperPartida() {&lt;br /&gt;                &lt;font color="#00ff00"&gt;super&lt;/font&gt;();&lt;br /&gt;&lt;br /&gt;                &lt;font color="#00ff00"&gt;this&lt;/font&gt;.moneyFormat = &lt;font color="#ffff00"&gt;new&lt;/font&gt; DecimalFormat(&lt;font color="#ff6060"&gt;&amp;quot;$ #,###,###.00&amp;quot;&lt;/font&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;/**&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;         *&lt;/font&gt;&lt;font color="#ff40ff"&gt; Método para regresar nulos&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;         *&lt;/font&gt;&lt;font color="#ff40ff"&gt; &lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;         &lt;/font&gt;&lt;font color="#8080ff"&gt;* &lt;/font&gt;&lt;font color="#ff40ff"&gt;@return&lt;/font&gt;&lt;font color="#8080ff"&gt; &lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ffff00"&gt;code&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#8080ff"&gt;null&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#ffff00"&gt;code&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;         */&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; String getNullValue() {&lt;br /&gt;                &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#ff6060"&gt;null&lt;/font&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;font color="#8080ff"&gt;/**&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;         *&lt;/font&gt;&lt;font color="#ff40ff"&gt; Damos formato al dinero como un String $ #,###,###.format.&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;         * Estamos tomando directamente del objeto tipo Partida, la propiedad recurso&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;         * &lt;/font&gt;&lt;font color="#ff40ff"&gt;@return&lt;/font&gt;&lt;font color="#8080ff"&gt; String&lt;/font&gt;&lt;br /&gt;&lt;font color="#8080ff"&gt;         */&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ff00"&gt;public&lt;/font&gt; String getRecurso() {&lt;br /&gt;                &lt;font color="#ffff00"&gt;return&lt;/font&gt; &lt;font color="#00ff00"&gt;this&lt;/font&gt;.moneyFormat.format(((Partida) &lt;font color="#00ff00"&gt;this&lt;/font&gt;.getCurrentRowObject())&lt;br /&gt;                                .getRecurso());&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Ahora agregamos el decorator a la tabla en la declaración y además ponemos el total de los recursos asignados.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;font color="#00ffff"&gt;  decorator=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;com.deuxbits.ssaspps.webapp.decorator.WrapperPartida&amp;quot;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Para totalizar los recursos, debemos declarar una variable que almacene los totales.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;font color="#00ffff"&gt; varTotals=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;totals&amp;quot;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;y activar la operacion en las columnas que queramos, para este ejemplo, sólo la de recurso.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;display&lt;font color="#00ffff"&gt;:column property=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;recurso&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; titleKey=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;partida.recurso&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;    &lt;/font&gt;&lt;font color="#00ff00"&gt;class&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;textright&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; total=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;true&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;display&lt;font color="#00ffff"&gt;:column&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Al final queremos mostrar el total ¿no? para ello utilizamos otro tag de la librería&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;  &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;display&lt;font color="#00ffff"&gt;:footer&amp;gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ffff00"&gt;tr&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&amp;amp;nbsp;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&amp;amp;nbsp;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;Total&lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt; &lt;/font&gt;&lt;font color="#00ff00"&gt;class&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;textright&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;fmt&lt;font color="#00ffff"&gt;:formatNumber &lt;/font&gt;&lt;font color="#00ff00"&gt;value&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;${totals.column4}&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; &lt;/font&gt;&lt;font color="#00ff00"&gt;type&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;currency&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; currencyCode=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;USD&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; /&amp;gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ffff00"&gt;tr&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;display&lt;font color="#00ffff"&gt;:footer&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Todo junto queda así:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;display&lt;font color="#00ffff"&gt;:table &lt;/font&gt;&lt;font color="#00ff00"&gt;name&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;partidaList&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; &lt;/font&gt;&lt;font color="#00ff00"&gt;class&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;table&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; requestURI=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; varTotals=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;totals&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;  &lt;/font&gt;&lt;font color="#00ff00"&gt;style&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;width: 100%&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; &lt;/font&gt;&lt;font color="#00ff00"&gt;id&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;partidaList&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; export=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;true&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; pagesize=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;25&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;  decorator=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;com.deuxbits.ssaspps.webapp.decorator.WrapperPartida&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;display&lt;font color="#00ffff"&gt;:column property=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;recurso&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; titleKey=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;partida.recurso&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;    &lt;/font&gt;&lt;font color="#00ff00"&gt;class&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;textright&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; total=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;true&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;display&lt;font color="#00ffff"&gt;:column&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;display&lt;font color="#00ffff"&gt;:footer&amp;gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ffff00"&gt;tr&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&amp;lt;&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&amp;amp;nbsp;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#ff40ff"&gt;&amp;amp;nbsp;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;Total&lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt; &lt;/font&gt;&lt;font color="#00ff00"&gt;class&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;textright&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;fmt&lt;font color="#00ffff"&gt;:formatNumber &lt;/font&gt;&lt;font color="#00ff00"&gt;value&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;${totals.column4}&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; &lt;/font&gt;&lt;font color="#00ff00"&gt;type&lt;/font&gt;&lt;font color="#00ffff"&gt;=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;currency&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; currencyCode=&lt;/font&gt;&lt;font color="#ff6060"&gt;&amp;quot;USD&amp;quot;&lt;/font&gt;&lt;font color="#00ffff"&gt; /&amp;gt;&lt;/font&gt;&lt;br /&gt;      &lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#ffff00"&gt;td&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#00ffff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#ffff00"&gt;tr&lt;/font&gt;&lt;font color="#00ffff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;  &lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;display&lt;font color="#00ffff"&gt;:footer&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#00ffff"&gt;&amp;lt;/&lt;/font&gt;display&lt;font color="#00ffff"&gt;:table&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Mostrando la tabla de la siguiente manera:&lt;br /&gt;&lt;img src="http://lh5.ggpht.com/kandarv/SDedVxIyK_I/AAAAAAAAACQ/2C-yK7x-DfI/%5BUNSET%5D.png"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-4398433805293272625?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/4398433805293272625/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=4398433805293272625' title='7 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/4398433805293272625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/4398433805293272625'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2008/05/displaytag-y-tabledecorator.html' title='DisplayTag y TableDecorator'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/kandarv/SDeV3hIyK-I/AAAAAAAAACI/RljhZ-MYlyY/s72-c/%5BUNSET%5D.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-4303152956683126766</id><published>2008-04-23T18:28:00.005-06:00</published><updated>2008-04-23T18:45:01.499-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>SVN Keywords</title><content type='html'>Para poner datos como versión, autor y última actualización dentro de los fuentes es necesario decirle a svn.&lt;br /&gt;&lt;br /&gt;Una manera rápida de hacerlo es creando un archivo &lt;span style="font-weight: bold;"&gt;.keywords&lt;/span&gt; en la raíz del proyecto con el siguiente contenido.&lt;br /&gt;&lt;pre&gt;Author&lt;br /&gt;Rev&lt;br /&gt;Id&lt;br /&gt;Date&lt;/pre&gt;Luego indicar a svn que queremos llevar esos keywords en todos los archivos del proyecto.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;$ svn -R propset svn:keywords -F .keywords *&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Agregamos una cabecera para los archivos fuentes parecida a esta&lt;br /&gt;&lt;pre&gt;/**&lt;br /&gt; * Archivo.java &lt;br /&gt; * $Rev::                               $:  Revision of last commit&lt;br /&gt; * $Author::                            $:  Author of last commit&lt;br /&gt; * $Date$:&lt;br /&gt; */&lt;/pre&gt;&lt;br /&gt;Y damos un commit a todo el proyecto&lt;blockquote&gt;&lt;pre&gt;$ svn ci -m"Setting keywords"&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Mas información en &lt;a href="http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.keywords.html"&gt;svnbook&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-4303152956683126766?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/4303152956683126766/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=4303152956683126766' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/4303152956683126766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/4303152956683126766'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2008/04/svn-keywords.html' title='SVN Keywords'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-4921844184436699705</id><published>2008-04-16T20:20:00.006-06:00</published><updated>2008-04-23T18:28:10.146-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><title type='text'>Multiples instancias de Tomcat</title><content type='html'>Para correr multiples instancias de Tomcat en el mismo servidor.&lt;br /&gt;&lt;br /&gt;Tengo un Tomcat instalado en un RHEL5 en /opt/apache-tomcat-5.5.23 con una liga simbólica de /opt/tomcat5&lt;br /&gt;Dentro de esta instalación en /opt/tomcat5/conf/server.xml tengo configurados varias aplicaciones.  Teniendo varias desventajas.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Si una aplicación consume muchos recursos, todas las demás bajan de rendimiento.&lt;/li&gt;&lt;li&gt;Si una aplicación congela el JVM, las demás dejan de funcionar también.&lt;/li&gt;&lt;/ul&gt;No es práctico tener una instancia para cada aplicación, sobre todo cuando estas son pequeñas soluciones.&lt;br /&gt;&lt;br /&gt;Ahora estoy desarrollando para Tomcat 6 y no quise migrar todas la aplicaciones ya configuradas y probadas en Tomcat 5.5.&lt;br /&gt;&lt;br /&gt;Cree un directorio nuevo /var/tomcat y extraje el último Tomcat 6 en /var/tomcat/apache-tomcat-6.0.16&lt;br /&gt;Cree otro directorio, exclusivo para mi instancia lo llamé serverB (pensando en que luego habrá un serverA y un serverC) y cree el siguiente árbol.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;|-- conf&lt;br /&gt;|   |-- server.xml&lt;br /&gt;|   |-- tomcat-users.xml&lt;br /&gt;|   `-- web.xml&lt;br /&gt;|-- logs&lt;br /&gt;|   `-- catalina.out&lt;br /&gt;|-- temp&lt;br /&gt;|-- webapps&lt;br /&gt;`-- work&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Ahora viene lo bueno.&lt;br /&gt;Para correr la instancia y que no choque con la que ya está corriendo, hay que cambiar algunos puertos.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;Service&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;name&lt;/span&gt;=&lt;span style="color: rgb(255, 96, 96);"&gt;"Catalina"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;Connector&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;port&lt;/span&gt;=&lt;span style="color: rgb(255, 96, 96);"&gt;"8082"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;URIEncoding&lt;/span&gt;=&lt;span style="color: rgb(255, 96, 96);"&gt;"UTF-8"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 255);"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: rgb(128, 128, 255);"&gt;-- Define an AJP 1.3 Connector on port 8020 --&lt;/span&gt;&lt;span style="color: rgb(128, 128, 255);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;Connector&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;port&lt;/span&gt;=&lt;span style="color: rgb(255, 96, 96);"&gt;"8020"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;enableLookups&lt;/span&gt;=&lt;span style="color: rgb(255, 96, 96);"&gt;"false"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;redirectPort&lt;/span&gt;=&lt;span style="color: rgb(255, 96, 96);"&gt;"9972"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;protocol&lt;/span&gt;=&lt;span style="color: rgb(255, 96, 96);"&gt;"AJP/1.3"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 255, 0);"&gt;URIEncoding&lt;/span&gt;=&lt;span style="color: rgb(255, 96, 96);"&gt;"UTF-8"&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Creamos un script de arranque,&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;run&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 255);"&gt;#!/bin/sh -e&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;JAVA_HOME&lt;/span&gt;=&lt;span style="color: rgb(255, 255, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 96, 96);"&gt;/usr/lib/jvm/java-1.5.0-sun-1.5.0.11&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;JAVA_OPTS&lt;/span&gt;=&lt;span style="color: rgb(255, 255, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 96, 96);"&gt;-Xmx800m -Xms800m&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 255);"&gt;#CATALINA_HOME=/opt/tomcat5&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;CATALINA_HOME&lt;/span&gt;=/var/tomcat/apache-tomcat&lt;span style="color: rgb(255, 96, 96);"&gt;-6&lt;/span&gt;.&lt;span style="color: rgb(255, 96, 96);"&gt;0&lt;/span&gt;.&lt;span style="color: rgb(255, 96, 96);"&gt;16&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;CATALINA_BASE&lt;/span&gt;=/var/tomcat/serverB&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;export&lt;/span&gt; JAVA_HOME JAVA_OPTS CATALINA_HOME CATALINA_BASE&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 255);"&gt;# -p preserves the environment (for $JAVA_HOME etc.)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 255);"&gt;# -s is required because tomcat's login shell is /bin/false&lt;/span&gt;&lt;br /&gt;su &lt;span style="color: rgb(255, 64, 255);"&gt;-p&lt;/span&gt; &lt;span style="color: rgb(255, 64, 255);"&gt;-s&lt;/span&gt; /bin/sh tomcat &lt;span style="color: rgb(255, 64, 255);"&gt;-c&lt;/span&gt; &lt;span style="color: rgb(255, 255, 102);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 64, 255);"&gt;$CATALINA_HOME&lt;/span&gt;&lt;span style="color: rgb(255, 96, 96);"&gt;/bin/catalina.sh start&lt;/span&gt;&lt;span style="color: rgb(255, 255, 102);"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;y un script de parada&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;stop&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 255);"&gt;#!/bin/sh -e&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;JAVA_HOME&lt;/span&gt;=&lt;span style="color: rgb(255, 255, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 96, 96);"&gt;/usr/lib/jvm/java-1.5.0-sun-1.5.0.11&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;JAVA_OPTS&lt;/span&gt;=&lt;span style="color: rgb(255, 255, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 96, 96);"&gt;-Xmx800m -Xms800m&lt;/span&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;CATALINA_HOME&lt;/span&gt;=/var/tomcat/apache-tomcat&lt;span style="color: rgb(255, 96, 96);"&gt;-6&lt;/span&gt;.&lt;span style="color: rgb(255, 96, 96);"&gt;0&lt;/span&gt;.&lt;span style="color: rgb(255, 96, 96);"&gt;16&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;CATALINA_BASE&lt;/span&gt;=/var/tomcat/serverB&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;export&lt;/span&gt; JAVA_HOME JAVA_OPTS CATALINA_HOME CATALINA_BASE&lt;br /&gt;&lt;br /&gt;su &lt;span style="color: rgb(255, 64, 255);"&gt;-p&lt;/span&gt; tomcat &lt;span style="color: rgb(255, 64, 255);"&gt;-c&lt;/span&gt; &lt;span style="color: rgb(255, 255, 102);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(255, 64, 255);"&gt;$CATALINA_HOME&lt;/span&gt;&lt;span style="color: rgb(255, 96, 96);"&gt;/bin/catalina.sh stop&lt;/span&gt;&lt;span style="color: rgb(255, 255, 102);"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Ahora tenemos otro Tomcat corriendo en el mismo servidor con puertos diferentes.  Creamos un workerb en /etc/httpd/conf/worker.properties apuntando al puerto 8020.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;worker.workerb.port&lt;/span&gt;=&lt;span style="color: rgb(255, 96, 96);"&gt;8020&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;worker.workerb.host&lt;/span&gt;=&lt;span style="color: rgb(255, 96, 96);"&gt;localhost&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;worker.workerb.type&lt;/span&gt;=&lt;span style="color: rgb(255, 96, 96);"&gt;ajp13&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 255, 255);"&gt;worker.workerb.lbfactor&lt;/span&gt;=&lt;span style="color: rgb(255, 96, 96);"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;y listo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-4921844184436699705?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/4921844184436699705/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=4921844184436699705' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/4921844184436699705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/4921844184436699705'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2008/04/multiples-instancias-de-tomcat.html' title='Multiples instancias de Tomcat'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-913078705579930191</id><published>2008-04-15T17:25:00.003-06:00</published><updated>2008-06-20T23:58:10.340-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='appfuse'/><title type='text'>Appfuse 2. Creando un nuevo proyecto Spring MVC</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Appfuse tiene varias plantillas de proyecto, crearemos nuestro proyecto con la plantilla de Spring-MVC.&lt;br /&gt;&lt;br /&gt;En el directorio que queremos crear el proyecto:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-spring -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0.1 -DgroupId=com.miproyecto.app -DartifactId=proyecto&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;Las dos últimas opciones son las que cambiamos para personalizar nuestro proyecto.&lt;br /&gt;&lt;i&gt;-DgroupId=com.miproyecto.app&lt;/i&gt; es el paquete raíz que utilizaremos, todos los nuevos paquetes que genera Appfuse se crearán dentro de este.&lt;br /&gt;&lt;i&gt;-DartifactId=proyecto&lt;/i&gt; es el nombre de nuestro proyecto.&lt;br /&gt;&lt;br /&gt;Luego de ejecutar el comando, Appfuse y Maven bajarán todas las librearías de las que depende el proyecto Spring-MVC, entre ellas, Velocity, Hibernate, Spring, AcegiSecurity,...&lt;br /&gt;&lt;br /&gt;Para probarlo primero nois aseguramos de tener un MySQL funcionando con una base de datos lista para el proyecto y editamos el archivo pom.xml en la sección Database Settings que está casi al final para introducir las credenciales.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: #009900;"&gt;&lt;span style="color: #808080; font-style: italic;"&gt;&amp;lt;!-- Database settings --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;dbunit&lt;/span&gt;.dataTypeFactoryName&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;org.dbunit.dataset.datatype.DefaultDataTypeFactory&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/dbunit&lt;/span&gt;.dataTypeFactoryName&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;dbunit&lt;/span&gt;.operation.type&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;CLEAN_INSERT&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/dbunit&lt;/span&gt;.operation.type&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;hibernate&lt;/span&gt;.dialect&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;org.hibernate.dialect.MySQL5InnoDBDialect&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/hibernate&lt;/span&gt;.dialect&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;jdbc&lt;/span&gt;.groupId&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;mysql&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/jdbc&lt;/span&gt;.groupId&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;jdbc&lt;/span&gt;.artifactId&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;mysql-connector-java&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/jdbc&lt;/span&gt;.artifactId&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;jdbc&lt;/span&gt;.version&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;5.0.5&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/jdbc&lt;/span&gt;.version&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;jdbc&lt;/span&gt;.driverClassName&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;com.mysql.jdbc.Driver&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/jdbc&lt;/span&gt;.driverClassName&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;jdbc&lt;/span&gt;.url&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #339933;"&gt;&amp;lt;![CDATA[jdbc:mysql://localhost/mibasededatos?createDatabaseIfNotExist=true&amp;amp;amp;useUnicode=true&amp;amp;amp;characterEncoding=utf-8]]&amp;gt;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/jdbc&lt;/span&gt;.url&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;jdbc&lt;/span&gt;.username&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;miusuario&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/jdbc&lt;/span&gt;.username&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;jdbc&lt;/span&gt;.password&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;miclave&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/jdbc&lt;/span&gt;.password&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Para vestir el sitio, editamos las leyendas en /src/main/resources/ApplicationResources.properties&lt;/p&gt;&lt;br /&gt;Lo incluimos a un servidor de control de versiones&lt;br /&gt;&lt;br /&gt;&lt;code&gt;svn import miproyecto svn://somesvnserver.com/proyecto/trunk -m "Inicio de miproyecto"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ahora bajamos el resto de los archivos del proyecto&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn appfuse:full-source&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Con este paso dejamos a un lado muchos archivos de appfuse que después podemos integrar al svn cuando creamos necesario.&lt;/p&gt;&lt;p&gt;Generamos los archivos para edición con Eclipse:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn install eclipse:eclipse&lt;/code&gt;&lt;br /&gt;&lt;p&gt;Ahora probamos nuestra aplicación:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mvn jetty:run-war&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Abrimos nuestro navegador en &lt;a href="http://localhost:8080/"&gt;http://localhost:8080&lt;/a&gt; y debemos ver una ventana de bienvenida&lt;br /&gt;&lt;br /&gt;¡Listo!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Otros comandos usados comúnmente:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Para crear rápidamente una entidad con CRUD&lt;br/&gt;&lt;code&gt;mvn appfuse:gen -Dentity=Page&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Para correr y probar todo el sistema&lt;br/&gt;&lt;code&gt;mvn clean; mvn jetty:run-war -Dmaven.buildNumber.doCheck=false&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Para correr un JUnit&lt;br/&gt;&lt;code&gt;mvn test -Dtest=UserFormControllerTest&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Para exportar la BD usando DBUnit&lt;br/&gt;&lt;code&gt;mvn dbunit:export -Ddest=sample-data.xml&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-913078705579930191?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/913078705579930191/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=913078705579930191' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/913078705579930191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/913078705579930191'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2008/04/appfuse-2-creando-un-nuevo-proyecto_15.html' title='Appfuse 2. Creando un nuevo proyecto Spring MVC'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-6317767580832863410</id><published>2008-04-06T14:25:00.003-06:00</published><updated>2008-04-07T00:36:07.724-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>SVN mini tutorial</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Para importar un proyecto nuevo.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;svn import miproyecto svn://somesvnserver.com/miproyecto/trunk -m "Inicio de proyecto"&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;En el servidor SVN debe de estar configurado un repositorio con el nombre de "miproyecto"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Para extraer un proyecto&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;svn co svn://somesvnserver.com/miproyecto/trunk miproyecto&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Para guardar los cambios&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;svn ci -m "Resolviendo error de dependencias"&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;*siempre es bueno poner un comentario corto cada vez&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Para agregar un archivo o directorio&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;svn add nuevo.jsp otro.jsp algo.java&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Este minitutorial está incompleto y poco a poco lo iré terminando&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-6317767580832863410?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/6317767580832863410/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=6317767580832863410' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/6317767580832863410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/6317767580832863410'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2008/04/svn-mini-tutorial.html' title='SVN mini tutorial'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-1321192450189711395</id><published>2008-04-04T10:12:00.005-06:00</published><updated>2008-11-13T10:30:00.430-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='appfuse'/><title type='text'>Appfuse 2</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ioYbByyEgz0/R_ZV8YkqoxI/AAAAAAAAABE/Ku1EbUjiUWY/s1600-h/logo_appfuse.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_ioYbByyEgz0/R_ZV8YkqoxI/AAAAAAAAABE/Ku1EbUjiUWY/s320/logo_appfuse.gif" alt="" id="BLOGGER_PHOTO_ID_5185426516840456978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://appfuse.org/"&gt;Appfuse 2&lt;/a&gt; es una herramienta muy útil para desarrollar proyectos.  Conserva las dependencias de las librerías usadas comunmente en los desarrollos con Java/Hibernate/Spring-MVC.&lt;br /&gt;&lt;br /&gt;También ofrece un ambiente de desarrollo y pruebas autónomo, que obliga a los desarrolladores a seguir siempre los mismos pasos para crear nuevos objetos, relaciones y tablas.&lt;br /&gt;&lt;br /&gt;Se apoya en &lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt; para la administración del proyecto usando su modelo POM (project object model) facilitando la compilación integrando un ambiente uniforme para desarrollo independiente de la plataforma (Linux, OSX y Windows), ofreciendo información técnica del proyecto (librerías de las que depende con versiones; parámetros de compilación para pruebas y despliegue) y promoviendo la aplicación de mejores prácticas (best practices).&lt;br /&gt;&lt;br /&gt;Appfuse crea toda la estructura básica para iniciar un nuevo proyecto.  Después de esto puede también crear las configuraciones necesarias para utilizar el IDE de preferencia.  Soporta &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;, &lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJIDEA&lt;/a&gt; y &lt;a href="http://www.netbeans.org/"&gt;Netbeans&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-1321192450189711395?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/1321192450189711395/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=1321192450189711395' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/1321192450189711395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/1321192450189711395'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2008/04/appfuse-2.html' title='Appfuse 2'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ioYbByyEgz0/R_ZV8YkqoxI/AAAAAAAAABE/Ku1EbUjiUWY/s72-c/logo_appfuse.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-5566949254221309598</id><published>2008-02-23T10:42:00.004-06:00</published><updated>2008-02-23T11:27:01.704-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><title type='text'>Convirtiendo de CMYK a RGB</title><content type='html'>Muchas veces cuando se procesan imágenes para sitios web, los diseñadores guardan los archivos en formato CMYK, que es muy común para impresiones.  Cuando nos llegas las gráficas, el Internet Explorer o el Firefox no las muestran mandando un error.&lt;br /&gt;&lt;br /&gt;Primero detectar cuáles son los archivos que están con ese formato:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;identify -verbose *.jpg | grep -B 6 "Colorspace: CMYK" | awk '/^Image/ {printf $2"\n"}'&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Luego, hay que convertir esos archivos a RGB usando otro comando.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;convert -colorspace RGB imgCMYK.jpg jpg:imgRGB.jpg&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;En sistemas Linux se puede automatizar de la siguiente forma:&lt;br /&gt;&lt;br /&gt;Copiar todos los archivos jpg en formato CMYK a un directorio temporal y ejecutar el siguiente script.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;PROG="/usr/bin/convert -colorspace RGB "&lt;br /&gt;&lt;br /&gt;find . -iname '*.jpg' -exec $PROG {} jpg:{} \;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Se podría construir un script que haga todo, detecte los archivos, los copie a un directorio temporal, los convierta y luego los copie al directorio original.&lt;br /&gt;&lt;br /&gt;Los comandos gráficos (identify, convert) son de la librería &lt;a href="http://www.imagemagick.org/"&gt;ImageMagick&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-5566949254221309598?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/5566949254221309598/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=5566949254221309598' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/5566949254221309598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/5566949254221309598'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2008/02/convirtiendo-de-cmyk-rgb.html' title='Convirtiendo de CMYK a RGB'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-5155433696220173054</id><published>2007-10-30T13:52:00.001-06:00</published><updated>2008-04-07T00:38:22.381-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>Trigger en MySQL</title><content type='html'>Tengo el caso de que cada vez que agrego un usuario a una tabla debo de codificar su password a MD5 y agregar el login a una tabla con sus ROLES.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;DELIMITER |&lt;br /&gt; &lt;span style="color:#a52a2a;"&gt;&lt;b&gt;CREATE&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#6a5acd;"&gt;TRIGGER&lt;/span&gt; auth_users BEFORE &lt;span style="color:#a52a2a;"&gt;&lt;b&gt;INSERT&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#6a5acd;"&gt;ON&lt;/span&gt; usuarios&lt;br /&gt;   &lt;span style="color:#6a5acd;"&gt;FOR&lt;/span&gt; EACH &lt;span style="color:#6a5acd;"&gt;ROW&lt;/span&gt; &lt;span style="color:#6a5acd;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#a52a2a;"&gt;&lt;b&gt;SET&lt;/b&gt;&lt;/span&gt; NEW.passwdmd5 = md5(NEW.passwd);&lt;br /&gt;     &lt;span style="color:#a52a2a;"&gt;&lt;b&gt;INSERT&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#6a5acd;"&gt;INTO&lt;/span&gt; authorities (username, privilege) &lt;span style="color:#6a5acd;"&gt;values&lt;/span&gt; (NEW.login, &lt;span style="color:#ff00ff;"&gt;"ROLE_USER"&lt;/span&gt;);&lt;br /&gt;   &lt;span style="color:#6a5acd;"&gt;END&lt;/span&gt;;&lt;br /&gt; |&lt;br /&gt;DELIMITER ;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Cambio primero el delimitador cuando tengo varias instrucciones, esto para no confundir a &lt;span style="color:#a52a2a;"&gt;&lt;b&gt;CREATE&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#6a5acd;"&gt;TRIGGER&lt;/span&gt;.  Inicio el loop poniendo el nuevo valor de passwdmd5 con la instrucción md5(NEW.passwd).  NEW es el registro que estoy insertando, por ello lo modifico primero (BEFORE INSERT).&lt;br /&gt;&lt;br /&gt;Agrego el nuevo ROLE en la tabla de authorities creando como default "ROLE_USER".&lt;br /&gt;&lt;br /&gt;Cabe mencionar que para poder crear un Trigger en MySQL tienes que tener privilegios de &lt;b&gt;super user&lt;/b&gt; sobre la base de datos.&lt;br /&gt;&lt;br /&gt;Quizás para terminar habría que agregar otro trigger para cuando borro un usuario, pero para este caso es dificil pues el usuario tiene muchas otras relaciones históricas como lo son pedidos y productos favoritos, información que me es valiosa para análisis, así que no aplica lo de borrar usuarios.&lt;br /&gt;&lt;br /&gt;*&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html"&gt;MySQL Reference&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-5155433696220173054?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/5155433696220173054/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=5155433696220173054' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/5155433696220173054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/5155433696220173054'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2007/10/trigger-en-mysql.html' title='Trigger en MySQL'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-2034280269027081693</id><published>2007-05-05T11:00:00.000-06:00</published><updated>2007-05-05T11:48:02.019-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jstl'/><category scheme='http://www.blogger.com/atom/ns#' term='jsp'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>fmt:message no funciona</title><content type='html'>Estoy desarrollando un nuevo proyecto usando &lt;a href="http://springframework.org/docs/reference/mvc.html"&gt;Spring MVC&lt;/a&gt;, me parece una plataforma bastante adecuada, algo entre jsp, struts y jsf.&lt;br /&gt;&lt;br /&gt;Cuando seguí los pasos que muestra el tutorial, todo funciona perfectamente, pero cuando quiero desarrollar un nuevo proyecto ya con Spring 2 no me funcionó el &lt;fmt:message key="title" /&gt; dentro del JSP.  Me lo traducía como &lt;span style="font-style: italic;"&gt;???title???&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Me aseguré de que archivo messages.properties estuviera en WEB-INF/classes.&lt;br /&gt;&lt;br /&gt;Que exisistiera en el aplicacion-servlet.xml :&lt;br /&gt;&lt;pre&gt;...&lt;br /&gt;&lt;font color="#008b8b"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#008b8b"&gt;bean&lt;/font&gt;&lt;font color="#008b8b"&gt; &lt;/font&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;id&lt;/b&gt;&lt;/font&gt;=&lt;font color="#ff00ff"&gt;&amp;quot;messageSource&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008b8b"&gt;        &lt;/font&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt;=&lt;font color="#ff00ff"&gt;&amp;quot;org.springframework.context.support.ResourceBundleMessageSource&amp;quot;&lt;/font&gt;&lt;font color="#008b8b"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008b8b"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#008b8b"&gt;property&lt;/font&gt;&lt;font color="#008b8b"&gt; &lt;/font&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/font&gt;=&lt;font color="#ff00ff"&gt;&amp;quot;basename&amp;quot;&lt;/font&gt;&lt;font color="#008b8b"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#008b8b"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#008b8b"&gt;value&lt;/font&gt;&lt;font color="#008b8b"&gt;&amp;gt;&lt;/font&gt;messages&lt;font color="#008b8b"&gt;&amp;lt;/value&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008b8b"&gt;&amp;lt;/property&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008b8b"&gt;&amp;lt;/bean&amp;gt;&lt;/font&gt;&lt;br /&gt;...&lt;/pre&gt;&lt;br /&gt;y aún así seguía con el error.  De casualidad revisando nuevamente el aplicacion-servlet.xml, veo que en el nuevo no tengo una línea en el view resolver y aunque no tenía "nada que ver" ya me faltaban pocas cosas que probar y fué cuando por fin funcionó.&lt;br /&gt;&lt;pre&gt;...&lt;br /&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;bean&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;id&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"viewResolver"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;        &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"org.springframework.web.servlet.view.InternalResourceViewResolver"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;property&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"viewClass"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&lt;/span&gt;org.springframework.web.servlet.view.JstlView&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;property&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"prefix"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&lt;/span&gt;/WEB-INF/jsp/&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;property&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"suffix"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;              &lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&lt;/span&gt;.jsp&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;&lt;br /&gt;...&lt;/pre&gt;&lt;br /&gt;La línea mágica para mi caso fue incluir el &lt;span style="font-style: italic;"&gt;viewClass&lt;/span&gt; como &lt;span style="font-style: italic;"&gt;org.springframework.web.servlet.view.JstlView&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Después de resolver el aparente problema, la solución parece muy simple y sobretodo obvia.  Aquí estoy llamando al jstlView de Spring para una etiqueta que uso en Spring.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-2034280269027081693?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/2034280269027081693/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=2034280269027081693' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/2034280269027081693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/2034280269027081693'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2007/05/fmtmessage-no-funciona.html' title='fmt:message no funciona'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-8132369551000555254</id><published>2007-04-22T10:14:00.000-06:00</published><updated>2007-04-22T10:41:58.259-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><title type='text'>Renombrar archivos con rename (Linux)</title><content type='html'>Muchas veces cuando estamos desarrollando nuevos sitios, es común tener que renombrar muchos archivos, generalmente fotos.&lt;br /&gt;&lt;br /&gt;Para usar las fotos de un producto de manera sencilla, ponemos la clave del producto como el nombre de este y la extensión &lt;span style="font-style: italic;"&gt;jpg&lt;/span&gt; pero cuando además de la foto también tenemos el thumbnail usamos la clave con el sufijo &lt;span style="font-style: italic;"&gt;_th&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Si en un folder tengo cientos de archivos gráficos que serán thumbnails pero que aún no llevan el sufijo, tendré que renombrarlos a todos, con rename es muy fácil.&lt;br /&gt;&lt;br /&gt;La sintaxis de rename:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;La parte que quizás más asuste es la del perlexpr.  A estas alturas las expresiones regulares con Perl deberían de ser cosa de todos los días, pero aún existen administradores que no se llevan bien con ellas.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;-v es para ver los resultados&lt;br /&gt;-n es para ver los resultados sin que haga cambios&lt;br /&gt;-f es para forzar la sobreescritura de los archivos resultantes&lt;/blockquote&gt;&lt;br /&gt;Para esta necesidad yo tengo la siguiente lista de archivos:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;AA02.jpg&lt;br /&gt;AJ11.jpg&lt;br /&gt;AJ14.jpg&lt;br /&gt;BO12.jpg&lt;br /&gt;...&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;y los quiero renombrar a:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;AA02_th.jpg&lt;br /&gt;AJ11_th.jpg&lt;br /&gt;AJ14_th.jpg&lt;br /&gt;BO12_th.jpg&lt;br /&gt;...&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;La expresión regular es la siguiente &lt;span style="font-style: italic;"&gt;s/\.jpg$/_th\.jpg/&lt;/span&gt; quedando el comando como sigue:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;$&gt; rename -v &lt;span style="color: rgb(204, 0, 0);"&gt;'s/\.jpg$/_th\.jpg/'&lt;/span&gt; *.jpg&lt;br /&gt;AA02.jpg renamed as AA02_th.jpg&lt;br /&gt;AJ11.jpg renamed as AJ11_th.jpg&lt;br /&gt;AJ14.jpg renamed as AJ14_th.jpg&lt;br /&gt;BO12.jpg renamed as BO12_th.jpg&lt;br /&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Mas información:&lt;br /&gt;&lt;a href="http://tips.webdesign10.com/how-to-bulk-rename-files-in-linux-in-the-terminal"&gt;How to Bulk Rename Files in Linux (Terminal or GUI)&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-8132369551000555254?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/8132369551000555254/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=8132369551000555254' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/8132369551000555254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/8132369551000555254'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2007/04/renombrar-archivos-con-rename-linux.html' title='Renombrar archivos con rename (Linux)'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-5695115828295739665</id><published>2007-04-09T23:58:00.000-06:00</published><updated>2007-04-10T00:44:58.333-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jstl'/><category scheme='http://www.blogger.com/atom/ns#' term='jsp'/><title type='text'>Alternando Colores en tablas con jstl</title><content type='html'>Es muy común mostrar tablas o listas en las aplicaciones.  Para facilitar su lectura usamos diferentes colores para cada fila (row).&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;c&lt;span style="color:#008b8b;"&gt;:if test=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"${!model.editMode}"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a52a2a;"&gt;&lt;b&gt;table&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;c&lt;span style="color:#008b8b;"&gt;:forEach items=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"${model.marcas}"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; var=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"marca"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; varStatus=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"loop"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a52a2a;"&gt;&lt;b&gt;tr&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;style&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"background: ${((loop.index % 2) == 0) ? '#D9E5F2' : '#ABC6E2'}"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a52a2a;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    Español: &lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;c&lt;span style="color:#008b8b;"&gt;:out &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;value&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"${marca.entNombre.es}"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a52a2a;"&gt;&lt;b&gt;br&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    Inglés: &lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;c&lt;span style="color:#008b8b;"&gt;:out &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;value&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"${marca.entNombre.en}"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#008b8b;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a52a2a;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a52a2a;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;c&lt;span style="color:#008b8b;"&gt;:&lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;url&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;value&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"marcas.html?id=${marca.marcaId}"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; var=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"editLink"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a52a2a;"&gt;&lt;b&gt;a&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;href&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"${editLink}"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;Editar&lt;span style="color:#008b8b;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a52a2a;"&gt;&lt;b&gt;a&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#008b8b;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a52a2a;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color:#008b8b;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a52a2a;"&gt;&lt;b&gt;tr&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#008b8b;"&gt;&amp;lt;/&lt;/span&gt;c&lt;span style="color:#008b8b;"&gt;:forEach&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#008b8b;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a52a2a;"&gt;&lt;b&gt;table&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#008b8b;"&gt;&amp;lt;/&lt;/span&gt;c&lt;span style="color:#008b8b;"&gt;:if&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;Es muy simple y funciona muy bien, puede haber otras adaptaciones y en lugar de poner directamente el color de la fila podemos colocar un estilo.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;&lt;/span&gt;c&lt;span style="color: rgb(0, 139, 139);"&gt;:forEach items=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"${model.marcas}"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; var=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"marca"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; varStatus=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"status"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;tr&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;&lt;span style="font-family:monospace;"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"${((status.index % 2) == 0) ? '&lt;span style="font-style: italic;"&gt;par&lt;/span&gt;' : '&lt;span style="font-style: italic;"&gt;impar&lt;/span&gt;'}"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Esto gracias a los valores que nos da varStatus.  En la siguiente tabla pongo todos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;current&lt;/span&gt; &lt;span style="font-style: italic;"&gt;getCurrent()&lt;/span&gt;&lt;br /&gt;El item (de la colección) para el actual round de iteración&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;index&lt;/span&gt; &lt;span style="font-style: italic;"&gt;getIndex()&lt;/span&gt;&lt;br /&gt;El índice desde cero para el actual round de iteración&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;count&lt;/span&gt; &lt;span style="font-style: italic;"&gt;getCount()&lt;/span&gt;&lt;br /&gt;La cuenta desde uno para el actual round de iteración&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;first&lt;/span&gt; &lt;span style="font-style: italic;"&gt;isFirst()&lt;/span&gt;&lt;br /&gt;Bandera que indica si el actual item es el primero de la ronda de iteración&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;last&lt;/span&gt; &lt;span style="font-style: italic;"&gt;isLast()&lt;/span&gt;&lt;br /&gt;Bandera que indica si el actual item es el último de la ronda de iteración&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;begin&lt;/span&gt; &lt;span style="font-style: italic;"&gt;getBegin()&lt;/span&gt;&lt;br /&gt;El valor de begin&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;end&lt;/span&gt; &lt;span style="font-style: italic;"&gt;getEnd()&lt;/span&gt;&lt;br /&gt;El valor de end&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;step&lt;/span&gt; &lt;span style="font-style: italic;"&gt;getStep()&lt;/span&gt; El valor de step&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/31156664-5695115828295739665?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/5695115828295739665/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=5695115828295739665' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/5695115828295739665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/5695115828295739665'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2007/04/alternando-colores-en-tablas-con-jstl.html' title='Alternando Colores en tablas con jstl'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-6019593360831706509</id><published>2007-03-29T16:17:00.000-06:00</published><updated>2007-03-29T16:27:18.163-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><title type='text'>Buscar con pageup en Bash</title><content type='html'>Esta era de mis funciones favoritas del bash en Mandrake, pero poco a poco se ha ido perdiendo entre las diferentes distribuciones de linux.  Ahora uso Ubuntu y tampoco lo tiene, así que buscando por la red por fin supe donde había que poner los aliases.  Lo copio aquí que seguro lo necesitaré después.&lt;br /&gt;&lt;br /&gt;~/.inputrc&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;blockquote&gt;"\e[1~": beginning-of-line&lt;br /&gt;"\e[2~": yank&lt;br /&gt;"\e[3~": delete-char&lt;br /&gt;"\e[4~": end-of-line&lt;br /&gt;"\e[5~": history-search-backward&lt;br /&gt;"\e[6~": history-search-forward&lt;br /&gt;$if term=xterm&lt;br /&gt;"\e[2;5~": yank&lt;br /&gt;"\e[3;5~": delete-char&lt;br /&gt;"\e[5;5~": history-search-backward&lt;br /&gt;"\e[6;5~": history-search-forward&lt;br /&gt;$endif&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-6019593360831706509?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/6019593360831706509/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=6019593360831706509' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/6019593360831706509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/6019593360831706509'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2007/03/buscar-con-pageup-en-bash.html' title='Buscar con pageup en Bash'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-3193644349845239216</id><published>2007-03-17T20:15:00.000-06:00</published><updated>2007-03-17T20:14:18.365-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='studio creator'/><title type='text'>Javascript en elementos html con Studio Creator</title><content type='html'>Es común utilizar Javascript para muchas operaciones en el cliente.&lt;br /&gt;&lt;br /&gt;Por ejemplo, queremos que nos calcule una multiplicación entre precio unitario (p.u.) y cantidad (cant) y que ponga el resultado en total durante el proceso de captura.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img157.imageshack.us/img157/4885/textboxesqc8.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://img157.imageshack.us/img157/4885/textboxesqc8.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Para poder hacerlo, tengo que saber los nombres con los que Studio Creator creará los componentes html de la forma.  Puedo ver el "preview" con el botón de arriba en el editor.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img243.imageshack.us/img243/6905/previewbuttondy0.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://img243.imageshack.us/img243/6905/previewbuttondy0.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Luego pido ver la fuente, localizo mis componentes y apunto los nombres.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img295.imageshack.us/img295/1176/buscarcodigotc9.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://img295.imageshack.us/img295/1176/buscarcodigotc9.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;El resultado cambia cuando cualquiera de los operandos se modifica, entonces escuchamos los dos inputs involucrados.  Precio unitario y cantidad.&lt;br /&gt;&lt;br /&gt;Según el preview, el input de precio unitario lo llamará &lt;span style="font-style: italic;"&gt;form1:tabSet1:tab5:tf_pu&lt;/span&gt;, cantidad &lt;span style="font-style: italic;"&gt;form1:tabSet1:tab5:tf_cantidad&lt;/span&gt; y total &lt;span style="font-style: italic;"&gt;form1:tabSet1:tab5:tf_total&lt;/span&gt; el Javascript es muy sencillo:&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;document.getElementById('&lt;span style="color: rgb(204, 51, 204);"&gt;form1:tabSet1:tab5:tf_total&lt;/span&gt;').value =&lt;br /&gt; document.getElementById('&lt;span style="color: rgb(204, 51, 204);"&gt;form1:tabSet1:tab5:tf_pu&lt;/span&gt;').value *&lt;br /&gt; document.getElementById('&lt;span style="color: rgb(204, 51, 204);"&gt;form1:tabSet1:tab5:tf_cantidad&lt;/span&gt;').value;&lt;/blockquote&gt;&lt;br /&gt;&lt;/pre&gt;Hay que insertarlo en los dos inputs bajo el evento onChange.  Volvemos a ver el preview para confirmar los cambios en los dos inputs.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;input&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"TxtFld"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;id&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"form1:tabSet1:tab5:tf_pu"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"form1:tabSet1:tab5:tf_pu"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;onchange="&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt; document.getElementById(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;'form1:tabSet1:tab5:tf_total'&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;).value = &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;         document.getElementById(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;'form1:tabSet1:tab5:tf_pu'&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;).value *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;         document.getElementById(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;'form1:tabSet1:tab5:tf_cantidad'&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;).value;&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;size&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"15"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;type&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"text"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;value&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"0.0"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; /&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;input&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"TxtFld"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;id&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"form1:tabSet1:tab5:tf_cantidad"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"form1:tabSet1:tab5:tf_cantidad"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;onchange="&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt; document.getElementById(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;'form1:tabSet1:tab5:tf_total'&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;).value = &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;         document.getElementById(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;'form1:tabSet1:tab5:tf_pu'&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;).value *&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;         document.getElementById(&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;'form1:tabSet1:tab5:tf_cantidad'&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;).value;&lt;/span&gt;&lt;span style="color: rgb(106, 90, 205);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;size&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"15"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;type&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"text"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;value&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"0.0"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; /&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;input&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"TxtFld"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;id&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"form1:tabSet1:tab5:tf_total"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"form1:tabSet1:tab5:tf_total"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;size&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"15"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;type&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"text"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;value&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;"0.0"&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt; /&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 139, 139);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Listo, quedó agregado el código Javascript y todo lo hicimos dentro del IDE.&lt;br /&gt;&lt;br /&gt;Una solución más elegante sería crear una funcion que haga la operación y sólo llamar a la funcion cuando se active el evento.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-3193644349845239216?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/3193644349845239216/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=3193644349845239216' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/3193644349845239216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/3193644349845239216'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2007/03/javascript-en-elementos-html-con-studio.html' title='Javascript en elementos html con Studio Creator'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-4404221390578823346</id><published>2007-03-02T18:54:00.000-06:00</published><updated>2007-03-03T00:43:00.574-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='problemas'/><category scheme='http://www.blogger.com/atom/ns#' term='c'/><title type='text'>FizzFuzz</title><content type='html'>Mi solución al FizzFuzz en C (la de Java es muy parecida):&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;/*&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt; * Solucion FizzFuzz&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt; * Juparave &lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt; * 2 de marzo 2007&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;*/&lt;/font&gt;&lt;br /&gt;&lt;font color="#a020f0"&gt;#include &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;lt;stdio.h&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt; main(&lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt; argc, &lt;font color="#2e8b57"&gt;&lt;b&gt;char&lt;/b&gt;&lt;/font&gt;** argv){&lt;br /&gt;   &lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt; i;&lt;br /&gt;&lt;br /&gt;   &lt;font color="#a52a2a"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt; (i = &lt;font color="#ff00ff"&gt;0&lt;/font&gt;; i &amp;lt; &lt;font color="#ff00ff"&gt;100&lt;/font&gt;; i++) {&lt;br /&gt;      &lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;( !(i % &lt;font color="#ff00ff"&gt;3&lt;/font&gt;) )&lt;br /&gt;         printf(&lt;font color="#ff00ff"&gt;&amp;quot;fizz&amp;quot;&lt;/font&gt;);&lt;br /&gt;      &lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;( !(i % &lt;font color="#ff00ff"&gt;5&lt;/font&gt;) )&lt;br /&gt;         printf(&lt;font color="#ff00ff"&gt;&amp;quot;fuzz&amp;quot;&lt;/font&gt;);&lt;br /&gt;      &lt;font color="#a52a2a"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;( (i % &lt;font color="#ff00ff"&gt;3&lt;/font&gt;) * (i % &lt;font color="#ff00ff"&gt;5&lt;/font&gt;) )&lt;br /&gt;         printf(&lt;font color="#ff00ff"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#6a5acd"&gt;%d&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;&lt;/font&gt;, i);&lt;br /&gt;      printf(&lt;font color="#ff00ff"&gt;&amp;quot;&lt;/font&gt;&lt;font color="#6a5acd"&gt;\n&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;&lt;/font&gt;);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;El FizzFuzz no es mas que listar números del 1 al 100, pero cuando este número sea múltiplo de 3 en lugar imprimir fizz y cuando sea multiplo de 5 imprimir fuzz.  Cuando sea múltiplo de 3 y de 5 imprimir fizzfuzz.  Parece un problema sencillo y cualquiera que se jacte de ser programador debe de tardar menos de 2 minutos en resolverlo... sin comentarios&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-4404221390578823346?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/4404221390578823346/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=4404221390578823346' title='6 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/4404221390578823346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/4404221390578823346'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2007/03/fizzfuzz.html' title='FizzFuzz'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-7694516503877938995</id><published>2007-03-02T15:15:00.001-06:00</published><updated>2011-03-21T19:49:21.544-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='uml-basico'/><title type='text'>Repaso de diagramas de clase</title><content type='html'>UML es la mejor forma de comunicar ideas y conceptos entre un equipo de programación.  Es muy fácil de usar una vez que se tiene clara la simbología.&lt;br /&gt;&lt;br /&gt;Los &lt;span style="font-weight: bold;"&gt;diagramas de clase&lt;/span&gt; los usamos para describir las clases de un sistema y sus relaciones entre ellas.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-N0kMwCTgEGY/TYgABGps75I/AAAAAAAAAHk/nq-STxrvqBI/s1600/screenshot_002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-N0kMwCTgEGY/TYgABGps75I/AAAAAAAAAHk/nq-STxrvqBI/s1600/screenshot_002.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;En este diagrama se muestra a la &lt;span style="font-weight: bold;"&gt;Clase 1&lt;/span&gt;, que &lt;span style="font-style: italic;"&gt;hereda&lt;/span&gt; características de la &lt;span style="font-weight: bold;"&gt;Clase A&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;implementa&lt;/span&gt; operaciones de la &lt;span style="font-weight: bold;"&gt;interfaz Q&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La &lt;span style="font-weight: bold;"&gt;Clase 2&lt;/span&gt; &lt;span style="font-style: italic;"&gt;instancia&lt;/span&gt; un objeto de la &lt;span style="font-weight: bold;"&gt;Clase 1&lt;/span&gt; llamado atributo3, a esto se le llama composición (composition)&lt;br /&gt;&lt;br /&gt;Esto en Java quedaría así:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Class Clase_1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt; Clase_1 &lt;span style="color: seagreen;"&gt;&lt;b&gt;extends&lt;/b&gt;&lt;/span&gt; Clase_A &lt;span style="color: seagreen;"&gt;&lt;b&gt;implements&lt;/b&gt;&lt;/span&gt; Interfaz_Q {&lt;br /&gt;&lt;span style="color: blue;"&gt;// Fields&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;// &lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; atributo1;&lt;br /&gt;&lt;span style="color: blue;"&gt;// &lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; atributo2;&lt;br /&gt;&lt;span style="color: blue;"&gt;// Methods&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;// Constructors&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;// Accessor Methods&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Get the value of atributo1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;* &lt;/span&gt;&lt;span style="color: slateblue;"&gt;@return&lt;/span&gt;&lt;span style="color: blue;"&gt; the value of atributo1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; getAtributo1 (  ) {&lt;br /&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt; atributo1;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Set the value of atributo1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: slateblue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; setAtributo1 ( &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; value  ) {&lt;br /&gt;atributo1 = value;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Get the value of atributo2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;* &lt;/span&gt;&lt;span style="color: slateblue;"&gt;@return&lt;/span&gt;&lt;span style="color: blue;"&gt; the value of atributo2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; getAtributo2 (  ) {&lt;br /&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt; atributo2;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Set the value of atributo2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: slateblue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; setAtributo2 ( &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; value  ) {&lt;br /&gt;atributo2 = value;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;// Operations&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;* &lt;/span&gt;&lt;span style="color: slateblue;"&gt;@return&lt;/span&gt;&lt;span style="color: blue;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;  operacion1 ( ) {&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-family: monospace;"&gt;&lt;/span&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: blue;"&gt; *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Class Clase_2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt; Clase_2 {&lt;br /&gt;&lt;span style="color: blue;"&gt;// Fields&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;// &lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; atributo1;&lt;br /&gt;&lt;span style="color: blue;"&gt;// &lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; atributo2;&lt;br /&gt;&lt;span style="color: blue;"&gt;// &lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; Clase_1 atributo3;&lt;br /&gt;&lt;span style="color: blue;"&gt;// Methods&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;// Constructors&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;// Accessor Methods&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Get the value of atributo1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;* &lt;/span&gt;&lt;span style="color: slateblue;"&gt;@return&lt;/span&gt;&lt;span style="color: blue;"&gt; the value of atributo1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; getAtributo1 (  ) {&lt;br /&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt; atributo1;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Set the value of atributo1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: slateblue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; setAtributo1 ( &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; value  ) {&lt;br /&gt;atributo1 = value;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Get the value of atributo2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;* &lt;/span&gt;&lt;span style="color: slateblue;"&gt;@return&lt;/span&gt;&lt;span style="color: blue;"&gt; the value of atributo2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; getAtributo2 (  ) {&lt;br /&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt; atributo2;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Set the value of atributo2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: slateblue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; setAtributo2 ( &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; value  ) {&lt;br /&gt;atributo2 = value;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Get the value of atributo3&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;* &lt;/span&gt;&lt;span style="color: slateblue;"&gt;@return&lt;/span&gt;&lt;span style="color: blue;"&gt; the value of atributo3&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; Clase_1 getAtributo3 (  ) {&lt;br /&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt; atributo3;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Set the value of atributo3&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: slateblue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; setAtributo3 ( Clase_1 value  ) {&lt;br /&gt;atributo3 = value;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;// Operations&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Class Clase_A&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt; Clase_A {&lt;br /&gt;&lt;span style="color: blue;"&gt;// Fields&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;// &lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; atributoA1;&lt;br /&gt;&lt;span style="color: blue;"&gt;// Methods&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;// Constructors&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;// Accessor Methods&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Get the value of atributoA1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;* &lt;/span&gt;&lt;span style="color: slateblue;"&gt;@return&lt;/span&gt;&lt;span style="color: blue;"&gt; the value of atributoA1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; getAtributoA1 (  ) {&lt;br /&gt;&lt;span style="color: brown;"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt; atributoA1;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Set the value of atributoA1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: slateblue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;private&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/span&gt; setAtributoA1 ( &lt;span style="color: seagreen;"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/span&gt; value  ) {&lt;br /&gt;atributoA1 = value;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: blue;"&gt;// Operations&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; Interface Interfaz_Q&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt; *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt; &lt;span style="color: seagreen;"&gt;&lt;b&gt;interface&lt;/b&gt;&lt;/span&gt; Interfaz_Q {&lt;br /&gt;&lt;span style="color: blue;"&gt;// Methods&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;// Constructors&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;// Accessor Methods&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;// Operations&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   *&lt;/span&gt;&lt;span style="color: slateblue;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   &lt;/span&gt;&lt;span style="color: blue;"&gt;* &lt;/span&gt;&lt;span style="color: slateblue;"&gt;@return&lt;/span&gt;&lt;span style="color: blue;"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;   */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: seagreen;"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;  operacion1 ( );&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Todo muy sencillito, es el primer paso para comprender las relaciones.  Todos los archivos fueron generados automáticamente con &lt;a href="http://uml.sourceforge.net/index.php"&gt;Umbrello&lt;/a&gt; después de dibujar el diagrama de clases.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-7694516503877938995?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/7694516503877938995/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=7694516503877938995' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/7694516503877938995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/7694516503877938995'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2007/03/repaso-de-diagramas-de-clase.html' title='Repaso de diagramas de clase'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-N0kMwCTgEGY/TYgABGps75I/AAAAAAAAAHk/nq-STxrvqBI/s72-c/screenshot_002.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-115343266409397687</id><published>2007-02-19T13:25:00.000-06:00</published><updated>2007-02-19T13:28:36.913-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='swing'/><title type='text'>JOptionPanel, un message box facilito para Swing</title><content type='html'>Es muy frecuente utilizar un mensaje de diálogo cuando queremos que el usuario se entere de un evento o cuando necesitamos confirmación para realizar una acción. &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JOptionPane.html"&gt;JOptionPane&lt;/a&gt; en swing es la mejor opción para hacer este proceso rápido.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;     &lt;font color="#0000ff"&gt;// primero despliego un mensaje para confirmar la operación&lt;/font&gt;&lt;br /&gt;     Object[] options = {&lt;font color="#ff00ff"&gt;&amp;quot;OK&amp;quot;&lt;/font&gt;, &lt;font color="#ff00ff"&gt;&amp;quot;CANCELAR&amp;quot;&lt;/font&gt;};&lt;br /&gt;     &lt;font color="#2e8b57"&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt; confirmar = JOptionPane.showOptionDialog(&lt;font color="#ff00ff"&gt;null&lt;/font&gt;,&lt;br /&gt;             &lt;font color="#ff00ff"&gt;&amp;quot;OK para sobreescribir el archivo&amp;quot;&lt;/font&gt;, &lt;font color="#ff00ff"&gt;&amp;quot;Advertencia&amp;quot;&lt;/font&gt;,&lt;br /&gt;             JOptionPane.DEFAULT_OPTION,&lt;br /&gt;             JOptionPane.WARNING_MESSAGE,&lt;br /&gt;             &lt;font color="#ff00ff"&gt;null&lt;/font&gt;, options, options[&lt;font color="#ff00ff"&gt;0&lt;/font&gt;]);&lt;br /&gt;&lt;br /&gt;     &lt;font color="#0000ff"&gt;// muestro resultado&lt;/font&gt;&lt;br /&gt;     JOptionPane.showMessageDialog(&lt;font color="#2e8b57"&gt;&lt;b&gt;this&lt;/b&gt;&lt;/font&gt;,&lt;br /&gt;                                   &lt;font color="#ff00ff"&gt;&amp;quot;Opcion seleccionada &amp;quot;&lt;/font&gt; +&lt;br /&gt;                                   options[confirmar], &lt;font color="#ff00ff"&gt;&amp;quot;Información&amp;quot;&lt;/font&gt;,&lt;br /&gt;                                   JOptionPane.INFORMATION_MESSAGE);&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-115343266409397687?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/115343266409397687/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=115343266409397687' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115343266409397687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115343266409397687'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2006/07/joptionpanel-un-message-box-dinmico.html' title='JOptionPanel, un message box facilito para Swing'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-116960373950796825</id><published>2007-01-23T19:55:00.000-06:00</published><updated>2007-04-23T16:17:58.944-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><title type='text'>Buscar y remplazar en bash con sed y con perl</title><content type='html'>&lt;p&gt;Una de las muchas ventajas de los archivos de configuración en texto es que podemos hacer modificaciones en masa fácilmente.  Por ejemplo si queremos sustituir el nombre de un dominio en un servidor o su ip ha cambiado, podemos usar un script haga en el cambio en todos los archivos de configuración.&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;#!/bin/bash&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/span&gt; i &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;in&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(106, 90, 205);"&gt;`*.txt`&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;;&lt;/b&gt;&lt;/span&gt;  &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;sed&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;-i&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;s/find/replace/g&lt;/span&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;'&lt;/b&gt;&lt;/span&gt; &lt;span style="color: rgb(160, 32, 240);"&gt;$i&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;&lt;b&gt;done&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Se puede realizar una versión de este archivo que recupere los parámetros de la línea de comando.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Algo rápido para cambiar el server de svn.&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;pre&gt;$ find . -iname entries | xargs perl -pi -e 's/oldhost/newhost/g'&lt;/pre&gt;&lt;/blockquote&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-116960373950796825?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/116960373950796825/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=116960373950796825' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/116960373950796825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/116960373950796825'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2007/01/buscar-y-remplazar-en-bash-con-sed-y.html' title='Buscar y remplazar en bash con sed y con perl'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-115412389032451200</id><published>2006-07-28T15:58:00.000-06:00</published><updated>2006-07-28T15:58:10.380-06:00</updated><title type='text'>Microsoft: .Net Beat Java, Who's Next?   ...hmm yeah rigth!</title><content type='html'>Esto es lo último en noticias de Microsoft en una desesperación por levantar a .Net&lt;br /&gt;&lt;br /&gt;Microsoft declares Java dead and now focusing on different systems to compete with other platforms like Ruby on Rails.&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.eweek.com/article2/0,1895,1995495,00.asp"&gt;read more&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://digg.com/programming/Microsoft_Net_Beat_Java_Who_s_Next"&gt;digg story&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-115412389032451200?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/115412389032451200/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=115412389032451200' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115412389032451200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115412389032451200'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2006/07/microsoft-net-beat-java-whos-next-hmm.html' title='Microsoft: .Net Beat Java, Who&apos;s Next?   ...hmm yeah rigth!'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-115390030943785097</id><published>2006-07-26T01:51:00.001-06:00</published><updated>2008-04-07T00:38:35.778-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>Atención con altas y bajas en las tablas de MySQL</title><content type='html'>Tengo la 'mala' costumbre de trabajar en tres plataformas, Windows, Linux y OSX.  Linux y OSX son muy parecidos y son mis favoritos, Windows es lo que usa el 98% de mis clientes por lo que tengo muchas veces que diseñar específicamente para esta plataforma y hacer pruebas.&lt;br /&gt;&lt;br /&gt;Es la primera vez que me pasa que los nombres de las tablas en MySQL me causan problemas.  Studio Creator en Windows hizo las ligas y los querys en minúsculas incluso para tablas que tienen altas y bajas.  Cuando seguí el desarrollo en Linux, todo tronó, nada funcionaba.  Mucho tiempo perdido corrigiendo los errores, creo que el mayor culpable aquí es Studio Creator, pues siendo un IDE multi-plataforma debería de considerar estos casos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-115390030943785097?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/115390030943785097/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=115390030943785097' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115390030943785097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115390030943785097'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2006/07/atencin-con-altas-y-bajas-en-las_26.html' title='Atención con altas y bajas en las tablas de MySQL'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-115320246102398108</id><published>2006-07-18T00:01:00.001-06:00</published><updated>2008-04-07T00:38:02.045-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Enviando Correo con PHP</title><content type='html'>Una función muy popular en los sitios corporativos es la de Contáctenos. Voy a describir rápidamente cómo enviar una forma de contacto por email desde una forma de HTML.&lt;br /&gt;Primero necesitamos la forma que va a contener los datos.&lt;br /&gt;&lt;br /&gt;&lt;img alt="forma" src="http://img89.imageshack.us/img89/2453/formaql3.gif" border="0" height="140" width="265" /&gt;&lt;br /&gt;&lt;br /&gt;OK, la forma puede variar pero el concepto es el mismo. Veamos ahora el HTML de esta forma&lt;br /&gt;&lt;br /&gt;contacto.html (extracto)&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;form&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"contacto"&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;method&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"post"&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;action&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"doemail.php"&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;table&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;tr&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;Nombre:&lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;input&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"$form[de_nombre]"&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;type&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"text"&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;id&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"$form[nombre]"&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;tr&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;tr&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;Email:&lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;input&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"$form[de_email]"&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;type&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"text"&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;id&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"$form[email]"&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;tr&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;tr&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;Mensaje:&lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;textarea&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"$form[dmensaje]"&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;id&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"$form[mensaje]"&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;textarea&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;tr&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;tr&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;input&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;type&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"submit"&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"Submit"&lt;/span&gt;&lt;span style="color:#008080;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;value&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;=&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"Enviar"&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;     &lt;span style="color:#008080;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#6a5acd;"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;td&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;tr&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;table&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#008080;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;form&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Es una buena costumbre llenar el campo de id de los elementos de la forma aunque no es necesario. Observar cómo manejamos dentro del array form, todos los campos. Método Post a la páginadoemail.php.&lt;br /&gt;&lt;br /&gt;doemail.php&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color:#6a5acd;"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt; * doemail.php&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt; * Autor: Juan Pablo Ramírez&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt; * Fecha: 18 de julio 2006&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt; * Sencilla forma para enviar un correo de contacto por email&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt; */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;para_email&lt;/span&gt; &lt;span style="color:#804040;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; "&lt;span style="color:#ff00ff;"&gt;contacto@empresafictisio.com&lt;/span&gt;";&lt;br /&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;de_nombre&lt;/span&gt; &lt;span style="color:#804040;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;_POST&lt;/span&gt;&lt;span style="color:#6a5acd;"&gt;[&lt;/span&gt;"&lt;span style="color:#ff00ff;"&gt;forma&lt;/span&gt;"&lt;span style="color:#6a5acd;"&gt;][&lt;/span&gt;"&lt;span style="color:#ff00ff;"&gt;de_nombre&lt;/span&gt;"&lt;span style="color:#6a5acd;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;de_email&lt;/span&gt; &lt;span style="color:#804040;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt;  &lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;_POST&lt;/span&gt;&lt;span style="color:#6a5acd;"&gt;[&lt;/span&gt;"&lt;span style="color:#ff00ff;"&gt;forma&lt;/span&gt;"&lt;span style="color:#6a5acd;"&gt;][&lt;/span&gt;"&lt;span style="color:#ff00ff;"&gt;de_email&lt;/span&gt;"&lt;span style="color:#6a5acd;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;titulo&lt;/span&gt; &lt;span style="color:#804040;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; "&lt;span style="color:#ff00ff;"&gt;Desde forma de contacto&lt;/span&gt;";&lt;br /&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;mensaje&lt;/span&gt; &lt;span style="color:#804040;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;_POST&lt;/span&gt;&lt;span style="color:#6a5acd;"&gt;[&lt;/span&gt;"&lt;span style="color:#ff00ff;"&gt;forma&lt;/span&gt;"&lt;span style="color:#6a5acd;"&gt;][&lt;/span&gt;"&lt;span style="color:#ff00ff;"&gt;mensaje&lt;/span&gt;"&lt;span style="color:#6a5acd;"&gt;]&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;headers&lt;/span&gt; &lt;span style="color:#804040;"&gt;&lt;b&gt;=&lt;/b&gt;&lt;/span&gt; "&lt;span style="color:#ff00ff;"&gt;MIME-Version: 1.0&lt;/span&gt;&lt;span style="color:#6a5acd;"&gt;\r\n&lt;/span&gt;"&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt; "&lt;span style="color:#ff00ff;"&gt;Content-type: text/html; charset=iso-8859-1&lt;/span&gt;&lt;span style="color:#6a5acd;"&gt;\r\n&lt;/span&gt;"&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt; "&lt;span style="color:#ff00ff;"&gt;X-Mailer: PHP/&lt;/span&gt;" &lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; &lt;span style="color:#008080;"&gt;phpversion&lt;/span&gt;&lt;span style="color:#6a5acd;"&gt;()&lt;/span&gt; &lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt; "&lt;span style="color:#6a5acd;"&gt;\r\n&lt;/span&gt;" &lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt; "&lt;span style="color:#ff00ff;"&gt;From: \"&lt;/span&gt;"&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;de_nombre&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;"&lt;span style="color:#ff00ff;"&gt;\" &amp;lt;&lt;/span&gt;"&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;de_email&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;"&lt;span style="color:#ff00ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#6a5acd;"&gt;\r\n&lt;/span&gt;"&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt; "&lt;span style="color:#ff00ff;"&gt;To: \"&lt;/span&gt;"&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;titulo&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;"&lt;span style="color:#ff00ff;"&gt;\" &amp;lt;&lt;/span&gt;"&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;para_email&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;"&lt;span style="color:#ff00ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#6a5acd;"&gt;\r\n&lt;/span&gt;"&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt; "&lt;span style="color:#ff00ff;"&gt;Date: &lt;/span&gt;"&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;date&lt;/span&gt;&lt;span style="color:#6a5acd;"&gt;(&lt;/span&gt;"&lt;span style="color:#ff00ff;"&gt;r&lt;/span&gt;"&lt;span style="color:#6a5acd;"&gt;)&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;"&lt;span style="color:#6a5acd;"&gt;\r\n&lt;/span&gt;"&lt;span style="color:#804040;"&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt; "&lt;span style="color:#ff00ff;"&gt;Subject: Desde forma de contacto&lt;/span&gt;&lt;span style="color:#6a5acd;"&gt;\r\n&lt;/span&gt;";&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;// enviando correo&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;mail&lt;/span&gt;&lt;span style="color:#6a5acd;"&gt;(&lt;/span&gt;&lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;para_email&lt;/span&gt;, &lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;titulo&lt;/span&gt;, &lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;mensaje&lt;/span&gt;, &lt;span style="color:#804040;"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#008080;"&gt;headers&lt;/span&gt;&lt;span style="color:#6a5acd;"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#6a5acd;"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Esta es la manera más sencilla de enviar un correo con PHP, pero es bastante vulnerable contra inyecciones y spam. Más adelante escribiré otro método usando librerías espcializadas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-115320246102398108?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/115320246102398108/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=115320246102398108' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115320246102398108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115320246102398108'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2006/07/enviando-correo-con-php.html' title='Enviando Correo con PHP'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-115302034680111383</id><published>2006-07-15T21:12:00.000-06:00</published><updated>2007-05-07T08:15:27.700-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='studio creator'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Java Studio Creator 2 y Tomcat 5.5</title><content type='html'>Uno de los mejores IDE para JSF es el nuevo Java Studio Creator 2 (JSC). Es muy fácil&lt;br /&gt;crear aplicaciónes con una arquitectura muy similar a swing. JSC trae el Java&lt;br /&gt;System Application Server 8.x Platform Edition para las pruebas durante el desarrollo.&lt;br /&gt;Pero usualmente utilizo el Tomcat, pasé una tarde completa tratando de hace deploy&lt;br /&gt;y me encontraba con este error.&lt;br /&gt;&lt;pre&gt;Cannot create JDBC driver of class '' for connect URL 'null'&lt;/pre&gt;Seguí todas las &lt;a href="http://developers.sun.com/prodtech/javatools/jscreator/reference/docs/help/deploy/howtodeploy/deploy_tomcat.html"&gt;instrucciones&lt;/a&gt; que mencionan en la página de Sun.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Exportar el proyecto como War para JDK 1.4.1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Incorporar las librerías jstl.jar y standard.jar &lt;a href="http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html"&gt;JSTL 1.1&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Configurar el JNDI Datasource en Tomcat 5.5 (&lt;a href="http://tomcat.apache.org/tomcat-5.0-doc/jndi-datasource-examples-howto.html"&gt;how-to&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Si estamos usando MySQL u otro DBMS copiar su correspondiente jdbc driver o connector en &lt;tomcat&gt;/commons/lib&lt;br /&gt;&lt;/tomcat&gt;&lt;/li&gt;&lt;li&gt;Listo! es todo y ahora a probarlo en http://localhost:8080/app-name&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Pues parece sencillo, pero el punto &lt;span style="font-weight: bold;"&gt;3 &lt;/span&gt;tiene sus truquitos.&lt;br /&gt;&lt;br /&gt;Imaginemos que tenemos una BD de nombre lamparas con un usuario lamparas y password lamparasdata.  En el server.xml de tomcat el JDBC quedaría así:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;Resource&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"jdbc/lamparas"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;auth&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"Container"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;       &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;type&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"javax.sql.DataSource"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;username&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"lamparas"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;password&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"lamparasdata"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;       &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;removeAbandoned&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"true"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;logAbandoned&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"true"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;       &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;driverClassName&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"com.mysql.jdbc.Driver"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;       &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;url&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"jdbc:mysql://localhost/lamparas?autoReconnect=true"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;       &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;maxActive&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"8"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;maxIdle&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"4"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Luego copiaríamos el WAR a al directorio &lt;tomcat-installation&gt;/webapps&lt;br /&gt;Tomcat lo descomprime y lo instala, nos aseguramos que en el web.xml (web descriptor) se encuentre la siguiente definición.  El web.xml estará en &lt;tomcat xml=""&gt;&lt;/tomcat&gt;&lt;/tomcat-installation&gt;&lt;pre&gt;...&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;resource-ref&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;description&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;Creator generated DataSource Reference&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;res-ref-name&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;jdbc/lamparas&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/res-ref-name&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;res-type&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;javax.sql.DataSource&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/res-type&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;   &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;res-auth&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;Container&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/res-auth&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/resource-ref&amp;gt;&lt;/span&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;Arrancamos la aplicación y funcionará normalmente hasta que algún componente que haga binding a un elemento de la BD se presente y entonces nos mostrará el error anterior.&lt;br /&gt;&lt;br /&gt;Después de muchas horas de intentos fallidos, &lt;a href="http://saurondor.blogspot.com/"&gt;Saurondor&lt;/a&gt; me sugirió incluir en un Context la configuración del jdbc en server.xml yo le comenté que no me parecía la solución correcta pues entonces perdería toda practicidad hacer deploy con el WAR si de todas formas tengo que modificar el server.xml (que ya lo hice una vez, ¿no?). Para variar los errores con JSF son crípticos y en realidad no sabes lo que está pasando, pero parece ser que no encuentra la definicion del Datasource en server.xml por que le regresa valores nulos, con la configuración de arriba supuestamente la definición es &lt;span style="font-style: italic;"&gt;global&lt;/span&gt;, pero no la lee.&lt;br /&gt;&lt;br /&gt;Sin más que intentar y apunto del hartazgo le puse los tags de Context y sus parámetros.  Lo intenté así y funcionó, respiré profundo y me dije que no volvería a desechar algo que parezca obvio.&lt;br /&gt;&lt;br /&gt;La configuración final quedó así:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;Context&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;path&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"/lamparasweb"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;docBase&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"lamparasweb"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;debug&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"5"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;reloadable&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"true"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;crossContext&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"true"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;Resource&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"jdbc/lamparas"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;auth&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"Container"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;         &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;type&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"javax.sql.DataSource"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;username&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"lamparas"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;password&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"lamparasdata"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;         &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;removeAbandoned&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"true"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;logAbandoned&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"true"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;         &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;driverClassName&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"com.mysql.jdbc.Driver"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;         &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;url&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"jdbc:mysql://localhost/lamparas?autoReconnect=true"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;maxActive&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"8"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; &lt;/span&gt;&lt;span style="color: rgb(46, 139, 87);"&gt;&lt;b&gt;maxIdle&lt;/b&gt;&lt;/span&gt;=&lt;span style="color: rgb(255, 0, 255);"&gt;"4"&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;&amp;lt;/Context&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;*Actualización 5 mayo 2007&lt;/span&gt;&lt;br /&gt;Vicente David comenta que podemos incluir esta información dentro de nuestro proyecto.  Esto es muy útil cuando no tenemos acceso a los archivos de configuración del server logrando así una independencia en la configuración.&lt;br /&gt;&lt;br /&gt;Con sólo incluir los datos dentro de un archivo llamado &lt;span style="font-style: italic;"&gt;context.xml&lt;/span&gt; en META-INF.  META-INF es un directorio con información de la aplicación que se lee cuando el WAR está siendo descomprimido.  Es decir, sólo funcionará este método cuando estemos desplegando la applicación desde un WAR.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;META-INF/context.xml&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;xml&lt;/b&gt;&lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;version&lt;/b&gt;&lt;/span&gt;=&lt;span style="color:#ff00ff;"&gt;"1.0"&lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;encoding&lt;/b&gt;&lt;/span&gt;=&lt;span style="color:#ff00ff;"&gt;"UTF-8"&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;Context&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;Resource&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;name&lt;/b&gt;&lt;/span&gt;=&lt;span style="color:#ff00ff;"&gt;"&lt;/span&gt;&lt;span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;jdbc/lamparas&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;auth&lt;/b&gt;&lt;/span&gt;=&lt;span style="color:#ff00ff;"&gt;"Container"&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#008b8b;"&gt;                &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;type&lt;/b&gt;&lt;/span&gt;=&lt;span style="color:#ff00ff;"&gt;"javax.sql.DataSource"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;username&lt;/b&gt;&lt;/span&gt;=&lt;span style="color:#ff00ff;"&gt;"&lt;/span&gt;&lt;span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;lamparas&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#008b8b;"&gt;                &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;password&lt;/b&gt;&lt;/span&gt;=&lt;span style="color:#ff00ff;"&gt;"&lt;/span&gt;&lt;span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;lamparasdata&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;removeAbandoned&lt;/b&gt;&lt;/span&gt;=&lt;span style="color:#ff00ff;"&gt;"true"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;logAbandoned&lt;/b&gt;&lt;/span&gt;=&lt;span style="color:#ff00ff;"&gt;"true"&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#008b8b;"&gt;                &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;driverClassName&lt;/b&gt;&lt;/span&gt;=&lt;span style="color:#ff00ff;"&gt;"com.mysql.jdbc.Driver"&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#008b8b;"&gt;                &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;url&lt;/b&gt;&lt;/span&gt;=&lt;span style="color:#ff00ff;"&gt;"jdbc:mysql://localhost/&lt;/span&gt;&lt;span&gt;&lt;span style="color: rgb(255, 0, 255);"&gt;lamparas&lt;/span&gt;&lt;/span&gt;&lt;span style="color:#ff00ff;"&gt;?autoReconnect=true"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;maxActive&lt;/b&gt;&lt;/span&gt;=&lt;span style="color:#ff00ff;"&gt;"8"&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#008b8b;"&gt;                &lt;/span&gt;&lt;span style="color:#2e8b57;"&gt;&lt;b&gt;maxIdle&lt;/b&gt;&lt;/span&gt;=&lt;span style="color:#ff00ff;"&gt;"4"&lt;/span&gt;&lt;span style="color:#008b8b;"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;WatchedResource&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;WEB-INF/web.xml&lt;span style="color:#008b8b;"&gt;&amp;lt;/WatchedResource&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#008b8b;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;WatchedResource&lt;/span&gt;&lt;span style="color:#008b8b;"&gt;&amp;gt;&lt;/span&gt;META-INF/context.xml&lt;span style="color:#008b8b;"&gt;&amp;lt;/WatchedResource&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#008b8b;"&gt;&amp;lt;/Context&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-115302034680111383?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/115302034680111383/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=115302034680111383' title='16 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115302034680111383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115302034680111383'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2006/07/java-studio-creator-2-y-tomcat-55.html' title='Java Studio Creator 2 y Tomcat 5.5'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-115294665652449975</id><published>2006-07-15T00:57:00.000-06:00</published><updated>2006-07-15T22:53:56.870-06:00</updated><title type='text'>¿Puedo insertar código fuente sin perder formato en blogger?</title><content type='html'>Probando la inserción de código fuente en blogger&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; loadConfig() {&lt;br /&gt;        &lt;font color="#2e8b57"&gt;&lt;b&gt;boolean&lt;/b&gt;&lt;/font&gt; exists = (&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; File(configFile)).exists();&lt;br /&gt;        StringBuffer sb = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; StringBuffer();&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;// si existe el archivo lo leo&lt;/font&gt;&lt;br /&gt;        &lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; (exists) {&lt;br /&gt;            &lt;font color="#804040"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt; {&lt;br /&gt;                BufferedReader in = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; BufferedReader(&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; FileReader(&lt;br /&gt;                        configFile));&lt;br /&gt;                String str;&lt;br /&gt;                &lt;font color="#804040"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/font&gt; ((str = in.readLine()) != &lt;font color="#ff00ff"&gt;null&lt;/font&gt;) {&lt;br /&gt;                    sb.append(str);&lt;br /&gt;                }&lt;br /&gt;                in.close();&lt;br /&gt;                &lt;font color="#0000ff"&gt;// conviertiendo el xml al objeto&lt;/font&gt;&lt;br /&gt;                XStream xstream = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; XStream();&lt;br /&gt;                cfg = (ConfigSettings)xstream.fromXML(sb.toString());&lt;br /&gt;            } &lt;font color="#804040"&gt;&lt;b&gt;catch&lt;/b&gt;&lt;/font&gt; (IOException e) {&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        &lt;font color="#0000ff"&gt;// si no existe lo creo&lt;/font&gt;&lt;br /&gt;        &lt;font color="#804040"&gt;&lt;b&gt;else&lt;/b&gt;&lt;/font&gt; {&lt;br /&gt;            cfg = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; ConfigSettings();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;font color="#2e8b57"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;static&lt;/b&gt;&lt;/font&gt; &lt;font color="#2e8b57"&gt;&lt;b&gt;void&lt;/b&gt;&lt;/font&gt; saveConfig() {&lt;br /&gt;        XStream xstream = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; XStream();&lt;br /&gt;        String configxml = xstream.toXML(cfg);&lt;br /&gt;        &lt;font color="#804040"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt; {&lt;br /&gt;            BufferedWriter out = &lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; BufferedWriter(&lt;font color="#804040"&gt;&lt;b&gt;new&lt;/b&gt;&lt;/font&gt; FileWriter(&lt;br /&gt;                    configFile));&lt;br /&gt;            out.write(configxml);&lt;br /&gt;            out.close();&lt;br /&gt;        } &lt;font color="#804040"&gt;&lt;b&gt;catch&lt;/b&gt;&lt;/font&gt; (IOException e) {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;La respuesta es SI, sólo entra a la edición directa en HTML y encierra en el código entre los tags de &amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;And here is the rest of it.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-115294665652449975?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/115294665652449975/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=115294665652449975' title='10 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115294665652449975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115294665652449975'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2006/07/puedo-insertar-cdigo-fuente-sin-perder.html' title='¿Puedo insertar código fuente sin perder formato en blogger?'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31156664.post-115294564477998455</id><published>2006-07-15T00:28:00.000-06:00</published><updated>2006-07-15T02:26:28.646-06:00</updated><title type='text'>Knowledgebase de Programación Jupadev</title><content type='html'>Tengo más de 20 años programando (inicié con Basic en una Apple IIe cuando tenía 11 años) es muy fácil encontrarse con problemas que haz solucionado varias veces.  Pienso recopilar algunos métodos para poder consultarlos después.&lt;br /&gt;&lt;br /&gt;Actualmente estoy más interesado en Java y especialmente en Java Server Faces (JSF) con &lt;a href="http://www.hibernate.org"&gt;Hibernate&lt;/a&gt;, &lt;a href="http://xstream.codehaus.org/"&gt;XStream&lt;/a&gt;, &lt;a href="http://www.jdom.org/"&gt;JDOM&lt;/a&gt; y por supuesto &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt;.  Mi IDE favorito es Eclipse con el plugin de &lt;a href="http://www.myeclipseide.com/"&gt;MyEclipseIDE&lt;/a&gt;, bastante competente.  &lt;a href="http://www.borland.com/us/products/jbuilder/index.html"&gt;JBuilder&lt;/a&gt; es muy bueno, pero está muy caro por el momento.  Para desarrollos 100% JSF, el nuevo &lt;a href="http://developers.sun.com/prodtech/javatools/jscreator/"&gt;Java Studio Creator 2&lt;/a&gt; es la opción a seguir y aunque aún no tenga soporte nativo para Hibernate tiene herramientas gráficas que permiten la tarea de binding de componentes con datos facilmente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31156664-115294564477998455?l=jupabeans.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jupabeans.blogspot.com/feeds/115294564477998455/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31156664&amp;postID=115294564477998455' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115294564477998455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31156664/posts/default/115294564477998455'/><link rel='alternate' type='text/html' href='http://jupabeans.blogspot.com/2006/07/knowledgebase-de-programacin-jupadev.html' title='Knowledgebase de Programación Jupadev'/><author><name>juparave</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_ioYbByyEgz0/S6gKD-fehzI/AAAAAAAAAEg/8yxwVbOPefg/S220/jprv_ssa.jpg'/></author><thr:total>0</thr:total></entry></feed>
