<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>KodeGeek</title>
	
	<link>http://kodegeek.com/blog</link>
	<description>Todo lo relacionado al mundo GEEK</description>
	<pubDate>Mon, 06 Jul 2009 02:40:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<geo:lat>41.124546</geo:lat><geo:long>-73.436585</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/</creativeCommons:license><image><link>http://kodegeek.com</link><url>http://farm1.static.flickr.com/1/buddyicons/51035550755@N01.jpg?1104248580</url><title>KodeGeek</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Kodegeek" type="application/rss+xml" /><feedburner:emailServiceId>Kodegeek</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:browserFriendly>Suscribase y obtenga actualizaciones a Kodegeek.com</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Tweets del 2009-07-05</title>
		<link>http://feedproxy.google.com/~r/Kodegeek/~3/VNt2lHrP38Y/</link>
		<comments>http://kodegeek.com/blog/2009/07/05/tweets-del-2009-07-05/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 02:40:00 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
		
		<category><![CDATA[java]]></category>

		<category><![CDATA[kodegeek]]></category>

		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/2009/07/05/tweets-del-2009-07-05/</guid>
		<description><![CDATA[
This is a test from KodeGeek TwitterPing! #
@sd Gracias chamo. No me habia dado cuenta sino hasta ahorita  in reply to sd #
@anibalrojas Hola chamo, Nada grave. Cual es tu correo electrónico (los tweets son muy pequeños) in reply to anibalrojas #
@anibalrojas Hola Anibal, ¿tienes un correo donde te pueda escribir? El mio es [...]]]></description>
			<content:encoded><![CDATA[<ul class="aktt_tweet_digest">
<li>This is a test from KodeGeek TwitterPing! <a href="http://twitter.com/josevnz/statuses/2481436428">#</a></li>
<li>@<a href="http://twitter.com/sd">sd</a> Gracias chamo. No me habia dado cuenta sino hasta ahorita <img src='http://kodegeek.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> <a href="http://twitter.com/sd/statuses/2478200123">in reply to sd</a> <a href="http://twitter.com/josevnz/statuses/2481856989">#</a></li>
<li>@<a href="http://twitter.com/anibalrojas">anibalrojas</a> Hola chamo, Nada grave. Cual es tu correo electrónico (los tweets son muy pequeños) <a href="http://twitter.com/anibalrojas/statuses/2476757983">in reply to anibalrojas</a> <a href="http://twitter.com/josevnz/statuses/2481872149">#</a></li>
<li>@<a href="http://twitter.com/anibalrojas">anibalrojas</a> Hola Anibal, ¿tienes un correo donde te pueda escribir? El mio es <a href="mailto:undead@stupidzombie.com">undead@stupidzombie.com</a>. ¡Gracias! <a href="http://twitter.com/anibalrojas/statuses/2476757983">in reply to anibalrojas</a> <a href="http://twitter.com/josevnz/statuses/2489034054">#</a></li>
<li>@<a href="http://twitter.com/sd">sd</a> Dificilmente se safan de esta. Fué un golpe (igual que en Venezuela), por más justificadas que hayan sido sus razones. Sale jodido el p. <a href="http://twitter.com/sd/statuses/2488230003">in reply to sd</a> <a href="http://twitter.com/josevnz/statuses/2489065988">#</a></li>
<li>@<a href="http://twitter.com/alejohidalgo">alejohidalgo</a> Alienado <img src='http://kodegeek.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> <a href="http://twitter.com/alejohidalgo/statuses/2489263333">in reply to alejohidalgo</a> <a href="http://twitter.com/josevnz/statuses/2489557311">#</a></li>
<li>@<a href="http://twitter.com/sd">sd</a> Arrgrg, you voy a esperar hasta Agosto a ue T-mobile saque el nuevo telefono Android. Mientras tanto tengo uno de $20 JA!. <a href="http://twitter.com/sd/statuses/2489514182">in reply to sd</a> <a href="http://twitter.com/josevnz/statuses/2489571918">#</a></li>
</ul>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fkodegeek.com%2Fblog%2F2009%2F07%2F05%2Ftweets-del-2009-07-05%2F&amp;linkname=Tweets%20del%202009-07-05">Guardar/Compartir</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Kodegeek?a=VNt2lHrP38Y:vdDB8DH2v1U:ecdYMiMMAMM"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=ecdYMiMMAMM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Kodegeek?a=VNt2lHrP38Y:vdDB8DH2v1U:tKBiNdHYW3c"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=tKBiNdHYW3c" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Kodegeek/~4/VNt2lHrP38Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/07/05/tweets-del-2009-07-05/feed/</wfw:commentRss>
		<feedburner:origLink>http://kodegeek.com/blog/2009/07/05/tweets-del-2009-07-05/</feedburner:origLink></item>
		<item>
		<title>Como enviar Tweets desde Java usando Twitter4J</title>
		<link>http://feedproxy.google.com/~r/Kodegeek/~3/CSIo-Xjk_l8/</link>
		<comments>http://kodegeek.com/blog/2009/07/05/como-enviar-tweets-desde-java-usando-twitter4j/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 12:43:12 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
		
		<category><![CDATA[java]]></category>

		<category><![CDATA[kodegeek]]></category>

		<category><![CDATA[opensource]]></category>

		<category><![CDATA[programación]]></category>

		<category><![CDATA[stupidzombie]]></category>

		<category><![CDATA[swing]]></category>

		<category><![CDATA[twitter]]></category>

		<category><![CDATA[twitter4j]]></category>

		<category><![CDATA[twitterping]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/?p=1940</guid>
		<description><![CDATA[Una de las cosas que quiero hacer para la versión 1.1 de StupidZombie es agregarle soporte para actualizar el estado de Twitter cada vez que hacemos un ping. Como siempre es el asunto de construir algo desde cero o utilizar una herramienta existente y en el caso de StupidZombie lo que quiero es implementar la [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las cosas que quiero hacer para la versión 1.1 de StupidZombie es agregarle soporte para actualizar el estado de Twitter cada vez que hacemos un ping. Como siempre es el asunto de construir algo desde cero o utilizar una herramienta existente y en el caso de StupidZombie lo que quiero es implementar la funcionalidad lo más rápido posible (por ejemplo, no tengo tiempo para seguir los cambios en el<a href="http://apiwiki.twitter.com/FAQ"> API</a> de Twitter).</p>
<p>Después de <a href="http://apiwiki.twitter.com/Libraries#Javanbsp">buscar en la red</a> me conseguí que <a href="http://yusuke.homeip.net/twitter4j/en/index.html">Twitter4J </a>es quizas la versión más madura para Java (recuerden, StupidZombie está escrito en ese lenguaje). Ni corto ni perezoso me puse a echar código y al final me decidí escribir una pequeña aplicación en Swing la cual hace lo siguiente:</p>
<ol>
<li>Autoriza la aplicación contra su cuenta de Twitter</li>
<li>Obtiene un PIN y claves especiales de autorización (lo cual no es lo mismo que su usuario clave, a eso se le conoce como<a href="http://apiwiki.twitter.com/Authentication"> OAuth</a>).</li>
<li>Envia un mensaje (tweet) a su cuenta en Twitter desde la aplicación en Java</li>
</ol>
<p>Nota, si usted es el desarrollador de la aplicación entonces lo primero que hay que hacer <a href="http://twitter.com/oauth_clients/new">es registrar una aplicación nueva</a> en Twitter (sus usuarios pueden saltarse este paso). Una vez terminado se ve como lo siguiente:</p>
<p><a href="http://www.flickr.com/photos/josevnz/3689339643/" title="Registered applications by josevnz, on Flickr"><img src="http://farm4.static.flickr.com/3588/3689339643_c64de4f818.jpg" width="500" height="345" alt="Registered applications" /><br />
Aplicaciones registradas en Twitter</a></p>
<p>Una vez registrada debemos pasar &#8220;Consumer key&#8221; y &#8220;Consumer Secret&#8221; a nuestro código de Twitter4j, yo lo hago en el constructor:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p19405"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code" id="p1940code5"><pre class="java" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">private</span> TwitterPing<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> consumerKey, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> consumerSecret<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> TwitterException <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;KodeGeek simple Twitter pinger&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>consumerKey <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aillegalargumentexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">IllegalArgumentException</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Consumer key is missing&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>consumerSecret <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aillegalargumentexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">IllegalArgumentException</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Consumer secret is missing&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		twitter <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Twitter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		twitter.<span style="color: #006633;">setOAuthConsumer</span><span style="color: #009900;">&#40;</span>consumerKey, consumerSecret<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		requestToken <span style="color: #339933;">=</span> twitter.<span style="color: #006633;">getOAuthRequestToken</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		setPreferredSize<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Adimension+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Dimension</span></a><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">600</span>, <span style="color: #cc66cc;">400</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Desde la aplicación en Swing hacemos clic en el botón que dice &#8220;Authorize KodeGeek on Tweeter&#8221;. Si el soporte de Java para escritorio está activado entonces el navegador por omisión se arrancará e iremos a Twitter:</p>
<p><a href="http://www.flickr.com/photos/josevnz/3689301415/" title="Allowing KodeGeek by josevnz, on Flickr"><img src="http://farm3.static.flickr.com/2501/3689301415_dd8242c8c1.jpg" width="500" height="233" alt="Allowing KodeGeek" /><br />
Hora de autorizar a KodeGeek <img src='http://kodegeek.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </a></p>
<p>El código que hace esto es super sencillo :</p>

<div class="wp_codebox"><table width="100%" ><tr id="p19406"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code" id="p1940code6"><pre class="java" style="font-family:monospace;">	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * Send the user to the authorization webpage
	 * @throws Exception 
	 */</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> sendUserToAuthUrl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Exception</span></a> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">final</span> TwitterPing instance <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">this</span><span style="color: #339933;">;</span>
		log.<span style="color: #006633;">log</span><span style="color: #009900;">&#40;</span>Level.<span style="color: #006633;">INFO</span>, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a>.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Got authorization URL: %s&quot;</span>, requestToken.<span style="color: #006633;">getAuthorizationURL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>Desktop.<span style="color: #006633;">isDesktopSupported</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			Desktop.<span style="color: #006633;">getDesktop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">browse</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> URI<span style="color: #009900;">&#40;</span>requestToken.<span style="color: #006633;">getAuthorizationURL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			log.<span style="color: #006633;">info</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Redirection was successfull.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
			<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aeventqueue+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">EventQueue</span></a>.<span style="color: #006633;">invokeLater</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Arunnable+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Runnable</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
				@Override
				<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> run<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ajoptionpane+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">JOptionPane</span></a>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span>
							instance, 
							<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a>.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Cannot call default browser, please go to this URL instead: %s&quot;</span>, requestToken.<span style="color: #006633;">getAuthorizationURL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>, 
							<span style="color: #0000ff;">&quot;Problems trying to send the user to default page&quot;</span>, 
							<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ajoptionpane+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">JOptionPane</span></a>.<span style="color: #006633;">ERROR_MESSAGE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Si la autorización es aceptada (como se ve a continuación):</p>
<p><a href="http://www.flickr.com/photos/josevnz/3690106764/" title="KodeGeek twitter application by josevnz, on Flickr"><img src="http://farm3.static.flickr.com/2655/3690106764_7da7b4e8b9.jpg" width="500" height="248" alt="KodeGeek twitter application" /><br />
La autorización trabajó</a></p>
<p>Entonces podemos pedir el token de acceso usando el PIN obtenido en el paso anterior:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p19407"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code" id="p1940code7"><pre class="java" style="font-family:monospace;">	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * Call this method only after the user has authorized the application
	 * @throws TwitterException 
	 */</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> getAccessToken<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> pin<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> TwitterException <span style="color: #009900;">&#123;</span>
		log.<span style="color: #006633;">info</span><span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a>.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Got token: %s, Got secret: %s&quot;</span>, requestToken.<span style="color: #006633;">getToken</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, requestToken.<span style="color: #006633;">getTokenSecret</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		accessToken <span style="color: #339933;">=</span> twitter.<span style="color: #006633;">getOAuthAccessToken</span><span style="color: #009900;">&#40;</span>requestToken, pin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>accessToken <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
			log.<span style="color: #006633;">info</span><span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a>.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Got access token for user %s&quot;</span>, accessToken.<span style="color: #006633;">getScreenName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Lo cual se ve así:</p>
<p><a href="http://www.flickr.com/photos/josevnz/3689301437/" title="Ping number, required for desktop apps by josevnz, on Flickr"><img src="http://farm4.static.flickr.com/3596/3689301437_0ca4439ae5.jpg" width="500" height="211" alt="Ping number, required for desktop apps" />Número PIN para darle acceso a nuestro cliente a la cuenta de Twitter</a></p>
<p>Si todo va bien entonces podemos mostrar los 3 pedazos de la autorización necesarios para poder enviar un Tweet:</p>
<p><a href="http://www.flickr.com/photos/josevnz/3690106810/" title="After geting the auth tokens by josevnz, on Flickr"><img src="http://farm3.static.flickr.com/2450/3690106810_47832ab3b5.jpg" width="500" height="333" alt="After geting the auth tokens" /><br />
La aplicación tiene todo lo que necesita. Hora  de enviar un tweet</a></p>
<p>Ya hacer el tweet es trivial con el siguiente pedazo de código:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p19408"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code" id="p1940code8"><pre class="java" style="font-family:monospace;">	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * Send a tween using an existing AccessToken
	 * @param tweet The update to set
	 * @throws TwitterException If there is a problem updating the status
	 * @return The status of the tweet
	 */</span>
	<span style="color: #000000; font-weight: bold;">private</span> Status sendTweet<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">final</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> tweet<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> TwitterException <span style="color: #009900;">&#123;</span>
		twitter.<span style="color: #006633;">setOAuthAccessToken</span><span style="color: #009900;">&#40;</span>accessToken<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">return</span> twitter.<span style="color: #006633;">updateStatus</span><span style="color: #009900;">&#40;</span>tweet<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Al final, ¡exito!:</p>
<p><a href="http://www.flickr.com/photos/josevnz/3689301475/" title="Success, tweet update by josevnz, on Flickr"><img src="http://farm3.static.flickr.com/2581/3689301475_855e82d83e.jpg" width="500" height="105" alt="Success, tweet update" /><br />
Como se ve nuestro mensaje en Twitter, enviado desde Java</a></p>
<p>El protocolo de Twitter soporta muchísimas cosas más. En particular le recomiendo que se lean la documentación relacionada para entender más como trabajan las cosas, en especial la autenticación usando OAth. Ahhh, y por supuesto <a href="http://elangelnegro.cvs.sourceforge.net/viewvc/elangelnegro/src/java/main/com/kodegeek/blog/twitter/">aquí les dejo el código fuente completo</a> para que se diviertan echando código.</p>
<p>Hasta la siguiente entrega, dentro de unas horas me sale ir a una parrillada <img src='http://kodegeek.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Veneblogs: <a href="http://www.veneblogs.com/etiquetas/twitter" rel="tag">twitter</a>, <a href="http://www.veneblogs.com/etiquetas/twitter4j" rel="tag">twitter4j</a>, <a href="http://www.veneblogs.com/etiquetas/swing" rel="tag">swing</a>, <a href="http://www.veneblogs.com/etiquetas/kodegeek" rel="tag">kodegeek</a>, <a href="http://www.veneblogs.com/etiquetas/stupidzombie" rel="tag">stupidzombie</a><br />
<br />Blogalaxia: <a href="http://www.blogalaxia.com/tags/twitter" rel="tag">twitter</a>, <a href="http://www.blogalaxia.com/tags/twitter4j" rel="tag">twitter4j</a>, <a href="http://www.blogalaxia.com/tags/swing" rel="tag">swing</a>, <a href="http://www.blogalaxia.com/tags/kodegeek" rel="tag">kodegeek</a>, <a href="http://www.blogalaxia.com/tags/stupidzombie" rel="tag">stupidzombie</a><br />
<br />To2Blogs: <a href="http://www.to2blogs.com/tag/twitter" rel="tag">twitter</a>, <a href="http://www.to2blogs.com/tag/twitter4j" rel="tag">twitter4j</a>, <a href="http://www.to2blogs.com/tag/swing" rel="tag">swing</a>, <a href="http://www.to2blogs.com/tag/kodegeek" rel="tag">kodegeek</a>, <a href="http://www.to2blogs.com/tag/stupidzombie" rel="tag">stupidzombie</a><br />
<br />Technorati: <a href="http://technorati.com/tag/twitter" rel="tag">twitter</a>, <a href="http://technorati.com/tag/twitter4j" rel="tag">twitter4j</a>, <a href="http://technorati.com/tag/swing" rel="tag">swing</a>, <a href="http://technorati.com/tag/kodegeek" rel="tag">kodegeek</a>, <a href="http://technorati.com/tag/stupidzombie" rel="tag">stupidzombie</a><br />
<br />Del.icio.us: <a href="http://del.icio.us/tag/twitter" rel="tag">twitter</a>, <a href="http://del.icio.us/tag/twitter4j" rel="tag">twitter4j</a>, <a href="http://del.icio.us/tag/swing" rel="tag">swing</a>, <a href="http://del.icio.us/tag/kodegeek" rel="tag">kodegeek</a>, <a href="http://del.icio.us/tag/stupidzombie" rel="tag">stupidzombie</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fkodegeek.com%2Fblog%2F2009%2F07%2F05%2Fcomo-enviar-tweets-desde-java-usando-twitter4j%2F&amp;linkname=Como%20enviar%20Tweets%20desde%20Java%20usando%20Twitter4J">Guardar/Compartir</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Kodegeek?a=CSIo-Xjk_l8:mhOmWZ2M3GY:ecdYMiMMAMM"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=ecdYMiMMAMM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Kodegeek?a=CSIo-Xjk_l8:mhOmWZ2M3GY:tKBiNdHYW3c"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=tKBiNdHYW3c" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Kodegeek/~4/CSIo-Xjk_l8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/07/05/como-enviar-tweets-desde-java-usando-twitter4j/feed/</wfw:commentRss>
		<feedburner:origLink>http://kodegeek.com/blog/2009/07/05/como-enviar-tweets-desde-java-usando-twitter4j/</feedburner:origLink></item>
		<item>
		<title>Un cariñito para el Blog de StupidZombie</title>
		<link>http://feedproxy.google.com/~r/Kodegeek/~3/qKBViJXOIPc/</link>
		<comments>http://kodegeek.com/blog/2009/07/03/un-carinito-para-el-blog-de-stupidzombie/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 00:08:53 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
		
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/?p=1938</guid>
		<description><![CDATA[Si, ya le tocaba. Al final modifiqué el tema por omisión de Wordpress y lo convertí. Para darle algo de vuelta a la comunidad, coloqué todo el código e imágenes en Subversion, además de enviarlo oficialmente al sitio de temas de Wordpress:
Thank you for uploading StupidZombie to the WordPress Theme Directory.  If your theme [...]]]></description>
			<content:encoded><![CDATA[<p>Si, ya le tocaba. Al final modifiqué el tema por omisión de Wordpress y lo convertí. Para darle algo de vuelta a la comunidad, <a href="http://stupidzombie.com/blog/2009/07/03/stupidzombie-blog-has-a-new-look-and-feel/">coloqué todo el código e imágenes</a> en Subversion, además de enviarlo oficialmente al sitio de temas de Wordpress:</p>
<blockquote><p>Thank you for uploading StupidZombie to the WordPress Theme Directory.  If your theme is selected to be part of the directory we&#8217;ll send a follow up email.</p></blockquote>
<p>No creo que lo rechacen, aunque es muy temprano para cantar victoria <img src='http://kodegeek.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fkodegeek.com%2Fblog%2F2009%2F07%2F03%2Fun-carinito-para-el-blog-de-stupidzombie%2F&amp;linkname=Un%20cari%C3%B1ito%20para%20el%20Blog%20de%20StupidZombie">Guardar/Compartir</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Kodegeek?a=qKBViJXOIPc:44RQrpJGBlA:ecdYMiMMAMM"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=ecdYMiMMAMM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Kodegeek?a=qKBViJXOIPc:44RQrpJGBlA:tKBiNdHYW3c"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=tKBiNdHYW3c" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Kodegeek/~4/qKBViJXOIPc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/07/03/un-carinito-para-el-blog-de-stupidzombie/feed/</wfw:commentRss>
		<feedburner:origLink>http://kodegeek.com/blog/2009/07/03/un-carinito-para-el-blog-de-stupidzombie/</feedburner:origLink></item>
		<item>
		<title>Eclipse Galileo: Nueva versión, corriendola en OSX</title>
		<link>http://feedproxy.google.com/~r/Kodegeek/~3/M3OFt051Yqc/</link>
		<comments>http://kodegeek.com/blog/2009/06/29/eclipse-galileo-nueva-version-corriendola-en-osx/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 01:59:15 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
		
		<category><![CDATA[java]]></category>

		<category><![CDATA[eclipse]]></category>

		<category><![CDATA[galileo]]></category>

		<category><![CDATA[osx]]></category>

		<category><![CDATA[stupidzombie]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/?p=1919</guid>
		<description><![CDATA[Una captura vieja de pantalla de Eclipse Ganymede corriendo StupidZombie
Los lectores habituales de esta bitacora saben que yo uso Eclipse como editor para trabajar en el código de KodeGeek.com y StupidZombie. Al ver que ya tienen una versión (Galileo) para OSX decidí probarla de una vez, sobre todo con StupidZombie.
¿Y como se compara Galileo con [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/josevnz/3245886024/" title="stupidzombie by josevnz, on Flickr"><img src="http://farm4.static.flickr.com/3385/3245886024_94ffaaa358_o.png" width="767" height="603" alt="stupidzombie" />Una captura vieja de pantalla de Eclipse Ganymede corriendo StupidZombie</a></p>
<p>Los lectores habituales de esta bitacora saben que yo uso Eclipse como editor para trabajar en el código de<a href="http://kodegeek.com/blog"> KodeGeek.com</a> y <a href="http://stupidzombie.com">StupidZombie</a>. Al ver que ya tienen una versión (Galileo) para OSX<a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/R/eclipse-java-galileo-macosx-cocoa.tar.gz"> decidí probarla de una vez</a>, sobre todo con <a href="http://stupidzombie.com">StupidZombie</a>.</p>
<p>¿Y como se compara Galileo con la versión anterior, Ganimede?</p>
<p><strong>Lo malo:</strong></p>
<p>Bueno, primero que nada la importación de los proyectos en la versión anterior funcionó sin mucho problema (SVN no funcionó bien). </p>
<p>Una de las cosas que estaba esperando es el análisis de memoria. Este tipo de cosas son super útiles, Netbeans cuenta con visualvm y otras herramientas como Yourkit hacen un trabajo tremendo (Yourkit se puede integrar con Eclipse también). Pero el hecho de que Eclipse <a href="http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/27/automated-heap-dump-analysis-finding-memory-leaks-with-one-click/">la integre de una vez </a>es super cómodo y conveniente.</p>
<p>Sin embargo la instalación <a href="http://www.ibm.com/developerworks/java/jdk/tools/mat.html">es un poco tediosa</a>. Y al final me topé con que OSX no es soportado <img src='http://kodegeek.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Otra cosa irritante: El cliente de Subversion que viene con Eclipse no funcionó. Parece ser que requiere otros clientes nativos los cuales no están en OSX:</p>
<pre language="Java">
*** Validate Repository Location
Selected SVN connector library is not available or cannot be loaded.
If you selected native JavaHL connector, please check if binaries are available or install and select pure Java Subversion connector from the plug-in connectors update site.
If connectors already installed then you can change the selected one at: Window->Preferences->Team->SVN->SVN Client.
*** Error (took 00:00.007)
</pre>
<p>Sin embargo el menú &#8216;Window->Preferences->Team->SVN->SVN Client.&#8217; no existe, lo cual es muy irritante. Al final<a href="http://subclipse.tigris.org/update_1.6.x"> instalé el cliente de Tigris.org</a> y logré recuperar mi proyectos en SVN (En este caso StupidZombie). Todo bien después de eso</p>
<p><a href="http://www.flickr.com/photos/josevnz/3673215597/" title="Eclipse Galileo corriendo StupidZombie by josevnz, on Flickr"><img src="http://farm4.static.flickr.com/3554/3673215597_abf6e2dcfc.jpg" width="500" height="392" alt="Eclipse Galileo corriendo StupidZombie" /></a></p>
<p><strong>Lo bueno:</strong></p>
<p>¿Que otras cosas interesantes noté? Bueno, los detalles pequeños siempre cuentan:</p>
<ul>
<li>Puedo decir también que esta versión es más rápida a la hora de compilar el código en Java.</li>
<li>La completación de código (Ctrl+Space) es más rápida y si incluyes la clase con el paquete entonces la selección es más acertada</li>
<li>La instalación de plugins siendo siendo super fácil, incluso cuando hay problemas estos son fáciles de resolver</li>
<li>La ejecución de código de Ruby desde Eclipse es genial. De verdad es una adición genial al editor</li>
</ul>
<p><strong>Lo feo:</strong></p>
<p>Sin embargo hay cosas que quisiera que mejoraran (no muchas, gracias a Dios):</p>
<ul>
<li>Eclipse aún no incluye por omisión un editor de interfaces gráficas como Netbeans (La opción es el proyecto Visual Editor)</li>
<li>Eclipse debería ser más inteligente cuando se instalan plugins y las dependencias básicas no están</li>
</ul>
<p>¿Me mudaría a Netbeans? No lo creo. Conozco a Eclipse muy bien, cada versión es más rápida y con más funcionalidad y los problemas que se presentan son fáciles de resolver. En un mundo en donde la productividad vale oro esta es una de las herramientas que quiero tener al lado, además de Ant :).</p>
<p>Veneblogs: <a href="http://www.veneblogs.com/etiquetas/osx" rel="tag">osx</a>, <a href="http://www.veneblogs.com/etiquetas/eclipse" rel="tag">eclipse</a>, <a href="http://www.veneblogs.com/etiquetas/galileo" rel="tag">galileo</a>, <a href="http://www.veneblogs.com/etiquetas/stupidzombie" rel="tag">stupidzombie</a><br />
<br />Blogalaxia: <a href="http://www.blogalaxia.com/tags/osx" rel="tag">osx</a>, <a href="http://www.blogalaxia.com/tags/eclipse" rel="tag">eclipse</a>, <a href="http://www.blogalaxia.com/tags/galileo" rel="tag">galileo</a>, <a href="http://www.blogalaxia.com/tags/stupidzombie" rel="tag">stupidzombie</a><br />
<br />To2Blogs: <a href="http://www.to2blogs.com/tag/osx" rel="tag">osx</a>, <a href="http://www.to2blogs.com/tag/eclipse" rel="tag">eclipse</a>, <a href="http://www.to2blogs.com/tag/galileo" rel="tag">galileo</a>, <a href="http://www.to2blogs.com/tag/stupidzombie" rel="tag">stupidzombie</a><br />
<br />Technorati: <a href="http://technorati.com/tag/osx" rel="tag">osx</a>, <a href="http://technorati.com/tag/eclipse" rel="tag">eclipse</a>, <a href="http://technorati.com/tag/galileo" rel="tag">galileo</a>, <a href="http://technorati.com/tag/stupidzombie" rel="tag">stupidzombie</a><br />
<br />Del.icio.us: <a href="http://del.icio.us/tag/osx" rel="tag">osx</a>, <a href="http://del.icio.us/tag/eclipse" rel="tag">eclipse</a>, <a href="http://del.icio.us/tag/galileo" rel="tag">galileo</a>, <a href="http://del.icio.us/tag/stupidzombie" rel="tag">stupidzombie</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fkodegeek.com%2Fblog%2F2009%2F06%2F29%2Feclipse-galileo-nueva-version-corriendola-en-osx%2F&amp;linkname=Eclipse%20Galileo%3A%20Nueva%20versi%C3%B3n%2C%20corriendola%20en%20OSX">Guardar/Compartir</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Kodegeek?a=M3OFt051Yqc:rTOqs6D2ctQ:ecdYMiMMAMM"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=ecdYMiMMAMM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Kodegeek?a=M3OFt051Yqc:rTOqs6D2ctQ:tKBiNdHYW3c"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=tKBiNdHYW3c" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Kodegeek/~4/M3OFt051Yqc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/06/29/eclipse-galileo-nueva-version-corriendola-en-osx/feed/</wfw:commentRss>
		<feedburner:origLink>http://kodegeek.com/blog/2009/06/29/eclipse-galileo-nueva-version-corriendola-en-osx/</feedburner:origLink></item>
		<item>
		<title>Haciendo que Java se vea más nativo en OSX: El caso de StupidZombie</title>
		<link>http://feedproxy.google.com/~r/Kodegeek/~3/3YkaLT9EOMY/</link>
		<comments>http://kodegeek.com/blog/2009/06/22/haciendo-que-java-se-vea-mas-nativo-en-osx-el-caso-de-stupidzombie/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 01:37:58 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
		
		<category><![CDATA[java]]></category>

		<category><![CDATA[lookandfeel]]></category>

		<category><![CDATA[osx]]></category>

		<category><![CDATA[stupidzombie]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/?p=1916</guid>
		<description><![CDATA[Bueno, ya la parte de la localización de StupidZombie está casi resuelta, asi que ahora me sale integrarlo mejor con OSX. Linux y Windows son má llevaderos, pero OSX tiene su forma neurotica de hacer las cosas  
Guardar/Compartir]]></description>
			<content:encoded><![CDATA[<p>Bueno, ya la parte de la localización de StupidZombie está casi resuelta, asi que ahora <a href="http://developer.apple.com/documentation/Java/Conceptual/Java14Development/03-JavaDeployment/JavaDeployment.html#//apple_ref/doc/uid/TP40001885">me sale integrarlo mejor con OSX</a>. Linux y Windows son má llevaderos, pero OSX tiene su forma neurotica de hacer las cosas <img src='http://kodegeek.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fkodegeek.com%2Fblog%2F2009%2F06%2F22%2Fhaciendo-que-java-se-vea-mas-nativo-en-osx-el-caso-de-stupidzombie%2F&amp;linkname=Haciendo%20que%20Java%20se%20vea%20m%C3%A1s%20nativo%20en%20OSX%3A%20El%20caso%20de%20StupidZombie">Guardar/Compartir</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Kodegeek?a=3YkaLT9EOMY:CrOLCT6znCA:ecdYMiMMAMM"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=ecdYMiMMAMM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Kodegeek?a=3YkaLT9EOMY:CrOLCT6znCA:tKBiNdHYW3c"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=tKBiNdHYW3c" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Kodegeek/~4/3YkaLT9EOMY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/06/22/haciendo-que-java-se-vea-mas-nativo-en-osx-el-caso-de-stupidzombie/feed/</wfw:commentRss>
		<feedburner:origLink>http://kodegeek.com/blog/2009/06/22/haciendo-que-java-se-vea-mas-nativo-en-osx-el-caso-de-stupidzombie/</feedburner:origLink></item>
		<item>
		<title>Localización en Java (II): El caso de StupidZombie</title>
		<link>http://feedproxy.google.com/~r/Kodegeek/~3/0fwcno7g0P0/</link>
		<comments>http://kodegeek.com/blog/2009/06/21/localizacion-en-java-ii-el-caso-de-stupidzombie/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 00:28:24 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
		
		<category><![CDATA[java]]></category>

		<category><![CDATA[bug]]></category>

		<category><![CDATA[osx]]></category>

		<category><![CDATA[spanglish]]></category>

		<category><![CDATA[stupidzombie]]></category>

		<category><![CDATA[swing]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/?p=1907</guid>
		<description><![CDATA[¿Qué tiene de malo la imagen?. Pista: ¡Llámame p&#8217;atras!
Bueno, ya casi está listo. Pero cuando digo ya casi es porque aún tengo componentes de Swing los cuales no se portan muy bien en cuanto le cambio el lenguaje y la región al programa.
¿Qué hacer? Parece que es una cucaracha común, en especial con JFileChooser:

http://lists.apple.com/archives/Java-dev/2006/Apr/msg00281.html
http://www.rgagnon.com/javadetails/java-0299.html

Hay soluciones, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/josevnz/3648846296/" title="StupidZombie localization issues by josevnz, on Flickr"><img src="http://farm4.static.flickr.com/3569/3648846296_ab7af2ff5f.jpg" width="500" height="449" alt="StupidZombie localization issues" />¿Qué tiene de malo la imagen?. Pista: ¡Llámame p&#8217;atras!</a></p>
<p>Bueno,<a href="http://kodegeek.com/blog/2009/06/20/soporte-de-java-en-otros-lenguajes-el-caso-de-stupidzombie/"> ya casi</a> está listo. Pero cuando digo ya casi es porque aún tengo componentes de Swing los cuales no se portan muy bien en cuanto le cambio el lenguaje y la región al programa.</p>
<p>¿Qué hacer? Parece que es una cucaracha común, en especial con JFileChooser:</p>
<ul>
<li><a href="http://lists.apple.com/archives/Java-dev/2006/Apr/msg00281.html">http://lists.apple.com/archives/Java-dev/2006/Apr/msg00281.html</a></li>
<li><a href="http://www.rgagnon.com/javadetails/java-0299.html">http://www.rgagnon.com/javadetails/java-0299.html</a></li>
</ul>
<p>Hay soluciones, voy a probarlas y después les digo como me fué. Sin embargo con Swing es irritante ver como la promesa de Java &#8220;Run anywhere&#8221; se quiebra un poquito <img src='http://kodegeek.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Veneblogs: <a href="http://www.veneblogs.com/etiquetas/java" rel="tag">java</a>, <a href="http://www.veneblogs.com/etiquetas/swing" rel="tag">swing</a>, <a href="http://www.veneblogs.com/etiquetas/osx" rel="tag">osx</a>, <a href="http://www.veneblogs.com/etiquetas/bug" rel="tag">bug</a>, <a href="http://www.veneblogs.com/etiquetas/spanglish" rel="tag">spanglish</a>, <a href="http://www.veneblogs.com/etiquetas/stupidzombie" rel="tag">stupidzombie</a><br />
<br />Blogalaxia: <a href="http://www.blogalaxia.com/tags/java" rel="tag">java</a>, <a href="http://www.blogalaxia.com/tags/swing" rel="tag">swing</a>, <a href="http://www.blogalaxia.com/tags/osx" rel="tag">osx</a>, <a href="http://www.blogalaxia.com/tags/bug" rel="tag">bug</a>, <a href="http://www.blogalaxia.com/tags/spanglish" rel="tag">spanglish</a>, <a href="http://www.blogalaxia.com/tags/stupidzombie" rel="tag">stupidzombie</a><br />
<br />To2Blogs: <a href="http://www.to2blogs.com/tag/java" rel="tag">java</a>, <a href="http://www.to2blogs.com/tag/swing" rel="tag">swing</a>, <a href="http://www.to2blogs.com/tag/osx" rel="tag">osx</a>, <a href="http://www.to2blogs.com/tag/bug" rel="tag">bug</a>, <a href="http://www.to2blogs.com/tag/spanglish" rel="tag">spanglish</a>, <a href="http://www.to2blogs.com/tag/stupidzombie" rel="tag">stupidzombie</a><br />
<br />Technorati: <a href="http://technorati.com/tag/java" rel="tag">java</a>, <a href="http://technorati.com/tag/swing" rel="tag">swing</a>, <a href="http://technorati.com/tag/osx" rel="tag">osx</a>, <a href="http://technorati.com/tag/bug" rel="tag">bug</a>, <a href="http://technorati.com/tag/spanglish" rel="tag">spanglish</a>, <a href="http://technorati.com/tag/stupidzombie" rel="tag">stupidzombie</a><br />
<br />Del.icio.us: <a href="http://del.icio.us/tag/java" rel="tag">java</a>, <a href="http://del.icio.us/tag/swing" rel="tag">swing</a>, <a href="http://del.icio.us/tag/osx" rel="tag">osx</a>, <a href="http://del.icio.us/tag/bug" rel="tag">bug</a>, <a href="http://del.icio.us/tag/spanglish" rel="tag">spanglish</a>, <a href="http://del.icio.us/tag/stupidzombie" rel="tag">stupidzombie</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fkodegeek.com%2Fblog%2F2009%2F06%2F21%2Flocalizacion-en-java-ii-el-caso-de-stupidzombie%2F&amp;linkname=Localizaci%C3%B3n%20en%20Java%20%28II%29%3A%20El%20caso%20de%20StupidZombie">Guardar/Compartir</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Kodegeek?a=0fwcno7g0P0:pm289mMdZV8:ecdYMiMMAMM"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=ecdYMiMMAMM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Kodegeek?a=0fwcno7g0P0:pm289mMdZV8:tKBiNdHYW3c"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=tKBiNdHYW3c" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Kodegeek/~4/0fwcno7g0P0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/06/21/localizacion-en-java-ii-el-caso-de-stupidzombie/feed/</wfw:commentRss>
		<feedburner:origLink>http://kodegeek.com/blog/2009/06/21/localizacion-en-java-ii-el-caso-de-stupidzombie/</feedburner:origLink></item>
		<item>
		<title>Localización en Java (I): El caso de StupidZombie</title>
		<link>http://feedproxy.google.com/~r/Kodegeek/~3/3yIeDD-bzU0/</link>
		<comments>http://kodegeek.com/blog/2009/06/20/soporte-de-java-en-otros-lenguajes-el-caso-de-stupidzombie/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 01:49:46 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
		
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/?p=1900</guid>
		<description><![CDATA[Bueno, ya trabajando en la versión 1.1 de StupidZombie. En este caso una de las cosas que dejé fuera de la versión 1.0 fué el soporte del lenguaje Español.
Si el usuario ya tiene a su sistema operativo con localización en Español entonces no hay problema, sin embargo ¿que pasa si no es así? Pienso resolver [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, ya trabajando en la versión 1.1 de StupidZombie. En este caso una de las cosas que dejé fuera de la versión 1.0 fué el soporte del lenguaje Español.</p>
<p>Si el usuario ya tiene a su sistema operativo con localización en Español entonces no hay problema, sin embargo ¿que pasa si no es así? Pienso resolver eso permitiendo al usuario agregar esto como una propiedad más en la interfaz gráfica de SZ:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p190012"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre></td><td class="code" id="p1900code12"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.stupidzombie.ping</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Locale</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #008000; font-style: italic; font-weight: bold;">/**
 * Manages the access to the StupidZombie localized resources
 * @author undead@stupidzombie.com
 */</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> LocaleManager <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> PreferenceManager pref<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> LocaleManager<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// EMPTY</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #008000; font-style: italic; font-weight: bold;">/**
	 * Return the desired locale. First check user preferences and if not there check system default.
	 * Once the a locale is found make it the default locale and return it. 
	 * @return locale
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alocale+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Locale</span></a> getZombieLocale<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> variant<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		pref <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> PreferenceManager<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> languaje <span style="color: #339933;">=</span> pref.<span style="color: #006633;">getPref</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;languaje&quot;</span>, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;user.language&quot;</span>, <span style="color: #0000ff;">&quot;en&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> country <span style="color: #339933;">=</span> pref.<span style="color: #006633;">getPref</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;country&quot;</span>, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">getProperty</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;user.region&quot;</span>, <span style="color: #0000ff;">&quot;US&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alocale+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Locale</span></a>.<span style="color: #006633;">setDefault</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alocale+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Locale</span></a><span style="color: #009900;">&#40;</span>languaje, country, variant <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">?</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">:</span> variant<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alocale+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Locale</span></a>.<span style="color: #006633;">getDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>	
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>La idea es buscar en las preferencias (PreferenceManager es una clase que escribí la cual maneja las preferencias de SZ), si no está allí entonces revizar las propiedades del sistema y si hay nada definido entonces agregamos valores por omisión.</p>
<p>Usandolo desde Java:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p190013"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p1900code13"><pre class="java" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">static</span> <span style="color: #009900;">&#123;</span>
		BUNDLE <span style="color: #339933;">=</span> 
			<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aresourcebundle+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">ResourceBundle</span></a>.<span style="color: #006633;">getBundle</span><span style="color: #009900;">&#40;</span>StupidZombieGui.<span style="color: #000000; font-weight: bold;">class</span>.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, LocaleManager.<span style="color: #006633;">getZombieLocale</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Por ahora si usted quiere compilar el código y ver como trabaja puede llamar al programa de la siguiente manera:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p190014"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p1900code14"><pre class="bash" style="font-family:monospace;">java <span style="color: #660033;">-jar</span> -Duser.languaje=es -Duser.region=VE StupidZombie.jar</pre></td></tr></table></div>

<p>Por cierto, para todos aquellos lectores que tienen hijos, ¡feliz día del padre (adelantadas) :)!</p>
<p>Veneblogs: <a href="http://www.veneblogs.com/etiquetas/java" rel="tag">java</a>, <a href="http://www.veneblogs.com/etiquetas/stupidzombie" rel="tag">stupidzombie</a>, <a href="http://www.veneblogs.com/etiquetas/localized" rel="tag">localized</a>, <a href="http://www.veneblogs.com/etiquetas/espa%C3%B1ol" rel="tag">español</a>, <a href="http://www.veneblogs.com/etiquetas/spanish" rel="tag">spanish</a><br />
<br />Blogalaxia: <a href="http://www.blogalaxia.com/tags/java" rel="tag">java</a>, <a href="http://www.blogalaxia.com/tags/stupidzombie" rel="tag">stupidzombie</a>, <a href="http://www.blogalaxia.com/tags/localized" rel="tag">localized</a>, <a href="http://www.blogalaxia.com/tags/espa%C3%B1ol" rel="tag">español</a>, <a href="http://www.blogalaxia.com/tags/spanish" rel="tag">spanish</a><br />
<br />To2Blogs: <a href="http://www.to2blogs.com/tag/java" rel="tag">java</a>, <a href="http://www.to2blogs.com/tag/stupidzombie" rel="tag">stupidzombie</a>, <a href="http://www.to2blogs.com/tag/localized" rel="tag">localized</a>, <a href="http://www.to2blogs.com/tag/espa%C3%B1ol" rel="tag">español</a>, <a href="http://www.to2blogs.com/tag/spanish" rel="tag">spanish</a><br />
<br />Technorati: <a href="http://technorati.com/tag/java" rel="tag">java</a>, <a href="http://technorati.com/tag/stupidzombie" rel="tag">stupidzombie</a>, <a href="http://technorati.com/tag/localized" rel="tag">localized</a>, <a href="http://technorati.com/tag/espa%C3%B1ol" rel="tag">español</a>, <a href="http://technorati.com/tag/spanish" rel="tag">spanish</a><br />
<br />Del.icio.us: <a href="http://del.icio.us/tag/java" rel="tag">java</a>, <a href="http://del.icio.us/tag/stupidzombie" rel="tag">stupidzombie</a>, <a href="http://del.icio.us/tag/localized" rel="tag">localized</a>, <a href="http://del.icio.us/tag/espa%C3%B1ol" rel="tag">español</a>, <a href="http://del.icio.us/tag/spanish" rel="tag">spanish</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fkodegeek.com%2Fblog%2F2009%2F06%2F20%2Fsoporte-de-java-en-otros-lenguajes-el-caso-de-stupidzombie%2F&amp;linkname=Localizaci%C3%B3n%20en%20Java%20%28I%29%3A%20El%20caso%20de%20StupidZombie">Guardar/Compartir</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Kodegeek?a=3yIeDD-bzU0:lC7FqCxHky8:ecdYMiMMAMM"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=ecdYMiMMAMM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Kodegeek?a=3yIeDD-bzU0:lC7FqCxHky8:tKBiNdHYW3c"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=tKBiNdHYW3c" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Kodegeek/~4/3yIeDD-bzU0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/06/20/soporte-de-java-en-otros-lenguajes-el-caso-de-stupidzombie/feed/</wfw:commentRss>
		<feedburner:origLink>http://kodegeek.com/blog/2009/06/20/soporte-de-java-en-otros-lenguajes-el-caso-de-stupidzombie/</feedburner:origLink></item>
		<item>
		<title>Comienza la cuenta regresiva para StupidZombie 1.1</title>
		<link>http://feedproxy.google.com/~r/Kodegeek/~3/4wR8wsNxwBA/</link>
		<comments>http://kodegeek.com/blog/2009/06/13/comienza-la-cuenta-regresiva-para-stupidzombie-11/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 04:51:10 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
		
		<category><![CDATA[java]]></category>

		<category><![CDATA[1.1]]></category>

		<category><![CDATA[stupidzombie]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/?p=1892</guid>
		<description><![CDATA[Ya comenzó la cuenta regresiva para StupidZombie 1.1. Hoy cree las &#8216;ramas&#8217; en SubVersion, hice pequeños cambios en la compilación del proyecto,  y actualice las librerías de terceros (con la ganancia grátis en velocidad del Pinger de XML-RPC).
Pero lo más importante es que ya tengo la lista completa de tareas para la versión 1.1.
Veneblogs: [...]]]></description>
			<content:encoded><![CDATA[<p>Ya comenzó la cuenta regresiva para StupidZombie 1.1. Hoy cree las &#8216;ramas&#8217; en<a href="http://svnbook.red-bean.com/en/1.1/ch04s02.html#svn-ch-4-sect-2.1"> SubVersion</a>, hice pequeños cambios en la compilación del proyecto,  y actualice las librerías de terceros (con <a href="http://stupidzombie.com/blog/2009/06/13/stupidzombie-11-now-faster/">la ganancia grátis en velocidad del Pinger de XML-RPC</a>).</p>
<p>Pero lo más importante es que ya tengo <a href="http://kenai.com/jira/browse/STUPIDZOMBIE-2">la lista completa</a> de tareas para la versión 1.1.</p>
<p>Veneblogs: <a href="http://www.veneblogs.com/etiquetas/stupidzombie" rel="tag">stupidzombie</a>, <a href="http://www.veneblogs.com/etiquetas/1.1" rel="tag">1.1</a>, <a href="http://www.veneblogs.com/etiquetas/release" rel="tag">release</a>, <a href="http://www.veneblogs.com/etiquetas/jakarta+libs" rel="tag">jakarta libs</a><br />
<br />Blogalaxia: <a href="http://www.blogalaxia.com/tags/stupidzombie" rel="tag">stupidzombie</a>, <a href="http://www.blogalaxia.com/tags/1.1" rel="tag">1.1</a>, <a href="http://www.blogalaxia.com/tags/release" rel="tag">release</a>, <a href="http://www.blogalaxia.com/tags/jakarta+libs" rel="tag">jakarta libs</a><br />
<br />To2Blogs: <a href="http://www.to2blogs.com/tag/stupidzombie" rel="tag">stupidzombie</a>, <a href="http://www.to2blogs.com/tag/1.1" rel="tag">1.1</a>, <a href="http://www.to2blogs.com/tag/release" rel="tag">release</a>, <a href="http://www.to2blogs.com/tag/jakarta+libs" rel="tag">jakarta libs</a><br />
<br />Technorati: <a href="http://technorati.com/tag/stupidzombie" rel="tag">stupidzombie</a>, <a href="http://technorati.com/tag/1.1" rel="tag">1.1</a>, <a href="http://technorati.com/tag/release" rel="tag">release</a>, <a href="http://technorati.com/tag/jakarta+libs" rel="tag">jakarta libs</a><br />
<br />Del.icio.us: <a href="http://del.icio.us/tag/stupidzombie" rel="tag">stupidzombie</a>, <a href="http://del.icio.us/tag/1.1" rel="tag">1.1</a>, <a href="http://del.icio.us/tag/release" rel="tag">release</a>, <a href="http://del.icio.us/tag/jakarta+libs" rel="tag">jakarta libs</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fkodegeek.com%2Fblog%2F2009%2F06%2F13%2Fcomienza-la-cuenta-regresiva-para-stupidzombie-11%2F&amp;linkname=Comienza%20la%20cuenta%20regresiva%20para%20StupidZombie%201.1">Guardar/Compartir</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Kodegeek?a=4wR8wsNxwBA:qqd8f5zuhBo:ecdYMiMMAMM"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=ecdYMiMMAMM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Kodegeek?a=4wR8wsNxwBA:qqd8f5zuhBo:tKBiNdHYW3c"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=tKBiNdHYW3c" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Kodegeek/~4/4wR8wsNxwBA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/06/13/comienza-la-cuenta-regresiva-para-stupidzombie-11/feed/</wfw:commentRss>
		<feedburner:origLink>http://kodegeek.com/blog/2009/06/13/comienza-la-cuenta-regresiva-para-stupidzombie-11/</feedburner:origLink></item>
		<item>
		<title>Usando Visualvm en StupidZombie con Eclipse y OSX: Resultados mixtos</title>
		<link>http://feedproxy.google.com/~r/Kodegeek/~3/bJ2wtsY4XJs/</link>
		<comments>http://kodegeek.com/blog/2009/06/11/usando-visualvm-en-stupidzombie-con-eclipse-y-osx-resultados-mixtos/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 03:36:39 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
		
		<category><![CDATA[comics]]></category>

		<category><![CDATA[internet]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[kodegeek]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[opensource]]></category>

		<category><![CDATA[programación]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[debug]]></category>

		<category><![CDATA[stupidzombie]]></category>

		<category><![CDATA[visualvm]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/?p=1868</guid>
		<description><![CDATA[Hoy me decidí a probar VisualVM de Sun (O debería decir Oracle). Bajarselo del sitio web es un paseo y la instalación es trivial (descomprimir, correr y ya). La aplicación a la cual estudié no es más que StupidZombie.
(Si usted tiene Windows entonces quizas no necesite bajarselo ya que viene con la última máquina virtual [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1869" class="wp-caption alignnone" style="width: 499px"><img class="size-full wp-image-1869" title="StupidZombie memory profile - ping" src="http://kodegeek.com/blog/wp-content/uploads/2009/06/ping-generator.png" alt="StupidZombie memory profile - ping" width="489" height="527" /><p class="wp-caption-text">StupidZombie memory profile - ping</p></div>
<p>Hoy me decidí a probar <a href="https://visualvm.dev.java.net/gettingstarted.html" target="_blank">VisualVM de Sun (O debería decir Oracle)</a>. Bajarselo del sitio web es un paseo y la instalación es trivial (descomprimir, correr y ya). La aplicación a la cual estudié no es más que StupidZombie.</p>
<p>(Si usted tiene Windows entonces quizas no necesite bajarselo ya que viene con la última máquina virtual de Java de Sun).</p>
<p>Correr VisualVM es bastante sencillo, sólo tuve que:</p>
<ol>
<li>Ejecutar a StupidZombie</li>
<li>Ejecutar a VisualVM (haciendo click en su icono en el directorio bin en donde quedó instalado).</li>
</ol>
<p>Lo primero que hice fué ver cuanta memoria se estaba comiendo StupidZombie; Una aplicación tan sencilla debería ser liviana y me encontré con que usa sólo 20MB en OSX (Una ridiculez considerando lo que pesan ciertas aplicaciones hoy en día). Sin embargo me soprendió ver que cuando StupidZombie hay más de 5000 mil clases de Java en memoria, (¿porqué tanta basura?).</p>
<p>Esto me hace pensar que es hora de poner a dieta a la aplicación; Por ello me decidí hacer un perfil del uso de memoria (memory profile) y lo dejé corriendo un rato mientras hacia Pings a varios directorios y escribia etiquetas con el generador de etiquetas automático:</p>
<div id="attachment_1871" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-1871" title="StupidZombie and VisualVM" src="http://kodegeek.com/blog/wp-content/uploads/2009/06/picture-1-300x251.png" alt="StupidZombie and VisualVM" width="300" height="251" /><p class="wp-caption-text">StupidZombie and VisualVM</p></div>
<p>Mucha creación de arreglos de caracteres. No es soprendente ya que StupidZombie hace mucho &#8220;procesamiento&#8221; de cadenas de texto, proveniente de los directorios. Sin embargo me gustaría como se porta si lo corro paso a paso desde Eclipse (en mi caso no utilizo NetBeans donde la integración es más natural).</p>
<p>¿Y que sabemos del uso del procesador (CPU)? Bueno, siempre que intentaba cambiar a ese modo la aplicación corria bien un rato y luego se moria, dejandome a un proceso zombie en la máquina (que ironia StupidZombie es ahora un verdadero Zombie :)):</p>
<div id="attachment_1874" class="wp-caption alignnone" style="width: 765px"><img class="size-full wp-image-1874" title="Nunca pude medir el desempeño del procesador" src="http://kodegeek.com/blog/wp-content/uploads/2009/06/picture-2.png" alt="Nunca pude medir el desempeño del procesador" width="755" height="559" /><p class="wp-caption-text">Nunca pude medir el desempeño del procesador</p></div>
<p>Por ahora mi opinión de la herramienta es mixta. Si bien es genial que la máquina virtual de Java venga una herramienta de este calibre es también decepcionante que no se pueda medir el desempeño del procesador en OSX.</p>
<p>¿Pero es justa la comparación? Es decir, ¿como se mide en OSX con otras herramientas similares?</p>
<p>Bueno, yo tengo buenas experiencias en mi trabajo con <a href="http://www.yourkit.com/overview/index.jsp" target="_blank">YourKit</a>. Resulta que ellos ofrecen una licencia OpenSource (aunque también tienen una licencia de evaluación de 15 días), así que también me baje esta versión de la herramienta y la probé (primero claro, hubo <a href="http://www.yourkit.com/docs/80/help/agent.jsp" target="_blank">que hacer ciertos pasos en OSX</a> antes de poder utilizar la herramienta, nada del otro mundo):</p>

<div class="wp_codebox"><table width="100%" ><tr id="p186817"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
</pre></td><td class="code" id="p1868code17"><pre class="shell" style="font-family:monospace;">auyan:bin josevnz$ export DYLD_LIBRARY_PATH=/Users/josevnz/Desktop/YourKit_Java_Profiler_8.0.9.app/bin/mac:$DYLD_LIBRARY_PATH
auyan:bin josevnz$ java -agentlib:yjpagent=helpYourKit Java Profiler 8.0.9 JVMTI agent usage: -agentlib:yjpagent=[help]|[option, ...]
&nbsp;
Option             Description
------------------ ----------------------------------------
port=value       port to listen on (1-65535, by default any free port is chosen)
listen=ip:port same as 'port', but bind agent socket to particular IP only
onlylocal          allow only local connections to profiled application
dir=custom dir   directory where snapshots are created (by default $user home/Snapshots)
telemetrylimit=$n limit telemetry buffer capacity to N hours (approximately)
sampling           startup with CPU sampling
tracing            startup with CPU tracing
                   (cannot be used together with 'disablecounts')
noj2ee             do not perform J2EE high level profiling
                   (use only in combination with 'sampling' or 'tracing')
alloceach=$n      startup with object allocation recording: record each N-th allocation;
                   can be used together with 'allocsizelimit';
                   cannot be used together with 'disablealloc'
allocsizelimit=$b startup with object allocation recording: record objects with size &gt;= B bytes
                   can be used together with 'alloceach';
                   cannot be used together with 'disablealloc'
monitors           startup with monitor usage profiling
usedmem=$percent  capture memory snapshot automatically when used heap memory
                   reaches the threshold
onexit=memory      always capture memory snapshot on exit
onexit=snapshot    always capture performance snapshot on exit (i.e. without heap)
disablealloc       do not instrument bytecode for object allocation recording
disablecounts      do not instrument bytecode for CPU tracing
disablej2ee        do not instrument bytecode for J2EE profiling
disablestacktelemetry
                   do not collect thread stack and status information
quiet              suppress diagnostic messages
&nbsp;
Please find detailed description in the Help section &quot;Startup options&quot;:
http://www.yourkit.com/docs/80/help/additional_agent_options.jsp
&nbsp;
Examples:
java -agentlib:yjpagent FooClass
java -agentlib:yjpagent=alloceach=10,allocsizelimit=1000000,dir=c:\MySnapshots FooClass
java -agentlib:yjpagent=usedmem=70 FooClass</pre></td></tr></table></div>

<p>Bueno, funciona. Ahora corremos a StupidZombie con las opciones de YourKit y la cosa se ve más o menos así:</p>
<div id="attachment_1884" class="wp-caption alignnone" style="width: 988px"><img src="http://kodegeek.com/blog/wp-content/uploads/2009/06/picture-21.png" alt="YourKit profiling StupidZombie" title="YourKit profiling StupidZombie" width="978" height="808" class="size-full wp-image-1884" /><p class="wp-caption-text">YourKit profiling StupidZombie</p></div>

<div class="wp_codebox"><table width="100%" ><tr id="p186818"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p1868code18"><pre class="shell" style="font-family:monospace;">auyan:bin josevnz$ java -agentlib:yjpagent -jar ~/Documents/stupidzombie/kenai/dist/StupidZombie.jar 
[YourKit Java Profiler 8.0.9] JVMTI version 3001016a; 1.6.0_07-b06-57; Apple Inc.; mixed mode, sharing; Mac OS X; 64-bit JVM
[YourKit Java Profiler 8.0.9] Profiler agent is listening on port 10001...
[YourKit Java Profiler 8.0.9] *** HINT ***: To get profiling results, connect to the application from the profiler UI
Jun 11, 2009 11:15:24 PM com.stupidzombie.gui.StupidZombieGui main
INFO: Starting...</pre></td></tr></table></div>

<p>Hice un montón de pruebas y debo decir que YourKit es una opción mucho más madura que VisualVM. Solo me queda ver si la gente de YourKit me dá una licencia OpenSource para seguirla utilizando en StupidZombie por más de 15 días.</p>
<p>¿Y ustedes, que utilizan para medir el desempeño de sus aplicaciones?</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fkodegeek.com%2Fblog%2F2009%2F06%2F11%2Fusando-visualvm-en-stupidzombie-con-eclipse-y-osx-resultados-mixtos%2F&amp;linkname=Usando%20Visualvm%20en%20StupidZombie%20con%20Eclipse%20y%20OSX%3A%20Resultados%20mixtos">Guardar/Compartir</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Kodegeek?a=bJ2wtsY4XJs:dOcJU0e-NzE:ecdYMiMMAMM"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=ecdYMiMMAMM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Kodegeek?a=bJ2wtsY4XJs:dOcJU0e-NzE:tKBiNdHYW3c"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=tKBiNdHYW3c" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Kodegeek/~4/bJ2wtsY4XJs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/06/11/usando-visualvm-en-stupidzombie-con-eclipse-y-osx-resultados-mixtos/feed/</wfw:commentRss>
		<feedburner:origLink>http://kodegeek.com/blog/2009/06/11/usando-visualvm-en-stupidzombie-con-eclipse-y-osx-resultados-mixtos/</feedburner:origLink></item>
		<item>
		<title>Los bemoles del OpenSource: ¿Y que pasa con los proyectos pequeños?</title>
		<link>http://feedproxy.google.com/~r/Kodegeek/~3/TekWjJZorvU/</link>
		<comments>http://kodegeek.com/blog/2009/06/07/los-bemoles-del-opensource-%c2%bfy-que-pasa-con-los-proyectos-pequenos/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 01:09:13 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
		
		<category><![CDATA[java]]></category>

		<category><![CDATA[kodegeek]]></category>

		<category><![CDATA[opensource]]></category>

		<category><![CDATA[programación]]></category>

		<category><![CDATA[cvebrowser]]></category>

		<category><![CDATA[pingblog]]></category>

		<category><![CDATA[stupidzombie]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/?p=1846</guid>
		<description><![CDATA[
Blockhead no ha tenido una vida fácil
Ahh, si sólo los bemoles se aplicaran a la música.  Pero no es así, en este caso el código abierto u OpenSource también tiene los suyos. En particular voy a hablar de los proyectos gratuitos a los cuales casi llamaría &#8220;pasatiempos&#8220;, en este caso StupidZombie.
El lado feo de un [...]]]></description>
			<content:encoded><![CDATA[<p><a title="SZv9_blockhead_180x200_wht by josevnz, on Flickr" href="http://www.flickr.com/photos/josevnz/3602457112/"><img src="http://farm4.static.flickr.com/3307/3602457112_5ca7875f75_m.jpg" alt="SZv9_blockhead_180x200_wht" width="180" height="200" /></a></p>
<p><a title="SZv9_blockhead_180x200_wht by josevnz, on Flickr" href="http://www.flickr.com/photos/josevnz/3602457112/">Blockhead no ha tenido una vida fácil</a></p>
<p>Ahh, si sólo los<a href="http://es.wikipedia.org/wiki/Bemol" target="_blank"> bemoles</a> se aplicaran a la música.  Pero no es así, en este caso el código abierto u OpenSource también tiene los suyos. En particular voy a hablar de los proyectos gratuitos a los cuales casi llamaría &#8220;<em>pasatiempos</em>&#8220;, en este caso <a href="http://stupidzombie.com" target="_blank">StupidZombie</a>.</p>
<h2>El lado feo de un proyecto de código abierto:</h2>
<p><a title="Sentilla Swing temperature display - Time Series by josevnz, on Flickr" href="http://www.flickr.com/photos/josevnz/2619388391/"><img src="http://farm4.static.flickr.com/3084/2619388391_f2770d9449.jpg" alt="Sentilla Swing temperature display - Time Series" width="500" height="375" /><br />
¿Alguien se acuerda de agua y fuego?</a></p>
<ul>
<li><strong>Es un proyecto costoso</strong>: StupidZombie es bien costoso. Cuesta tiempo que pudiera estar utilizando en otras cosas. Me cuesta el dominio de DNS, el hospedaje. Cuesta el esfuerzo de convencer a otras personas para que se involucren y participen en el proyecto.</li>
<li><strong>Es dificil conseguir colaboradores</strong>: Nadie quiere trabajar en un proyecto pequeño, y menos de gratis. Si el proyecto es en Español entonces las posibilidades de conseguir colaboradores bajan dramáticamente (yo tengo varias teorías, con gusto las discutimos en cuanto me dejen sus comentarios). Hay que promocionar el proyecto en muchos sitios, de muchas maneras para darlo a conocer, explicando el potencial (Por ejemplo, después de mucho trabajo tuve la suerte que DrRomney se interesara en el diseño del proyecto. De allí nació Blockhead y el sitio web del proyecto).</li>
<li><strong>Requiere dedicación</strong>: La tentación de hacer cualquier otra cosa a estar echando código en solitario es grande. Revizar cucarachas, probar cosas nuevas. Si usted no disfruta de su proyecto entonces ni siquiera empiece (por ejemplo muchos de los proyectos en Source Forge nunca liberaron una linea de código y <a href="http://apps.sourceforge.net/trac/sourceforge/wiki/Abandoned%20Project%20Takeovers" target="_blank">ahora están abandonados</a>).</li>
</ul>
<p>Con el tiempo uno aprende a hacer mejores propuestas. Por ejemplo, uno de mis primeros pasatiempos OpenSource f<a href="http://cvebrowser.sourceforge.net/" target="_blank">ué CVEBrowser</a>. En aquel entonces estaba aprendiendo Servlets y JSP y me pareció <a href="http://sourceforge.net/project/screenshots.php?group_id=73740" target="_blank">buena idea dejar algo atrás</a>. El proyecto llegó a su versión 1.0 y allí murió ya que nunca hubo interés de nadie en ver nuevas cosas (sin embargo <a href="http://sourceforge.net/project/stats/?group_id=73740&amp;ugn=cvebrowser&amp;type=&amp;mode=alltime" target="_blank">hasta el día de hoy hay descargas del código</a> desde su sitio web).</p>
<p>Al mismo tiempo <a href="http://pinblog.sourceforge.net/" target="_blank">PingBlog</a> (el ancestro de StupidZombie) y <a href="https://sourceforge.net/projects/elangelnegro/" target="_blank">ElAngelNegro (Kodegeek) </a>nacieron. <em>PingBlog nunca fué popular </em>y ciertos cambios le dieron nueva vida el proyecto. Kodegeek es bien experimental y recoge todas (bueno, casi todas) los experimentos con código de los cuales he hablado en este blog a través de los años (todos los meses tiene descargas de código, <a href="https://sourceforge.net/project/stats/?group_id=128692&amp;ugn=elangelnegro&amp;type=&amp;mode=alltime" target="_blank">así que hay bastante interés en el proyecto</a>, pese a que son piezas de código aquí y allá)</p>
<p><em>No todos fueron grandes éxitos</em>: <a href="https://sourceforge.net/projects/jsrs/" target="_blank">The Java Simple Registration System (JSRS) </a>nunca liberó código y sólo se quedo en documentación (razones personales y desde entonces otros proyectos han despegado). <a href="https://sourceforge.net/projects/aguayfuego/" target="_blank">AguaYFuego</a> fué otro experimento interesante mientras<a href="http://kodegeek.com/blog/2008/10/18/aguayfuego-se-…co-el-serruchoaguayfuego-se-me-tranco-el-serrucho/" target="_self"> jugaba con los motes de Sentilla</a>, pero <a href="http://kodegeek.com/blog/?s=sentilla" target="_blank">nunca tuvo la intención</a> de despegar como algo más serio.</p>
<h2>Con el tiempo uno aprende una que otra lección:</h2>
<p><a title="Google Maps KodeGeek by josevnz, on Flickr" href="http://www.flickr.com/photos/josevnz/87055480/"><img src="http://farm1.static.flickr.com/39/87055480_25da609c78.jpg" alt="Google Maps KodeGeek" width="500" height="400" /><br />
Kodegeek y sus múltiples experimentos</a></p>
<ul>
<li><strong>Algunos éxitos vinieron de otros proyectos</strong>: Hace ya unos años atrás yo era un usuario avido de<a href="http://opennms.org" target="_blank"> OpenNMS</a>. En ese tiempo el proyecto no tenia un &#8216;plugin&#8217; para monitorear bases de datos usando JDBC (sólo uno que detectaba si el puerto en TCP/IP estaba abierto o no). Después de jugar un poco envié el código al proyecto y (suerte para mi) <a href="http://blogs.opennms.org/?p=31" target="_blank">fué aceptado</a>. Hoy en día estan trabajando en un código más limpio, pero en ese entonces esta pieza de código ayudo a unos cuantos (y yo muy agradecido por poder ayudar).</li>
</ul>
<ul>
<li><strong>Mercadeo, mentiras y vídeo: Como cambiar el nombre del proyecto ayuda</strong>: Desde que el proyecto cambio su nombre a StupidZombie (bendito dominio en DNS) ha habido más colaboración e interés. Gracias a esto conseguí que alguien se interesara en el proyecto y creara un diseño atractivo que a logrado que la gente se baje la aplicación, juegue con ella. Las redes sociales como <a href="http://www.facebook.com/home.php#/group.php?gid=48597864820" target="_blank">Facebook</a>, <a href="http://twitter.com/stupidzombie" target="_blank">Twitter</a> y proyectos  como <a href="http://kenai.com/projects/stupidzombie" target="_blank">Kenai.com</a> han ayudado mucho, en comparación con métodos más tradicionales como anunciar el proyecto en <a href="http://freshmeat.net/projects/stupidzombie" target="_blank">Freshmeat.net </a>o hospedarlo en Source Forge</li>
<li><strong>Siempre ayuda escribir algo que solucione un problema de verdad</strong>: <a href="http://kenai.com/projects/stupidzombie/pages/WhatIsStupidZombie" target="_blank">A veces reinventar la rueda no es tan malo</a> <img src='http://kodegeek.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
</ul>
<h2>Sin embargo quedan obstáculos:</h2>
<p><img src="http://stupidzombie.com/blog/wp-content/uploads/2009/06/picture-1-300x194.png" border="0" alt="" /></p>
<ul>
<li><strong>Aún es costoso competir con el código comercial</strong>: Por ejemplo, obtener certificados digitales para firmar <a href="http://www.thawte.com/code-signing/" target="_blank">el código es costoso</a>. Si lo quieres hacer gratis <a href="http://wiki.cacert.org/wiki/CodesigningCert" target="_blank">es un proceso complejo</a>. Promocionar el producto como si fuera comercial cuesta dinero (por ejemplo <em>la tienda Java Store no es grátis</em>, ya que ellos tienen que pagar los costos de mantenimiento y distribución). Si a eso le suma el hecho de que nadie paga por código abierto (olvidense de las donaciones, yo nunca he recibido una en ninguno de mis proyectos)</li>
</ul>
<h2>¿Y al final, hay algo de valor en todo esto?</h2>
<p><a title="Linux console on Buglab by josevnz, on Flickr" href="http://www.flickr.com/photos/josevnz/2946283654/"><img src="http://farm4.static.flickr.com/3216/2946283654_eb26bb612b.jpg" alt="Linux console on Buglab" width="500" height="375" /><br />
Buglabs: La combinación del OpenSource en Hardware y Software</a></p>
<p>Yo soy de los que cree que hay que dejar algo atrás, algo que hable de ti. No tiene que ser perfecto, sólo tiene que ser útil. Si es útil entonces seguirá creciendo, no importa si no se le dedica la misma atención. El hecho de involucrarse en varios aspectos del desarrollo de un proyecto (no sólo el echar código) es altamente gratificante ya que se aprenden muchas cosas, sobre todo el como actuar en diferentes roles (promotor de mercadeo, desarrollador, gerente de producto, diseñador de imagen y madrina del equipo ;)).</p>
<p>Ya para terminar los dejo con un pequeño pero interesante articulo sobre <a href="http://www.groklaw.net/article.php?story=20050516122114637" target="_blank">el verdadero valor del código OpenSource.<br />
</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fkodegeek.com%2Fblog%2F2009%2F06%2F07%2Flos-bemoles-del-opensource-%25c2%25bfy-que-pasa-con-los-proyectos-pequenos%2F&amp;linkname=Los%20bemoles%20del%20OpenSource%3A%20%C2%BFY%20que%20pasa%20con%20los%20proyectos%20peque%C3%B1os%3F">Guardar/Compartir</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Kodegeek?a=TekWjJZorvU:E82BkoU75QQ:ecdYMiMMAMM"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=ecdYMiMMAMM" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Kodegeek?a=TekWjJZorvU:E82BkoU75QQ:tKBiNdHYW3c"><img src="http://feeds.feedburner.com/~ff/Kodegeek?d=tKBiNdHYW3c" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Kodegeek/~4/TekWjJZorvU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/06/07/los-bemoles-del-opensource-%c2%bfy-que-pasa-con-los-proyectos-pequenos/feed/</wfw:commentRss>
		<feedburner:origLink>http://kodegeek.com/blog/2009/06/07/los-bemoles-del-opensource-%c2%bfy-que-pasa-con-los-proyectos-pequenos/</feedburner:origLink></item>
	</channel>
</rss>
