<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>3f blog</title>
	<atom:link href="http://blog.soluciones3f.com.ar/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.soluciones3f.com.ar</link>
	<description>Experiencias compartidas</description>
	<lastBuildDate>Fri, 10 Sep 2010 04:29:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Cambios de seguridad en Firefox 4 por el exploit :visited</title>
		<link>http://blog.soluciones3f.com.ar/2010/09/10/cambios-de-seguridad-en-firefox-4-por-el-exploit-visited/</link>
		<comments>http://blog.soluciones3f.com.ar/2010/09/10/cambios-de-seguridad-en-firefox-4-por-el-exploit-visited/#comments</comments>
		<pubDate>Fri, 10 Sep 2010 04:29:25 +0000</pubDate>
		<dc:creator>fernando</dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[sociedad]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[accesibilidad]]></category>
		<category><![CDATA[accesibility]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[visited]]></category>

		<guid isPermaLink="false">http://blog.soluciones3f.com.ar/?p=613</guid>
		<description><![CDATA[Cuando uno recien termina de formatear la computadora, una de las tareas más divertidas es bajar megas y megas de programas para reinstalar. Y mientras esos programas están bajando lo mejor que uno puede hacer es leer blogs. Ayer había visto que mi compañero Facundo estaba utilizando Firefox 4 Beta 5,  y me pregunté cuales [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando uno recien termina de formatear la computadora, una de las tareas más divertidas es bajar megas y megas de programas para reinstalar. Y mientras esos programas están bajando lo mejor que uno puede hacer es leer blogs.</p>
<p>Ayer había visto que mi compañero Facundo estaba utilizando Firefox 4 Beta 5,  y me pregunté cuales eran las diferencias y mejoras que se planteaban agregar en esta nueva versión de mi explorador favorito. Por este motivo hoy leí los <a href="http://www.mozilla.com/en-US/firefox/4.0b5/releasenotes/">release notes que figuran en la página de mozilla</a> y entre muchos cambios que nombran uno me llamó la atención y decidí escribir algunas líneas al respecto aquí</p>
<p>La característica en cuestión es <a href="http://hacks.mozilla.org/2010/03/privacy-related-changes-coming-to-css-vistited/">CSS :visited selectors have been changed to block websites from being able to check a user&#8217;s browsing history.</a> Lo cual se traduce más o menos como <em>El selector :visited de CSS ha sido cambiado para impedir que los sitios puedan chequear las páginas visitadas del usuario</em></p>
<p>La génesis del problema es que, actualmente, una página web pueda mostrar una larga lista de links y aplicarles por medio del selector <em>:visited</em> un estilo que diferencie los links visitados de los no visitados. Y luego utilizando algunas funciones JavaScript determinar cuales aparecen con un estilo u otro e informarselo al servidor.</p>
<p>En mi humilde opinión, no es un bug que requiera ser arreglado, sinó mas bien una característica y comportamiento de los estilos CSS, sin embargo entiendo los motivo (phishing y malas intenciones) para que se quiera bloquear este posible vector de ataque a la privacidad de un usuario.</p>
<p>Sin embargo, lo que más me llamó la atención es la forma en que plantean resolverlo, que básicamente son</p>
<ol>
<li>Algunas funciones de javascript mentirán en sus resultados para no delatar las páginas visitadas</li>
<li>Limitar <strong>muchísimo</strong> los estilos que se podrán aplicar al selector :visited reduciéndolos básicamente a sólo cambiar de color</li>
</ol>
<p>Ante semejante limitación, en esa misma página, se alzaron las voces a favor y en contra con argumentos muy interesantes de ambos lados.</p>
<p>Desde mi posición de ignorante amateur, la idea que Javascript mienta si bien en primera instancia no me pareció mala, me gustó mucho más el que en lugar de mentir se generen errores cuando se intenten acceder a propiedades que deberían ser limitadas.</p>
<p>Si bien muchas páginas que actualmente funcionan correctamente, comenzarían a mostrar errores por culpa de javascript, no creo que existan muchas que realmente necesiten acceder a las funciones que están involucradas. En cambio el mentir en lo que retorna una función me parece simplemente equivocado.</p>
<p>Es, sin embargo, el segundo punto que nombro el que mas me inquieta</p>
<p>Aunque no soy un diseñador experimentado he utilizado en varias ocaciones el pseudo selector <em>:visited</em> para agregar información al usuario resaltándole los links no visitados de los que ya ha estado navegando.</p>
<p>En algunos casos esto lo he realizado utilizando diferentes colores, o subrayando el texto, pero en muchos mi estrategia fue agregar un borde, o cambiar el tamaño de una tipografía o incluso pasandola a mayúsculas o minúsculas.</p>
<p>Ninguna de estas acciones funcionará con el nuevo modelo, por lo que algunos sitios dejarán de funcionar correctamente. Afortunadamente este cambio no hará al sitio inusable, pero si lo afectará visualmente. e incluso limita mis posibilidades de diseño.</p>
<p>Por otro lado, como bien dicen en el sitio de mozilla, otros engines de renderización html, como WebKit (el  utilizado por Google Chrome) están implementando las mismas restricciones por lo que es algo bueno que todos tomen las mismas medidas (sería muy desagradable y problemático que algunos tiren errores, otros mientas, etc) y además deberemos convivir con estas limitaciones, porque si la mayoría de los exploradores las adopta, serán unas limitaciones que llegarán para quedarse.</p>
<p>Esperemos que no afecte tanto como algunos dicen, aunque supongo que afectará más de lo que los optimistas piensan. De mi parte me adaptaré a los tiempos actuales, y trataré de ir evitando el uso de estas características desde ahora.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soluciones3f.com.ar/2010/09/10/cambios-de-seguridad-en-firefox-4-por-el-exploit-visited/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sobre la palabra reservada &#8220;using&#8221; en C#</title>
		<link>http://blog.soluciones3f.com.ar/2010/08/19/sobre-la-palabra-reservada-using-en-c/</link>
		<comments>http://blog.soluciones3f.com.ar/2010/08/19/sobre-la-palabra-reservada-using-en-c/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 01:14:28 +0000</pubDate>
		<dc:creator>fernando</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[disposable]]></category>
		<category><![CDATA[keyword]]></category>
		<category><![CDATA[palabra clave]]></category>
		<category><![CDATA[palabra reservada]]></category>
		<category><![CDATA[recursos]]></category>
		<category><![CDATA[reserved word]]></category>
		<category><![CDATA[using]]></category>

		<guid isPermaLink="false">http://blog.soluciones3f.com.ar/?p=607</guid>
		<description><![CDATA[Antes que nada perdón por el título, me dolió muchísimo escribir palabra reservada en lugar de escribir como estamos más acostumbrados keyword en argentina. Pero decidí utilizar su traducción porque después de todo este es un blog en español y mucha gente que lo consulta acostumbra a utilizar únicamente español en sus consultas. Hecho este [...]]]></description>
			<content:encoded><![CDATA[<p>Antes que nada perdón por el título, me dolió muchísimo escribir <em>palabra reservada</em> en lugar de escribir como estamos más acostumbrados <em>keyword </em>en argentina. Pero decidí utilizar su traducción porque después de todo este es un blog en español y mucha gente que lo consulta acostumbra a utilizar únicamente español en sus consultas.</p>
<p>Hecho este descargo, el motivo fue que hice un pequeño programita que escribía en un archivo, para ello me basé en la ayuda de Microsoft que utilizaba el keyword using de la siguiente manera</p>
<pre class="brush: csharp;">
using(StreamWriter w = new StreamWriter(&quot;BuildAll.sql&quot;)) {
// hago lo que quiero con el writer
}
</pre>
<p>Un poco tardíamente (ya que esto existe hace varios años)  me surgió la duda de para que servía realmente using. El saber popular dice que es para asegurarse que se liberan los recursos que podrían haberse reservado, pero esta explicación no era suficiente para mi y quería saber realmente como funcionaba.</p>
<p>Consultando en internet encontré en CodeProject el artículo titulado <a href="http://www.codeproject.com/KB/cs/CSharp_using.aspx" target="_blank">The &#8220;using&#8221; Keyword in C#</a> en el cual el autor comenta  su investigación sobre el asunto. Recomiendo a cualquiera que le interese un poco el funcionamiento interno de las cosas que le pegue una leida a ese artículo.</p>
<p>En resumen lo que dice es que lo que hace este keyword es crear un bloque try..finally, en donde como última acción se realiza un dispose del objeto que figura en el parámetro del using. Y que si la clase que se esta intentando limpiar no implementa correctamente la interfaz IDisposable no sirve de mucho.</p>
<p>En fin, esto más que nada me pareció una curiosidad que a otros les parecio interesante que escribiera aquí.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soluciones3f.com.ar/2010/08/19/sobre-la-palabra-reservada-using-en-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mockear la misma clase que se esta testeando para realizar pruebas unitarias</title>
		<link>http://blog.soluciones3f.com.ar/2010/08/16/mockear-la-misma-clase-que-se-esta-testeando-para-realizar-pruebas-unitarias/</link>
		<comments>http://blog.soluciones3f.com.ar/2010/08/16/mockear-la-misma-clase-que-se-esta-testeando-para-realizar-pruebas-unitarias/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 05:31:40 +0000</pubDate>
		<dc:creator>fernando</dc:creator>
				<category><![CDATA[grails]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[criterias]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[integration test]]></category>
		<category><![CDATA[mocking]]></category>
		<category><![CDATA[pruebas de integracion]]></category>
		<category><![CDATA[pruebas unitarias]]></category>
		<category><![CDATA[unit test]]></category>

		<guid isPermaLink="false">http://blog.soluciones3f.com.ar/?p=602</guid>
		<description><![CDATA[En el artículo anterior comenté que es aconsejable aislar en diferentes métodos aquellos fragmentos de código que no pueden ser testeados unitariamente (por ejemplo las consultas con Hibernate Criterias, o Hql) de tal manera que puedan ser mockeados y de esa manera poder testear el resto del código. Pero cuando intenté llevar a la práctica [...]]]></description>
			<content:encoded><![CDATA[<p>En el artículo anterior comenté que es aconsejable aislar en diferentes métodos aquellos fragmentos de código que no pueden ser testeados unitariamente (por ejemplo las consultas con Hibernate Criterias, o Hql) de tal manera que puedan ser mockeados y de esa manera poder testear el resto del código.</p>
<p>Pero cuando intenté llevar a la práctica esto, descubrí que no quería crear una clase nueva para tener estos métodos, sino que quería que estén en la misma clase. Esto me planteaba un problema. Necesitaba mocker el método que no quería que se ejecutara, pero no sabía si podía mockear una clase en la cual había un método que si quería testear.</p>
<p>La respuesta fácil es SI, se puede, pero hay una limitación. El método que se quiere mockear hay que hacerlo utilizando metaClass. No se puede utilizar demand, como con los mocks normales, sino que se debe si o si utilizar metaClass.</p>
<p>Uno puede decir, que para eso no hago ningún mock, y simplemente utilizo metaClass para pisar el método en cuestión, pero lamentablemente, como dicen en muchos otros blogs, hacer eso no es seguro, y puede afectar el resultado de otros tests. (de hecho en mi se veía el error en los test de integración que comenzaron a fallar y no entendía por qué)</p>
<p>Basta con llamar a mockFor sobre la clase que se quiera testear, y luego se puede utilizar metaClass tranquilamente para cambiar esa clase, que cuando se termine el test los cambios se revertirán normalmente.</p>
<p>Se que mucho tal vez no se entienda, asi que dejaré un pequeño ejemplo comentado aquí</p>
<p>Quiero testear el método agregar de la clase DestacadoService. Este método internamente llama al método buscarDestacado el cual utiliza bastante hql para realizar su función, el cual no funciona en pruebas unitarias, entonces para realizar el test de agregar se necesita hacer algo similar a lo siguiente:</p>
<pre class="brush: groovy;">
mockFor(DestacadoService)
DestacadoService.metaClass.buscarDestacado = { pais, tipo, id -&gt; return null; }

def service = new DestacadoService()
def r = service.agregar(pais.argentina, tipo.principal, 'mi destacado')
</pre>
<p>Como se puede apreciar, en la línea 1 llamamos a mockFor sobre la clase que queremos mockear<br />
En la línea 2, utilizamos metaClass para cambiar el método (y retornar algo estático que no use hql ni nada)<br />
En la siguiente línea de código instanciamos la clase que contiene el método que queremos testar<br />
Y finalmente, en la última lo ejecutamos</p>
<p>Haciendo esto nos aseguramos que luego del test el cambio sobre la clase causado por la modificación del metaClass sea revertido y no afecte al resto de los tests.</p>
<p>Exactamente lo mismo se debe hacer cuando se quieren modificar métodos que estén en clases de dominio. Solo que en lugar de utilizar mockFor se puede utilizar mockDomain</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soluciones3f.com.ar/2010/08/16/mockear-la-misma-clase-que-se-esta-testeando-para-realizar-pruebas-unitarias/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Como hacer pruebas unitarias con Grails que tienen método que acceden a la base de datos</title>
		<link>http://blog.soluciones3f.com.ar/2010/08/16/como-hacer-pruebas-unitarias-con-grails-que-tienen-metodo-que-acceden-a-la-base-de-datos/</link>
		<comments>http://blog.soluciones3f.com.ar/2010/08/16/como-hacer-pruebas-unitarias-con-grails-que-tienen-metodo-que-acceden-a-la-base-de-datos/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 04:44:31 +0000</pubDate>
		<dc:creator>fernando</dc:creator>
				<category><![CDATA[grails]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[createcriteria]]></category>
		<category><![CDATA[gorm]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[integration test]]></category>
		<category><![CDATA[pruebas de integracion]]></category>
		<category><![CDATA[pruebas unitarias]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[unit testint]]></category>

		<guid isPermaLink="false">http://blog.soluciones3f.com.ar/?p=599</guid>
		<description><![CDATA[Una de las tareas mas importantes, y a la vez que más esquivamos hacer son los famosos tests, tan necesarios para las metodologías ágiles que nos gusta seguir. En grails hay principalmente dos tipos de tests. Unitarios y de Integración. Los primeros se ejecutan muy rápido pero no cuentan con todo el entorno de grails [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las tareas mas importantes, y a la vez que más esquivamos hacer son los famosos tests, tan necesarios para las metodologías ágiles que nos gusta seguir.</p>
<p>En grails hay principalmente dos tipos de tests. Unitarios y de Integración. Los primeros se ejecutan muy rápido pero no cuentan con todo el entorno de grails especialmente hibernate, y los segundos demoran mucho más en su ejecución, pero contamos con todas las funcionalidades de grails.</p>
<p>Según mi humilde opinión, debemos intentar hacer la mayor cantidad de tests posibles utilizando pruebas unitarias, ya que en mi experiencia por ser tan lentos los tests de integración, terminamos sin usarlos.</p>
<p>Pero nuestra intención de usar test unitarios lo más posible, se golpea contra un muro de concreto cuando intentamos testear métodos que utilizan Criterias o Hql, ya que al depender de hibernate, el cual no está disponible durante las pruebas unitarias no hay forma de hacerlos funcionar.</p>
<p>Un &#8220;tip&#8221; es intentar utilizar tan poco estas funciones como sea posible, y cuando no queda otro remedio que usarlas, intentar centralizar todo el código en algunos métodos que únicamente se encarguen de realizar estas consultas, los cuales serán probados con test de integración.</p>
<p>Si todo este código lo ponemos en una clase diferente, entonces podremos mockearla para las pruebas unitarias y el resto de nuestros métodos que no dependen de hql ni criterias, podrán ser testeados ya que se limitarán a invocar los métodos problemáticos sobre un mock, y problema resuelto.</p>
<p>Sin embargo a veces no queremos poner estos métodos en otra clase, sino que deseamos que sean métodos de la misma clase que estoy estoy testeando, o los métodos se encuentran en clases de dominio, y ahí se producen algunos otros problemillas que trataré en el <a href="http://blog.soluciones3f.com.ar/2010/08/16/mockear-la-misma-clase-que-se-esta-testeando-para-realizar-pruebas-unitarias/">siguiente post</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soluciones3f.com.ar/2010/08/16/como-hacer-pruebas-unitarias-con-grails-que-tienen-metodo-que-acceden-a-la-base-de-datos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5 &#8211; Custom Data</title>
		<link>http://blog.soluciones3f.com.ar/2010/07/26/html5-custom-data/</link>
		<comments>http://blog.soluciones3f.com.ar/2010/07/26/html5-custom-data/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 15:45:25 +0000</pubDate>
		<dc:creator>fernando</dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[custom data]]></category>
		<category><![CDATA[estandar]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web develpment]]></category>
		<category><![CDATA[webiste]]></category>
		<category><![CDATA[xhtml]]></category>
		<category><![CDATA[xhtml5]]></category>

		<guid isPermaLink="false">http://blog.soluciones3f.com.ar/?p=593</guid>
		<description><![CDATA[Seguramente llegamos tarde,  pero siempre es bueno reconocer las cosas buenas, o al menos que nos resultan beneficiosas. En este caso estoy haciendo un sitio dinamico, donde necesitaba agregar información extra a los tags html para luego ser utilizada desde javascript. Hasta hoy, no habia una forma que realmente me gustara de realizar esto, ya [...]]]></description>
			<content:encoded><![CDATA[<p>Seguramente llegamos tarde,  pero siempre es bueno reconocer las cosas buenas, o al menos que nos resultan beneficiosas. En este caso estoy haciendo un sitio dinamico, donde necesitaba agregar información extra a los tags html para luego ser utilizada desde javascript.</p>
<p>Hasta hoy, no habia una forma que realmente me gustara de realizar esto, ya que o eran muy complejas, o no pasan la prueba de XHTML válido. Estas eran a pesar de la especificación agregar los atributos a los tags html directamente y luego recuperarlos utilizando getAttribute, o utilizando alguna librería de javassscript (o javascript puro) para realizar la misma tarea, pero 100% en el lado de javascript y asi pasar las validaciones de html.</p>
<p>Pero hoy investigando sobre HTML5 encontré que finalmente definieron una manera estructurada de lograr este objetivo. Así que a diseñar paginas HTML5 se ha dicho <img src='http://blog.soluciones3f.com.ar/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Rápidamente, todos los atributos que se definan con el prefijo <strong>data-</strong> se conciderarán validos y como datos costumizados, que no afectan la renderizacion del sitio. Justo lo que quería !</p>
<p>Mas información pueden encontrar en los sitios que me base los cuales fueron <a href="http://www.javascriptkit.com/dhtmltutors/customattributes.shtml">JavaScript Kit</a>, el <a href="http://ejohn.org/blog/html-5-data-attributes/">blog de John Resig</a> y también en la pagina de referencia formal, o sea la <a href="http://dev.w3.org/html5/spec/elements.html#embedding-custom-non-visible-data">especificación HTML5</a> (que aun se encuentra en draft)</p>
<p>Aunque me parecen maravillosas noticias, concuerdo igualmente que esta especificación, en el futuro y cuando se popularize su uso va a llevar a un caos de colision de nombres, como indican en la página <a href="http://html5doctor.com/html5-custom-data-attributes/">html5Doctor</a></p>
<p>Al margen de custom-data, otra cosa que estoy investigando y espero pronto usar para poder comentarla en este blog (aunque aun no he tenido la necesidad de hacerlo) es la especificación sobre microdata.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soluciones3f.com.ar/2010/07/26/html5-custom-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ejecutar un webservice en tomcat 6 con jdk 1.6 y jax-ws</title>
		<link>http://blog.soluciones3f.com.ar/2010/06/22/ejecutar-un-webservice-en-tomcat-6-con-jdk-1-6-y-jax-ws/</link>
		<comments>http://blog.soluciones3f.com.ar/2010/06/22/ejecutar-un-webservice-en-tomcat-6-con-jdk-1-6-y-jax-ws/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 16:49:27 +0000</pubDate>
		<dc:creator>fafa</dc:creator>
				<category><![CDATA[programacion]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jax-ws]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[webservices]]></category>

		<guid isPermaLink="false">http://blog.soluciones3f.com.ar/?p=565</guid>
		<description><![CDATA[Se que muchos deben haber andado buscando una forma sencilla de resolver el típico problema: ¿Cómo hago un webservice de java tan fácil como lo hago con .NET? Se dice, la nueva arquitectura de java, es muy buena. Se que es posible, se que gente que la usa, pero en ningún lado encontré una forma [...]]]></description>
			<content:encoded><![CDATA[<p>Se que muchos deben haber andado buscando una forma sencilla de resolver el típico problema: ¿Cómo hago un webservice de java tan fácil como lo hago con .NET? Se dice, la nueva arquitectura de java, es muy buena. Se que es posible, se que gente que la usa, pero en ningún lado encontré una forma concreta y práctica que garantice su funcionamiento. Bueno, no estoy seguro que sea eso lo que piensen, lo que si estoy seguro es que eso fue lo que me pasó a mi&#8230; y no es poca cosa, debo agregar. Me costó un poco encontrar una respuesta coherente que sea fácil de transmitir, de ahí, este post.<br />
Intentaré describir en dos niveles, el primero con un ejemplo práctico y el segundo detallando cada función usada. ¿Por qué? porque prefiero que la gente que lea esto entienda el por qué de las cosas que se están haciendo.</p>
<ol>
<li>Crear un proyecto Web (no importa la herramienta, son siempre iguales)</li>
<li>Configurar el web.xml indicándole que direcciones los pedidos (de alguna  url) al servlet de jax-ws</li>
<pre class="brush: xml;">
&lt;listener&gt;
	&lt;listener-class&gt;
		com.sun.xml.ws.transport.http.servlet.WSServletContextListener
	&lt;/listener-class&gt;
&lt;/listener&gt;
&lt;servlet&gt;
	&lt;description&gt;## descripción del Servlet ##&lt;/description&gt;
	&lt;display-name&gt;## nombre a mostrar entre los servicios ejecutándose en el servidor ##&lt;/display-name&gt;
	&lt;servlet-name&gt;## nombre de referencia dentro del xml para el Servlet ##&lt;/servlet-name&gt;
	&lt;servlet-class&gt;
		com.sun.xml.ws.transport.http.servlet.WSServlet
	&lt;/servlet-class&gt;
	&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
	&lt;servlet-name&gt;## nombre de referencia dentro del xml para el Servlet ##&lt;/servlet-name&gt;
	&lt;url-pattern&gt;/##url_dentro_de_la_aplicacion_para_el_servlet##&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;
</pre>
<li>Crear un <strong>WEB-INF/sun-jaxws.xml</strong> que contenga:</li>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'&gt;
	&lt;endpoint name='##nombre_de_la_aplicacion##' implementation='paquete.ClaseConAnotacionWebService' url-pattern='/url_asignada_al_servlet_del_webservice' /&gt;
&lt;/endpoints&gt;
</pre>
<li>Configurar las clases que se desea publicar como WebService, con un<strong> @WebService</strong></li>
<li><a href="https://jax-ws.dev.java.net/jax-ws-20-fcs/jaxws-2_0.jar">Descargar el jax-ws</a> (la descarga es un jar, que al clickear muestra una licencia y al aceptar descomprime muchos archivos). Hay que copiar todos los *.jar dentro del directorio $CATALINA/lib</li>
<li>Al desplegar la aplicación web, dentro de un WAR, en el tomcat, el jax generará automáticamente los wsdl y todo archivo necesario para publicar el webservice.</li>
</ol>
<p>Espero que con esto se entienda, links de referencia:</p>
<ul>
<li><a href="http://mywheel.net/blog/index.php/2007/04/18/deploying-java-6-web-services-in-tomcat/">http://mywheel.net/blog/index.php/2007/04/18/deploying-java-6-web-services-in-tomcat/</a></li>
<li><a href="http://mywheel.net/blog/index.php/2007/03/28/web-services-in-java-6/">http://mywheel.net/blog/index.php/2007/03/28/web-services-in-java-6/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.soluciones3f.com.ar/2010/06/22/ejecutar-un-webservice-en-tomcat-6-con-jdk-1-6-y-jax-ws/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalación de Toad for Oracle 10 en Windows 7 &#8211; 64 Bits</title>
		<link>http://blog.soluciones3f.com.ar/2010/05/28/instalacion-de-toad-for-oracle-10-en-windows-7-64-bits/</link>
		<comments>http://blog.soluciones3f.com.ar/2010/05/28/instalacion-de-toad-for-oracle-10-en-windows-7-64-bits/#comments</comments>
		<pubDate>Fri, 28 May 2010 15:52:52 +0000</pubDate>
		<dc:creator>garri</dc:creator>
				<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://blog.soluciones3f.com.ar/?p=557</guid>
		<description><![CDATA[Después de un día de lucha y varias batallas intentando hacer funcionar Toad para Oracle 10, logramos hacer que la conexión con InstantClient tenga éxito. El problema estaba en el Oracle Client que estabamos usando, nos habiamos instalado el InstantClient de Oracle de 64 bits y si bien lo estabamos haciendo sobre Windows 7 de [...]]]></description>
			<content:encoded><![CDATA[<p>Después de un día de lucha y varias batallas intentando hacer funcionar Toad para Oracle 10, logramos hacer que la conexión con InstantClient tenga éxito.</p>
<p>El problema estaba en el Oracle Client que estabamos usando, nos habiamos instalado el InstantClient de Oracle de 64 bits y si bien lo estabamos haciendo sobre Windows 7 de 64 bits, el problema de que la conexión entre Toad y el Client era fallida se debía a que por alguna razón Toad for Oracle 10 es compatible solo con InstantClient de 32 bits.</p>
<p>A continuación paso a detallar los pasos que seguimos para hacer que la conexión sea exitosa:</p>
<p>- En primero creamos una carpeta con el nombre &#8220;oracle&#8221; en el C:\.  Allí creamos dos carpetas mas, una con el nombre &#8220;bin&#8221; y la otra &#8220;network&#8221;.</p>
<p><a href="http://blog.soluciones3f.com.ar/wp-content/uploads/2010/05/ScreenHunter_05-Oct.-18-20.511.gif" rel="lightbox[557]"><img class="alignnone size-full wp-image-559" src="http://blog.soluciones3f.com.ar/wp-content/uploads/2010/05/ScreenHunter_05-Oct.-18-20.511.gif" alt="" width="118" height="74" /></a></p>
<p>- Una vez hecho esto lo que hicimos fue crear, en la carpeta &#8220;network&#8221;, la carpeta &#8220;admin&#8221; (tal como se muestra en la imagen anterior) y dentro de esta última los siguientes archivos: <tt>tnsnames.ora y </tt><tt>sqlnet.ora.</tt></p>
<p>Ahora les paso el detalle del contenido de cada archivo:</p>
<p>tnsnames.ora</p>
<pre>XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.33.7)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )</pre>
<pre>EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )</pre>
<pre>ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )</pre>
<p>&#8212;&#8212;&#8212;&#8212;</p>
<p><tt>sqlnet.ora</tt></p>
<pre>SQLNET.AUTHENTICATION_SERVICES = (NTS)</pre>
<p>&#8212;&#8212;&#8212;&#8211;</p>
<p>- Por último, lo que nos quedó por hacer fue agregar las variables de entorno que les detallo a continuación:</p>
<ul>
<li><code>ORACLE_HOME = C:\oracle</code></li>
<li><code>ORACLE_HOME_NAME = C:\oracle</code></li>
<li><code>SQL_PATH = C:\oracle</code></li>
<li><code>TNS_ADMIN = C:\oracle\network\admin</code></li>
<li><code>LD_LIBRARY_PATH = C:\oracle\bin</code></li>
</ul>
<p>Y luego agregamos en el PATH:</p>
<ul>
<li><code>C:\oracle\bin</code></li>
</ul>
<p>Bueno, una vez hecho todo esto la conexión fue un rotundo éxito.</p>
<p>Aquí les dejo el la URL de donde sacamos la info para poder seguir todos los pasos detallados antes, tambiés les paso el link para la descarga del InstantClient 32 Bits.</p>
<p><a href="http://xp-rience.blogspot.com/2009/10/toad-97-oracle-instant-client-111.html" target="_blank">- Blog XP-RIENCE</a></p>
<p><a href="http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html" target="_blank">- IstantClient</a> (descargar el archivo: instantclient-basiclite-win32-11.2.0.1.0.zip)</p>
<p>Esta fué mi primer publicación, espero que les sirva y se entienda, ante cualquier reclamo comunicarse con defensa al consumidor.</p>
<p>Saludos!!</p>
<p>Fernando M. S. Garrido.-</p>
<p><img src="/Users/Fernando/AppData/Local/Temp/moz-screenshot.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soluciones3f.com.ar/2010/05/28/instalacion-de-toad-for-oracle-10-en-windows-7-64-bits/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Soluciones 3f audita exitosamente para certificar ISO 9001</title>
		<link>http://blog.soluciones3f.com.ar/2010/05/19/soluciones-3f-audita-exitosamente-para-certificar-iso-9001/</link>
		<comments>http://blog.soluciones3f.com.ar/2010/05/19/soluciones-3f-audita-exitosamente-para-certificar-iso-9001/#comments</comments>
		<pubDate>Wed, 19 May 2010 15:07:06 +0000</pubDate>
		<dc:creator>fafa</dc:creator>
				<category><![CDATA[anuncios]]></category>
		<category><![CDATA[iso9000]]></category>

		<guid isPermaLink="false">http://blog.soluciones3f.com.ar/?p=543</guid>
		<description><![CDATA[Ayer, después de varios meses de preparación y entrenamiento. Con la ayuda de Sofía Holder, Nicolás Censsi y Juan Carlos Masoero de Axintia. Realizamos la primera auditoria externa en ISO 9001, realizada por Ana y Eric del ente certificador SGS. Esta acción nos pone más cerca de la calidad que queremos y sabemos nos da [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sgs.com"><img class="alignleft size-full wp-image-544" title="sgs-logo" src="http://blog.soluciones3f.com.ar/wp-content/uploads/2010/05/sgs-logo.png" alt="" width="200" height="97" /></a>Ayer, después de varios meses de preparación y entrenamiento. Con la ayuda de <a href="http://ar.linkedin.com/in/sofiaholder">Sofía Holder</a>, Nicolás Censsi y Juan Carlos Masoero de <a href="http://www.axintia.com/">Axintia</a>. Realizamos la primera auditoria externa en ISO 9001, realizada por Ana y Eric del ente certificador <a href="http://www.sgs.com">SGS</a>.</p>
<p>Esta acción nos pone más cerca de la calidad que queremos y sabemos nos da ventaja competitiva en el mercado de software.</p>
<p>Hemos de confesar que la Guía 90003, creada por la <a href="http://www.iso.org/iso/catalogue_detail?csnumber=35867">ISO/IEC</a> avalada por <a href="http://www.iram.com.ar/">IRAM </a>que aunque parece estar orientada al software también está un poco desactualizada dando valor y haciendo requerimientos que van en contra de algunas de nuestras filosofías: ser ágiles. Uno de los auditores no podía entender nuestra dinámica&#8230; si, somos raros, ¿y qué? (<strong>Gracias Ana por la paciencia</strong>)</p>
<p>Este proyecto se inicio a partir de un <a href="http://www.agencia.gov.ar/spip.php?page=convocatorias_articulo&amp;mostrar=918">subsidio de tipo ANR (aporte no retribuible)</a> de la Agencia Nacional de Promoción, Ciencia y Tecnología. Que brinda el 50% del costo total del proyecto <span style="text-decoration: underline;">sin necesidad de devolverlo</span>. Subsidio que, además, aprovechan muchas empresas de software.</p>
<p>La certificación de calidad también nos permite entrar dentro del marco de la <a href="http://www.agencia.gov.ar/convocatorias/documentosconvocatorias/ley_25922.pdf">ley de promoción de la industria de software</a>. Permitiéndonos mantener nuestros precios competitivos a la par de nuestro crecimiento.</p>
<p>Fue un día largo, todos terminamos agotados pero afortunadamente se creó un excelente clima con los auditores, asesores y todo el equipo de la empresa quienes hicieron de eslabón esencial para llegar a este logro. Estamos orgullosos de haber dado este paso y nos entusiasma el futuro. Pero, principalmente, <strong>estamos muy contentos</strong>.</p>
<p>Aquí algunas fotos celebrando el momento al final del día. (Habíamos guardado un Champagne por si todo salía bien&#8230; y salió tan bien que también abrimos la sidra que estaba en la heladera)</p>

<a href='http://blog.soluciones3f.com.ar/2010/05/19/soluciones-3f-audita-exitosamente-para-certificar-iso-9001/sgs-logo/' title='sgs-logo'><img width="150" height="97" src="http://blog.soluciones3f.com.ar/wp-content/uploads/2010/05/sgs-logo-150x97.png" class="attachment-thumbnail" alt="sgs-logo" title="sgs-logo" /></a>
<a href='http://blog.soluciones3f.com.ar/2010/05/19/soluciones-3f-audita-exitosamente-para-certificar-iso-9001/dsc_0013_resize/' title='DSC_0013_resize'><img width="150" height="150" src="http://blog.soluciones3f.com.ar/wp-content/uploads/2010/05/DSC_0013_resize-150x150.jpg" class="attachment-thumbnail" alt="DSC_0013_resize" title="DSC_0013_resize" /></a>
<a href='http://blog.soluciones3f.com.ar/2010/05/19/soluciones-3f-audita-exitosamente-para-certificar-iso-9001/dsc_0014_resize/' title='DSC_0014_resize'><img width="150" height="150" src="http://blog.soluciones3f.com.ar/wp-content/uploads/2010/05/DSC_0014_resize-150x150.jpg" class="attachment-thumbnail" alt="DSC_0014_resize" title="DSC_0014_resize" /></a>
<a href='http://blog.soluciones3f.com.ar/2010/05/19/soluciones-3f-audita-exitosamente-para-certificar-iso-9001/dsc_0015_resize/' title='DSC_0015_resize'><img width="150" height="150" src="http://blog.soluciones3f.com.ar/wp-content/uploads/2010/05/DSC_0015_resize-150x150.jpg" class="attachment-thumbnail" alt="DSC_0015_resize" title="DSC_0015_resize" /></a>
<a href='http://blog.soluciones3f.com.ar/2010/05/19/soluciones-3f-audita-exitosamente-para-certificar-iso-9001/dsc_0016_resize/' title='DSC_0016_resize'><img width="150" height="150" src="http://blog.soluciones3f.com.ar/wp-content/uploads/2010/05/DSC_0016_resize-150x150.jpg" class="attachment-thumbnail" alt="DSC_0016_resize" title="DSC_0016_resize" /></a>
<a href='http://blog.soluciones3f.com.ar/2010/05/19/soluciones-3f-audita-exitosamente-para-certificar-iso-9001/dsc_0017_resize/' title='DSC_0017_resize'><img width="150" height="150" src="http://blog.soluciones3f.com.ar/wp-content/uploads/2010/05/DSC_0017_resize-150x150.jpg" class="attachment-thumbnail" alt="DSC_0017_resize" title="DSC_0017_resize" /></a>
<a href='http://blog.soluciones3f.com.ar/2010/05/19/soluciones-3f-audita-exitosamente-para-certificar-iso-9001/dsc_0018_resize/' title='DSC_0018_resize'><img width="150" height="150" src="http://blog.soluciones3f.com.ar/wp-content/uploads/2010/05/DSC_0018_resize-150x150.jpg" class="attachment-thumbnail" alt="DSC_0018_resize" title="DSC_0018_resize" /></a>

]]></content:encoded>
			<wfw:commentRss>http://blog.soluciones3f.com.ar/2010/05/19/soluciones-3f-audita-exitosamente-para-certificar-iso-9001/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>¿Facebook una herramienta de comunicación?</title>
		<link>http://blog.soluciones3f.com.ar/2010/05/17/%c2%bffacebook-una-herramienta-de-comunicacion/</link>
		<comments>http://blog.soluciones3f.com.ar/2010/05/17/%c2%bffacebook-una-herramienta-de-comunicacion/#comments</comments>
		<pubDate>Mon, 17 May 2010 22:17:05 +0000</pubDate>
		<dc:creator>fafa</dc:creator>
				<category><![CDATA[sociedad]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[facebook]]></category>

		<guid isPermaLink="false">http://blog.soluciones3f.com.ar/?p=539</guid>
		<description><![CDATA[Hace algunos días me encontré con varios links que &#8220;critican&#8221; la actitud que la gente ha tomado hoy en día con facebook, pareciera que todo pasa por lo que se dice y no se dice dentro de esta red social. Pareciera que ya no tenemos ganas de comunicarnos y encontrarnos, parece que ahora lo importante [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.soluciones3f.com.ar/wp-content/uploads/2010/05/facebook-roto.png" rel="lightbox[539]"><img class="alignleft size-full wp-image-541" title="facebook-roto" src="http://blog.soluciones3f.com.ar/wp-content/uploads/2010/05/facebook-roto.png" alt="" width="246" height="82" /></a>Hace algunos días me encontré con varios links que &#8220;critican&#8221; la actitud que la gente ha tomado hoy en día con facebook, pareciera que todo pasa por lo que se dice y no se dice dentro de esta red social. Pareciera que ya no tenemos ganas de comunicarnos y encontrarnos, parece que ahora lo importante (e interesante) es hacer cosas del tipo:</p>
<ul>
<li>comentarios en los mensajes personales de nuestros amigos</li>
<li>vemos fotos de personas que ni conocemos, ni nunca vimos personalmente pero nos divertimos viendo qué es de su vida (?)</li>
<li>&#8220;nos gusta&#8221; o &#8220;no nos gustan&#8221; cosas que en realidad no nos interesaron nunca ni mirar</li>
<li>relaciones? resulta que ahora mi estado amoroso en facebook es real y muy importante para mi circulo de amigos</li>
<li>tengo una granja y necesito que mis amigos la vean y ayuden a cultivarla</li>
</ul>
<p>Yo tengo en mente que facebook es una genial herramienta para conectarme con gente que no veo diariamente o que está a una distancia tan grande que me es imposible mantener contacto&#8230; como gente que conocí de viaje, amigos del secundario (con los que he mantenido contacto y organizamos juntadas de vez en cuando) o personas que están en el exterior. Hasta es bueno para hacer anuncios a tus amigos de forma que se enteren en que andás por estos días&#8230; pero, vamos&#8230; tampoco vamos a convertirnos en facebook adictos y que todo lo que nos pase sea exclusivamente a través de ahí! De hecho ahora nos encontramos con que tenemos: buzz, twitter, facebook, orkut&#8230; uff&#8230; Estos videos, a mi parecer, nos muestran un poco en que nos está convirtiendo facebook&#8230; ¿queremos terminar así?</p>
<p><strong>Ahí van los links</strong></p>
<ul>
<li><a href="http://tv.gawker.com/5512185/south-park-explains-everything-that-is-annoying-about-facebook" target="_blank">http://tv.gawker.com/5512185/south-park-explains-everything-that-is-annoying-about-facebook</a></li>
<li><span style="font-family: tahoma,sans-serif;"><a href="http://www.youtube.com/watch?v=OiqHXPZwkYk" target="_blank">http://www.youtube.com/watch?v=OiqHXPZwkYk</a></span></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.soluciones3f.com.ar/2010/05/17/%c2%bffacebook-una-herramienta-de-comunicacion/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Alinear imágenes en WordPress</title>
		<link>http://blog.soluciones3f.com.ar/2010/05/14/alinear-imagenes-e-wordpress/</link>
		<comments>http://blog.soluciones3f.com.ar/2010/05/14/alinear-imagenes-e-wordpress/#comments</comments>
		<pubDate>Fri, 14 May 2010 19:38:08 +0000</pubDate>
		<dc:creator>fafa</dc:creator>
				<category><![CDATA[Sin categoría]]></category>

		<guid isPermaLink="false">http://blog.soluciones3f.com.ar/?p=535</guid>
		<description><![CDATA[Como algunos saben, una de las cosas que más nos interesan es explorar las diferentes tecnologías: sea esto a través de explorar redes sociales, diferentes blogs, videos, podcasts&#8230; google! sin importar de donde venga la información es clave identificar soluciones para poder aplicar a quien sea que lo necesite. Esta vez, una de las cosas [...]]]></description>
			<content:encoded><![CDATA[<p>Como algunos saben, una de las cosas que más nos interesan es explorar las diferentes tecnologías: sea esto a través de explorar redes sociales, diferentes blogs, videos, podcasts&#8230; google! sin importar de donde venga la información es clave identificar soluciones para poder aplicar a quien sea que lo necesite.<br />
Esta vez, una de las cosas que me pareció útil, fue saber cómo hacer para configurar la apariencia de WordPress (el Template) de forma que las imágenes se alineen de forma correcta. Me di cuenta que, a pesar que en el editor yo indicaba alinear una imagen a derecha o izquierda, esta imagen quedaba mal alineada&#8230; a veces centrada, a veces a la derecha y otras&#8230; la mayoría <strong>en cualquier lado</strong>.<br />
¡La solución fue muchísimo más fácil de lo que hubiera pensado! Al parecer WordPress alinea en base a un estilo CSS, este estilo puede estar configurado (o no) por quien haya hecho el estilo&#8230; básicamente si el estilo no soporta toda la funcionalidad de WordPress nosotros podemos cargar con las consecuencias.</p>
<p>Aquí un<strong> <a href="http://codex.wordpress.org/Using_Images">interesante link</a> </strong>donde explica las vicisitudes de usar imágenes en WordPress&#8230; Espero les sirva.</p>
<p>pd: Si, es un post corto y apunta a uno de los archivos de documentación de WordPress&#8230; <strong>pero, no por eso, menos interesante!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.soluciones3f.com.ar/2010/05/14/alinear-imagenes-e-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
