<?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>KodeGeek &#187; stupidzombie</title>
	<atom:link href="http://kodegeek.com/blog/tag/stupidzombie/feed/" rel="self" type="application/rss+xml" />
	<link>http://kodegeek.com/blog</link>
	<description>Programación, fitness, interés geek</description>
	<lastBuildDate>Sun, 05 Feb 2012 19:12:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Es oficial: Kenai.com tiene 60 días más de vida</title>
		<link>http://kodegeek.com/blog/2010/02/02/es-oficial-kenai-com-tiene-60-dias-mas-de-vida/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=es-oficial-kenai-com-tiene-60-dias-mas-de-vida</link>
		<comments>http://kodegeek.com/blog/2010/02/02/es-oficial-kenai-com-tiene-60-dias-mas-de-vida/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 19:03:41 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[kenai]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[stupidzombie]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/?p=2234</guid>
		<description><![CDATA[Bueno, ya lo habia comentado anteriormente pero ahora es oficial: Hello fellow Project Administrators, It&#8217;s with a sad heart that we have to announce that the Kenai.com domain will be shutdown as part of the consolidation of project hosting sites now that Sun is a wholly owned subsidiary of Oracle. Project Kenai has always existed [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, <a href="http://kodegeek.com/blog/2010/01/29/se-acabo-sun-%c2%bfque-viene-despues/">ya lo habia comentado anteriormente</a> pero ahora es oficial:</p>
<blockquote><p>Hello fellow Project Administrators,</p>
<p>It&#8217;s with a sad heart that we have to announce that the Kenai.com domain will be shutdown as part of the consolidation of project hosting sites now that Sun is a wholly owned subsidiary of Oracle.</p>
<p>Project Kenai has always existed as two different things: Kenai the infrastructure, and Kenai the website (Kenai.com).  While it has come time to close the domain of Kenai.com, the infrastructure (which is already used under NetBeans.org) will live on to support other domains in the future.</p>
<p>With this decision from Oracle to close the Kenai.com domain, it is now time for project owners to begin the process of migrating their repositories and content over to other locations.  A few things to note as you begin this process:</p>
<p>   * More then one forum thread is going on at this time discussing alternative sites for hosting projects; this one appears to be the most active: </p>
<p>http://kenai.com/projects/help/forums/general/topics/2406-Alternatives-for-Kenai-com-</p>
<p>   * For Source repositories, SVNSync can be used for Subversion.  Git, and Hg are pretty simple by nature to move.</p>
<p>   * Wiki source code is available to all project admins and can be cut and paste into any other site that supports the Mediawiki syntax.</p>
<p>   * For Issue Trackers and Forum content, we are looking at ways to make that content available, but we have nothing at this time in place.  If you can come up with a way to move the content on your own, proceed as such.  Please do not wait for us.</p>
<p>The website will be closed to the creation of new projects in the next week.  The complete shutdown of the site and the removal of the domain will be completed in the next 60 days (April 2nd 2010). This should provide ample time for all projects to be moved to a new home of the project owners choice.</p>
<p>If you have a private project (only available to Sun internal projects) those projects will continue to exist.  We will send information about how to access those in a separate notice.</p>
<p>Any public projects that remain after the 60 day limit (April 2nd 2010) will be removed when the site is turned off.</p>
<p>It has been an amazing ride, and a great pleasure to personally work with so many of you over the last year or so. From the entire Project Kenai Team I want to thank you for all of the feedback, criticisms, and support over our time together.</p>
<p>With much respect,<br />
The Project Kenai Team </p></blockquote>
<p>No me queda otra que buscarle un nuevo hogar a StupidZombie. ¿Alguien tiene sugerencias? <img src='http://kodegeek.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2010/02/02/es-oficial-kenai-com-tiene-60-dias-mas-de-vida/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Localización en Java (III): El caso de StupidZombie y JFileChooser</title>
		<link>http://kodegeek.com/blog/2009/07/20/localizacion-en-java-iii-el-caso-de-stupidzombie-y-jfilechooser/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=localizacion-en-java-iii-el-caso-de-stupidzombie-y-jfilechooser</link>
		<comments>http://kodegeek.com/blog/2009/07/20/localizacion-en-java-iii-el-caso-de-stupidzombie-y-jfilechooser/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 09:50:07 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[español]]></category>
		<category><![CDATA[jfilechooser]]></category>
		<category><![CDATA[localización]]></category>
		<category><![CDATA[localization]]></category>
		<category><![CDATA[spanish]]></category>
		<category><![CDATA[stupidzombie]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/?p=2012</guid>
		<description><![CDATA[Bueno, resulta que otro desarollador de Argentina se topó con mi problema (del cual hablé en un articulo) de hace más de un mes en el foro de Sun y logró buscar el resto de las etiquetas para hacer que JFileChooser funcione en otro idioma (ya saben, el problema de localización): 1 2 3 4 [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, resulta que otro desarollador de Argentina <a href="http://forums.sun.com/thread.jspa?threadID=5393267">se topó con mi problema</a> (<a href="http://kodegeek.com/blog/2009/06/21/localizacion-en-java-ii-el-caso-de-stupidzombie/">del cual hablé en un articulo</a>) de hace más de un mes en el foro de Sun y logró buscar el resto de las etiquetas para hacer que JFileChooser funcione en otro idioma (ya saben, el problema de localización):</p>

<div class="wp_codebox"><table><tr id="p20122"><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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
</pre></td><td class="code" id="p2012code2"><pre class="java" style="font-family:monospace;">Jose V Nunez Z,
&nbsp;
You are watching the thread <span style="color: #0000ff;">&quot;Localization problems for JFileChooser in OSX&quot;</span>, which was updated on Jul <span style="color: #cc66cc;">19</span>, <span style="color: #cc66cc;">2009</span> <span style="color: #cc66cc;">9</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">34</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">41</span> PM by arg_slo<span style="color: #339933;">:</span>
&nbsp;
<span style="color: #339933;">&lt;</span>http <span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//forums.sun.com/thread.jspa?threadID=5393267&gt;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">For</span> your convenience, the <span style="color: #000000; font-weight: bold;">new</span> message is included below<span style="color: #339933;">:</span>
<span style="color: #339933;">--------------------------------------------------------------</span>
Hello<span style="color: #339933;">!</span> Here the code I promised. <span style="color: #006633;">In</span> the <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ajfilechooser+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">JFileChooser</span></a>.<span style="color: #006633;">properties</span> file I put <span style="color: #000000; font-weight: bold;">this</span> values<span style="color: #339933;">:</span>
&nbsp;
FileChooser.<span style="color: #006633;">fileNameLabelText</span><span style="color: #339933;">=</span>Nombre del archivo
FileChooser.<span style="color: #006633;">homeFolderToolTipText</span><span style="color: #339933;">=</span>Directorio hogar
FileChooser.<span style="color: #006633;">newFolderToolTipText</span><span style="color: #339933;">=</span>Nueva carpeta
FileChooser.<span style="color: #006633;">listViewButtonToolTipTextlist</span><span style="color: #339933;">=</span>Ver lista
FileChooser.<span style="color: #006633;">detailsViewButtonToolTipText</span><span style="color: #339933;">=</span>Detalles
FileChooser.<span style="color: #006633;">newFolderButtonText</span><span style="color: #339933;">=</span>Nueva carpeta
FileChooser.<span style="color: #006633;">lookInLabelText</span><span style="color: #339933;">=</span>Buscar en
FileChooser.<span style="color: #006633;">filesOfTypeLabelText</span><span style="color: #339933;">=</span>Archivos de tipo
FileChooser.<span style="color: #006633;">upFolderToolTipText</span><span style="color: #339933;">=</span>Subir un nivel
FileChooser.<span style="color: #006633;">saveInLabelText</span><span style="color: #339933;">=</span>Guardar en
&nbsp;
FileChooser.<span style="color: #006633;">saveButtonText</span><span style="color: #339933;">:</span>Guardar
FileChooser.<span style="color: #006633;">newFolderErrorSeparator</span><span style="color: #339933;">::</span>
FileChooser.<span style="color: #006633;">other</span>.<span style="color: #006633;">newFolder</span><span style="color: #339933;">:</span>Carpeta nueva
FileChooser.<span style="color: #006633;">acceptAllFileFilterText</span><span style="color: #339933;">:</span>Todos los archivos
FileChooser.<span style="color: #006633;">directoryOpenButtonMnemonic</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">82</span>
FileChooser.<span style="color: #006633;">updateButtonToolTipText</span><span style="color: #339933;">:</span>Actualizar lista de directorios
FileChooser.<span style="color: #006633;">cancelButtonText</span><span style="color: #339933;">:</span>Cancelar
FileChooser.<span style="color: #006633;">directoryDescriptionText</span><span style="color: #339933;">:</span>Directorio
FileChooser.<span style="color: #006633;">updateButtonMnemonic</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">84</span>
FileChooser.<span style="color: #006633;">cancelButtonMnemonic</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">67</span>
FileChooser.<span style="color: #006633;">newFolderErrorText</span><span style="color: #339933;">:</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aerror+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Error</span></a> al crear una nueva carpeta
FileChooser.<span style="color: #006633;">saveButtonMnemonic</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">71</span>
FileChooser.<span style="color: #006633;">cancelButtonToolTipText</span><span style="color: #339933;">:</span>Cuadro de diálogo para cancelar elector de archivo
FileChooser.<span style="color: #006633;">directoryOpenButtonToolTipText</span><span style="color: #339933;">:</span>Abrir directorio seleccionado
FileChooser.<span style="color: #006633;">helpButtonText</span><span style="color: #339933;">:</span>Ayuda
FileChooser.<span style="color: #006633;">updateButtonText</span><span style="color: #339933;">:</span>Actualizar
FileChooser.<span style="color: #006633;">helpButtonToolTipText</span><span style="color: #339933;">:</span>Ayuda elector de archivos
FileChooser.<span style="color: #006633;">saveDialogTitleText</span><span style="color: #339933;">:</span>Guardar
FileChooser.<span style="color: #006633;">openButtonToolTipText</span><span style="color: #339933;">:</span>Abrir archivo seleccionado
FileChooser.<span style="color: #006633;">openButtonText</span><span style="color: #339933;">:</span>Abrir
FileChooser.<span style="color: #006633;">fileSizeMegaBytes</span><span style="color: #339933;">:</span><span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#125;</span> MB
FileChooser.<span style="color: #006633;">fileSizeGigaBytes</span><span style="color: #339933;">:</span><span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#125;</span> GB
FileChooser.<span style="color: #006633;">win32</span>.<span style="color: #006633;">newFolder</span><span style="color: #339933;">:</span>Carpeta nueva
FileChooser.<span style="color: #006633;">openButtonMnemonic</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">65</span>
FileChooser.<span style="color: #006633;">helpButtonMnemonic</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">89</span>
FileChooser.<span style="color: #006633;">fileSizeKiloBytes</span><span style="color: #339933;">:</span><span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#125;</span> KB
FileChooser.<span style="color: #006633;">openDialogTitleText</span><span style="color: #339933;">:</span>Abrir
FileChooser.<span style="color: #006633;">fileDescriptionText</span><span style="color: #339933;">:</span>Archivo genérico
FileChooser.<span style="color: #006633;">directoryOpenButtonText</span><span style="color: #339933;">:</span>Abrir
FileChooser.<span style="color: #006633;">saveButtonToolTipText</span><span style="color: #339933;">:</span>Guardar archivo seleccionado
FileChooser.<span style="color: #006633;">other</span>.<span style="color: #006633;">newFolder</span>.<span style="color: #006633;">subsequent</span><span style="color: #339933;">:</span>Carpeta nueva.<span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#125;</span>
FileChooser.<span style="color: #006633;">win32</span>.<span style="color: #006633;">newFolder</span>.<span style="color: #006633;">subsequent</span><span style="color: #339933;">:</span>Carpeta nueva <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
&nbsp;
&nbsp;
and it works perfectly, all in spanish<span style="color: #339933;">!</span>
&nbsp;
José from Bs As, Argentina
<span style="color: #339933;">--------------------------------------------------------------</span>
&nbsp;
To respond to <span style="color: #000000; font-weight: bold;">this</span> post, please click the following link<span style="color: #339933;">:</span>
<span style="color: #339933;">&lt;/</span>http<span style="color: #339933;">&gt;&lt;</span>http <span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//forums.sun.com/thread.jspa?messageID=10769968&gt;</span>
<span style="color: #339933;">&lt;/</span>http<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>¡Genial!. Aún no he probado lo que el me envió pero parece razonable. Muchas gracias a José (tocayo tenia que ser) o como dicen por allá, gracias ¡Che!</p>
]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/07/20/localizacion-en-java-iii-el-caso-de-stupidzombie-y-jfilechooser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enviando Tweets desde Java usando Twitter4J: ¿Como proteger consumerKey and consumerSecret?</title>
		<link>http://kodegeek.com/blog/2009/07/18/enviando-tweets-desde-java-usando-twitter4j-%c2%bfcomo-proteger-consumerkey-and-consumersecret/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=enviando-tweets-desde-java-usando-twitter4j-%25c2%25bfcomo-proteger-consumerkey-and-consumersecret</link>
		<comments>http://kodegeek.com/blog/2009/07/18/enviando-tweets-desde-java-usando-twitter4j-%c2%bfcomo-proteger-consumerkey-and-consumersecret/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 02:53:15 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[kodegeek]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[stupidzombie]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twitter4j]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/?p=2001</guid>
		<description><![CDATA[Bueno, mientras buscaba como agregar soporte para Facebook en StupidZombie, me conseguí con un problema interesante. Twitter4J requiere que definamos consumerKey y consumerSecret en el objeto Twitter en cada llamada. Lo cual trae problemas, ya que si distribuimos esas claves entonces cualquiera puede hacerse pasar por nuestra aplicación (No es un problema en una aplicación [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, mientras buscaba como agregar soporte para Facebook en StupidZombie, me conseguí con un problema interesante. Twitter4J requiere que definamos <a href="http://kodegeek.com/blog/2009/07/05/como-enviar-tweets-desde-java-usando-twitter4j/">consumerKey y consumerSecret en el objeto Twitter en cada llamada</a>.</p>
<p>Lo cual trae problemas, ya que si distribuimos esas claves entonces cualquiera puede hacerse pasar por nuestra aplicación (No es un problema en una aplicación web pero si en una de escritorio). El problema es peor si la aplicación es OpenSource porque entonces un Script-Kiddie puede hacer de las suyas sin mucho esfuerzo.</p>

<div class="wp_codebox"><table><tr id="p20016"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p2001code6"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//twitter.setOAuthConsumer(consumerKey, consumerSecret);</span>
accessToken <span style="color: #339933;">=</span> twitter.<span style="color: #006633;">getOAuthAccessToken</span><span style="color: #009900;">&#40;</span>token, tokenSecret, pin<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Lo que mas me preocupa es que <a href="http://apiwiki.twitter.com/Authentication">autenticación de escritorio</a> no funciona si no lo definimos. Por ejemplo, en el código que escribí la vez pasada esto es lo que ocurre si no incluimos la linea que esta comentada en el párrafo anterior:</p>

<div class="wp_codebox"><table><tr id="p20017"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p2001code7"><pre class="java" style="font-family:monospace;">Jul <span style="color: #cc66cc;">18</span>, <span style="color: #cc66cc;">2009</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">18</span><span style="color: #339933;">:</span><span style="color: #cc66cc;">49</span> PM com.<span style="color: #006633;">kodegeek</span>.<span style="color: #006633;">blog</span>.<span style="color: #006633;">twitter</span>.<span style="color: #006633;">TwitterPing</span> getAccessToken
INFO<span style="color: #339933;">:</span> Token<span style="color: #339933;">=</span>Ujq2pzpG7PwZVAJmGHjWrDiVzFz6wfmxzx9r85y7s TokenSecret<span style="color: #339933;">=</span>hBHVuOWdJPBe5r3iVXklSJuwawssjqoBslLHXhzlE Pin<span style="color: #339933;">=</span><span style="color: #cc66cc;">4129706</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> in thread <span style="color: #0000ff;">&quot;AWT-EventQueue-0&quot;</span> java.<span style="color: #006633;">lang</span>.<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aillegalstateexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">IllegalStateException</span></a><span style="color: #339933;">:</span> Neither user ID<span style="color: #339933;">/</span>password combination nor OAuth consumer key<span style="color: #339933;">/</span>secret combination supplied</pre></td></tr></table></div>

<p>Por ahora <a href="http://groups.google.com/group/twitter4j/t/4e06e53d846cda27">ando preguntándole al autor</a> como resolver este asunto. La gente de Java API de FaceBook tiene una solución a este problema, lo hacen creando algo llamado &#8216;<a href="http://code.google.com/p/facebook-java-api/wiki/DesktopMode">temporary secret</a>&#8216;</p>
<p>Actualización: El siguiente &#8220;hack&#8221; parece funcionar, pues el código de HttpClient revizar por NULL o cadenas de caracteres vacias:</p>

<div class="wp_codebox"><table><tr id="p20018"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p2001code8"><pre class="java" style="font-family:monospace;">		Twitter 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><span style="color: #0000ff;">&quot; &quot;</span>, <span style="color: #0000ff;">&quot; &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</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></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/07/18/enviando-tweets-desde-java-usando-twitter4j-%c2%bfcomo-proteger-consumerkey-and-consumersecret/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>StupidZombie y Java store: La historia un mes después</title>
		<link>http://kodegeek.com/blog/2009/07/15/stupidzombie-y-java-store-la-historia-un-mes-despues/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=stupidzombie-y-java-store-la-historia-un-mes-despues</link>
		<comments>http://kodegeek.com/blog/2009/07/15/stupidzombie-y-java-store-la-historia-un-mes-despues/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 11:50:56 +0000</pubDate>
		<dc:creator>josevnz</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[java store]]></category>
		<category><![CDATA[java warehouse]]></category>
		<category><![CDATA[kodegeek]]></category>
		<category><![CDATA[stupidzombie]]></category>

		<guid isPermaLink="false">http://kodegeek.com/blog/?p=1982</guid>
		<description><![CDATA[¿Que pasó un mes después? Hace ya más de un mes me decidí a poner a StupidZombie en la tienda de Java de Sun (Java Warehouse). La idea era probar esta nueva tecnología de distribución de Sun mientras esta maduraba (al tiempo que me decidía si quería pagar los $50 dolares anuales por tener a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/josevnz/3721877871/" title="StupidZombie @ Java Warehouse by josevnz, on Flickr"><img src="http://farm3.static.flickr.com/2490/3721877871_96674f0408_o.png" width="601" height="258" alt="StupidZombie @ Java Warehouse" />¿Que pasó un mes después?</a></p>
<p>Hace ya más de un mes me decidí a poner a StupidZombie <a href="http://stupidzombie.com/blog/2009/06/02/suprises-from-javaone-stupidzombie-is-now-available-at-the-java-store/">en la tienda de Java de Sun</a> (Java Warehouse). La idea era probar esta nueva tecnología de distribución de Sun mientras esta maduraba (al tiempo que me decidía si quería pagar los $50 dolares anuales por tener a StupidZombie allí). Sin embargo, después de ser aceptada esta se encuentra en modo de revisión desde hace un mes.</p>
<p>¡Un mes!. No estoy seguro que tan complicado es revisar la aplicación pero un mes para saber si la aplicación fué aceptada o cancelada me parece bastante. Por varias manera he intentado contactar a Sun para ver que ocurre (sobre todo si se trata de un problema de indole técnica) pero no he obtenido <a href="http://forums.sun.com/forum.jspa?forumID=1012">ninguna respuesta</a>.</p>
<p>Es dificil saber como está progresando el beta de Java Warehouse, pero los foros tienen poca actividad (<a href="http://forums.sun.com/forum.jspa?forumID=1012">solamente 48 mensajes</a> al momento de escribir esto). De verdad espero que las cosas tomen otro color, pero por los momentos las noticias no son alentadoras.</p>
<p>¡Vamos Sun (Oracle), todos están esperando que la tienda termine de despegar!</p>
<p>Actualización: Parece ser que Sun está trabajando duro en resolver ciertos problemas técnicos:</p>
<blockquote><p>
Hi Jose Vicente Nunez Zuleta,</p>
<p>Thank you for contacting us. We have an issue in the app wrapper; therefore, the approval process is delayed. We have done some testing with your app and is waiting for addressing the app wrapper issue. We will contact you once we have more update. Sorry about the delay.</p>
<p>Regards,<br />
Roger</p></blockquote>
<p>Amanecerá y veremos <img src='http://kodegeek.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/07/15/stupidzombie-y-java-store-la-historia-un-mes-despues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como enviar Tweets desde Java usando Twitter4J</title>
		<link>http://kodegeek.com/blog/2009/07/05/como-enviar-tweets-desde-java-usando-twitter4j/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-enviar-tweets-desde-java-usando-twitter4j</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><tr id="p194013"><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="p1940code13"><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><tr id="p194014"><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="p1940code14"><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><tr id="p194015"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code" id="p1940code15"><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><tr id="p194016"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code" id="p1940code16"><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>
]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/07/05/como-enviar-tweets-desde-java-usando-twitter4j/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Eclipse Galileo: Nueva versión, corriendola en OSX</title>
		<link>http://kodegeek.com/blog/2009/06/29/eclipse-galileo-nueva-version-corriendola-en-osx/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=eclipse-galileo-nueva-version-corriendola-en-osx</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 [...]]]></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 <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/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>
]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/06/29/eclipse-galileo-nueva-version-corriendola-en-osx/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Haciendo que Java se vea más nativo en OSX: El caso de StupidZombie</title>
		<link>http://kodegeek.com/blog/2009/06/22/haciendo-que-java-se-vea-mas-nativo-en-osx-el-caso-de-stupidzombie/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=haciendo-que-java-se-vea-mas-nativo-en-osx-el-caso-de-stupidzombie</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]]></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>
]]></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>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Localización en Java (II): El caso de StupidZombie</title>
		<link>http://kodegeek.com/blog/2009/06/21/localizacion-en-java-ii-el-caso-de-stupidzombie/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=localizacion-en-java-ii-el-caso-de-stupidzombie</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 [...]]]></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>
]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/06/21/localizacion-en-java-ii-el-caso-de-stupidzombie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Comienza la cuenta regresiva para StupidZombie 1.1</title>
		<link>http://kodegeek.com/blog/2009/06/13/comienza-la-cuenta-regresiva-para-stupidzombie-11/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=comienza-la-cuenta-regresiva-para-stupidzombie-11</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. [...]]]></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>
]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/06/13/comienza-la-cuenta-regresiva-para-stupidzombie-11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usando Visualvm en StupidZombie con Eclipse y OSX: Resultados mixtos</title>
		<link>http://kodegeek.com/blog/2009/06/11/usando-visualvm-en-stupidzombie-con-eclipse-y-osx-resultados-mixtos/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=usando-visualvm-en-stupidzombie-con-eclipse-y-osx-resultados-mixtos</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 [...]]]></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 <img src='http://kodegeek.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ):</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><tr id="p186819"><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="p1868code19"><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><tr id="p186820"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p1868code20"><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>
]]></content:encoded>
			<wfw:commentRss>http://kodegeek.com/blog/2009/06/11/usando-visualvm-en-stupidzombie-con-eclipse-y-osx-resultados-mixtos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

