<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>programacion &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/programacion/</link>
	<description>Feed of posts on WordPress.com tagged "programacion"</description>
	<pubDate>Sat, 12 Dec 2009 06:49:47 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Que es Fundamentos de Progrmación otro punto de vista...]]></title>
<link>http://ricardopons.wordpress.com/2009/12/12/que-es-fundamentos-de-progrmacion-otro-punto-de-vista/</link>
<pubDate>Sat, 12 Dec 2009 06:47:28 +0000</pubDate>
<dc:creator>kusanagixi</dc:creator>
<guid>http://ricardopons.wordpress.com/2009/12/12/que-es-fundamentos-de-progrmacion-otro-punto-de-vista/</guid>
<description><![CDATA[Bueno antes que nada les agradezco  por tomarse el tiempo. Antes de empezar con tecnicismos sobre lo]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Bueno antes que nada les agradezco  por tomarse el tiempo.</p>
<p>Antes de empezar con tecnicismos sobre lo que es en sí fundamentos de programación , si alguna vez te  has preguntado cómo han desarrollado  alguna aplicación  por ejemplo el msn u office o el mismo Windows en si  puede variar, si respondes a esta pregunta  que si, entonces te diré que todo comienza aquí, en lo que es Fundamentos de programación.</p>
<p>Esto lo vemos en la universidad (digo esto porque yo curse esta materia ), los fundamentos de programación no son más que las bases , los cimientos en donde nosotros vamos a recargar nuestros conocimientos, si estos cimientos son frágiles e inestables simplemente se derrumbara y nos estancaremos en un hoyo y caeremos en uno de los problemas más habituales del que intenta saber programar es , confundir todo y revolverlo.</p>
<p>Bueno antes que nada para los que han cursado o están cursando estas bases de programación seguramente están  viendo lo que es un algoritmo , un diagrama de flujo etc.…</p>
<p>Antes que nada, el diagrama de flujo a mi criterio no es muy útil en la actualidad la metodología de programación ha cambiado con el paso de los años  y la forma de razonar evoluciona, la forma de explicar tan sistematizada de un profesor que en su mayoría estancado por los conocimientos adquiridos hace 5 10 años o más (claro hay excepciones como en todo) hace que complique el aprendizaje, el modelo de enseñanza a mi criterio es tan anticuado que en vez de a ayudarnos a aprender , a ejercer ese poder de razonar y usar la lógica la confunde  y la minimiza a tal que nos provoca inseguridad a la hora de sentarse en una silla y estar enfrente de una computadora  tratando resolver un problema sin saber por dónde empezar, todo esto debe cambiar el ser desarrollador es estar siempre al día , para el que piense que acabar una carrera  es terminar y ya  le diré que es solo el comienzo pues siempre hay que crecer evolucionar y estar al día.</p>
<p><strong><em>“Debe uno difundirse el ser Autodidacta”</em></strong></p>
<p>Bueno a lo que voy</p>
<p><strong>Fundamentos de Programación es:</strong> Tener las bases esenciales(básicas)  para poder desarrollar , comprender  y solucionar problemas mediante el uso de la lógica y razón .</p>
<p><strong>Que es un Algoritmo:</strong> Tan simple como seguir un conjunto de pasos  para poder resolver un problema.</p>
<p><strong>Uno debe estar consiente que el desarrollar la lógica es diferente que razonar , la lógica es ser capaz de poder interpretar mediante un algoritmo lo que nuestra razón define para la solución de un problema.</strong></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Bienvenidos!!]]></title>
<link>http://ricardopons.wordpress.com/2009/12/12/bienvenidos/</link>
<pubDate>Sat, 12 Dec 2009 06:32:31 +0000</pubDate>
<dc:creator>kusanagixi</dc:creator>
<guid>http://ricardopons.wordpress.com/2009/12/12/bienvenidos/</guid>
<description><![CDATA[Bueno antes que nada muchas gracias por tomarse la molestia de leer este espacio donde pretendo expl]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Bueno antes que nada muchas gracias por tomarse la molestia de leer este espacio donde pretendo explicar en una serie de tutoriales , soluciones tecnicas sobre  lo que a muchos se complica la Programación, Diseño.</p>
<p>Bueno mi intención es atreves de este medio poder orientar y ayudar a esos curiosos ya sea principiantes o avanzados en la programacion de una perspectiva diferente.</p>
<p>Los temas que abarcare serán estos:</p>
<p>Fundamentos de Programación(Metodología de como saber Programar)No es lo mismo Pensar en Como Programar a Razonar en Como Programar).</p>
<p>Sentencias Básicas de Programación.</p>
<p>Explicación del como la tecnología actual  puede ayudar a un  Programador a hacerle la codificación mas amena y fácil.</p>
<p>Todo esto a mi punto de vista asi que el que lea este blog debe saber de ante mano que las opiniones ,observaciones, ideas mostradas por el autor( un servidor) no deben ser precisamente la forma en que se deben hacer o decir las cosas mas bien invito a la reflexión  a la modernización  de la forma de ver lo que es en si ser un Programador que a mi me gusta mejor llamarlo Desarrollador.</p>
<p>Una vez explicado esto poco a poco expondre problemas variados muy comunes en universidad todo puede varias  desde un simple algoritmo  , código fuente en algún lenguaje o BD  en un Manejador hasta proyectos mas avanzados como el uso de XNA Game Studio o Direcxt , encriptación todo con el fin de poder ayudar  a entender  a esas personas que se interesan  por estos temas y sobre todo por aprender mas.</p>
<p>Todo lo que he aprendido es por que siempre he sido autodidacta , tal vez los métodos que expongo no sean los mas efectivos o mas eficientes solo espero les pueda servir ya que ese es el objetivo de este blog..</p>
<p>Bueno todo esto escribo sin presentarme que mala educación de mi parte.</p>
<p>Mi nombre es Rikardo Pons.</p>
<p>Mi Edad es 24 años.</p>
<p>Llevo Aproximadamente 12 años en este mundo de la programación.</p>
<p>Reconocimientos:</p>
<p>3.- Lugar Nacional  en Desarrollo y Multimedia de Prototipos  DGETI 2002.</p>
<p>Desarrollador 5 Estrellas Microsoft.</p>
<p><a href="http://www.mslatam.com/latam/msdn/comunidad/dce2005/">http://www.mslatam.com/latam/msdn/comunidad/dce2005/</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Instalar Ruby on Rails en Windows]]></title>
<link>http://eduardodm.wordpress.com/2009/12/11/instalar-ruby-on-rails-en-windows/</link>
<pubDate>Sat, 12 Dec 2009 00:25:06 +0000</pubDate>
<dc:creator>eduardodm</dc:creator>
<guid>http://eduardodm.wordpress.com/2009/12/11/instalar-ruby-on-rails-en-windows/</guid>
<description><![CDATA[Bien como dice la entrada instalar RoR [Ruby on Rails] este práctico y poderoso framework para el de]]></description>
<content:encoded><![CDATA[Bien como dice la entrada instalar RoR [Ruby on Rails] este práctico y poderoso framework para el de]]></content:encoded>
</item>
<item>
<title><![CDATA[PHPMailer: Envía correos desde tu web]]></title>
<link>http://phpsblog.wordpress.com/2009/12/11/phpmailer-envia-correos-desde-tu-web/</link>
<pubDate>Fri, 11 Dec 2009 23:51:17 +0000</pubDate>
<dc:creator>Agustín Villalba Casás</dc:creator>
<guid>http://phpsblog.wordpress.com/2009/12/11/phpmailer-envia-correos-desde-tu-web/</guid>
<description><![CDATA[En esta ocasión me gustaría hablar de la librería PHPMailer, ideal si necesitas enviar correos elect]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>En esta ocasión me gustaría hablar de la librería PHPMailer, ideal si necesitas enviar correos electrónicos desde tu sitio a web a los usuarios del mismo (por ejemplo: notificar los datos de suscripción, avisar de la proximidad de la caducidad de su cuenta, etc). Una característica interesantísima que ofrece esta librería es que nos permite enviar los correos a través de una cuenta de correo en GMail, lógicamente hemos de ser los dueños de dicha cuenta, teniendo la contraseña de la misma. Es cierto que el propio lenguaje PHP ya incluye funciones de envío de correo electrónico (la función mail() por ejemplo), pero siempre me ha resultado bastante engorroso hacerlo de esta manera.</p>
<p>En primer lugar, para utilizar la función <em>mail()</em> de PHP, hemos de configurar correctamente el servidor PHP, estableciendo todos los parámetros relacionados con el envío de mails en el archivo <em>php.ini</em>. Pero esto no acaba aquí, lo peor de todo está en que hemos de tener un servidor de correo electrónico (por ejemplo postfix o qmail, o el que sea) montado en la misma máquina donde corre nuestra aplicación, que en el caso de que lo hagamos en un servidor externo contratado no hay problema, pero si la máquina hemos de mantenerla nosotros mismos (por los motivos que sean), pues ya no es tan fácil.</p>
<p>Para montar un servidor de correo hacen falta, además de conocimientos bastante avanzados en el tema (funcionamiento, configuración, etc), muchos y muy buenos conocimientos de seguridad, dado que un servidor de correo es un caramelo para todos aquellos que gustan de adueñarse de máquinas ajenas, haciéndolas &#8220;zombies&#8221; y utilizándolas como plataformas de reenvío de sus spams. Es por esto que me decanto por esta librería por los motivos que veremos a continuación.<br />
<br />
<span style="font-size:1.3em;"><strong>Utilizando la librería</strong></span><br />
<br />
Lo primero que hemos de hacer es <a href="http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php5_6/" target="_blank">descargarnos la última versión de esta librería</a>. Una vez hemos descomprimido el archivo y colocado el directorio de la librería en el directorio de nuestra aplicación web ya podemos empezar a trabajar para poder utilizarla. Si lo deseamos, podemos eliminar los directorios <em>test, examples</em> y <em>docs</em>, dado que no son necesarios para el funcionamiento de la librería.</p>
<p>Pongamos un caso de ejemplo, le hemos presentado un formulario al usuario, el cual rellena (entre otros datos nos proporciona una dirección de correo) y cuando lo envía nosotros hemos de procesarlo y enviarle un correo electrónico confirmándole que se ha procesado. Lo enviaremos a través de una cuenta GMail por protocolo SMTP seguro, tenemos la tranquilidad de que es Google quien está detras. Bien, pues en nuestro controlador que procesa el formulario hemos de incluir el siguiente código:</p>
<pre>include(PHPMailer/class.phpmailer.php);
</pre>
<p>Con esto ya tenemos acceso a las funciones de la librería. A partir de aquí ya tan sólo nos queda crear el objeto, añadirle todos los parámetros que hemos recogido del formulario previamente presentado al usuario y enviarlo, para ello hemos de añadir el siguiente código:</p>
<pre>$mail = new PHPMailer();
$body  = file_get_contents('contents.html');
$body  = eregi_replace("[\]",'',$body);

$mail-&#62;IsSMTP(); // establecemos que utilizaremos SMTP
$mail-&#62;SMTPAuth   = true; // habilitamos la autenticación SMTP
$mail-&#62;SMTPSecure = "ssl";  // establecemos el prefijo del protocolo seguro de comunicación con el servidor
$mail-&#62;Host       = "smtp.gmail.com";      // establecemos GMail como nuestro servidor SMTP
$mail-&#62;Port       = 465;                   // establecemos el puerto SMTP en el servidor de GMail
$mail-&#62;Username   = "minombreusuario@gmail.com";  // la cuenta de correo GMail
$mail-&#62;Password   = "contraseña";            // password de la cuenta GMail

$mail-&#62;SetFrom('info@tudominio.com', 'Nombre Apellido');  //Quien envía el correo
$mail-&#62;AddReplyTo("response@tudominio.com","Nombre Apellido");  //A quien debe ir dirigida la respuesta

$mail-&#62;Subject    = "Su formulario ha sido recibido";  //Asunto del mensaje
$mail-&#62;Body      = "Hola,&#60;br /&#62;
 su formulario ha sido recibido correctamente.&#60;br /&#62;
 &#60;strong&#62;Muchas gracias&#60;/strong&#62;";  //Cuerpo del mensaje en código HTML
$mail-&#62;AltBody    = "Hola,\n
 su formulario ha sido recibido correctamente.\n
 Muchas gracias";  //Cuerpo del mensaje para aquellos lectores que no permitan el código HTML

$destino = "destinatario@otrodominio.com";
$mail-&#62;AddAddress($address, "Juan Palotes");

$mail-&#62;AddAttachment("images/phpmailer.gif");      // añadimos archivos adjuntos si es necesario
$mail-&#62;AddAttachment("images/phpmailer_mini.gif"); // tantos como queramos

if(!$mail-&#62;Send()) {
echo "Error en el envío: " . $mail-&#62;ErrorInfo;
} else {
 echo "¡Mensaje enviado correctamente!";
}
</pre>
<p>Con esto tendríamos listo nuestro código de envío de correo electrónico a los usuarios de nuestro sitio. Ahora me gustaría matizar un par de líneas del código anterior, en el que creamos el cuerpo del mensaje. Para mayor comodidad, si lo que enviamos es un cuerpo HTML, podemos tener ese mensaje tipo en un archivo <em>.html</em> externo, el cual incluimos posteriormente en el correo de esta manera:</p>
<pre>$body  = file_get_contents('cuerpo_correo.html');
$body  = eregi_replace("[\]",'',$body);
...
...
$mail-&#62;MsgHTML($body);
</pre>
<p>Con esto ya tenemos completamente terminado nuestro código de envío de correo electrónico desde nuestro sitio web a través de GMail. Para finalizar me gustaría puntualizar que este código es válido también para enviar correos electrónicos a través de una cuenta en cualquier otro servidor de correo, siempre y cuando tengamos cuenta de correo en ese servidor y su contraseña, y dicho servidor tenga habilitado el envío de correos a través de SMTP.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Creacion de un robot para Google Wave]]></title>
<link>http://chaoticode.wordpress.com/2009/12/11/creacion-de-un-robot-para-google-wave/</link>
<pubDate>Fri, 11 Dec 2009 20:48:52 +0000</pubDate>
<dc:creator>dtcamarda</dc:creator>
<guid>http://chaoticode.wordpress.com/2009/12/11/creacion-de-un-robot-para-google-wave/</guid>
<description><![CDATA[Hola a todos, este es mi primer post en mi primer blog y voy a hablar sobre como crear un robot para]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Hola a todos, este es mi primer post en mi primer blog y voy a hablar sobre como crear un robot para <a title="Google Wave" href="http://wave.google.com" target="_blank">Google Wave</a>, vamos a seguir todos los pasos necesarios para crear un robot en Java, desde la configuración de nuestro ambiente de desarrollo hasta la publicación del robot para que pueda ser utilizado por todos. Para los fines de este tutorial vamos a crear un robot simple pero no tan trivial como el clásico &#8220;Hello World&#8221; cuya finalidad va a ser la de chequear si los lonks posteados en un blip son validos o no y en caso de que no lo sean mostrar algún tipo de aviso modificando el texto del link.</p>
<p><!--more--></p>
<p>Supongo que si están leyendo esto ya saben de que se trata Google Wave y como funciona, de lo contrario pueden remitirse a los links que encuentran al final del articulo.</p>
<p>En primer lugar empecemos por definir que es un robot, como funciona y como interactúa con el resto del ambiente. En pocas palabras un robot simula lo que seria otro participante de la conversación, un robot puede hacer casi todo lo que puede hacer otra persona que participa en un wave, puede por ejemplo leer, modificar y crear blips, agregar y eliminar gente de la conversación y hasta crear nuevos wave&#8217;s, otra cosa muy interesante es que los robots pueden comunicar con el exterior, lo cual permite por ejemplo la sincronización del contenido del wave con otro servicio externo, el cual podría ser un blog, twitter, facebook, etc.<br />
Con esto tenemos una idea de lo que es un robot y cuales son sus potencialidades, la pregunta ahora es ¿en que modo interactúa un robot con el ambiente? bueno lo primero que hay que saber es que un robot tiene que estar alojado en un servidor, este servidor por el momento tiene que ser <a href="http://code.google.com/appengine/">Google App Engine</a> pero en el futuro se podrán usar otros servidores que implementen el protocolo Wave, la interacción entre el robot y un wave esta basada fundamentalmente en &#8220;eventos&#8221;, un robot se registra a la escucha de distintos eventos, Wave al producirse uno de los eventos se lo comunica al robot en cuestión de modo que este pueda realizar una acción y comunicar un resultado al wave, mas adelante van a ver exactamente como se registra un robot a la escucha de estos eventos; existe también otro modo de interactuar con un robot que consiste en planificar una tarea que viene ejecutada a un cierto intervalo de tiempo.<br />
Por ultimo antes de empezar queda decir que un robot puede ser realizado en Java o en Python, visto que existen API&#8217;s en estos dos lenguajes y son los únicos dos lenguajes suportados por GAE(Google App Engine)</p>
<p>Bueno basta de charla, manos a la obra! lo primero es configurar nuestro ambiente de desarrollo, para eso pueden usar cualquier IDE Java pero les aconsejo de usar Eclipse con el plugin de Google que facilita trabajar con GAE, por lo tanto lo primero, si no tienen Eclipse instalado, es descargarlo desde esta <a href="http://www.eclipse.org/galileo/">dirección</a> ahí encuentran la versión 3.5(Galileo) una vez instalado Eclipse hay que proceder con la instalación del plugin de Google, para eso tienen que agregar a los repositorios de eclipse uno de los siguientes links dependiendo de si usan eclipse 3.5 o 3.4</p>
<p style="padding-left:30px;"><code>http://dl.google.com/eclipse/plugin/3.5</code><br />
<code>http://dl.google.com/eclipse/plugin/3.4</code></p>
<p>y seleccionar para la instalación &#8220;Google Plugin for Eclipse&#8221; y &#8220;Google App Engine java SDK&#8221;, le dan a next y esperan a que se instale, mientras tanto pueden ir descargando las API&#8217;s de google para la creación de robots, para ello siguen este <a href="http://code.google.com/p/wave-robot-java-client/downloads/list">link</a> y descargan wave-robot-api-20090916.jar, ﻿jsonrpc.jar y json.jar<br />
Lo siguiente que vamos a hacer una vez instalados el plugin y el SDK de GAE es crear un nuevo proyecto de tipo &#8220;Web Application Project&#8221;, se va a abrir el clásico asistente que les pregunta por el nombre del proyecto y del paquete, en mi caso como nombre del proyecto puse &#8220;LinkAlive&#8221; y como package &#8220;com.chaoticode.linkalive&#8221; pero usen lo que prefieran; verifiquen que &#8220;Use Google App Engine&#8221; este chequeado y que &#8220;Use Google Web Toolkit&#8221; no lo este ya que no lo vamos a necesitar. Una vez creado el proyecto copiamos las tres librerías que descargamos antes bajo la carpeta war/WEB-INF/lib y las agregamos al Build Path clickeando con el botón derecho sobre cada una de las librerías y seleccionando Build Path -&#62; Add to Build Path</p>
<p>A este punto tenemos el proyecto con las librerías necesarias para empezar a trabajar así que vamos a escribir un poco de código!</p>
<h2>Extendiendo AbstractRobotServlet</h2>
<p>Vamos a crear una clase llamada <span style="color:#008000;">LinkAliveServlet</span> que extiende <span style="color:#008000;">AbstractRobotServlet</span> que se encuentra en el package <span style="color:#008000;">com.google.wave.api</span>, como su nombre indica se trata de una servlet por lo tanto responde a llamadas HTTP, al extender esta clase tenemos que implementar el metodo <span style="color:#008000;">processEvents(RobotMessageBundle bundle)</span> que recibe como parámetro una instancia de <span style="color:#008000;">com.google.wave.api.RobotMessageBundle</span> la cual contiene toda la información que necesitamos sobre el/los eventos producidos.</p>
<pre class="brush: java; wrap-lines: false;">
package com.chaoticode.linkalive;

import java.net.HttpURLConnection;
import java.net.URL;

import com.google.wave.api.AbstractRobotServlet;
import com.google.wave.api.Annotation;
import com.google.wave.api.Blip;
import com.google.wave.api.Event;
import com.google.wave.api.EventType;
import com.google.wave.api.Range;
import com.google.wave.api.RobotMessageBundle;
import com.google.wave.api.TextView;

@SuppressWarnings(&#34;serial&#34;)
public class LinkAliveServlet extends AbstractRobotServlet {

    @Override
    public void processEvents(RobotMessageBundle bundle) {
        for (Event e : bundle.getEvents()) {
            if (e.getType() == EventType.BLIP_SUBMITTED) {
                Blip blip = e.getBlip();
                TextView document = blip.getDocument();
                java.util.List&#60;annotation&#62; annotatons = document
                        .getAnnotations(&#34;link/manual&#34;);

                for (Annotation annotation : annotatons) {
                    String url = annotation.getValue();
                    Range range = annotation.getRange();
                    if(document.getText(range).endsWith(&#34;(bad link)&#34;))
                        continue;

                    if (!exists(url))
                        document.insert(range.getEnd(), &#34;(bad link)&#34;);
                }
            }
        }
    }

    private boolean exists(String URLName) {
        try {
            HttpURLConnection con = (HttpURLConnection) new URL(URLName).openConnection();
            con.setRequestMethod(&#34;HEAD&#34;);
            return (con.getResponseCode() == HttpURLConnection.HTTP_OK);
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
}
</pre>
<p>Analicemos el código por partes&#8230;</p>
<pre class="brush: java; first-line: 20; toolbar: false;">
for (Event e : bundle.getEvents()) {
    if (e.getType() == EventType.BLIP_SUBMITTED) {
</pre>
<p>en la linea 20 usamos la instancia de RobotMessageBundle para obtener una lista de los eventos producidos en el wave e iterar sobre ella y en la siguiente linea verificamos que se trata del evento BLIP_SUBMITTED lo cual quiere decir que el usuario termino de editar un blip</p>
<pre class="brush: java; first-line: 22; toolbar: false;">
Blip blip = e.getBlip();
TextView document = blip.getDocument();
java.util.List&#60;annotation&#62; annotatons = document
        .getAnnotations(&#34;link/manual&#34;);
</pre>
<p>en las lineas de la 22 a la 25 tomamos una referencia al blip que genero el evento y accedemos al documento asociado, el cual es una instancia de <span style="color:#008000;">com.google.wave.api.TextView</span> que nos da acceso al contenido del blip en cuestión, por ultimo interrogamos este objeto para obtener una lista de los links que contiene el documento llamando el método <span style="color:#008000;">getAnnotations(String annotationType)</span> pasándole como parámetro el tipo de anotación que queremos obtener</p>
<pre class="brush: java; first-line: 27; toolbar: false;">
for (Annotation annotation : annotatons) {
    String url = annotation.getValue();
    Range range = annotation.getRange();
    if(document.getText(range).endsWith(&#34;(bad link)&#34;))
        continue;

    if (!exists(url))
        document.insert(range.getEnd(), &#34;(bad link)&#34;);
}
</pre>
<p>de la linea 27 a la 35 iteramos en las anotaciones que representan los links obteniendo en la linea 28 la url que tenemos que verificar y en la linea 29 los índices inicial y final del link en la cadena de caracteres que representa el contenido del blip englobados en un objeto de tipo <span style="color:#008000;">com.google.wave.api.Range</span> este objeto lo necesitamos para modificar el texto del link en caso de que sea erróneo. El test que ven en la linea 30 sirve para no verificar dos veces el mismo link, y en las lineas 33 y 34 verificamos que el link sea valido llamando el método <span style="color:#008000;">exists(String url)</span>, en caso de que no lo sea modificamos el texto del link indicando que hace referencia a una pagina inexistente.<br />
El método exists no necesita mucha explicación, simplemente recibe como parámetro la url a verificar, abre una conexión HTTP y verifica que el código de respuesta sea de tipo HTTP_OK (200) indicando que la pagina existe y es accesible.</p>
<h2>Profile</h2>
<p>Extendiendo la clase <span style="color:#008000;">ProfileServlet</span> que se encuentra en el package <span style="color:#008000;">com.google.wave.api</span> podemos definir información acerca de nuestro robot, esta información viene usada por el client de Wave para mostrar datos como el nombre del robot, un avatar, etc. extendiendo ProfileServlet podemos elegir de sobrecargar uno o todos los siguientes métodos:</p>
<ul>
<li>getRobotName()</li>
<li>getRobotAvatarUrl()</li>
<li>﻿getRobotProfilePageUrl()</li>
</ul>
<p>los nombres de los métodos son bastante explicativos, el nombre, el url del avatar y otra url que contiene mas información sobre nuestro robot</p>
<pre class="brush: java; wrap-lines: false;">
package com.chaoticode.linkalive;

import com.google.wave.api.ProfileServlet;

@SuppressWarnings(&#34;serial&#34;)
public class Profile extends ProfileServlet{
    private static final String robotName = &#34;Link Alive&#34;;
    private static final String robotAvatarUrl = &#34;http://link-alive.appspot.com/img/logo.jpg&#34;;

    @Override
    public String getRobotName() {
        return robotName;
    }

    @Override
    public String getRobotAvatarUrl() {
        return robotAvatarUrl;
    }
}
</pre>
<h2>web.xml</h2>
<p>Para que el cliente de Wave pueda comunicar con nuestro robot, nuestras servlets tienen que responder a una cierta url especifica, por lo tanto tenemos que mapear en el archivo web.xml la servlet LinkAliveServlet a <span style="color:#008000;">/_wave/robot/jsonrpc</span> y Profile a <span style="color:#008000;">/_wave/robot/profile</span></p>
<pre class="brush: xml; wrap-lines: false;">
&#60;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&#62;
&#60;web-app xmlns:xsi=&#34;http://www.w3.org/2001/XMLSchema-instance&#34;
xmlns=&#34;http://java.sun.com/xml/ns/javaee&#34;
xmlns:web=&#34;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&#34;
xsi:schemaLocation=&#34;http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&#34; version=&#34;2.5&#34;&#62;
	&#60;servlet&#62;
		&#60;servlet-name&#62;LinkAlive&#60;/servlet-name&#62;
		&#60;servlet-class&#62;com.chaoticode.linkalive.LinkAliveServlet&#60;/servlet-class&#62;
	&#60;/servlet&#62;
	&#60;servlet&#62;
		&#60;servlet-name&#62;Profile&#60;/servlet-name&#62;
		&#60;servlet-class&#62;com.chaoticode.linkalive.Profile&#60;/servlet-class&#62;
	&#60;/servlet&#62;
	&#60;servlet-mapping&#62;
		&#60;servlet-name&#62;LinkAlive&#60;/servlet-name&#62;
		&#60;url-pattern&#62;/_wave/robot/jsonrpc&#60;/url-pattern&#62;
	&#60;/servlet-mapping&#62;
	&#60;servlet-mapping&#62;
		&#60;servlet-name&#62;Profile&#60;/servlet-name&#62;
		&#60;url-pattern&#62;/_wave/robot/profile&#60;/url-pattern&#62;
	&#60;/servlet-mapping&#62;
&#60;/web-app&#62;
</pre>
<h2>capabilities.xml</h2>
<p>El siguiente paso es crear el archivo &#8220;capabilities.xml&#8221;, este es un archivo fundamental ya que define cuales son los eventos a los que va a responder nuestro robot, este archivo tiene que residir bajo una carpeta de nombre &#8220;_wave&#8221; en la carpeta war, por lo tanto procedemos a la creación de la carpeta y el archivo capabilities.xml que va a contener lo siguiente:</p>
<pre class="brush: xml; highlight: [3]; wrap-lines: false;">
&#60;w:robot xmlns:w=&#34;http://wave.google.com/extensions/robots/1.0&#34;&#62;
  &#60;w:capabilities&#62;
    &#60;w:capability name=&#34;BLIP_SUBMITTED&#34; content=&#34;true&#34;&#62;&#60;/w:capability&#62;
  &#60;/w:capabilities&#62;
  &#60;w:version&#62;1&#60;/w:version&#62;
&#60;/w:robot&#62;
</pre>
<p>como pueden ver la parte importante es la linea 3 donde definimos el evento en el cual nuestro robot entra en acción, acá tienen una lista de los eventos mas importantes a los que se pueden registrar:</p>
<ul>
<li><span style="color:#008000;">wavelet_blip_created</span> lanzado cuando un nuevo blip viene creado</li>
<li><span style="color:#008000;">wavelet_participants_changed</span> lanzado cuando un participante viene agregado o eliminado de la conversación, incluidos otros robots</li>
<li><span style="color:#008000;">wavelet_title_changed</span> lanzado cada vez que cambia el titulo del wave</li>
<li><span style="color:#008000;">blip_contributors_changed</span> lanzado cuando cambian los editores de un blip</li>
<li><span style="color:#008000;">blip_deleted</span> lanzado cuando un blip viene eliminado del wave</li>
<li><span style="color:#008000;">blip_submitted</span> este es el evento que nos interesa a nosotros y viene lanzado cuando se termina de escribir el contenido de un blip(ya sea este nuevo o se este editando uno preexistente) y se clickea en &#8220;Done&#8221; o se selecciona otro blip indicando que el blip termino de ser editado</li>
<li><span style="color:#008000;">document_changed</span> viene lanzado mientras el contenido de un blip viene modificado</li>
</ul>
<h2>Publicación en Google App Engine</h2>
<p>A este punto la aplicación esta completa y solo nos falta publicarla en los servidores de App Engine, por el momento no hay modo de probar el robot localmente por lo tanto estamos obligados a subirla en App Engin para probar el robot, afortunadamente con el plugin de Google para eclipse esto es algo realmente muy simple. Lo primero es crear una cuenta en <a title="Google App Engine" href="http://appengine.google.com/" target="_blank">Google App Engine</a>, pueden usar su cuenta de google para registrarse o crear una nueva en caso de que no dispongan de una.</p>
<p>Una vez que se hayan registrado y hayan creado la aplicación en App Engine tienen que modificar el archivo appengine-web.xml que se encuentra bajo la carpeta war/WEB-INF y escribir el identificador de la aplicación que registraron, como pueden ver abajo en la linea evidenciada</p>
<pre class="brush: xml; highlight: [3]; wrap-lines: false;">
&#60;?xml version=&#34;1.0&#34; encoding=&#34;utf-8&#34;?&#62;
&#60;appengine-web-app xmlns=&#34;http://appengine.google.com/ns/1.0&#34;&#62;
	&#60;application&#62;link-alive&#60;/application&#62;
	&#60;version&#62;1-0-7&#60;/version&#62;

	&#60;!-- Configure java.util.logging --&#62;
	&#60;system-properties&#62;
		&#60;property name=&#34;java.util.logging.config.file&#34; value=&#34;WEB-INF/logging.properties&#34;/&#62;
	&#60;/system-properties&#62;
&#60;/appengine-web-app&#62;
</pre>
<p>Todo lo que queda por hacer es usar el botón &#8220;Deploy to App Engine&#8221; en la barra de herramientas de eclipse <img class="alignnone" title="Deploy to App Engine" src="http://code.google.com/appengine/docs/java/tools/eclipse/ae_deploy_button.png" alt="" width="22" height="22" /> llenar el formulario con los datos de la cuenta que se acaban de crear y clickear en el botón &#8220;Deploy&#8221;, a ese punto eclipse se ocupa de compilar el proyecto y subirlo en App Engine.</p>
<p>Para estar seguros de que todo fue bien accedan a la siguiente url:</p>
<p style="padding-left:30px;"><code>http://nombreDeLaAplicacion.appspot.com/_wave/capabilities.xml</code></p>
<p>si lo que ven es el archivo capabilities.xml que crearon antes quiere decir que el robot esta en AppEngine y liso para ser usado!</p>
<p>Desde su cuenta de Google Wave pueden agregar el robot a sus contactos de esta forma: nombreDeLaAplicacion@appspot.com, creen un nuevo wave, inviten el robot a la conversación y comprueben que funciona escribiendo un link a una pagina no existente en un blip, si después de haber clickeado en &#8220;Done&#8221; ven que al lado del link el robot le agrego un &#8220;(bad link)&#8221; entonces todo funciona correctamente, de lo contrario pueden chequear el log desde el panel de control de App Engine para verificar si se produjo alguna excepción que les de indicios del problema.</p>
<h3>Links utiles</h3>
<p>Google Wave en Wikipedia -&#62; <a href="http://es.wikipedia.org/wiki/Google_Wave">http://es.wikipedia.org/wiki/Google_Wave</a><br />
Google Wave, todo lo que tienes que saber -&#62;  <a href="http://www.cristalab.com/blog/google-wave-todo-lo-que-tienes-que-saber-c73716l/">http://www.cristalab.com/blog/google-wave-todo-lo-que-tienes-que-saber-c73716l/</a><br />
Google Wave Robots: Java Tutorial -&#62; <a href="http://code.google.com/apis/wave/extensions/robots/java-tutorial.html" target="_blank">http://code.google.com/apis/wave/extensions/robots/java-tutorial.html</a><br />
Javadoc del API para la creación de robots -&#62; <a title="Javadoc Robot API" href="http://wave-robot-java-client.googlecode.com/svn/trunk/doc/index.html" target="_blank">http://wave-robot-java-client.googlecode.com/svn/trunk/doc/index.html</a><br />
Mi versión del robot para que lo puedan agregar a sus contactos -&#62; ﻿link-alive@appspot.com</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mostrar errores en script php sin modificar php.ini]]></title>
<link>http://elluisito.wordpress.com/2009/12/11/mostrar-errores-en-script-php-sin-modificar-php-ini/</link>
<pubDate>Fri, 11 Dec 2009 20:46:10 +0000</pubDate>
<dc:creator>elluisito</dc:creator>
<guid>http://elluisito.wordpress.com/2009/12/11/mostrar-errores-en-script-php-sin-modificar-php-ini/</guid>
<description><![CDATA[Mostrar errores en script php sin modificar php.ini Descripcion. El procedimiento que se documenta a]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong><span style="color:#ff0000;">Mostrar errores en script php sin modificar php.ini</span></strong></p>
<p><strong>Descripcion.</strong></p>
<p>El procedimiento que se documenta a continuacion es util si el servidor de php en su cinfiguracion del php.ini tiene los errores deshabilitados y usted desea ver los errores.</p>
<p>La forma menos indicada para visualizar errores es seimpre editando el archivo de configuracion del php.ini, haciendo el cambio, rguardando los cambios y reiniciando el servicio, este manual le inidca la manera de realizar este procedimiento en el codigo fuente.</p>
<p><strong>Prerrequisitos:</strong></p>
<p>Esta configuracion se debe ingresar dentro del archivo del codigo fuente que usted esta desarrollando y no es necesario editar archivos de configuracion.</p>
<p><strong>Procedimiento:</strong></p>
<p>En el punto que usted requiera ver un error, ingrese las siguientes lineas.</p>
<p>ini_set(’error_reporting’, E_ALL);</p>
<p>ini_set(’display_errors’, ‘On’);</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hola Mundo en C++]]></title>
<link>http://codigo7.wordpress.com/2009/12/11/hola-mundo-en-c/</link>
<pubDate>Fri, 11 Dec 2009 19:40:18 +0000</pubDate>
<dc:creator>jrcsdev</dc:creator>
<guid>http://codigo7.wordpress.com/2009/12/11/hola-mundo-en-c/</guid>
<description><![CDATA[Aquí les coloco el código del popular Hola Mundo en C++ //Programa: Hola Mundo #include &lt;iostream]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Aquí les coloco el código del popular Hola Mundo en C++</p>
<pre><span style="color:green;">//Programa: Hola Mundo</span>
#<span style="color:blue;">include</span> &#60;<span style="color:blue;">iostream</span>&#62;
<span style="color:blue;">using</span> <span style="color:blue;">namespace</span> <span style="color:blue;">std</span>;
<span style="color:blue;">int</span> main()
{     <span style="color:blue;">cout</span> &#60;&#60; <span style="color:maroon;">"Hola Mundo"</span>;
       <span style="color:blue;">return</span> <span style="color:maroon;">0</span>;
}</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Función para Números Aleatorios en C++]]></title>
<link>http://codigo7.wordpress.com/2009/12/11/funcion-para-numeros-aleatorios-en-c/</link>
<pubDate>Fri, 11 Dec 2009 19:28:41 +0000</pubDate>
<dc:creator>jrcsdev</dc:creator>
<guid>http://codigo7.wordpress.com/2009/12/11/funcion-para-numeros-aleatorios-en-c/</guid>
<description><![CDATA[Buscando por internet encontré muchas funciones que generaban números aleatorios, pero muchas no cum]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Buscando por internet encontré muchas funciones que generaban números aleatorios, pero muchas no cumplian con los estándares de C++, y otras daban errores con rangos negativos. Debido a esto, leyendo un poco la documentación del lenguaje, he creado mi propia función que no sufre de los problemas anteriores. Aquí les dejo el código de la función:</p>
<pre><span style="color:blue;">int</span> azar(<span style="color:blue;">int</span> ini, <span style="color:blue;">int</span> fin)
{ <span style="color:blue;">return</span> ini+rand() % ((fin-ini)+<span style="color:maroon;">1</span>);
}</pre>
<p>La función necesita la inclusión de las siguientes librerias: cstdlib, ctime.</p>
<p>La forma de implementarla es indicándole el límite inferior y el límite superior, y obtendremos valores que se encuentren en ese rango. Por ejemplo: num=azar(5,15) nos devolverá un número entero existente entre el 5 y el 15</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[JAVA]]></title>
<link>http://videotutor1.wordpress.com/2009/12/11/java/</link>
<pubDate>Fri, 11 Dec 2009 17:49:49 +0000</pubDate>
<dc:creator>videotutorsergio</dc:creator>
<guid>http://videotutor1.wordpress.com/2009/12/11/java/</guid>
<description><![CDATA[IDEAL PARA LOS QUE COMIENZAN CON ESTE LENGUAJE]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>IDEAL PARA LOS QUE COMIENZAN CON ESTE LENGUAJE</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Recopilación: 4 cursos de VIM (eran 3 y justo salio el 4to)]]></title>
<link>http://fried.wordpress.com/2009/12/11/recopilacion-3-cursos-de-vim/</link>
<pubDate>Fri, 11 Dec 2009 17:47:55 +0000</pubDate>
<dc:creator>Fried #</dc:creator>
<guid>http://fried.wordpress.com/2009/12/11/recopilacion-3-cursos-de-vim/</guid>
<description><![CDATA[Seguramente, si alguien lee esta nota y lleva algún tiempo usando linux, se topó en algún momento co]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Seguramente, si alguien lee esta nota y lleva algún tiempo usando linux, se topó en algún momento con un debate ardiente: <strong>Vim vs Emacs.</strong></p>
<p>No voy a fogonear al respecto, pero una cosa es clara..<strong> algo deben tener de bueno</strong> para que haya tanto *fuzz* al respecto.</p>
<p>Lo mismo me pregunte y empecé a usar Vim (resultado de tirar una moneda) y <strong>¡Vaya que es interesante!</strong></p>
<p>Vim es un procesador de textos. Potente, es decir, que<strong> permite hacer muchas cosas más que solo escribir, borrar, resaltar, copiar-pegar.</strong></p>
<p>Una dificultad es su curva de aprendizaje.. es larga.. es mucho mas fácil usar &#8216;gedit&#8217; con el mouse, y seleccionar y copiar, antes que vim.. pero aquellos que se tomen el tiempo necesario, descubrirán una herramienta que no podrán dejar.</p>
<p><strong>Los tutoriales: </strong>(al fin!!)</p>
<ul>
<li><a href="http://www.linux.com/component/content/article/174-tutorials/228600-vim-101-a-beginners-guide-to-vim">Vim 101: A Begginer&#8217;s Guide to Vim </a></li>
<li><a href="http://www.linux.com/component/content/article/174-tutorials/243002-vim-201-an-intermediate-guide-to-vim">Vim 201: An intermediate Guide to Vim</a></li>
<li><a href="http://www.linux.com/component/content/article/174-tutorials/262147-vim-301-getting-adept-at-vim">Vim 301: Getting Adept at Vim</a></li>
<li><a href="http://www.linux.com/learn/tutorials/264315-vim-401-extending-vim-and-more">Vim 401: Extending Vim and More</a></li>
</ul>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Análisis y desarrollo de un driver para Xorg: EloTouch (I)]]></title>
<link>http://robleshermoso.wordpress.com/2009/12/11/desarrollo-driver-xorg/</link>
<pubDate>Fri, 11 Dec 2009 14:55:01 +0000</pubDate>
<dc:creator>Chema</dc:creator>
<guid>http://robleshermoso.wordpress.com/2009/12/11/desarrollo-driver-xorg/</guid>
<description><![CDATA[Análisis y desarrollo de driver para Elo Touch EloTouch es una empresa que se dedica a la fabricació]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><div id="attachment_510" class="wp-caption alignnone" style="width: 510px"><a href="http://robleshermoso.wordpress.com/files/2009/12/elo.jpg"><img class="size-full wp-image-510" title="Análisis y desarrollo de driver para Elo Touch" src="http://robleshermoso.wordpress.com/files/2009/12/elo.jpg" alt="Análisis y desarrollo de driver para Elo Touch" width="500" height="300" /></a><p class="wp-caption-text">Análisis y desarrollo de driver para Elo Touch</p></div>
<p><a href="http://www.elotouch.com/" target="_blank">EloTouch</a> es una empresa que se dedica a la fabricación de pantallas táctiles.</p>
<p>No tengo queja de su hardware. Sus controladores tienen interfaz serie y/o USB. Particularmente me gusta más el controlador USB debido a que existe un perfil HID que recoge este tipo de periférico y GNU/Linux tiene un driver HID que no funciona mal.</p>
<p>El caso es que recientemente he tenido que desarrollar un <em>driver</em> para una pantalla resistiva de EloTouch que funciona bajo GNU/Linux con Xorg.</p>
<p>La motivación viene de la necesidad de poder asociar un controlador <em>touch</em> a una pantalla (<em>screen</em>) determinada. De este modo podemos tener un escritorio extendido con dos monitores, cada uno de ellos con una interfaz táctil. Tanto los monitores como los controladores de <em>touch</em> están conectados a una misma CPU.</p>
<p>El fabricante tiene un <em>driver</em> (bastante tedioso de instalar) que no contempla esta posibilidad:<strong> asociar un controlador a un <em>screen</em> arbitrario</strong>.</p>
<p>Lo primero que se me vino a la mente fue buscar un driver GPL que cumpliera con este requisito.</p>
<p>Para &#8220;mi sorpresa&#8221; encontré en el repositorio de Xorg, los siguientes <em>drivers</em>:</p>
<ul>
<li><a href="http://cgit.freedesktop.org/xorg/driver/xf86-input-elo2300/" target="_blank">Elo2300</a></li>
<li><a href="http://cgit.freedesktop.org/xorg/driver/xf86-input-elographics/" target="_blank">Elographics</a></li>
</ul>
<p>La estructura de ambos es muy parecida y para mi asombro sí que implementan la funcionalidad que demandaba.</p>
<p><strong>¿funcionarán con mi controlador?</strong></p>
<p>No hubo suerte. Ni uno ni otro funcionaba a pesar de establecer la configuración tal y como describía la documentación asociada.</p>
<p><strong>No queda más remedio que hacer mi propio <em>driver</em></strong>.</p>
<p><!--more--><span style="font-size:12pt;"><strong>1. Ingeniería inversa</strong></span></p>
<p>¿Cual es el formato de los datos? ¿Cómo es su <em>serialización</em>?</p>
<p>La parte del análisis bruto de datos es sin duda la más crítica, más &#8220;artista&#8221; y difícil de todas. Es como &#8220;decodificar/desencriptar&#8221; un puzzle.</p>
<p>Para esta ardua tarea me bastan unas simples, pero no por ello menos potentes herramientas:</p>
<ul>
<li><strong>cat</strong>:  para la captura de datos desde la línea serie.</li>
<li><strong>hexdump</strong>: para ver por pantalla en código hexadecimal el contenido de los datos procedentes de la línea serie.</li>
</ul>
<p>Manos a la obra:</p>
<ol>
<li>Capturamos los datos de la controladora conectada en la línea serie 0 con:
<pre class="brush: bash;"> cat /dev/ttyS0 &#62; dump1 </pre>
</li>
<li>Hacemos algunas pulsaciones cortas para recoger algunos datos.</li>
<li>&#8220;Dumpeamos&#8221;  los datos para empezar a buscar alguna lógica en el <em>stream</em> de información.
<pre class="brush: bash;"> hexdump -v -e '&#34;%04_ad    &#34;' -e '10/1 &#34;%02x &#34;' -e '&#34;     &#34; ' -e '10/1 &#34;%_p&#34;' -e '&#34;\n&#34;' dump1</pre>
<p>Esto son los resultados:</p>
<pre class="brush: plain; light: true;">0000    55 54 01 17 04 5f 04 ff 00 d1     UT..._....
0010    55 54 02 10 04 61 02 05 04 63     UT...a...c
0020    04 ff 00 c4 55 54 02 02 04 63     ....UT...c
0030    04 ff 03 6a 04 ff 00 bf 55 54     ...j....UT
0040    02 fa 03 6a 04 ff 00 bf 04 ff     ...j......
0050    00 bf 55 54 02 fa 03 6a 04 ff     ..UT...j..
0060    00 bf 55 54 55 54 01 e1 08 86     ..UTUT....
0070    04 ff 00 c6 55 54 02 dc 08 7d     ....UT...}
0080    02 d5 08 78 04 ff 00 ad 55 54     ...x....UT
0090    02 d5 08 78 04 ff 08 78 04 ff     ...x...x..
0100    00 ad 55 54 04 d5 08 78 04 00     ..UT...x..
0110    00 b0 0b ff 00 ec 55 54 02 54     ......UT.T
0120    03 33 0b ff 00 e9 55 54 00 f8     .3....UT..
0130    55 54 02 70 03 4b 0b ff 00 1d     UT.p.K....
0140    55 54 02 85 55 54 02 d4 03 7d     UT..UT...}
0150    0b ff 00 b3 55 54 02 fc 03 8e     ....UT....
0160    02 6c 04 b1 0b ff 00 80 55 54     .l......UT
0170    02 98 04 c1 0b ff 04 d7 0b ff     ..........
0180    00 2a 55 54 02 33 05 df 0b ff     .*UT.3....
0190    00 76 0b ff 00 db 55 54 02 c5     .v....UT..
0200    05 e9 0b ff 00 12 55 54 00 a9     ......UT..
0210    55 54 02 85 06 fc 0b ff 00 e6     UT........
0220    55 54 02 da 55 54 02 4d 07 16     UT..UT.M..
0230    0c ff 00 ca 55 54 02 86 07 1d     ....UT....
0240    02 1a 08 2a 0c ff 00 ac 55 54     ...*....UT
0250    02 56 08 2f 0c ff 08 3f 0c ff     .V./...?..
0260    00 8d 55 54 02 23 09 47 0c ff     ..UT.#.G..
0270    00 d3 0c ff 00 55 55 54 02 e5     .....UUT..
0280    09 60 0c ff 00 ae 55 54 00 28     .`....UT.(
0290    55 54 02 8b 0a 73 0c ff 00 68     UT...s...h
0300    55 54 02 dc 55 54 02 4a 0b 85     UT..UT.J..
0310    0c ff 00 3a 55 54 02 96 0b 8e     ...:UT....
0320    02 f9 0b 9c 0c ff 00 00 55 54     ........UT
0330    02 29 0c a0 0c ff 0c a4 0c ff     .)........
0340    00 96 55 54 02 a0 0c a5 0c ff     ..UT......
0350    00 b1 0c ff 00 eb 55 54 02 e6     ......UT..
0360    0c a8 0c ff 00 fa 55 54 00 06     ......UT..
0370    55 54 02 f6 0c a8 0c ff 00 0a     UT........
0380    55 54 02 f7 55 54 02 f2 0c a8     UT..UT....
0390    0c ff 00 06 55 54 02 ef 0c a8     ....UT....
0400    02 ea 0c aa 0c ff 00 00 55 54     ........UT
0410    02 e8 0c aa 0c ff 0c ab 0c ff     ..........
0420    00 ff 55 54 02 e8 0c aa 0c ff     ..UT......
0430    00 fe 0c ff 00 fe 55 54 02 e9     ......UT..
0440    0c a9 0c ff 00 fe 55 54 00 01     ......UT.. </pre>
</li>
<li>La parte complicada. El primer paso es determinar donde comienza y termina una trama de datos. Si os fijáis en la representación ASCII, veis que se repite mucho la secuencia &#8220;UT&#8221;. A priori parece que todas las tramas empiezan con &#8220;UT&#8221;, es decir, <code>0x55 0x54</code>.  No parece que exista un delimitador de trama al final.En este momento corroboro la deducción con los fuentes de los drivers anteriores e identifico estos bytes como <code>ELO_SYNC_BYTE</code> y <code>ELO_TOUCH</code>. El último byte de trama es el <em>checksum</em> en los drivers, pero en este caso no lo ve claro. El siguiente byte a ELO_SYNC_BYTE y ELO_TOUCH suele tomar los valores: 0&#215;00, 0&#215;01, 0&#215;02 y 0&#215;04.<br />
<span style="color:#ff0000;">55 54</span> <span style="color:#0000ff;"><strong>01</strong></span> 17 04 5f 04 ff 00 d1<br />
<span style="color:#ff0000;">55 54</span> <span style="color:#0000ff;"><strong>02</strong></span> 02 04 63 04 ff 03 6a 04 ff 00 bf<br />
<span style="color:#ff0000;">55 54</span> <span style="color:#0000ff;"><strong>02</strong></span> fa 03 6a 04 ff 00 bf 04 ff 00 bf<br />
<span style="color:#ff0000;">55 54</span> <span style="color:#0000ff;"><strong>04</strong></span> d5 78 04 00 00 b0 0b ff 00 ec<br />
<span style="color:#ff0000;">55 54</span> <span style="color:#0000ff;"><strong>00</strong></span> 01</p>
<p>No he visto ningún otro valor fuera de este rango. Según la secuencia y los <em>drivers</em> anteriores, se trata del identificador del tipo de evento. Los eventos asociados parecen ser:</p>
<ul>
<li>PRESS = 0&#215;01</li>
<li>MOTION = 0&#215;2</li>
<li>RELEASE = 0&#215;4</li>
<li>NULL = 0&#215;0</li>
</ul>
<p>El tamaño de trama es distinto según el tipo de evento. Cuando el evento es PRESS, el tamaño suele ser 10, para MOTION suele ser 14. Digo &#8220;suele ser&#8221; porque hay paquetes que considero &#8220;mal formados&#8221;.<br />
En este punto estamos en posición de determinar la información útil: <strong>las coordenadas de pantalla</strong>. Podemos saber a ciencia cierta que el tamaño de dato tiene que ser mayor de 8 bits. Si no fuera así, obtendríamos una pobre resolución de la zona pulsada. Los <em>drivers</em> asignan el tipo <em>unsigned short</em> (16 bits). Para el caso del evento PRESS, los <em>drivers</em> asocian el informe de 3 coordenadas: X, Y, Z. El último byte es el supuesto <a href="http://es.wikipedia.org/wiki/Suma_de_verificaci%C3%B3n" target="_blank"><em>checksum</em></a>. El orden de los números es <a href="http://es.wikipedia.org/wiki/Endianness" target="_blank"><em>little endian</em></a>, luego los supuesto valores para el evento:<br />
<span style="color:#ff0000;">55 54</span> <span style="color:#0000ff;"><strong>01</strong></span> 17 04 5f 04 ff 00 d1<br />
son:</p>
<ul>
<li>X = 0&#215;0417 = 1047</li>
<li>Y = 0&#215;045f =  1119</li>
<li>Z = 0&#215;00ff = 255</li>
</ul>
</li>
<li>Para comprobar que estos valores en realidad representan coordenadas, voy a hacer una nueva captura de datos, donde voy a hacer una pequeña pulsación en cada una de las cuatro esquinas de la pantalla. De esta manera, debería de obtener los rangos (mínimo y máximo) de la coordenadas.<br />
Analizando sólo los valores asociados al evento PRESS estos son los resultados:</p>
<div id="attachment_503" class="wp-caption aligncenter" style="width: 410px"><a href="http://robleshermoso.wordpress.com/files/2009/12/coord.jpg"><img class="size-full wp-image-503" title="Coordenadas &#34;brutas&#34; correspondientes a pulsaciones en las esquinas de pantalla" src="http://robleshermoso.wordpress.com/files/2009/12/coord.jpg" alt="Coordenadas &#34;brutas&#34; correspondientes a pulsaciones en las esquinas de pantalla" width="400" height="260" /></a><p class="wp-caption-text">Coordenadas &#34;brutas&#34; correspondientes a pulsaciones en las esquinas de pantalla</p></div>
<p>Podemos deducir que:</p>
<ul>
<li>para el eje horizontal, la pulsación más a la izquierda vale aproximadamente 3500. Para la opuesta, 500.</li>
<li>para el eje vertical, la pulsación más abajo posible vale aproximadamente 600, siendo 3500 para la pulsación en la zona superior.</li>
</ul>
<p>Parece que el comportamiento es lineal y que el eje de coordenadas se encuentra en la esquina superior-derecha.</p>
<div id="attachment_507" class="wp-caption aligncenter" style="width: 410px"><a href="http://robleshermoso.wordpress.com/files/2009/12/coord2.jpg"><img class="size-full wp-image-507" title="Sistemas de referencia" src="http://robleshermoso.wordpress.com/files/2009/12/coord2.jpg" alt="Sistemas de referencia" width="400" height="260" /></a><p class="wp-caption-text">Sistemas de referencia</p></div>
<p>Para comprobar esta teoría, voy a hacer un pequeño programa en <em>Python</em> que imprima las coordenadas de pantalla cuando se realice una pulsación. Es necesario realizar una conversión entre coordenadas brutas (o del controlador) y las coordenadas de pantalla. Usaremos las propias coordenadas anteriores como coordenadas de calibración.</li>
</ol>
<p>Dejaremos el desarrollo del programa de test para la siguiente entrega. Salu2! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Translate to</strong>:<a href="http://www.google.com/translate_c?hl=en&#38;langpair=es%7Cen&#38;u=http://robleshermoso.wordpress.com/2009/12/11/desarrollo-driver-xorg/">English</a><br />
<img class="alignleft size-full wp-image-74" title="Menefante" src="http://robleshermoso.wordpress.com/files/2009/11/menefante.gif" alt="Menefante" width="16" height="16" /><a title="Análisis y desarrollo de un driver para Xorg: EloTouch (I)" href="http://meneame.net/submit.php?url=http://robleshermoso.wordpress.com/2009/12/11/desarrollo-driver-xorg/">Menéame</a> <img title="Twitter" src="http://robleshermoso.wordpress.com/files/2009/11/icn_twitter.png" alt="Twitter" width="16" height="16" /><a title="http://robleshermoso.wordpress.com/2009/12/11/desarrollo-driver-xorg/ " href="http://twitthat.com/go?title=Análisis y desarrollo de un driver para Xorg: EloTouch (I)&#38;url=http://robleshermoso.wordpress.com/2009/12/11/desarrollo-driver-xorg/">Twitter</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[X-Bot Robot para Linux: Automatiza las tareas]]></title>
<link>http://jodacame.wordpress.com/2009/12/11/x-bot-robot-para-linux-automatiza-las-tareas/</link>
<pubDate>Fri, 11 Dec 2009 13:48:15 +0000</pubDate>
<dc:creator>jodacame</dc:creator>
<guid>http://jodacame.wordpress.com/2009/12/11/x-bot-robot-para-linux-automatiza-las-tareas/</guid>
<description><![CDATA[Bueno, estaba algo &#8220;Desparchado&#8221; y decidi realizar un programa que hiciera algunas tarea]]></description>
<content:encoded><![CDATA[Bueno, estaba algo &#8220;Desparchado&#8221; y decidi realizar un programa que hiciera algunas tarea]]></content:encoded>
</item>
<item>
<title><![CDATA[Procedimientos permitidos por libreria FPDF]]></title>
<link>http://elluisito.wordpress.com/2009/12/11/procedimientos-permitidos-por-libreria-fpdf/</link>
<pubDate>Fri, 11 Dec 2009 13:45:31 +0000</pubDate>
<dc:creator>elluisito</dc:creator>
<guid>http://elluisito.wordpress.com/2009/12/11/procedimientos-permitidos-por-libreria-fpdf/</guid>
<description><![CDATA[Procedimientos permitidos por libreria FPDF Presentacion: En este manual se documenta la forma corre]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Procedimientos permitidos por libreria FPDF</p>
<p>Presentacion:</p>
<p>En este manual se documenta la forma correcta de guardar un archivo pdf generado dinamicamente por la libreria FPDF con dos acciones diferentes pero que cumplen la misma libreria permite.</p>
<p>Puntualmente se desea que el pdf se envie al navegador haciendo uso del Pluguin de adobe PDF y que el archivo se almacene en alguna carpeta del servidor.</p>
<p>Pre rrequisitos:</p>
<p>1. Se entiende que usted ya tiene todod el codigo necesario para generar este documento</p>
<p>Procedimiento:</p>
<p>1. PAra el caso de guardar el archivo PDF en una carpeta del servidor usted debe utilzar la instruccion Output indicacndo como parametros la ruta y el nombre donde almacenara el archivo y la modalidad &#8216;F&#8217;.</p>
<p>$pdf-&#62;Output(&#8216;rutadelArchivo/nombre.pdf&#8217;,'F&#8217;);</p>
<p>2. Para mostrar el archivo generado en el navegador use la salida Output sin parametros:</p>
<p>$pdf-&#62;Output();</p>
<p>3. Para genenerar las dos salidas de forma consecutiva usted debe poner las instrucciones en esta secuencia:</p>
<p>$pdf-&#62;Output(&#8216;rutadelArchivo/nombre.pdf&#8217;,'F&#8217;);</p>
<p>$pdf-&#62;Output();</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[haciendo pruebas]]></title>
<link>http://canalochocanarias.wordpress.com/2009/12/11/haciendo-pruebas/</link>
<pubDate>Fri, 11 Dec 2009 09:52:15 +0000</pubDate>
<dc:creator>Canal Ocho Canarias</dc:creator>
<guid>http://canalochocanarias.wordpress.com/2009/12/11/haciendo-pruebas/</guid>
<description><![CDATA[]]></description>
<content:encoded><![CDATA[<div class='snap_preview'></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Diferencias entre Iteracion y Recursion]]></title>
<link>http://jorgechu.wordpress.com/2009/12/11/diferencias-entre-iteracion-y-recursion/</link>
<pubDate>Fri, 11 Dec 2009 08:29:02 +0000</pubDate>
<dc:creator>jorgechu</dc:creator>
<guid>http://jorgechu.wordpress.com/2009/12/11/diferencias-entre-iteracion-y-recursion/</guid>
<description><![CDATA[Diferencias entre Iteracion y Recursion Un método recursivo es una forma alternativa de expresar un ]]></description>
<content:encoded><![CDATA[Diferencias entre Iteracion y Recursion Un método recursivo es una forma alternativa de expresar un ]]></content:encoded>
</item>
<item>
<title><![CDATA[Rpg Bacelona]]></title>
<link>http://cursoinformaticagratis.wordpress.com/2009/12/11/rpg-bacelona/</link>
<pubDate>Fri, 11 Dec 2009 01:13:43 +0000</pubDate>
<dc:creator>New Horizons Barcelona</dc:creator>
<guid>http://cursoinformaticagratis.wordpress.com/2009/12/11/rpg-bacelona/</guid>
<description><![CDATA[Más información o reserva de plazas: Formulario de solicitud online Teléfono: 93 602 55 00 New Horiz]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p style="text-align:center;"><strong>Más información o reserva de plazas:<br />
</strong><span style="text-decoration:underline;"><a href="http://www.nhbarcelona.com/mk/g/programacion-wordpress-form.htm">Formulario de solicitud online</a></span><br />
Teléfono: 93 602 55 00<br />
<strong>New Horizons Barcelona</strong></p>
<p>Te regalamos un curso gratis de Programación en Visual Basic 6 de 12 horas de duración.</p>
<p><strong>Este curso esta dirigido a personas que deseen una formación amplia y actualizada en las últimas técnicas y lenguajes de programación.</strong></p>
<p>Te prepara para ser un buen programador de Aplicaciones según las técnicas actuales, dándole especial importancia a la programación orientada a objetos, desarrollando los lenguajes de mayor implantación del mercado.</p>
<p><strong>Temario</strong></p>
<p><strong>Crear una Aplicación Simple con Windows Forms </strong></p>
<p>Componentes de una Interfaz de Usuario de Windows Forms</p>
<p>Gestión de Eventos en una Aplicación Windows Forms</p>
<p><strong>Configurar Controles Estándar </strong></p>
<p>Controles Windows Forms por Función</p>
<p><strong>Construir Menús </strong></p>
<p>Los Menús en Windows Forms</p>
<p><strong>Mostrar y Editar Datos Usando Controles Vinculados a Datos </strong></p>
<p>Vincular Datos a un Control</p>
<p>El Control DataGridView</p>
<p><strong>Proporcionar Asistencia de Usuario y Mejorar la Usabilidad </strong></p>
<p>Proporcionar Asistencia al Usuario</p>
<p>Implementar Características de Accesibilidad</p>
<p>Implementar Globalización y Localización</p>
<p><strong>Crear Aplicaciones Consistentes Usando Cuadros de Diálogo y la Herencia </strong></p>
<p>Cuadros de Diálogo en una Aplicación Windows Forms</p>
<p>La Herencia en Windows Forms</p>
<p><strong>Imprimir Contenido y Crear Informes </strong></p>
<p>Imprimir una Aplicación Windows Forms</p>
<p>Extraer Informes en una Aplicación Windows Forms</p>
<p><strong>Realizar Tareas Asíncronas Mediante el Componente BackgroundWorker </strong></p>
<p lang="en-GB">Tareas Asíncronas en Windows Forms Application</p>
<p lang="en-GB"> </p>
<p><strong>Implementar Aplicaciones Usando ClickOnce </strong></p>
<p>Opciones de Implementación en una Aplicación Windows Forms</p>
<p>Introducción a la Tecnología ClickOnce</p>
<p style="text-align:center;"><strong>Más información o reserva de plazas:<br />
</strong><span style="text-decoration:underline;"><a href="http://www.nhbarcelona.com/mk/g/programacion-wordpress-form.htm">Formulario de solicitud online</a></span><br />
Teléfono: 93 602 55 00<br />
<strong>New Horizons Barcelona</strong></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Amazon Advertising Services - JAVA ]]></title>
<link>http://tutorialesprincipiantes.wordpress.com/2009/12/10/amazon-advertising-api-java/</link>
<pubDate>Thu, 10 Dec 2009 23:04:46 +0000</pubDate>
<dc:creator>fallotonto</dc:creator>
<guid>http://tutorialesprincipiantes.wordpress.com/2009/12/10/amazon-advertising-api-java/</guid>
<description><![CDATA[Hola buenas noches, Este tutorial es cosecha propia, debido a que he tenido que hacer una práctica c]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><div class="Section1">
<p><span style="font-size:11pt;font-family:&#38;">Hola buenas noches,</span></p>
<p><span style="font-size:11pt;font-family:&#38;">Este tutorial es cosecha propia, debido a que he tenido que hacer una práctica con esto en la universidad, por lo que puede estar mejor/peor, pero funcionar funciona. Soy nuevo en WP y no tengo ni idea como poner trocitos de código incrustados.</span></p>
<p><span style="font-size:11pt;font-family:&#38;">En octubre de este año 2009, Amazon cambió ligeramente la forma de acceder a los servicios web de Ecommerce, que ahora se llama Amazon Advertising Service (A2S), pues este tutorial intentará mostraros cómo conseguir realizar la firma (signature) que ahora requiere.</span></p>
<p>Documentación sobre el A2S : <a href="http://docs.amazonwebservices.com/AWSECommerceService/2009-10-01/DG/">http://docs.amazonwebservices.com/AWSECommerceService/2009-10-01/DG/</a></p>
<p>Este tutorial es de la revisión 2009-10-01 y usa el siguiente WSDL (uno de estos US,UK,FR,DE): <a href="http://docs.amazonwebservices.com/AWSECommerceService/2009-10-01/DG/index.html?WSDLLocation.html">http://docs.amazonwebservices.com/AWSECommerceService/2009-10-01/DG/index.html?WSDLLocation.html</a></p>
<p><span style="font-size:11pt;font-family:&#38;">El lenguaje de programación empleado es JAVA, paso a explicar las 3 clases que he implementado, en parte buscando información y otros tutoriales en otras webs, etc..</span></p>
<p><span style="font-size:11pt;font-family:&#38;"><!--more--><br />
</span></p>
<p><span style="font-size:11pt;font-family:&#38;" lang="EN-US">Vamos a implementar las siguientes clases </span></p>
<p><span style="font-size:11pt;font-family:&#38;" lang="EN-US">AmazonConfiguration.java</span></p>
<p>AmazonSOAPHeaderData.java</p>
<p>AmazonSOAPHandler.java</p>
<p><strong><span style="font-size:11pt;font-family:&#38;">AmazonConfiguration</span></strong></p>
<p><strong><em>AmazonConfiguration</em></strong><span style="font-size:11pt;font-family:&#38;"> es una clase que simplifica en cierto modo la obtención de distintos tipos de servicios generando para todos ellos firmas digitales.</span></p>
<p><span style="font-size:11pt;font-family:&#38;" lang="EN-US">El constructor:</span></p>
<div style="border:solid windowtext 1pt;background:#DBE5F1;padding:1pt 4pt;">
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">Public<br />
class</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> A</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">mazonConfiguration </span>{</p>
<p><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">static</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
AWSECommerceService </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">awsecommerceservice</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">;</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">static</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
AWSECommerceServicePortType </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">service</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">=</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">null</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">;</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">static</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
HandlerResolver </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">handler</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">;</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US">[...]</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">public</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
AmazonConfiguration(</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">final</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> String accion){</span></p>
<p><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">awsecommerceservice</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
AWSECommerceService(); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">handler</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
HandlerResolver() {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">@Override</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> public</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
List&#60;Handler&#62; getHandlerChain(PortInfo portInfo)  {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> List&#60;Handler&#62;<br />
handlerList = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> ArrayList&#60;Handler&#62;();</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> handlerList.add((Handler)<br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> AmazonSOAPHandler(accion));</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">return</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
handlerList;</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
}</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> };</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">awsecommerceservice</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">.setHandlerResolver(</span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">handler</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">);</span></p>
<p class="MsoNormal" style="background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;line-height:115%;font-family:&#38;" lang="EN-US"> </span><em><span style="font-size:10pt;line-height:115%;font-family:&#38;">service</span></em><span style="font-size:10pt;line-height:115%;font-family:&#38;"><br />
= </span><em><span style="font-size:10pt;line-height:115%;font-family:&#38;">awsecommerceservice</span></em><span style="font-size:10pt;line-height:115%;font-family:&#38;">.getAWSECommerceServicePort();</span></p>
<p style="background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;">}</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">public</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
AWSECommerceServicePortType getService(){</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">return</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">service</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">;</span></p>
<p style="background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><span style="font-size:10pt;font-family:&#38;">}</span></p>
</div>
<p><span style="font-size:11pt;font-family:&#38;">Para cada acción necesitaremos una Configuración diferente, con un handler diferente, es por ello recomendable tener una instancia de Configuración distinta por cada <strong>tipo </strong>de acción que deseemos realizar. Es decir, la primera vez que hagamos un &#8220;itemSearch&#8221; por ejmplo, deberemos crearnos una instancia de configuración con accion=&#8221;itemSearch&#8221; , pero para las siguientes no será necesario, bastará con llamar a laConfiguracion.getService();</span></p>
<p><span style="font-size:11pt;font-family:&#38;">Esta clase simplifica mucho las clases donde usemos algún servicio de Amazon, por ejemplo ahora para hacer un itemSearch bastara con hacer:</span></p>
<div style="border:solid windowtext 1pt;background:#DBE5F1;padding:1pt 4pt;">
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;"> </span></strong></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">if</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">(ConfiguracionItemSearch<br />
== null) {</span></em></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">Configuracion</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
AmazonConfiguration(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;ItemLookup&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">);</span></p>
<p>AWSECommerceServicePortType service = <em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">Configuracion</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">.getService();</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">}</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;">/* &#8230;. preparar objetos<br />
para llamar a la funcion: request, items. Si hay tiempo, ganas y lo solicita<br />
alguien, se hara un ejemplo de ItemSearch/ItemLookup, aunque no es dificil. </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">*/</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></p>
<p><span style="color:black;">service.itemSearch(</span><strong><span style="color:#7f0055;">null</span></strong><span style="color:black;">, </span><span style="color:#3f7f5f;">// marketplaceDomain</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">AWS_ACCESS_KEY_ID,</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> // awsAccessKeyId</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">null</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">, </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">// subscriptionId</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;">null</span></strong><span style="font-size:10pt;font-family:&#38;">, </span><span style="font-size:10pt;font-family:&#38;">// associateTag</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;"> </span><strong><span style="font-size:10pt;font-family:&#38;">null</span></strong><span style="font-size:10pt;font-family:&#38;">, </span><span style="font-size:10pt;font-family:&#38;">// xmlEscaping</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;"> </span><strong><span style="font-size:10pt;font-family:&#38;">null</span></strong><span style="font-size:10pt;font-family:&#38;">, </span><span style="font-size:10pt;font-family:&#38;">// validate</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;"> </span><strong><span style="font-size:10pt;font-family:&#38;">null</span></strong><span style="font-size:10pt;font-family:&#38;">, </span><span style="font-size:10pt;font-family:&#38;">// shared</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;"> req,</span><span style="font-size:10pt;font-family:&#38;"> // request</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;"> </span><strong><span style="font-size:10pt;font-family:&#38;">null</span></strong><span style="font-size:10pt;font-family:&#38;">, </span><span style="font-size:10pt;font-family:&#38;">// Salida</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;"> items);</span><span style="font-size:10pt;font-family:&#38;"> // Salida</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;"> </span></p>
</div>
<p><span style="font-size:11pt;font-family:&#38;">Bien una vez tenemos nuestra Interfaz con el exterior, faltan por hacer 2 clases importantes, las que tienen que ver con la Firma digital, estas son : AmazonSOAPHandler y AmazonSOAPHeaderData.</span></p>
<p><span style="font-size:11pt;font-family:&#38;">Estas dos<br />
son algo tediosas de explicar, ya que simplemente tratan de meter los datos en el mensaje (los que Amazon pide), cifrarlos y demás.</span></p>
<p><strong><span style="font-size:11pt;font-family:&#38;">AmazonSOAPHandler</span></strong></p>
<p><strong><em>AmazonSOAPHandler </em></strong><span style="font-size:11pt;font-family:&#38;">es una clase concreta que implementa una clase abstracta  SOAPHandler&#60;SOAPMessageContext&#62; que tiene distintos métodos que se muestran a continuación.</span></p>
<p>Tanto esta clase como AmazonSOAPHeaderData han sido desarrolladas a partir de este otro tutorial en ingles y alemán. <a href="http://blog.whitehorses.nl/2009/10/18/amazons-product-advertising-api/">http://blog.whitehorses.nl/2009/10/18/amazons-product-advertising-api/</a></p>
<div style="border:solid windowtext 1pt;background:#DBE5F1;padding:1pt 4pt;">
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">public</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">boolean</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
handleMessage(SOAPMessageContext context){</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
Boolean outboundProperty =  (Boolean) context.get(MessageContext.</span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">MESSAGE_OUTBOUND_PROPERTY</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">if</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> (outboundProperty.booleanValue()) {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">try</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
AmazonSOAPHeaderData factory = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> AmazonSOAPHeaderData();</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
factory.setAction(</span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">accion</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
SOAPEnvelope envelope = context.getMessage().getSOAPPart().getEnvelope();</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
SOAPHeader header = envelope.addHeader();</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
factory.addInformationToSOAPHeader(header);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
} </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">catch</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> (Exception ex) {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
Logger.<em>getLogger</em>(AmazonSOAPHandler.</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">class</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">.getName()).log(Level.</span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">SEVERE</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">, </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">null</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">,<br />
ex);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
}</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
}</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">return</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">true</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">;</span></p>
<p class="MsoNormal" style="background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;line-height:115%;font-family:&#38;" lang="EN-US"> }</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;text-indent:35.4pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">public</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">void</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
close(</span>MessageContext <span style="font-size:10pt;font-family:&#38;" lang="EN-US">messagecontext) {}</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">public</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
Set&#60;QName&#62; getHeaders() {</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">return</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">null</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">;}</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">public</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">boolean</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
handleFault(SOAPMessageContext messagecontext) { </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">return</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">true</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">;}</span></p>
</div>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;"><span style="font-family:&#38;">Estos métodos son obligatorios implementarlos aunque en realidad no hagan mucho, el único importante es handleMessage y el siguiente getSignature():</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;"><span style="font-family:&#38;"> </span></p>
<div style="border:solid windowtext 1pt;background:#DBE5F1;padding:0 4pt 1pt;">
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;">
<p><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">public</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> String getSignature(String operation,<br />
String timeStamp, </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">byte</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">[] secretBytes)<br />
{</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">try</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> String<br />
toSign = operation + timeStamp;</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">byte</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">[]<br />
toSignBytes = stringToUtf8(toSign);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> Mac<br />
signer = Mac.<em>getInstance</em>(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;HmacSHA256&#8243;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> SecretKeySpec<br />
keySpec = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> SecretKeySpec(secretBytes, </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;HmacSHA256&#8243;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> signer.init(keySpec);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> signer.update(toSignBytes);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">byte</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">[]<br />
signBytes = signer.doFinal();</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> String<br />
signature = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> String(Base64.<em>encode</em>(signBytes));</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">return</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
signature;</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> }<br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">catch</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">(NoSuchAlgorithmException nsae) {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">throw</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
RuntimeException(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;NoSuchAlgorithmException was thrown.&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">,<br />
nsae);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> }<br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">catch</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">(InvalidKeyException ike) {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">throw</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
RuntimeException(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;InvalidKeyException was thrown.&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">,<br />
ike);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><span style="font-size:10pt;font-family:&#38;">}</span></p>
<p class="MsoNormal" style="background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;line-height:115%;font-family:&#38;"><br />
}</span></p>
</div>
<p><span style="font-size:11pt;font-family:&#38;">Resto de métodos que debe implementar la clase para uso personal:</span></p>
<div style="border:solid windowtext 1pt;background:#DBE5F1;padding:1pt 4pt;">
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
String getTimestamp() {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> Calendar<br />
calendar = Calendar.<em>getInstance</em>();</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> SimpleDateFormat<br />
dateFormat = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> SimpleDateFormat(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;yyyy-MM-dd&#8217;T'HH:mm:ss&#8217;Z'&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> dateFormat.setTimeZone(TimeZone.<em>getTimeZone</em>(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;UTC&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">));</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">return</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
dateFormat.format(calendar.getTime());</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> }</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">byte</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">[]<br />
stringToUtf8(String source) {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">try</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">return</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
source.getBytes(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;UTF-8&#8243;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> }<br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">catch</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> (UnsupportedEncodingException e) {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">//<br />
This will never happen.  UTF-8 is always available.</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">throw</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
RuntimeException(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;getBytes threw an<br />
UnsupportedEncodingException&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">, e);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> }</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US">}</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">void</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
appendTextElement(Node node, String elementName, String elementText) {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> Element<br />
element = node.getOwnerDocument().createElement(elementName);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> element.setTextContent(elementText);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> node.appendChild(element);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#DBE5F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;">}</span></p>
</div>
<p class="MsoNormal">
<p class="MsoNormal"><strong><span style="font-family:&#38;">AmazonSOAPHeaderData</span></strong></p>
<p class="MsoNormal"><span style="font-family:&#38;">Esta clase es la encargada de añadirle al mensaje información de la firma digital. Debeis que poner vuestro par de claves Access Key ID y Secrete Key (Esta oculta en Amazon, tendréis que pulsar para verla) en los dos atributos marcados con asteriscos, una es más corta que la otra.</span></p>
<p class="MsoNormal"><strong><span style="font-size:14pt;line-height:115%;font-family:&#38;">Obtener las claves</span></strong></p>
<p><strong> </strong><span style="font-family:&#38;">Vas a Amazon Web Services ( <a href="http://aws.amazon.com/">http://aws.amazon.com/</a> ), te registras/identificas, y vas a esta sección arriba a la izquierda: <strong>Your Account&#62; Security Credentials</strong></span><br />
<a href="http://tutorialesprincipiantes.wordpress.com/files/2009/12/image002.gif"><img class="alignnone size-full wp-image-11" title="image002" src="http://tutorialesprincipiantes.wordpress.com/files/2009/12/image002.gif" alt="" width="274" height="183" /></a></p>
<p class="MsoNormal"><span style="font-family:&#38;">Una vez allí vamos a Access Credentials, lo verás sin pulsar nada, y nos aparecerá las claves que tenemos en el panel (Access Keys), por defecto y al registrarnos nos dan una (suficiente).</span></p>
<p>Si le damos a “Show” nos saldrá el panel con la pintura granate ( la pintura granate esta tachando la clave secreta (Secret Key) y la pintura verde tapa la clave de acceso (Access Key).</p>
<p><a href="http://tutorialesprincipiantes.wordpress.com/files/2009/12/image003.gif"><img class="alignnone size-medium wp-image-12" title="image003" src="http://tutorialesprincipiantes.wordpress.com/files/2009/12/image003.gif?w=300" alt="" width="614" height="307" /></a></p>
<div style="border:solid windowtext 1pt;background:#C6D9F1;padding:1pt;">
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">public</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">class</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
AmazonSOAPHeaderData { </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">static</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">final</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
String </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">UTF8_CHARSET</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;UTF-8&#8243;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">; </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">static</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">final</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
String </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">HMAC_SHA256_ALGORITHM</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;HmacSHA256&#8243;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">; </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> String </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">awsAccessKeyId</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;****************&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">; </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> String </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">awsSecretKey</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;***************************************&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">; </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> String </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">action</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;ItemLookup&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">; </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">static</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">final</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
String </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">prefix</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;aws&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">; </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">static</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">final</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
String </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">uri</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;http://security.amazonaws.com/doc/2007-01-01/&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">; </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> SecretKeySpec </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">secretKeySpec</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">null</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">; </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> Mac </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">mac</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">null</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">; </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">public</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">void</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
setAction(String accion){</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">action</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = accion;</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
}</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">public</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> AmazonSOAPHeaderData() { </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">try</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> { </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">byte</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">[] secretyKeyBytes = </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">awsSecretKey</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">.getBytes(</span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">UTF8_CHARSET</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">secretKeySpec</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
SecretKeySpec(secretyKeyBytes, </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">HMAC_SHA256_ALGORITHM</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">mac</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> = Mac.<em>getInstance</em>(</span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">HMAC_SHA256_ALGORITHM</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">mac</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">.init(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">secretKeySpec</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
} </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">catch</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> (Exception e) { </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">throw</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
RuntimeException(</span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">HMAC_SHA256_ALGORITHM</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> + </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;<br />
is unsupported!&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">, e); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
} </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
} </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">@SuppressWarnings</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;static-access&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">)</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
String hmac(String stringToSign) {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
String sig = </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">;</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">byte</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">[] data;</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">byte</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">[] rawHmac;</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">try</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> {</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
data = stringToSign.getBytes(</span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">UTF8_CHARSET</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
rawHmac = </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">mac</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">.doFinal(data);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
Base64 encoder = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> Base64();</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
sig = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> String(encoder.<em>encode</em>(rawHmac));</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
} </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">catch</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> (UnsupportedEncodingException e)<br />
{</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">throw</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
RuntimeException(</span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">UTF8_CHARSET</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> + </span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;<br />
is unsupported!&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">, e);</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
}</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">return</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> sig.trim();</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
}</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">private</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> String createTimestamp() { </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
Calendar cal = Calendar.<em>getInstance</em>(); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
DateFormat dfm = </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">new</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> SimpleDateFormat(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;yyyy-MM-dd&#8217;T'HH:mm:ss&#8217;Z'&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
dfm.setTimeZone(TimeZone.<em>getTimeZone</em>(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;GMT&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">)); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">return</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> dfm.format(cal.getTime()); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
} </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">public</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">void</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
addInformationToSOAPHeader(SOAPHeader header) </span><strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US">throws</span></strong><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
SOAPException { </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
SOAPFactory factory = SOAPFactory.<em>newInstance</em>(); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
String timestamp = createTimestamp(); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
String signature = hmac(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">action</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US"> + timestamp); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
SOAPElement accessKeyElem = </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
factory.createElement(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;AWSAccessKeyId&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">, </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">prefix</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">, </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">uri</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
accessKeyElem.addTextNode(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">awsAccessKeyId</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
SOAPElement timestampElem = </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
factory.createElement(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;Timestamp&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">, </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">prefix</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">, </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">uri</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
timestampElem.addTextNode(timestamp); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
SOAPElement signatureElem = </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
factory.createElement(</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">&#8220;Signature&#8221;</span><span style="font-size:10pt;font-family:&#38;" lang="EN-US">, </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">prefix</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">, </span><em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">uri</span></em><span style="font-size:10pt;font-family:&#38;" lang="EN-US">); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
signatureElem.addTextNode(signature); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
header.addChildElement(accessKeyElem); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
header.addChildElement(timestampElem); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
header.addChildElement(signatureElem); </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:#C6D9F1;border:none;padding:0;"><span style="font-size:10pt;font-family:&#38;" lang="EN-US"><br />
</span><span style="font-size:10pt;font-family:&#38;">} </span></p>
</div>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:white;"><span style="font-size:10pt;font-family:&#38;"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:white;"><span style="font-size:10pt;font-family:&#38;"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:white;">
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:white;"><span style="font-family:&#38;">¡ Y con esto ya tenemos suficiente para empezar a toquitear con Amazon Web Services ! </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:white;"><span style="font-size:10pt;font-family:&#38;"> </span></p>
<p class="MsoNormal" style="margin-bottom:.0001pt;line-height:normal;background:white;"><span style="font-size:10pt;font-family:&#38;"> </span></p>
</div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Navidad(1).]]></title>
<link>http://siskoso.wordpress.com/2009/12/10/navidad1/</link>
<pubDate>Thu, 10 Dec 2009 20:47:00 +0000</pubDate>
<dc:creator>Siskoso</dc:creator>
<guid>http://siskoso.wordpress.com/2009/12/10/navidad1/</guid>
<description><![CDATA[Y ahora comida navideña en la residencia. Junto a hacer ejercicios de programación y estar con una d]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Y ahora comida navideña en la residencia. Junto a hacer ejercicios de programación y estar con una de mis primas pequeñas es una de las cosas que más ilusión me hace. Hurra por la navidad.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Construyendo afirmaciones]]></title>
<link>http://atraelaplenitud.wordpress.com/2009/12/10/construyendo-afirmaciones/</link>
<pubDate>Thu, 10 Dec 2009 18:29:54 +0000</pubDate>
<dc:creator>atraelaplenitud</dc:creator>
<guid>http://atraelaplenitud.wordpress.com/2009/12/10/construyendo-afirmaciones/</guid>
<description><![CDATA[                                                Algunas personas no comprenden cabalmente este asunt]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p> </p>
<p style="text-align:center;"><a href="http://atraelaplenitud.wordpress.com/files/2009/12/imgp0735.jpg"><img class="size-medium wp-image-292   aligncenter" title="IMGP0735" src="http://atraelaplenitud.wordpress.com/files/2009/12/imgp0735.jpg?w=300" alt="" width="300" height="225" /></a>                     </p>
<p style="text-align:justify;">                        Algunas personas no comprenden cabalmente este asunto de las afirmaciones. Les parecen fantasías, ilusiones, autoengaños. Pues, esas personas no ven, no quieren ver, que a diario están haciendo afirmaciones de otro tipo y por eso su vida transcurre como lo hace. Todos los días esas personas escépticas de la ley de atracción, están lanzando afirmaciones con negaciones – aunque parezca contradictorio- porque cuando niegan están afirmando el contrario: “no quiero deudas”, “no quiero tener gripe”, “no quiero que el restaurante le de mi mesa a otros”, “no quiero que las personas me traten mal”, “no quiero llegar tarde”. En esas negaciones que hacen a diario, en realidad, están afirmando lo contrario: “quiero deudas”, “quiero tener gripe”, “quiero que las personas me traten mal”, porque el universo, no sabe de negaciones, sino de afirmaciones, porque el pensamiento se asocia a un sentimiento y su frecuencia es la que atrae más energía de la misma. Bueno todo eso, ya lo sabes, porque si aún sigues leyendo esto, es que no eres un escéptico.</p>
<p style="text-align:justify;">                                    Construir afirmaciones parece sencillo. En realidad lo es, solo que siempre debes tener presente que recibes todo lo que afirmas. Si ya tienes tiempo en el proceso creativo, tal vez ya estés trabajando con afirmaciones más específicas. Pero, si recién te inicias en esto, o lo has intentado y no logras encontrar tu ritmo, chequea si no estás trabajando desenfocado.</p>
<p style="text-align:justify;">                                    Seguro tu tienes muchos deseos que aún no has realizado. Quieres un mejor trabajo, prosperidad, una casa nueva etc. Puedes comenzar realizando afirmaciones genéricas, esto es, vinculadas con el estado de tu vida. Cosas como, “me siento cada día más pleno y próspero”, “ atraigo a mi vida las mejores cosas”, “ cualquiera sean las circunstancias externas llevo siempre conmigo la paz y la alegría”. Este tipo de <a href="http://atraelaplenitud.wordpress.com/2009/11/26/visualizar-es-materializar" target="_blank"><span style="color:#3366ff;">afirmaciones</span> </a>genéricas, te ayudarán a ir enfocándote, sintiéndote mejor cada día , e incluso aclarando tus ideas respecto a que es lo que quieres en tu vida, para pasar a realizar afirmaciones más específicas.</p>
<p style="text-align:justify;">De todas formas, te aseguro que las afirmaciones genéricas repetidas constantemente, atraen cosas en la misma sintonía y las ideas, las oportunidades y las personas adecuadas se presentan en tu vida.</p>
<p style="text-align:justify;">                                      La repetición es fundamental y tu ya lo sabes. Así fue como tu subconsciente se programó mediante la repetición ( leíste ya la entrada <a href="http://atraelaplenitud.wordpress.com/2009/11/21/consciente-y-subconsciente" target="_blank"><span style="color:#3366ff;">consciente y subconsciente</span></a><span style="color:#3366ff;"> </span>dos aspectos de un mismo ser?) . De niño, desde pequeño te fueron inculcando los diversos conceptos, a través del sonido, la imagen y los hechos que presenciaste y así, tus padres, tus maestros, tus vecinos, tu entorno, tu sociedad, fue entrenando tu subconsciente y hoy eres el resultado de ese conjunto de creencias que tu no sabes muy bien por qué las tienes.</p>
<p style="text-align:justify;">Repetir y repetir, pero también sentirse como lo que afirmamos, es lo que hará que tu consciente transmita al subconsciente lo que tu quieres. El proceso tomará un tiempo, como tomó la programación de tu subconsciente, pero lo harás. La mejor forma de acelerar ese proceso, es pasar por alto al consciente e ir directamente al subconsciente mediante los <a href="http://plenatotal.dinero24hspac1.click2sell.eu" target="_blank">mensajes subliminales</a>.</p>
<p style="text-align:justify;">Construye a diario afirmaciones asertivas, claras. Siéntelas y atraerás más de eso.</p>
<p style="text-align:justify;">                                       Acompaña tus afirmaciones con imágenes. Puedes valerte del Panel de los sueños, de diapositivas que hagas en tu computadora, de fotografías. No escatimes recursos. Solo ten claro, que afirmación es afirmar y nunca negar, porque el universo siempre responde: tus deseos son órdenes.</p>
<p style="text-align:justify;">Sony</p>
<p style="text-align:justify;">Atrae la Plenitud</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Temas Gratis para Wordpress]]></title>
<link>http://osbuzz.wordpress.com/2009/12/10/temas-gratis-para-wordpress/</link>
<pubDate>Thu, 10 Dec 2009 15:53:12 +0000</pubDate>
<dc:creator>osbuzz</dc:creator>
<guid>http://osbuzz.wordpress.com/2009/12/10/temas-gratis-para-wordpress/</guid>
<description><![CDATA[WordPress ha sido en los ultimos tiempos uno de los CMS mas utilizados, para la publicación de blogs]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>WordPress  ha sido en los ultimos tiempos uno de los CMS mas utilizados, para la publicación de blogs o weblogs, preferido por los usuarios  por su facilidad, y extensibilidad con “plugins” y su   personalización  mediante los “Themes”  con un poco de conocimiento de CSS se puede dar un aspecto mucho mas actractivo a nuestro sitio.</p>
<p><a href="http://granimpetu.com/themes-para-wordpress/">Temas Gratis en Gran Impetu</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[WeBuilder 2010 10.0.2.118 portable]]></title>
<link>http://portableaplication.wordpress.com/2009/12/10/webuilder-2010-10-0-2-118-portable/</link>
<pubDate>Thu, 10 Dec 2009 06:00:00 +0000</pubDate>
<dc:creator>Tony Montana</dc:creator>
<guid>http://portableaplication.wordpress.com/2009/12/10/webuilder-2010-10-0-2-118-portable/</guid>
<description><![CDATA[WeBuilder es un potente y revolucionario editor de paginas webs que satisfara de todas las necesidad]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a title="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" href="http://appsportables.iespana.es/images/webbuilder.png" target="_blank"><img height="248" alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/webbuilder.png" width="270" align="left" /></a>
<p>WeBuilder es un potente y revolucionario editor de paginas webs que satisfara de todas las necesidades de cualquier usuario que se dedique a la creacion de webs, ya sea profano o profesional.</p>
<p>Con una interfaz clara e intuitiva, ofrece grandes prestaciones que te permitiran crear y editar archivos en formatos como HTML, CSS, JavaScript, VBScript, PHP, ASP, SSI, Perl, etc., de manera rapida y sencilla como nunca se ha visto. </p>
<p>Viene ademas equipado con numerosas herramientas integradas en el programa, con las que podras validar, reutilizar, navegar y poner en funcionamiento tus codigos de manera sofisticada. Y con apenas unos clics podras subir la web a Internet mediante FTP. </p>
<p>WeBuilder incluye varias plantillas de webs con sus correspondientes codigos, permitiendo ademas guardar y abrir archivos directamente desde el servidor FTP/SFTP. </p>
<ul>
<li><strong>IDIOMA</strong>: Inglés </li>
<li><strong>TAMAÑO</strong>: 10.027 KB </li>
</ul>
<p> <a><img height="29" alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/megauploadlogo.jpg" width="250" border="0" /></a>
<p align="center"><a title="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" href="http://www.megaupload.com/?d=C69WZJPE" target="_blank"><img alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/plantilla/download_info.gif" /> </a></p>
<p> <a><img height="54" alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/mediafire.PNG" width="150" border="0" /></a>
</p>
<p align="center"><a title="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" href="http://www.mediafire.com/?mgjtzmz1yty" target="_blank"><img alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/plantilla/download_info.gif" /> </a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[WeBuilder 2010 10.0.2.118 portable]]></title>
<link>http://appzportables.wordpress.com/2009/12/10/webuilder-2010-10-0-2-118-portable/</link>
<pubDate>Thu, 10 Dec 2009 06:00:00 +0000</pubDate>
<dc:creator>Tony Montana</dc:creator>
<guid>http://appzportables.wordpress.com/2009/12/10/webuilder-2010-10-0-2-118-portable/</guid>
<description><![CDATA[WeBuilder es un potente y revolucionario editor de paginas webs que satisfara de todas las necesidad]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a title="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" href="http://appsportables.iespana.es/images/webbuilder.png" target="_blank"><img height="248" alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/webbuilder.png" width="270" align="left" /></a>
<p>WeBuilder es un potente y revolucionario editor de paginas webs que satisfara de todas las necesidades de cualquier usuario que se dedique a la creacion de webs, ya sea profano o profesional.</p>
<p>Con una interfaz clara e intuitiva, ofrece grandes prestaciones que te permitiran crear y editar archivos en formatos como HTML, CSS, JavaScript, VBScript, PHP, ASP, SSI, Perl, etc., de manera rapida y sencilla como nunca se ha visto. </p>
<p>Viene ademas equipado con numerosas herramientas integradas en el programa, con las que podras validar, reutilizar, navegar y poner en funcionamiento tus codigos de manera sofisticada. Y con apenas unos clics podras subir la web a Internet mediante FTP. </p>
<p>WeBuilder incluye varias plantillas de webs con sus correspondientes codigos, permitiendo ademas guardar y abrir archivos directamente desde el servidor FTP/SFTP. </p>
<ul>
<li><strong>IDIOMA</strong>: Inglés </li>
<li><strong>TAMAÑO</strong>: 10.027 KB </li>
</ul>
<p> <a><img height="29" alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/megauploadlogo.jpg" width="250" border="0" /></a>
<p align="center"><a title="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" href="http://www.megaupload.com/?d=C69WZJPE" target="_blank"><img alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/plantilla/download_info.gif" /> </a></p>
<p> <a><img height="54" alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/mediafire.PNG" width="150" border="0" /></a>
</p>
<p align="center"><a title="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" href="http://www.mediafire.com/?mgjtzmz1yty" target="_blank"><img alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/plantilla/download_info.gif" /> </a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[WeBuilder 2010 10.0.2.118 portable]]></title>
<link>http://aplicacionesportatiles.wordpress.com/2009/12/10/webuilder-2010-10-0-2-118-portable/</link>
<pubDate>Thu, 10 Dec 2009 06:00:00 +0000</pubDate>
<dc:creator>Tony Montana</dc:creator>
<guid>http://aplicacionesportatiles.wordpress.com/2009/12/10/webuilder-2010-10-0-2-118-portable/</guid>
<description><![CDATA[WeBuilder es un potente y revolucionario editor de paginas webs que satisfara de todas las necesidad]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a title="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" href="http://appsportables.iespana.es/images/webbuilder.png" target="_blank"><img height="248" alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/webbuilder.png" width="270" align="left" /></a>
<p>WeBuilder es un potente y revolucionario editor de paginas webs que satisfara de todas las necesidades de cualquier usuario que se dedique a la creacion de webs, ya sea profano o profesional.</p>
<p>Con una interfaz clara e intuitiva, ofrece grandes prestaciones que te permitiran crear y editar archivos en formatos como HTML, CSS, JavaScript, VBScript, PHP, ASP, SSI, Perl, etc., de manera rapida y sencilla como nunca se ha visto. </p>
<p>Viene ademas equipado con numerosas herramientas integradas en el programa, con las que podras validar, reutilizar, navegar y poner en funcionamiento tus codigos de manera sofisticada. Y con apenas unos clics podras subir la web a Internet mediante FTP. </p>
<p>WeBuilder incluye varias plantillas de webs con sus correspondientes codigos, permitiendo ademas guardar y abrir archivos directamente desde el servidor FTP/SFTP. </p>
<ul>
<li><strong>IDIOMA</strong>: Inglés </li>
<li><strong>TAMAÑO</strong>: 10.027 KB </li>
</ul>
<p> <a><img height="29" alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/megauploadlogo.jpg" width="250" border="0" /></a>
<p align="center"><a title="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" href="http://www.megaupload.com/?d=C69WZJPE" target="_blank"><img alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/plantilla/download_info.gif" /> </a></p>
<p> <a><img height="54" alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/mediafire.PNG" width="150" border="0" /></a>
</p>
<p align="center"><a title="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" href="http://www.mediafire.com/?mgjtzmz1yty" target="_blank"><img alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/plantilla/download_info.gif" /> </a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[WeBuilder 2010 10.0.2.118 portable]]></title>
<link>http://appzportablez.wordpress.com/2009/12/10/webuilder-2010-10-0-2-118-portable/</link>
<pubDate>Thu, 10 Dec 2009 06:00:00 +0000</pubDate>
<dc:creator>Tony Montana</dc:creator>
<guid>http://appzportablez.wordpress.com/2009/12/10/webuilder-2010-10-0-2-118-portable/</guid>
<description><![CDATA[WeBuilder es un potente y revolucionario editor de paginas webs que satisfara de todas las necesidad]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a title="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" href="http://appsportables.iespana.es/images/webbuilder.png" target="_blank"><img height="248" alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/webbuilder.png" width="270" align="left" /></a>
<p>WeBuilder es un potente y revolucionario editor de paginas webs que satisfara de todas las necesidades de cualquier usuario que se dedique a la creacion de webs, ya sea profano o profesional.</p>
<p>Con una interfaz clara e intuitiva, ofrece grandes prestaciones que te permitiran crear y editar archivos en formatos como HTML, CSS, JavaScript, VBScript, PHP, ASP, SSI, Perl, etc., de manera rapida y sencilla como nunca se ha visto. </p>
<p>Viene ademas equipado con numerosas herramientas integradas en el programa, con las que podras validar, reutilizar, navegar y poner en funcionamiento tus codigos de manera sofisticada. Y con apenas unos clics podras subir la web a Internet mediante FTP. </p>
<p>WeBuilder incluye varias plantillas de webs con sus correspondientes codigos, permitiendo ademas guardar y abrir archivos directamente desde el servidor FTP/SFTP. </p>
<ul>
<li><strong>IDIOMA</strong>: Inglés </li>
<li><strong>TAMAÑO</strong>: 10.027 KB </li>
</ul>
<p> <a><img height="29" alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/megauploadlogo.jpg" width="250" border="0" /></a>
<p align="center"><a title="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" href="http://www.megaupload.com/?d=C69WZJPE" target="_blank"><img alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/plantilla/download_info.gif" /> </a></p>
<p> <a><img height="54" alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/mediafire.PNG" width="150" border="0" /></a>
</p>
<p align="center"><a title="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" href="http://www.mediafire.com/?mgjtzmz1yty" target="_blank"><img alt="Aplicaciones Portables, Aplicaciones USB, Software USB, Juegos Portables" src="http://appsportables.iespana.es/images/plantilla/download_info.gif" /> </a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Programacion.com]]></title>
<link>http://cursoinformaticagratis.wordpress.com/2009/12/10/programacion-com/</link>
<pubDate>Thu, 10 Dec 2009 00:39:27 +0000</pubDate>
<dc:creator>New Horizons Barcelona</dc:creator>
<guid>http://cursoinformaticagratis.wordpress.com/2009/12/10/programacion-com/</guid>
<description><![CDATA[  Más información o reserva de plazas: Formulario de solicitud online Teléfono: 93 602 55 00 New Hor]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p style="text-align:center;"><strong> </strong></p>
<p style="text-align:center;"><strong>Más información o reserva de plazas:<br />
</strong><span style="text-decoration:underline;"><a href="http://www.nhbarcelona.com/mk/g/programacion-wordpress-form.htm">Formulario de solicitud online</a></span><br />
Teléfono: 93 602 55 00<br />
<strong>New Horizons Barcelona</strong> </p>
<p>Realice un curso gratis de Java de 12 horas de duración.</p>
<p>Nuestro curso esta dirigido a profesionales interesados en aprender el lenguaje de multiplataforma más extendido. Entre otras cosas este curso te prepara para la realización de applets para paginas web. No son necesarios conocimientos previos.</p>
<h2>Temario</h2>
<p> </p>
<p><strong>Introducción</strong><br />
- Breve Historia y Evolución de Java<br />
- La Java Virtual Machine (JVM)<br />
- Instalación de las Herramientas de Desarrollo de Java<br />
- Primer Programa en Java<br />
- Ciclo de Vida del Código Java. Compilación Just In Time</p>
<p lang="en-GB"> </p>
<p><strong>Sintaxis del Lenguaje Java</strong><br />
- Uso de Variables, Operadores, Expresiones y Comentarios<br />
- Tipos de Variables (Primitivas, de Objeto)<br />
- Conversiones Explicitas e Implícitas (Casting) de Variables<br />
- Gestión del Flujo de Programación. (If, else, while, for&#8230;)<br />
- Arrays<br />
- La clase String</p>
<p lang="en-GB"> </p>
<p><strong>Programación Orientada a Objetos I</strong><br />
- Descripción del Modelo de Programación Orientada a Objetos<br />
- La Clase y el Objeto<br />
- Métodos y Variables de Objeto<br />
- Constructores y Destructores de Objeto<br />
- Sobrecarga de Métodos y de Constructores</p>
<p><strong>Programación Orientada a Objetos II</strong><br />
- Métodos y Variables de Clase (Static)<br />
- Herencia de Clases<br />
- Concepto de Encapsulación<br />
- Sobreescritura de Métodos</p>
<p><strong>Programación Orientada a Objetos III</strong><br />
- Interfaces<br />
- Concepto de Polimorfismo<br />
- Clases Abstractas</p>
<p><strong>Gestión de Excepciones</strong><br />
- Instrucciones Try..Catch..End Try<br />
- Excepciones Definidas por el Usuario (Throw)<br />
- Desvío de Excepciones (Throws)</p>
<p><strong>Organización de los Componentes Java</strong><br />
- Uso y Creación de Namespaces<br />
- Empaquetado de Clases Utilizando JAR</p>
<p><strong>Clases del Namespace java.io</strong><br />
- Gestión del Sistema de Archivos<br />
- Lectura y Escritura de Archivos del Disco</p>
<p><strong>Clases del Namespace java.util</strong><br />
- Uso de Colecciones<br />
- Gestión de Fechas</p>
<p style="text-align:center;"><strong><br />
</strong><strong>Más información o reserva de plazas:<br />
</strong><span style="text-decoration:underline;"><a href="http://www.nhbarcelona.com/mk/g/programacion-wordpress-form.htm">Formulario de solicitud online</a></span><br />
Teléfono: 93 602 55 00<br />
<strong>New Horizons Barcelona</strong></p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
