<?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-1015771397498566433</id><updated>2011-11-27T16:01:16.724-08:00</updated><category term='linux'/><category term='annotations'/><category term='maven'/><category term='reflection'/><category term='tomcat'/><category term='mysql'/><category term='java'/><category term='shell'/><category term='servlets'/><title type='text'>harto codigo</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hartocodigo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1015771397498566433/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hartocodigo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Victor Hugo</name><uri>http://www.blogger.com/profile/05304356821263951886</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='23' src='http://3.bp.blogspot.com/_onCUlId5qmo/SUKVDOdCSmI/AAAAAAAAAJE/uee4z-4iCaQ/S220/Yo_mero_by_victorhvalle.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1015771397498566433.post-4569001501471212331</id><published>2011-08-10T04:24:00.000-07:00</published><updated>2011-08-10T10:51:29.454-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='servlets'/><title type='text'>Plantilla para web.xml (Servlet spec 2.5)</title><content type='html'>&lt;p&gt;Solo porque es un recurso que es muy utilizado y continuamente lo tengo que buscar, aquí les pongo una plantilla vacía para un archivo &lt;i&gt;web.xml&lt;/i&gt; de la especificación Java Servlets 2.5&lt;/p&gt;

&lt;div class="codigo"&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&amp;gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;welcome-file-list&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;welcome-file&amp;gt;index.jsp&amp;lt;/welcome-file&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/welcome-file-list&amp;gt;

&amp;lt;/web-app&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1015771397498566433-4569001501471212331?l=hartocodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hartocodigo.blogspot.com/feeds/4569001501471212331/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://hartocodigo.blogspot.com/2011/08/plantilla-para-webxml-servlet-spec-25.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1015771397498566433/posts/default/4569001501471212331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1015771397498566433/posts/default/4569001501471212331'/><link rel='alternate' type='text/html' href='http://hartocodigo.blogspot.com/2011/08/plantilla-para-webxml-servlet-spec-25.html' title='Plantilla para web.xml (Servlet spec 2.5)'/><author><name>Victor Hugo</name><uri>http://www.blogger.com/profile/05304356821263951886</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='23' src='http://3.bp.blogspot.com/_onCUlId5qmo/SUKVDOdCSmI/AAAAAAAAAJE/uee4z-4iCaQ/S220/Yo_mero_by_victorhvalle.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1015771397498566433.post-3479218154688485225</id><published>2011-02-15T05:14:00.000-08:00</published><updated>2011-02-15T07:53:01.684-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>Comandos básicos de MySQL para crear un usuario y darle permisos</title><content type='html'>&lt;p&gt;Listar&amp;eacute; rapidamente los comandos b&amp;aacute;sicos para crear una base de datos,
   un usuario y asignarle permisos a ese usuario para acceder a dicha base de datos.&lt;/p&gt;

&lt;p&gt;Cuando comenzamos con algun proyecto que requiera base de datos es importante:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;Tener un usuario destinado unicamente a la aplicaci&amp;oacute;n para que la base de datos no 
        sea accedida por &lt;em&gt;cualquiera&lt;/em&gt;.&lt;/li&gt;
    &lt;li&gt;Que el usuario creado este restringido por host de origen para aumentar la seguridad&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Los siguientes comandos son muy &lt;em&gt;autodescriptivos&lt;/em&gt; asi que no incurrir&amp;eacute; en ninguna explicaci&amp;oacute;n. Simplemente busco que esta entrada sea una referencia r&amp;aacute;pida al comenzar a programar algo.&lt;/p&gt;

&lt;div class="consola"&gt;&lt;pre&gt;
mysql&amp;gt; &lt;span class="x"&gt;CREATE DATABASE&lt;/span&gt; projectdb;
mysql&amp;gt; &lt;span class="x"&gt;CREATE USER&lt;/span&gt; 'projectuser'@'localhost' &lt;span class="x"&gt;IDENTIFIED BY&lt;/span&gt; 'password';
mysql&amp;gt; &lt;span class="x"&gt;GRANT ALL PRIVILEGES ON&lt;/span&gt; projectdb.* &lt;span class="x"&gt;TO&lt;/span&gt; 'projectuser'@'localhost' &lt;span class="x"&gt;WITH GRANT OPTION&lt;/span&gt;;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La documentaci&amp;oacute;n de estos comandos se encuentra en el &lt;a href="http://dev.mysql.com/doc/refman/5.1/en/adding-users.html" target="_blank"&gt;sitio de MySQL&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1015771397498566433-3479218154688485225?l=hartocodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hartocodigo.blogspot.com/feeds/3479218154688485225/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://hartocodigo.blogspot.com/2011/02/comandos-basicos-de-mysql-para-comenzar.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1015771397498566433/posts/default/3479218154688485225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1015771397498566433/posts/default/3479218154688485225'/><link rel='alternate' type='text/html' href='http://hartocodigo.blogspot.com/2011/02/comandos-basicos-de-mysql-para-comenzar.html' title='Comandos básicos de MySQL para crear un usuario y darle permisos'/><author><name>Victor Hugo</name><uri>http://www.blogger.com/profile/05304356821263951886</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='23' src='http://3.bp.blogspot.com/_onCUlId5qmo/SUKVDOdCSmI/AAAAAAAAAJE/uee4z-4iCaQ/S220/Yo_mero_by_victorhvalle.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1015771397498566433.post-8817932018553869503</id><published>2009-05-19T20:40:00.000-07:00</published><updated>2011-08-14T11:18:46.011-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Instalar LJMT (Linux, Java, Maven, Tomcat)</title><content type='html'>&lt;p&gt;En este &lt;em&gt;post&lt;/em&gt; explicar&amp;eacute; la forma mas r&amp;aacute;pida de instalar
   un entorno de desarrollo de aplicaciones J2EE &lt;strong&gt;muy b&amp;aacute;sico&lt;/strong&gt;
   usando Linux, Java, Maven y Tomcat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linux - Ubuntu&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Escog&amp;iacute; Ubuntu por las siguientes razones:&lt;/p&gt; 

&lt;ul&gt;
    &lt;li&gt;Es una distribuci&amp;oacute;n estable basada en Debian&lt;/li&gt;
    &lt;li&gt;Su &lt;a href="https://help.ubuntu.com/" target="_blank"&gt;documentaci&amp;oacute;n&lt;/a&gt; es excelente.&lt;/li&gt;
    &lt;li&gt;Tiene buen soporte en su &lt;a href="http://ubuntuforums.org/" target="_blank"&gt;foro&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;Su herramienta &lt;a href="http://en.wikipedia.org/wiki/Advanced_Packaging_Tool" target="_blank"&gt;apt&lt;/a&gt;.
    &lt;li&gt;Tiene buen soporte del hardware en las computadoras donde lo he instalado.&lt;/li&gt;
    &lt;li&gt;Si es que se utiliza como Desktop, los &lt;a href="http://www.youtube.com/watch?v=ZxfSwzhSn1c" target="_blank"&gt;efectos del Compiz&lt;/a&gt; son muy buenos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No ahondar&amp;eacute; en detalles sobre la instalaci&amp;oacute;n de Ubuntu
   porque adem&amp;aacute;s de que es muy sencilla, hay muchos tutoriales por 
   ah&amp;iacute; que tratan este tema. 
   Todos los pasos del resto de la gu&amp;iacute;a ser&amp;aacute;n realizados en la consola,
   as&amp;iacute; que pueden instalar la versi&amp;oacute;n
   &lt;a href="http://www.ubuntu.com/products/WhatIsUbuntu/desktopedition" target="_blank"&gt;Desktop&lt;/a&gt;
   , &lt;a href="http://www.ubuntu.com/products/whatisubuntu/serveredition" target="_blank"&gt;Server&lt;/a&gt;
   o incluso una versi&amp;oacute;n instalada en una m&amp;aacute;quina virtual sobre su amado Windows, da igual.&lt;/p&gt;

&lt;div class="referencia"&gt;
    &lt;table&gt;&lt;tr&gt;&lt;td valign="top"&gt;
        &lt;img src="http://www.ubuntu.com/themes/ubuntu07/images/icon-ubuntu.png"
            style="border: 0; margin-right: 10px; margin-top: 0px;" align="left" /&gt; 
    &lt;/td&gt;&lt;td valign="top"&gt;
        &lt;p&gt;&lt;span class="x"&gt;Links Ubuntu&lt;/span&gt;&lt;br /&gt;
        Descargar - 
        &lt;a class="x" href="http://www.ubuntu.com/getubuntu/download" target="_blank"&gt;http://www.ubuntu.com/getubuntu/download&lt;/a&gt;&lt;br /&gt;
        &lt;strike&gt;Solicitar el env&amp;iacute;o de un CD gratis - 
        &lt;span class="x"&gt;&lt;u&gt;https://shipit.ubuntu.com/&lt;/u&gt;&lt;/span&gt;&lt;/strike&gt;&lt;br /&gt;
        Foro - 
        &lt;a class="x" href="http://ubuntuforums.org/" target="_blank"&gt;http://ubuntuforums.org/&lt;/a&gt;&lt;br /&gt;
        Documentaci&amp;oacute;n - 
        &lt;a class="x" href="https://help.ubuntu.com/" target="_blank"&gt;https://help.ubuntu.com/&lt;/a&gt;&lt;br /&gt;
        &lt;/p&gt;
    &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;El unico detalle a considerar antes de trabajar con la instalaci&amp;oacute;n de Ubuntu es que, en caso de haber instalado la
   versi&amp;oacute;n &lt;em&gt;Server&lt;/em&gt; ser&amp;aacute; necesario asegurarnos que el servidor SSH se haya instalado; esto para poder
   acceder al servidor remotamente. En caso de no haber sido instalado desde el &lt;em&gt;wizard&lt;/em&gt; se puede instalar con la 
   siguiente instrucci&amp;oacute;n:&lt;p/&gt;

&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;sudo apt-get&lt;/span&gt; install sshd
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Java - Sun JDK6&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aunque es posible instalar Java usando &lt;span class="x"&gt;apt&lt;/span&gt; yo recomiendo hacerlo manualmente ya que se tiene m&amp;aacute;s
   control sobre la instalaci&amp;oacute;n adem&amp;aacute;s de que es probable que 
   alguna vez tengamos que instalar varios JDKs o JREs y de este modo es mas f&amp;aacute;cil &lt;em&gt;switchear&lt;/em&gt;
   de una versi&amp;oacute;n a otra.&lt;/p&gt;
   
&lt;p&gt;Es necesario descargar una copia del JDK del sitio de &lt;a href="http://java.sun.com/" target="_blank"&gt;Sun Microsystems&lt;/a&gt;.
   El archivo que utilizo como ejemplo en aqui es un binario (terminaci&amp;oacute;n .bin)&lt;/p&gt;
   
&lt;p&gt;Si se utiliza una versi&amp;oacute;n de Linux sin interfase gr&amp;aacute;fica se puede copiar al servidor usando SCP o algo similar.
   En caso de no tener un cliente SCP disponible (gFTP es mi recomendaci&amp;oacute;n) se puede copiar un archivo al servidor 
   usando la siguiente instrucci&amp;oacute;n de la l&amp;iacute;nea de comandos:&lt;/p&gt;

&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;scp&lt;/span&gt; /ruta/del/archivo usuario@servidor:/carpeta/destino
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para descomprimir, solamente hay que asegurarse que se tengan permisos de ejecuci&amp;oacute;n en el archivo
   y ejectutar el bin. Esto solamente crear&amp;aacute; una carpeta con los archivos necesarios en el mismo folder.&lt;/p&gt;

&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;chmod&lt;/span&gt; 755 jdk-6u11-linux-x64.bin
user@linuxbox:~$ &lt;span class="x"&gt;./jdk-6u11-linux-x64.bin&lt;/span&gt;
Sun Microsystems, Inc.  Binary Code License Agreement
[puedes saltarte la licencia apretando 'q']
Do you agree to the above license terms? [yes or no]
yes
Unpacking...
Checksumming...
.
.
.
Done.
user@linuxbox:~$
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Yo generalmente creo un folder &lt;em&gt;/usr/java&lt;/em&gt; en donde guardo todos los archivos relacionados con Java
   (como diferentes JDKs, JREs, Application Servers, Maven, Ant, etc.).&lt;/p&gt;
   
&lt;p&gt;Escribir el folder &lt;em&gt;/usr&lt;/em&gt;
   requiere ser un super usuario asi que tenemos que usar &lt;span class="x"&gt;sudo&lt;/span&gt;
   para crear el directorio. Despu&amp;eacute;s de esto lo &amp;uacute;nico que hay que hacer
   es mover el folder con los archivos del JDK a esta nueva ubicaci&amp;oacute;n.&lt;/p&gt;

&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;sudo mkdir&lt;/span&gt; /usr/java
[sudo] password for linuxbox: [el password con que el que ingresaste]
user@linuxbox:~$ &lt;span class="x"&gt;sudo mv&lt;/span&gt; jdk1.6.0_11 /usr/java
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Finalmente es necesario agregar la variable JAVA_HOME en el archivo .profile en el home
   del usuario actual y agregar su carpeta &lt;em&gt;bin&lt;/em&gt; al PATH&lt;/p&gt;

&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;vi&lt;/span&gt; ~/.profile
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="codigo"&gt;&lt;pre&gt;
.
.
.
&lt;span class="x"&gt;JAVA_HOME&lt;/span&gt;=/usr/java/jdk1.6.0_11
export JAVA_HOME
&lt;span class="x"&gt;PATH&lt;/span&gt;=$PATH:$JAVA_HOME/bin
export PATH
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;source&lt;/span&gt; ~/.profile
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para probar la instalaci&amp;oacute;n solamente hay que introducir:&lt;/p&gt;

&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;java&lt;/span&gt; -version
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Maven 2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Maven es un robusto gestor de dependencias distribuido con varios &lt;em&gt;plugins&lt;/em&gt; (incluso el compilador
   es un &lt;em&gt;plugin&lt;/em&gt;) que facilitan la tarea de gestionar, construir y hacer el &lt;em&gt;deploy&lt;/em&gt; de proyectos J2EE.
   Maven basa las reglas para construir un proyecto
   en un archivo XML llamado POM (Project Object Model) el cual contiene los distintos &lt;em&gt;plugins&lt;/em&gt; y su
   configuraci&amp;oacute;n a utilizar durante el ciclo de vida de la construcci&amp;oacute;n de un proyecto.
   Muchas personas lo encuentran dificil de utilizar ya que se debe de tener una estructura espec&amp;iacute;fica
   en los archivos fuente; a pesar de que esto tiene algunos contras tiene la gran ventaja
   de que la estandarizaci&amp;oacute;n tiene como consecuencia la agilizaci&amp;oacute;n del mantenimiento
   del proyecto.&lt;/p&gt;

&lt;p&gt;Proximamente escribir&amp;eacute; una entrada sobre el uso de Maven, mientras tanto me remitir&amp;eacute;
   a la instalaci&amp;oacute;n.&lt;/p&gt;
   
&lt;p&gt;Al igual que Java, es posible instalar Maven utilizando el gestor de paquetes &lt;span class="x"&gt;apt&lt;/span&gt;,
   sin embargo, prefiero el m&amp;eacute;todo manual ya que asi tenemos mas control sobre la instalaci&amp;oacute;n
   (adem&amp;aacute;s de que en este caso es a&amp;uacute;n m&amp;aacute;s sencillo).&lt;/p&gt;

&lt;p&gt;Para descargar Maven basta con dirigirnos a &lt;a href="http://maven.apache.org/download.html"&gt;maven.apache.org&lt;/a&gt; y escoger alg&amp;uacute;n &lt;em&gt;mirror&lt;/em&gt;,
   el tipo de archivo que uso en este tutorial es un &lt;em&gt;tar.gz&lt;/em&gt;. Despu&amp;eacute;s de obtener el archivo, es necesario descomprimirlo.
   Con esto obtendremos una carpeta llamada &lt;em&gt;apache-maven-2.0.10&lt;/em&gt;, ahora solamente tenemos que copiar el folder a
   &lt;em&gt;/usr/java&lt;/em&gt; (siguiendo la recomendaci&amp;oacute;n de poner todos los archivos de Java en un solo lugar).&lt;/p&gt;
   
&lt;p&gt;Aqui presento los comandos para descargar, descomprimir y colocar la version de Maven 2.0.10&lt;/p&gt;

&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;wget&lt;/span&gt; http://archive.apache.org/dist/maven/binaries/apache-maven-2.0.10-bin.tar.gz
user@linuxbox:~$ &lt;span class="x"&gt;tar&lt;/span&gt; -xvfz apache-maven-2.0.10-bin.tar.gz
user@linuxbox:~$ &lt;span class="x"&gt;sudo cp&lt;/span&gt; apache-maven-2.0.10 /usr/java
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Finalmente debemos editar nuestro archivo .profile para 'dar de alta' la variable de entorno M2_HOME apuntando al home de Maven
   (esta es opcional pero hace m&amp;aacute;s claro el script) y agregar al PATH la ubicaci&amp;oacute;n $M2_HOME/bin.&lt;/p&gt;



&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;vi&lt;/span&gt; ~/.profile
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="codigo"&gt;&lt;pre&gt;
.
.
.
&lt;span class="x"&gt;M2_HOME&lt;/span&gt;=/usr/java/apache-maven-2.0.10
export M2_HOME
&lt;span class="x"&gt;PATH&lt;/span&gt;=$PATH:$M2_HOME/bin
export PATH
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;source&lt;/span&gt; ~/.profile
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para probar la instalaci&amp;oacute;n &amp;uacute;nicamente usamos &lt;span class="x"&gt;mvn&lt;/span&gt; con el par&amp;aacute;metro -version&lt;/p&gt;

&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ mvn -version
Maven version: 2.0.9
Java version: 1.6.0_11
OS name: "linux" version: "2.6.27-14-generic" arch: "i386" Family: "unix"
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Intermedio&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hasta ahora debemos de tener una estaci&amp;oacute;n de trabajo preparada para poder programar y compilar proyectos Java,
   necesitamos &amp;uacute;nicamente un &lt;em&gt;application server&lt;/em&gt; para poder hacer &lt;em&gt;deploy&lt;/em&gt; de una aplicaci&amp;oacute;n Web.
   Con las herramientas que tenemos hasta ahorita podemos hacer el experimento de un 'Hello World' (en Web)
   usando solamente Maven y su plugin &lt;em&gt;archetype&lt;/em&gt;.&lt;/p&gt;

&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;mvn&lt;/span&gt; archetype:create \
  -DgroupId=com.hartoingenio \
  -DartifactId=web-artifact \
  -DarchetypeArtifactId=maven-archetype-webapp
  .
  .
  .  
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 33 seconds
[INFO] Finished at: Tue May 19 16:41:13 PDT 2009
[INFO] Final Memory: 8M/14M
[INFO] ------------------------------------------------------------------------

user@linuxbox:~$ &lt;span class="x"&gt;cd&lt;/span&gt; web-artifact/
user@linuxbox:~$ &lt;span class="x"&gt;mvn&lt;/span&gt; clean war:exploded tomcat:run
  .
  .
  .
May 19, 2009 4:41:17 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;S&amp;oacute;lo pon en tu navegador el siguiente URL (en caso de que el proyecto no haya sido creado en el mismo equipo,
   reemplaza &lt;em&gt;localhost&lt;/em&gt; por el nombre o direcci&amp;oacute;n IP del servidor).&lt;/p&gt;

&lt;div class="referencia"&gt;&lt;pre&gt;
http://localhost:8080/web-artifact/
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Esto que acabamos de hacer no instala Tomcat en el equipo, simplemente Maven descarga los JARs de Tomcat del repositorio y echa a andar una versi&amp;oacute;n &lt;em&gt;slim&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apache Tomcat 6.0.18&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La instalaci&amp;oacute;n de Tomcat muy sencilla, muy parecido a lo que hicimos con Maven. Para descargar Tomcat basta con dirigirnos a &lt;a href="http://tomcat.apache.org/download-60.cgi"&gt;tomcat.apache.org&lt;/a&gt; y escoger alg&amp;uacute;n &lt;em&gt;mirror&lt;/em&gt;,
   el tipo de archivo que uso en este tutorial es un &lt;em&gt;tar.gz&lt;/em&gt;. Despu&amp;eacute;s de obtener el archivo, es necesario descomprimirlo.
   Con esto obtendremos una carpeta llamada &lt;em&gt;apache-tomcat-6.0.18&lt;/em&gt;, ahora solamente tenemos que copiar el folder a
   &lt;em&gt;/usr/java&lt;/em&gt; (siguiendo la recomendaci&amp;oacute;n de poner todos los archivos de Java en un solo lugar).&lt;/p&gt;


&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;wget&lt;/span&gt; http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.tar.gz
user@linuxbox:~$ &lt;span class="x"&gt;tar&lt;/span&gt; -xvfz apache-tomcat-6.0.18.tar.gz
user@linuxbox:~$ &lt;span class="x"&gt;sudo cp&lt;/span&gt; apache-tomcat-6.0.18 /usr/java
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Finalmente debemos editar nuestro archivo .profile para 'dar de alta' la variable de entorno CATALINA_HOME apuntando al home de la instalaci&amp;oacute;n de Tomcat y agregar al PATH la ubicaci&amp;oacute;n &lt;em&gt;$CATALINA_HOME/bin.&lt;/em&gt;&lt;/p&gt;



&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;vi&lt;/span&gt; ~/.profile
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="codigo"&gt;&lt;pre&gt;
.
.
.
&lt;span class="x"&gt;CATALINA_HOME&lt;/span&gt;=/usr/java/apache-tomcat-6.0.18
export CATALINA_HOME
&lt;span class="x"&gt;PATH&lt;/span&gt;=$PATH:$CATALINA_HOME/bin
export PATH
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;source&lt;/span&gt; ~/.profile
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para probar la instalaci&amp;oacute;n simplemente introducimos:&lt;/p&gt;

&lt;div class="consola"&gt;&lt;pre&gt;
user@linuxbox:~$ &lt;span class="x"&gt;catalina.sh&lt;/span&gt; run
.
.
.
INFO: Server startup in 961 ms
user@linuxbox:~$ 
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Y checamos en:&lt;/p&gt;

&lt;div class="referencia"&gt;&lt;pre&gt;
http://localhost:8080/
&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Listo!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1015771397498566433-8817932018553869503?l=hartocodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hartocodigo.blogspot.com/feeds/8817932018553869503/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://hartocodigo.blogspot.com/2009/05/instalar-ljmt-linux-java-maven-tomcat.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1015771397498566433/posts/default/8817932018553869503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1015771397498566433/posts/default/8817932018553869503'/><link rel='alternate' type='text/html' href='http://hartocodigo.blogspot.com/2009/05/instalar-ljmt-linux-java-maven-tomcat.html' title='Instalar LJMT (Linux, Java, Maven, Tomcat)'/><author><name>Victor Hugo</name><uri>http://www.blogger.com/profile/05304356821263951886</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='23' src='http://3.bp.blogspot.com/_onCUlId5qmo/SUKVDOdCSmI/AAAAAAAAAJE/uee4z-4iCaQ/S220/Yo_mero_by_victorhvalle.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1015771397498566433.post-937219061102597433</id><published>2009-05-11T12:08:00.000-07:00</published><updated>2009-05-12T20:14:53.284-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Comandos más utilizados en Linux</title><content type='html'>&lt;p&gt;Encontr&amp;eacute; este comando ingenioso que muestra los comandos m&amp;aacute;s utilizados en la consola y el n&amp;uacute;mero de veces que los hemos ejecutado:&lt;/p&gt;

&lt;div class="codigo"&gt;&lt;pre&gt;
&lt;span class="x"&gt;history&lt;/span&gt; | &lt;span class="x"&gt;awk&lt;/span&gt; '{a[$2]++}END{for(i in a){print a[i] " " i}}' | &lt;span class="x"&gt;sort&lt;/span&gt; -rn | &lt;span class="x"&gt;head&lt;/span&gt; -n 10
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Aqu&amp;iacute; la explicaci&amp;oacute;n del script:
&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;history&lt;/strong&gt; - Obtiene la lista de comandos usados recientemente con el siguiente formato:&lt;br /&gt;
        &lt;blockquote&gt;100 cd project&lt;br /&gt;
        101 mvn clean install&lt;br /&gt;
        102 cd target&lt;br /&gt;
        103 cp project-1.0.jar /somewhere&lt;/blockquote&gt;
        (no estoy seguro con que vigencia se 'guardan' los comandos; si lo encuentro actualizo).&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;awk '{a[$2]++}END{for(i in a){print a[i] " " i}}'&lt;/strong&gt; - 
        Utiliza &lt;a href="http://www.gnu.org/software/gawk/" target="_blank"&gt;awk&lt;/a&gt; para incrementar los valores de un arreglo &lt;em&gt;a&lt;/em&gt;,
        usando el comando introducido como llave (el segundo par&amp;aacute;metro de la lista anterior).&lt;br /&gt;
        Despu&amp;eacute;s de haber recibido la lista, simplemente recorre el arreglo y lo imprime en pantalla.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;sort -rn&lt;/strong&gt; - Ordena la lista generada por el comando anterior de mayor a menor y usando la representaci&amp;oacute;n num&amp;eacute;rica de la cadena&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;head -n 10&lt;/strong&gt; - Muestra solo los primeros 10 elementos de la lista (si usamos solo &lt;em&gt;head&lt;/em&gt; sin parametros muestra 10,
        agregu&amp;eacute; el -n 10 para hacerlo m&amp;aacute;s claro).&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;Mi resultado fue:&lt;/p&gt;

&lt;div class="consola"&gt;&lt;pre&gt;
vhuerta@vhuertat43:~$ &lt;span class="x"&gt;history&lt;/span&gt; | &lt;span class="x"&gt;awk&lt;/span&gt; '{a[$2]++}END{for(i in a){print a[i] " " i}}' | &lt;span class="x"&gt;sort&lt;/span&gt; -rn | &lt;span class="x"&gt;head&lt;/span&gt; -n 10
111 svn
88 cd
83 ls
34 mvn
23 exit
19 man
16 ssh
15 cat
12 sudo
12 ps
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Hmmm... Interesante&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1015771397498566433-937219061102597433?l=hartocodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hartocodigo.blogspot.com/feeds/937219061102597433/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://hartocodigo.blogspot.com/2009/05/comandos-mas-utilizados-en-linux.html#comment-form' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1015771397498566433/posts/default/937219061102597433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1015771397498566433/posts/default/937219061102597433'/><link rel='alternate' type='text/html' href='http://hartocodigo.blogspot.com/2009/05/comandos-mas-utilizados-en-linux.html' title='Comandos m&amp;aacute;s utilizados en Linux'/><author><name>Victor Hugo</name><uri>http://www.blogger.com/profile/05304356821263951886</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='23' src='http://3.bp.blogspot.com/_onCUlId5qmo/SUKVDOdCSmI/AAAAAAAAAJE/uee4z-4iCaQ/S220/Yo_mero_by_victorhvalle.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1015771397498566433.post-6357154065142303430</id><published>2009-02-17T19:42:00.000-08:00</published><updated>2011-02-15T05:43:30.897-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reflection'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='annotations'/><title type='text'>Anotaciones en Java 5+</title><content type='html'>&lt;p&gt;Cuando sali&amp;oacute; Java 5 el c&amp;oacute;digo se lleno de anotaciones. Para los que no las ubiquen
son esas sentencias que comienzan con una @ y que se colocan antes de la declaraci&amp;oacute;n
de una clase o de un atributo o de un m&amp;eacute;todo:&lt;/p&gt;

&lt;div class="codigo"&gt;&lt;pre&gt;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

&lt;span class="x"&gt;@Deprecated&lt;/span&gt;
public class AlgunaClaseTest {
    &lt;span class="x"&gt;@Before&lt;/span&gt;
    public void setUp() {
    }

    &lt;span class="x"&gt;@Test&lt;/span&gt;
    public void testAlgo() {
    }

    &lt;span class="x"&gt;@After&lt;/span&gt;
    public void tearDown() {
    }
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Al principio me disgustaban ya que a mi gusto ensuciaban el c&amp;oacute;digo y rompian con las
reglas de sintaxis basicas de Java (the simpler the better), pero pasado de un tiempo
es posible por fin tenerles agrado despu&amp;eacute;s de ver todas sus ventajas.&lt;/p&gt;

&lt;p&gt;Una anotaci&amp;oacute;n se define asi en el c&amp;oacute;digo:&lt;/p&gt;

&lt;div class="codigo"&gt;&lt;pre&gt;
public &lt;span class="x"&gt;@interface&lt;/span&gt; Anotacion {
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O asi en caso de que quisieramos parametros:&lt;/p&gt;

&lt;div class="codigo"&gt;&lt;pre&gt;
public &lt;span class="x"&gt;@interface&lt;/span&gt; AnotacionParametro {
    String parametro();
}
&lt;/pre&gt;&lt;/div&gt;

&lt;div class="codigo"&gt;&lt;pre&gt;
public &lt;span class="x"&gt;@interface&lt;/span&gt; AnotacionParametros {
    int id();
    String valor();
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Las anotaciones pasadas se podrian usar de este modo en una clase&lt;/p&gt;

&lt;div class="codigo"&gt;&lt;pre&gt;
&lt;span class="x"&gt;@Anotacion&lt;/span&gt;
public class AlgunaClase {
    &lt;span class="x"&gt;// Cuando es un solo parametro se puede omitir el nombre y el '='&lt;/span&gt;
    &lt;span class="x"&gt;@AnotacionParametro("parametro")&lt;/span&gt;
    public void algunMetodo() {
    }

    &lt;span class="x"&gt;@AnotacionParametros(id=1, valor="algo")&lt;/span&gt;
    public void algunOtroMetodo() {
    }
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Es importante al ver el c&amp;oacute;digo el no confundir a la a anotaci&amp;oacute;n con una
&lt;em&gt;interface&lt;/em&gt; tradicional, las anotaciones no se heredan ni forman parte del
dise&amp;ntilde;o de clases de los sistemas, estas unicamente sirven para agregarle 
metadatos al miembro sobre el cual se colocan. Se podria decir que son 'comentarios avanzados'.&lt;/p&gt;

&lt;p&gt;El ponerle anotaciones al c&amp;oacute;digo no cambiaria &lt;span class="x"&gt;ABSOLUTAMENTE NADA&lt;/span&gt;
en el comportamiento del mismo. La pregunta es entonces: Si no cambia nada,
&amp;iquest;Para qu&amp;eacute; las quiero?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Supongamos que queremos crear un programa que permita correr clases tipo pruebas unitarias
y que queremos que solamente se ejecuten los m&amp;eacute;todos que esten definidos como pruebas:&lt;/p&gt;

&lt;div class="codigo"&gt;&lt;pre&gt;
public class TestCase {
    &lt;span class="x"&gt;@Test&lt;/span&gt;
    public void prueba() { }
 
    &lt;span class="x"&gt;@Test&lt;/span&gt;
    public void excepcion() {
        throw new RuntimeException("Error aqui");
    }
 
    &lt;span class="x"&gt;@Test&lt;/span&gt;
    public void otraPrueba() { }
 
    &lt;span class="x"&gt;@Test&lt;/span&gt;
    public void otraExcepcion() {
        throw new RuntimeException("Otro error aqui");
    }
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para esto previamente tendr&amp;iacute;amos que haber definido una anotaci&amp;oacute;n llamada &lt;em&gt;Test&lt;/em&gt;,
la cual deberia de ser importada por todas las clases que se quisieran probar. Nuestra
anotaci&amp;oacute;n debe de tener definida otra anotaci&amp;oacute;n para que funcione del modo que queremos
(s&amp;iacute;, las anotaciones pueden tener anotaciones :) ), esta es
&lt;span class="x"&gt;@Retention&lt;/span&gt; y tiene como atributo la pol&amp;iacute;tica de retenci&amp;oacute;n
&lt;span class="x"&gt;RetentionPolicy.RUNTIME&lt;/span&gt; para que el compilador la mantenga
ahi despu&amp;eacute;s de haber creado el archivo &lt;em&gt;class&lt;/em&gt;, ya que por default son eliminadas
al compilar el archivo. Otra anotaci&amp;oacute;n que es conveniente indicar es
&lt;span class="x"&gt;@Target(ElementType.METHOD)&lt;/span&gt; para evitar que sea colocada en
otro elemento que no sea un m&amp;eacute;todo. Estas anotaciones y enumeraciones estan todas
en el paquete &lt;em&gt;java.lang.annotation&lt;/em&gt;&lt;/p&gt;

&lt;div class="codigo"&gt;&lt;pre&gt;
import java.lang.annotation.*;

&lt;span class="x"&gt;@Retention(RetentionPolicy.RUNTIME)&lt;/span&gt;
&lt;span class="x"&gt;@Target(ElementType.METHOD)&lt;/span&gt;
public @interface Test {
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Y ahora si, nuestro &lt;em&gt;Test Runner&lt;/em&gt; quedaria del siguiente modo:&lt;/p&gt;

&lt;div class="codigo"&gt;&lt;pre&gt;
import java.lang.reflect.*;

public class TestRunner {
    public static void main(String[] args) throws Exception {
        int exito = 0;
        int fallas = 0;
        
        Class&lt;?&gt; clazz = Class.forName(args[0]);
        Object obj = clazz.newInstance();
        
        for (Method m : clazz.getMethods()) {
            if (&lt;span class="x"&gt;m.isAnnotationPresent(Test.class)&lt;/span&gt;) {
                try {
                    m.invoke(obj);
                    System.out.printf("Prueba %s ejecutado%n", m.getName());
                    exito++;
                } catch (Throwable t) {
                    System.out.printf("Prueba %s fallo: %s %n", m, t.getCause());
                    fallas++;
                }
            }
        }
        System.out.printf("OK: %d, Fallas: %d%n", exito, fallas);
    }
}
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;El c&amp;oacute;digo es muy sencillo, unicamente crea un objeto usando la clase pasada
como primer argumento en la l&amp;iacute;nea de comandos y ejecuta todos los m&amp;eacute;todos que
tengan una anotaci&amp;oacute;n del tipo Test.class definida, hace un conteo de errores
y finalmente muestra el resumen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusi&amp;oacute;n&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Muchos de los frameworks actuales utilizan &lt;em&gt;reflection&lt;/em&gt; much&amp;iacute;simo (Spring,
JUnit, Hibernate, JSF, etc, etc, etc...), la implementaci&amp;oacute;n de anotaciones desde
Java 5 ha permitido que algunos de estos se mantengan alejados del comportamiento
del c&amp;oacute;digo del sistema y unicamente utilicen los metadatos para llevar a cabo sus
tareas, favoreciendo asi la limpieza y legibilidad del c&amp;oacute;digo.&lt;/p&gt;

&lt;p&gt;Es importante que aunque sea rara la vez que tengamos que programar una nueva
anotaci&amp;oacute;n, sepamos emplearlas correctamente y sacarles provecho para tener sistemas
mas limpios y menos acoplados.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aqui se puede encontrar la referencia oficial de Sun (in english of course) sobre
anotaciones, el ejemplo se tomo de aqui y fue mejorado en este post ;) - 
&lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html" target="_blank"&gt;
    http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html
&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1015771397498566433-6357154065142303430?l=hartocodigo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hartocodigo.blogspot.com/feeds/6357154065142303430/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://hartocodigo.blogspot.com/2009/02/anotaciones-en-java-5.html#comment-form' title='6 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1015771397498566433/posts/default/6357154065142303430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1015771397498566433/posts/default/6357154065142303430'/><link rel='alternate' type='text/html' href='http://hartocodigo.blogspot.com/2009/02/anotaciones-en-java-5.html' title='Anotaciones en Java 5+'/><author><name>Victor Hugo</name><uri>http://www.blogger.com/profile/05304356821263951886</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='33' height='23' src='http://3.bp.blogspot.com/_onCUlId5qmo/SUKVDOdCSmI/AAAAAAAAAJE/uee4z-4iCaQ/S220/Yo_mero_by_victorhvalle.png'/></author><thr:total>6</thr:total></entry></feed>
