<?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>{ :lazy =&#62; loading }</title>
	<atom:link href="http://mgaravaglia.com.ar/blog/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://mgaravaglia.com.ar/blog</link>
	<description>So far the universe is wining.</description>
	<lastBuildDate>Tue, 31 May 2011 17:25:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Notación Húngara</title>
		<link>http://mgaravaglia.com.ar/blog/index.php/2011/05/26/notacion-hungara/</link>
		<comments>http://mgaravaglia.com.ar/blog/index.php/2011/05/26/notacion-hungara/#comments</comments>
		<pubDate>Thu, 26 May 2011 19:59:05 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[coding style]]></category>
		<category><![CDATA[rants]]></category>

		<guid isPermaLink="false">http://mgaravaglia.com.ar/blog/?p=154</guid>
		<description><![CDATA[La notación húngara fue ideada por Charles Simonyi, aunque fue muy popular en el siglo pasado y ha entrado en desuso aún hay personas que continuan aplicandola. Basicamente consiste en incluir el tipo de dato de una variable en su nombre de la siguiente forma:
sNombre  // esta variable es un string que contiene el [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">La notación húngara fue ideada por Charles Simonyi, aunque fue muy popular en el siglo pasado y ha entrado en desuso aún hay personas que continuan aplicandola. Basicamente consiste en incluir el tipo de dato de una variable en su nombre de la siguiente forma:</p>
<pre>sNombre  // esta variable es un string que contiene el nombre</pre>
<pre>iEdad    // esta variable es un integer que contiene la edad</pre>
<p style="text-align: justify;">A este tipo de notacion se la conoce como Notacion Hungara de Sistema, ya que lo que nos revela el nombre son detalles del tipo de datos que se esta usando en el compilador para representar el dato. Otro tipo de notacion Hungara, denominado &#8220;de Aplicacion&#8221; nos da un poco mas de informacion semantica acerca de la variable que solo el tipo de datos fisico que se usa, por ejemplo:</p>
<pre>usNombre  // un "unsafe string" con el nombre, unsafe pq quiza el string se cargo usando un formulario web y hay que validar que el nombre no tenga cosas raras que den lugar a ataques via XSS o SQLInjection.</pre>
<p style="text-align: justify;">Esta tecnica entro en desuso por varias razones pero es muy frecuente encontrarla en tablas de bases de datos donde se mete el tipo de dato de una columna en su nombre, asi que nos encontramos con nombres del tipo varchar_nombre, integer_edad, timestamp_fecha, etc.</p>
<p>Personalmente me desagrada mucho la Notacion Hungara por los motivos que enumero a continuación:</p>
<ul>
<li style="text-align: justify;">En un lenguaje fuertemente tipado no aporta informacion que el compilador no nos brinde de antemano. Es discutible para la notacion hungara de aplicaction.</li>
<li style="text-align: justify;">Es más frecuente olvidarse para que sirve una variable que su tipo de datos.</li>
<li style="text-align: justify;">Es probable que tengamos que escribir más veces el nombre de una variable que las veces que no recordemos su tipo de dato.</li>
<li style="text-align: justify;">En los lenguajes dinamicos, y tambien tipados porque no, un vistazo en el test unitario nos da una pauta de que tipo de dato estamos manejando y las intenciones de las variables.</li>
<li style="text-align: justify;">Acerca mucho el código a la implementación y al mismo tiempo lo aleja del dominio del problema.</li>
<li style="text-align: justify;">Si desconocemos el proposito de una variable, poco nos va a ayudar conocer el tipo de dato.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mgaravaglia.com.ar/blog/index.php/2011/05/26/notacion-hungara/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speedy, DNS y VPNs</title>
		<link>http://mgaravaglia.com.ar/blog/index.php/2011/05/16/speedy-dns-y-vpns/</link>
		<comments>http://mgaravaglia.com.ar/blog/index.php/2011/05/16/speedy-dns-y-vpns/#comments</comments>
		<pubDate>Mon, 16 May 2011 22:57:10 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[speedy]]></category>
		<category><![CDATA[telefónica]]></category>

		<guid isPermaLink="false">http://mgaravaglia.com.ar/blog/?p=136</guid>
		<description><![CDATA[Estando de viaje hace poco me toco tener que unirme a una red wifi conectada al mundo con un ADSL Speedy de Telefónica. Todo funcionaba perfecto hasta que tuve que conectarme a una VPN corporativa.
DNS Hijacking
La gente de Speedy es muy buena y por eso no quieren que nos quedemos sin ver un site por [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Estando de viaje hace poco me toco tener que unirme a una red wifi conectada al mundo con un ADSL Speedy de Telefónica. Todo funcionaba perfecto hasta que tuve que conectarme a una VPN corporativa.</p>
<h3><strong>DNS Hijacking</strong></h3>
<p style="text-align: justify;"><span style="font-weight: normal;">La gente de Speedy es muy buena y por eso no quieren que nos quedemos sin ver un site por más que nos equivoquemos de dirección. Así, si ponemos www.algún-dominio-que-no-exista-en-internet.com el server DNS de Telefónica respondera llevandonos a una página en www.ayudaenlabusqueda.com.ar donde nos hará saber que la dirección ingresada no existe y, gracias a un convenio comercial con yahoo, nos mostrara el resultado de buscar la URL erronea.</span></p>
<h3>El Mundo Real</h3>
<p style="text-align: justify;">Esto es muy lindo a simple vista, pero en realidad es una aberración, una diarrea mental que destruye la forma en que funciona internet. No quiero cargar contra los ineptos a los que se les ocurrio esta feature, yo aun recuerdo la conferencia de prensa &#8220;Presidente de Télefonica Vs Generadores de Contenidos&#8221; donde el vegetal dinosaurio no asumia su condición de carrier y queria que los sitios como google paguen un canon a telefonica porque &#8220;los cables eran de ellos&#8221;. Una burrada. Es como que el presidente de Edenor quiera que las fabricas de electrodomesticos les paguen un canon por usar su electricidad.</p>
<h3>DNS y VPN</h3>
<p style="text-align: justify;">¿Por qué esa inocente página es una aberración? Porque cuando conectamos nuestra computadora a otra red, por ejemplo una VPN, e ingresamos una dirección en nuestro navegador que sea INTERNA DE LA VPN (por ejemplo webmail.exchange.empresa.net), lo que normalmente ocurrirá es que se haga un DNS request por la red que tenga mejor metric, osea el adsl, este responda con &#8216;unknown host&#8217; y luego se repita el pedido por la vpn quien respondera con la IP INTERNA del server al que queremos acceder.<br />
¿Qué pasa con el puto Speedy de Telefónica? En lugar de decirnos &#8216;Unknown Host&#8217; nos manda a la pagina de ayuda en la busqueda haciendo que nunca podamos ver el host de nuestra VPN.</p>
<h3>Climax</h3>
<p style="text-align: justify;">Después de putear un rato porque no podía conectar el Lotus Notes y darme cuenta de que estaba pasando pude solucionarlo cambiando los DNS de mi computadora para que use los DNS servers de Google: 8.8.8.8 y 8.8.4.4. Otra alternativa válida es cambiar las metricas de las redes, para que primero vaya a la VPN y luego al ADSL pero la primer solución me pareció más limpia.</p>
<p style="text-align: justify;">Así que ya saben, si tienen la desgracia de tener que conectarse a internet usando Telefónica Speedy y tienen que conectarse a una VPN tengan presente esto para evitar dolores de cabeza.</p>
]]></content:encoded>
			<wfw:commentRss>http://mgaravaglia.com.ar/blog/index.php/2011/05/16/speedy-dns-y-vpns/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lambdas Recursivos</title>
		<link>http://mgaravaglia.com.ar/blog/index.php/2011/02/17/lambdas-recursivos/</link>
		<comments>http://mgaravaglia.com.ar/blog/index.php/2011/02/17/lambdas-recursivos/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 18:19:29 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://mgaravaglia.com.ar/blog/?p=120</guid>
		<description><![CDATA[why I love Ruby  

bookmark_files = lambda do &#124;file&#124;
if file.is_bookmarked?
my_bookmarks &#60;&#60; file
elsif file.got_children?
file.children.each &#38;bookmark_files
end
end

]]></description>
			<content:encoded><![CDATA[<p>why I love Ruby <img src='http://mgaravaglia.com.ar/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre>
bookmark_files = lambda do |file|
if file.is_bookmarked?
my_bookmarks &lt;&lt; file
elsif file.got_children?
file.children.each &amp;bookmark_files
end
end
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mgaravaglia.com.ar/blog/index.php/2011/02/17/lambdas-recursivos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom Logger en Rails</title>
		<link>http://mgaravaglia.com.ar/blog/index.php/2011/02/14/custom-logger-en-rails/</link>
		<comments>http://mgaravaglia.com.ar/blog/index.php/2011/02/14/custom-logger-en-rails/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 01:55:58 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://mgaravaglia.com.ar/blog/?p=129</guid>
		<description><![CDATA[El formato por defecto del logger de Rails si bien da mucha informacion es algo feo. Para mejorarlo pueden pegar esta modificacion en el archivo environment.rb. El siguiente format_message muestra los logs con colores segun el level y un timestamp
]]></description>
			<content:encoded><![CDATA[<p>El formato por defecto del logger de Rails si bien da mucha informacion es algo feo. Para mejorarlo pueden pegar esta modificacion en el archivo environment.rb. El siguiente format_message muestra los logs con colores segun el level y un timestamp</p>
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Show code only"><img border="0" style="border: 0 none" src="http://mgaravaglia.com.ar/blog/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Print code"><img border="0" style="border: 0 none" src="http://mgaravaglia.com.ar/blog/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://mgaravaglia.com.ar/blog/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://mgaravaglia.com.ar/blog/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><pre class="rails" style="font-family:monospace;"><span class="kw1">class</span> <span class="kw4">Logger</span>
NUMBER_TO_COLOR_MAP = <span class="br0">&#123;</span><span class="st0">'DEBUG'</span><span class="sy0">=&gt;</span><span class="st0">'0;37'</span>, <span class="st0">'INFO'</span><span class="sy0">=&gt;</span><span class="st0">'32'</span>,  <span class="st0">'WARN'</span><span class="sy0">=&gt;</span><span class="st0">'33'</span>, <span class="st0">'ERROR'</span><span class="sy0">=&gt;</span><span class="st0">'31'</span>, <span class="st0">'FATAL'</span><span class="sy0">=&gt;</span><span class="st0">'31'</span>, <span class="st0">'UNKNOWN'</span><span class="sy0">=&gt;</span><span class="st0">'37'</span><span class="br0">&#125;</span>
<span class="kw1">def</span> format_message<span class="br0">&#40;</span>level, time, progname, msg<span class="br0">&#41;</span>
color = NUMBER_TO_COLOR_MAP<span class="br0">&#91;</span>level<span class="br0">&#93;</span>
<span class="st0">&quot;#{time.to_s(:db)} <span class="es0">\e</span>[#{color}m#{level.center(7)}<span class="es0">\e</span>[0m -- #{msg}<span class="es0">\n</span>&quot;</span>
<span class="kw1">end</span>
<span class="kw1">end</span></pre></div></div>
]]></content:encoded>
			<wfw:commentRss>http://mgaravaglia.com.ar/blog/index.php/2011/02/14/custom-logger-en-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>la W3C es obsoleta</title>
		<link>http://mgaravaglia.com.ar/blog/index.php/2010/11/29/la-w3c-es-obsoleta/</link>
		<comments>http://mgaravaglia.com.ar/blog/index.php/2010/11/29/la-w3c-es-obsoleta/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 20:39:42 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[w3c]]></category>

		<guid isPermaLink="false">http://mgaravaglia.com.ar/blog/?p=124</guid>
		<description><![CDATA[Despues del papelón de Ian Hickson diciendo que hay que esperar hasta 2022 para tener una especificacion de html5 completa me encuentro con esto revisando element input[type=number]:
autocomplete =         &#8220;on&#8221;  or  &#8220;off&#8221;
Specifies  whether the element represents an input        [...]]]></description>
			<content:encoded><![CDATA[<p>Despues del papelón de <a title="Ian Hickson" href="http://en.wikipedia.org/wiki/Ian_Hickson">Ian Hickson</a> diciendo que hay que esperar hasta 2022 para tener una especificacion de html5 completa me encuentro con esto revisando element <a href="http://www.w3.org/TR/html-markup/input.number.html">input[type=number]</a>:</p>
<blockquote><p>autocomplete =         &#8220;on&#8221;  or  &#8220;off&#8221;<br />
Specifies  whether the element represents an input         control for which a UA  is meant to store the value entered         by the user (so that the UA  can prefill the form         later).</p>
<p>autofocus =         &#8220;autofocus&#8221;        or &#8220;&#8221; (empty string) or <a id="syntax-attr-empty_xref80" href="http://www.w3.org/TR/html-markup/syntax.html#syntax-attr-empty">empty</a><br />
Specifies  that the element represents a control to which         a UA is meant to  give focus as soon as the document is loaded.</p></blockquote>
<p>¿Qué nos hace pensar que la w3c va a poder hacerlo bien en esta oportunidad? ni siquiera pueden ponerse de acuerdo en como representar un valor booleano en dos atributos que estan adyacentes en la especificacion. Despues es facil hecharle la culpa a los fabricantes de navegadores&#8230; Como bien dice el dicho: Un camello es un caballo diseñado por un comité</p>
]]></content:encoded>
			<wfw:commentRss>http://mgaravaglia.com.ar/blog/index.php/2010/11/29/la-w3c-es-obsoleta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cruzada contra la Waterfall Alliance</title>
		<link>http://mgaravaglia.com.ar/blog/index.php/2010/09/24/cruzada-contra-la-waterfall-alliance/</link>
		<comments>http://mgaravaglia.com.ar/blog/index.php/2010/09/24/cruzada-contra-la-waterfall-alliance/#comments</comments>
		<pubDate>Sat, 25 Sep 2010 02:09:10 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[waterfall]]></category>

		<guid isPermaLink="false">http://mgaravaglia.com.ar/blog/?p=116</guid>
		<description><![CDATA[Este es un mail que escribi hace un tiempo y como me gusto decidi colgarlo aca. No tienen nada novedoso y es un tema que deberia estar sepultado pero&#8230; en fin.
Metodología en Cascada

La primera vez que aparecio un diagrama parecido a lo que se conoce como metodologia en cascada fue en el paper &#8220;Managing the [...]]]></description>
			<content:encoded><![CDATA[<p>Este es un mail que escribi hace un tiempo y como me gusto decidi colgarlo aca. No tienen nada novedoso y es un tema que deberia estar sepultado pero&#8230; en fin.</p>
<p><strong>Metodología en Cascada</strong></p>
<ul>
<li>La primera vez que aparecio un diagrama parecido a lo que se conoce como metodologia en cascada fue en el paper &#8220;Managing the development of large software systems&#8221; de Winston Royce. Ahi se lo pone como ejemplo de UN MODELO QUE NO FUNCIONA para desarrollos grandes.</li>
<li> La metodologia en cascada da una falsa sensacion de seguridad. En la cual podemos predecir facilmente lo que va a pasar de aqui a dos meses, seis o varios años. Es la bola de cristal de la ingenieria del software!<br />
La metodologia es muy sencilla de explicar a los clientes. (por experiencia les digo que no es facil explicar RUP a un cliente). Y lo que es peor, es muy facil de entender para los lideres de proyecto!  (en cambio, cuantas dudas les aparecieron al interpretar SCRUM?)</li>
<li>En definitiva es como una bola de cristal, muy sencilla de operar, pero que rara vez da el resultado esperado.<br />
La metodologia en cascada NO AYUDA AL USUARIO A REALIZAR TRAZABILIDAD DE SU PROYECTO! piensenlo: finaliza el analisis y al usuario le muestro miles de papeles con informacion QUE EL YA CREE CONOCER en la cual esta plasmado su negocio. Cuatro meses despues aparecemos con el cliente mostrandole  cientos de diagramas, que no entiende, donde figura desde la arquitectura general de su sistema hasta el diseño detallado de cada clase. Mientras tanto, el diseñador/arquitecto es un ser de infinita sabiduria que tiene el sistema perfecto en papel, pero que aun no fue probado en la practica. Luego de que el usuario ve cientos de diagramas que no entiende desaparecemos por seis largos meses durante la construccion del sistema y&#8230; ustedes entienden la idea. Comparenlo con prototipado o implementaciones sucesivas en el que todas las semanas le doy algo al usuario que puede ver y palpar, probar y darme feedback. El usuario percibe valor y se da una idea de donde esta yendo a parar su dinero.</li>
<li>Las primeras implantaciones serias de la metodologia en cascada las realizo el departamento de defensa de estados unidos, parafraseando a groucho marx &#8220;inteligencia militar son dos terminos opuestos&#8221;.</li>
<li>Desde ya que la metodologia tiene sus aplicaciones, limitadas pero aplicaciones al fin, pero no hay que dejarse llevar tan facilmente por las luces de colores de la facilidad de adopcion y sensacion de control que nos muestra al principio.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mgaravaglia.com.ar/blog/index.php/2010/09/24/cruzada-contra-la-waterfall-alliance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby 1.9.1 en Snow Leopard</title>
		<link>http://mgaravaglia.com.ar/blog/index.php/2010/06/22/ruby-1-9-1-en-snow-leopard/</link>
		<comments>http://mgaravaglia.com.ar/blog/index.php/2010/06/22/ruby-1-9-1-en-snow-leopard/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 02:25:47 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://mgaravaglia.com.ar/blog/?p=109</guid>
		<description><![CDATA[
instalar ruby version manager (rvm)

$ sudo gem install rvm
$ rvm-install
despues de esto seguir las instrucciones en pantalla para finalizar la instalacion de rvm.
instalar ruby 1.9.1 usando rvm
$ rvm install 1.9.1

usar!
$ rvm use 1.9.1
$ ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin10.3.2]



]]></description>
			<content:encoded><![CDATA[<ol>
<li>instalar ruby version manager (rvm)
<pre name="code" class="javascript">
$ sudo gem install rvm
$ rvm-install</pre>
<p>despues de esto seguir las instrucciones en pantalla para finalizar la instalacion de rvm.</li>
<li>instalar ruby 1.9.1 usando rvm
<pre name="code" class="javascript">$ rvm install 1.9.1</pre>
</li>
<li>usar!
<pre name="code" class="javascript">$ rvm use 1.9.1
$ ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin10.3.2]
</pre>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://mgaravaglia.com.ar/blog/index.php/2010/06/22/ruby-1-9-1-en-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ServiceConstructionException: Could not find definition for service</title>
		<link>http://mgaravaglia.com.ar/blog/index.php/2010/06/15/serviceconstructionexception-could-not-find-definition-for-service/</link>
		<comments>http://mgaravaglia.com.ar/blog/index.php/2010/06/15/serviceconstructionexception-could-not-find-definition-for-service/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 18:32:29 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[cxf]]></category>
		<category><![CDATA[ws]]></category>

		<guid isPermaLink="false">http://mgaravaglia.com.ar/blog/?p=105</guid>
		<description><![CDATA[Ok&#8230; just for the record, Al implementar un client ws con cxf tener cuidado de no estar usando un frontend proxy factory en lugar de un jaxws proxy factory como, en general, queremos.

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.getInInterceptors().add(new LoggingInInterceptor());
factory.getOutInterceptors().add(new LoggingOutInterceptor());
factory.setServiceClass(MyService.class);
factory.setAddress("http://localhost/ws");
MyService client = (MyService) factory.create();

]]></description>
			<content:encoded><![CDATA[<p>Ok&#8230; just for the record, Al implementar un client ws con cxf tener cuidado de no estar usando un frontend proxy factory en lugar de un jaxws proxy factory como, en general, queremos.</p>
<pre name="code" class="java">
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.getInInterceptors().add(new LoggingInInterceptor());
factory.getOutInterceptors().add(new LoggingOutInterceptor());
factory.setServiceClass(MyService.class);
factory.setAddress("http://localhost/ws");
MyService client = (MyService) factory.create();
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mgaravaglia.com.ar/blog/index.php/2010/06/15/serviceconstructionexception-could-not-find-definition-for-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>String.format en Javascript</title>
		<link>http://mgaravaglia.com.ar/blog/index.php/2010/05/31/string-format-en-javascript/</link>
		<comments>http://mgaravaglia.com.ar/blog/index.php/2010/05/31/string-format-en-javascript/#comments</comments>
		<pubDate>Mon, 31 May 2010 14:55:24 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[strings]]></category>

		<guid isPermaLink="false">http://mgaravaglia.com.ar/blog/?p=98</guid>
		<description><![CDATA[Dejo a continuacion una funcion bastante util que se comporta como el String.format de Java. En Javascript es comun andar componiendo strings a partir de constantes, variables, literales y otras cosas para generar una salida HTML. Asi que en lugar de escribir:

var v = "&#60;span style='color:"+myColor+"'&#62;"+singleton.myText()+"&#60;/span&#62;&#60;span id='"+entityId+"'&#62;"+Text+"&#60;/span&#62;";

podemos poner:
var v = "&#60;span style='color:{0}'&#62; {1} &#60;/span&#62; &#60;span [...]]]></description>
			<content:encoded><![CDATA[<p>Dejo a continuacion una funcion bastante util que se comporta como el <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#format%28java.lang.String,%20java.lang.Object...%29">String.format</a> de Java. En Javascript es comun andar componiendo strings a partir de constantes, variables, literales y otras cosas para generar una salida HTML. Asi que en lugar de escribir:</p>
<pre name="code" class="javascript">
var v = "&lt;span style='color:"+myColor+"'&gt;"+singleton.myText()+"&lt;/span&gt;&lt;span id='"+entityId+"'&gt;"+Text+"&lt;/span&gt;";
</pre>
<p>podemos poner:</p>
<pre name="code" class="java">var v = "&lt;span style='color:{0}'&gt; {1} &lt;/span&gt; &lt;span id='{2}'&gt;{3}&lt;/span&gt;".format(myColor,singleton.myText(),entityId,Text);</pre>
<p>más lindo no?</p>
<pre name="code" class="java">
// Replaces {0},{1},{n} with the arguments.
String.prototype.format = function() {
	var i = 0;
	var string = (typeof (this) == "function" &amp;&amp; !(i++)) ? arguments[0] : this;
	while(i &lt; arguments.length) {
		string = string.replaceAll('\\{' + i + '\\}', arguments[i]);
                i++;
        }
	return string;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://mgaravaglia.com.ar/blog/index.php/2010/05/31/string-format-en-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>EasyMock: Mocks&#8230; eh&#8230; fácil.</title>
		<link>http://mgaravaglia.com.ar/blog/index.php/2009/10/23/easymock-mocks-eh-facil/</link>
		<comments>http://mgaravaglia.com.ar/blog/index.php/2009/10/23/easymock-mocks-eh-facil/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 00:02:26 +0000</pubDate>
		<dc:creator>mauricio</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://mgaravaglia.com.ar/blog/?p=88</guid>
		<description><![CDATA[El TDD es muy lindo hasta que nos toca hacer un test unitario a un componente que tiene muchas dependencias, que en estos tiempos de arquitecturas multitier suelen ser la mayoria.
Estas dependencias suelen remplazarse por objetos que simulan ser los reales compartiendo la misma interfaz. Claro que es solo una fachada, su implementación dista mucho [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">El <a href="http://en.wikipedia.org/wiki/Test-driven_development">TDD</a> es muy lindo hasta que nos toca hacer un test unitario a un componente que tiene muchas dependencias, que en estos tiempos de arquitecturas multitier suelen ser la mayoria.</p>
<p style="text-align: justify;">Estas dependencias suelen remplazarse por objetos que simulan ser los reales compartiendo la misma interfaz. Claro que es solo una fachada, su implementación dista mucho de ser la real, pero nos proporcionan un comportamiento determinista y controlado contra el que probar nuestros componentes. <a href="http://easymock.org/" target="_blank">EasyMocks </a>es un framework que permite crear estos objetos de forma muy sencilla indicando cual es la interfaz que deben cumplir y cual es el comportamiento que esperamos.</p>
<h2>Creando el Mock</h2>
<p style="text-align: justify;">Lo primero que necesitamos es decirle al framework cual va a ser la interfaz que queremos implementar en nuestro &#8220;mock&#8221;. Supongamos que necesitamos testear una clase <em>Cliente </em>que necesita los favores de una clase que implemente <em>Servicio</em>. Lo que vamos a hacer es un &#8220;mock&#8221; que simule ser una implementacion real de <em>Servicio </em>pero solo la vamos a usar para llevar a cabo el test.</p>
<p style="text-align: justify;">El metodo estatico createMock de la clase EasyMock toma una Interface como parametro (tambien puede ser una clase) y nos devuelve un objeto que la implementa.</p>
<pre name="code" class="java">Servicio servicioMock = EasyMock.createMock(Servicio.class)</pre>
<h2>Its Alive!!</h2>
<p style="text-align: justify;">Genial, ¿Ya podemos pasarle la referencia servicioMock al Cliente y testear a gusto?&#8230; bueno&#8230; no tan easy.</p>
<p style="text-align: justify;">A continuacion vamos a hacer que ese servicioMock implemente la operacion sumarDiez que, a partir de un parametro int numero devuelve ese numero incrementado en 10. No va a ser la implementacion real, solo a &#8217;simular&#8217; que esta haciendo algo realmente mediante el metodo EasyMock.expect.</p>
<pre name="code"  class="java">EasyMock.expect(servicioMock.sumarDiez(5)).andReturn(15);</pre>
<p style="text-align: justify;">Acabamos de decirle a nuestro servicioMock que cuando alguien invoque al metodo sumarDiez con el numero 5 como parametro el debe devolver 15. No hay implementacion real, solo se pretende estar realizando la operacion. Ademas nuestro mock no sabe que hacer si alguien le pasa el numero 6 como parametro, y nos lo hara saber con una hermosa excepción.</p>
<pre name="code"  class="java">Easymock.replay(servicioMock);</pre>
<p style="text-align: justify;">Esto pone al mock en &#8216;test mode&#8217; indicando que ya podemos usarlo para nuestro <a href="http://www.junit.org/">test</a>.</p>
<h2>Still alive&#8230; and well?</h2>
<p style="text-align:justift;">Ahora sí podemos meter el servicioMock en nuestro test y admirar a EasyMock en toda su gloria</p>
<p>Ojo que lo que estamos testeando es el comportamiento de <em>Cliente </em>y no de <em>Servicio</em>! es decir que <em>invocarAlMetodoSumarDiezDeServicio() </em>este delegando correctamente e invocando a <em>Servicio</em>.</p>
<pre name="code"  class="java">Cliente cliente = new Cliente();
cliente.setServicio(servicioMock);
int esultado = cliente.invocarAlMetodoSumarDiezDeServicio(10);
assertEquals(15,resultado);</pre>
<p style="text-align: justify;">Las posibilidades que tiene Easymock son ilimitadas y podemos simular comportamientos extremadamente complejos. Pueden encontrar mas informacion sobre todo el potencial de EasyMock en su <a href="http://easymock.org/EasyMock2_5_2_Documentation.html">página oficial</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mgaravaglia.com.ar/blog/index.php/2009/10/23/easymock-mocks-eh-facil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

