<?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>La playina del norte</title>
	<atom:link href="http://www.carballude.es/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.carballude.es/blog</link>
	<description>Un sitio donde reflexionar y aprender</description>
	<lastBuildDate>Fri, 16 Jul 2010 16:23:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Java 7: Hacia dónde va y por qué no me gusta</title>
		<link>http://www.carballude.es/blog/?p=743&amp;utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=java-7-hacia-donde-va-y-por-que-no-me-gusta</link>
		<comments>http://www.carballude.es/blog/?p=743#comments</comments>
		<pubDate>Thu, 15 Jul 2010 22:20:04 +0000</pubDate>
		<dc:creator>Carballude</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[java7]]></category>

		<guid isPermaLink="false">http://www.carballude.es/blog/?p=743</guid>
		<description><![CDATA[Para aquellos que no hayan visto nada de Java 7, el “Project Coin” ha aprobado cinco (realmente siete) nuevas características. Voy a comentar algunas de ellas y, como habréis notado por el título del post, a explicar por qué no me gustan. Strings en switchs...]]></description>
			<content:encoded><![CDATA[<p>Para aquellos que no hayan visto nada de Java 7, el “<a href="http://blogs.sun.com/darcy/entry/project_coin_final_five">Project Coin</a>” ha aprobado cinco (realmente siete) nuevas características. Voy a comentar algunas de ellas y, como habréis notado por el título del post, a explicar por qué no me gustan.</p>
<h2>Strings en switchs</h2>
<p>Como todos sabéis, en Java no está permitido el uso de strings en los switchs. Básicamente<a href="http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/java/nutsandbolts/switch.html"> un switch sólo permite la evaluación de aquellos tipos que puedan tener un cast a int</a> (int, byte, short, char, enum, Character, Byte, Short e Integer). String no es ahormable a int y por tanto no se acepta. Ahora bien, en la práctica, es útil hacer switchs con strings, así que <a href="http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000001.html">con esta propuesta</a> el siguiente código será válido:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">        <span style="color: #003399;">String</span> valor <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;algo&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>valor<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #0000ff;">&quot;otra cosa&quot;</span><span style="color: #339933;">:</span>
                <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #0000ff;">&quot;algo&quot;</span><span style="color: #339933;">:</span>
                <span style="color: #666666; font-style: italic;">//este código será ejecutado</span>
                <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span></pre></div></div>

<p>No me cabe ninguna duda de que es mucho más legible que soluciones actuales, como la siguiente:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">        <span style="color: #003399;">String</span> valor <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;algo&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>valor.<span style="color: #006633;">hashCode</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>
            <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1850569338</span><span style="color: #339933;">:</span>
                <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #cc66cc;">2996819</span><span style="color: #339933;">:</span>
                <span style="color: #666666; font-style: italic;">//este código será ejecutado</span>
                <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Sin embargo, aunque veo su utilidad, estoy en contra de esta modificación. ¿Por qué? Porque el comportamiento de String se convierte en una casa de putas.</p>
<p>El funcionamiento teórico del switch es simple, una variable será comparada con N alternativas, y si alguna de ellas coincide, se ejecutará esa porción de código. Todos tenemos claro que un int de valor 5 es igual a otro int de valor 5, pero un String con valor &#8220;hola&#8221; no es igual a otro String de valor &#8220;hola&#8221;&#8230; simplemente la clase String tiene un comportamiento contra-intuitivo. Veamos un ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">    <span style="color: #000066; font-weight: bold;">boolean</span> siempreFalso<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;hola&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;hola&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<div class="cajaFoto" style="width:160px">
<a href="http://www.carballude.es/blog/wp-content/uploads/2010/07/thumb-java-duke-guitar.png"><img src="http://www.carballude.es/blog/wp-content/uploads/2010/07/thumb-java-duke-guitar-150x150.png" alt="" title="thumb-java-duke-guitar" class="aligncenter size-thumbnail wp-image-762" style="width:150px; height=150px;" /></a></p>
<p>Mucha guitarra, pero siempre los mismos acordes&#8230;</p>
</div>
<p>En contra de lo que uno podría pensar, ese método siempre retornará false. El operador de igualdad no compara el valor de las cadenas, sino sus referencias en memoria, y dado que ambos &#8220;hola&#8221; no son el mismo objeto, la comparación se probará falsa. Esto no ocurriría en el caso de un switch, ya que se compararía el valor y no la referencia. </p>
<p>[<strong>Edición</strong>: Javier Collado ha caido en la cuenta de que el ejemplo era un poco artificioso, leed los dos primeros comentarios para tener una explicación de por qué]</p>
<p>Desarrolladores de Java, centren la pelota. O hacemos que String no mire el valor sino la referencia, por ortogonalidad aunque sea contra-intuitivo, o hacemos que mire el valor y que le den a la ortogonalidad. Pero hacer una clase String que sea ortogonal para luego decir que eso es muy molesto y modificar otras partes del lenguaje para que String se comporte de forma no ortogonal, me parece que es hacer el idiota. Con todo el cariño y respeto del mundo.</p>
<h2>Mejora de la inferencia de tipos en la creación de instancias genéricas</h2>
<p>La verdad es que el título en inglés suena bastante mejor, &#8220;<a href="http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000009.html">Improved Type Inference for Generic Instance Creation</a>&#8220;. Como dirían en mi pueblo, mucha mecha para tan poca dinamita. Tras este nombre tan rimbombante se oculta una característica que busca reducir la verbosidad de los tipos genéricos. Atención a la jugada, primero pongo la linea actual, y luego como quedaría en Java 7:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//Actual</span>
ArrayList<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> miListaDeStrings <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Java 7</span>
ArrayList<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> miListaDeStrings <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Acojonante, siete versiones para esto ¬¬. Lo más gracioso del tema es que en la propia propuesta se dice que otras alternativas serían mejores, pero se elige esta porque, o bien no se necesitan otras, o bien tendrían demasiadas desventajas.</p>
<p>¿Alguien se pregunta por qué está ahí el &lt;&gt;? Pues porque si por ejemplo tienes un objeto Map sin parametrizar, se asume que son datos crudos, no que estás infiriendo el tipo. Así que para mantener la compatibilidad hacia atrás, se ponen los &lt;&gt;.</p>
<p>Si no he entendido nada mal, la compatibilidad a nivel de bytecode no se ve comprometida, simplemente las aplicaciones obsoletas que no tengan en cuenta estos cambios, deberían compilarse contra el JDK para el que fueron diseñadas. Amén de que este problema me parece una cosa menor, me hace gracia que piensen que esta pijada de inferencia es significante. Daos cuenta que esto no funciona si queremos inferir un lvalue&#8230; no se ha implementado ningún tipo de tipo de inferencia como &#8220;auto&#8221; en C++ o &#8220;var&#8221; en C#, no. Esto sólo sirve para las creaciones. No es que sea un juguete&#8230; es que es un juguete.</p>
<p>Aparentemente a los desarrolladores de Java no les ha parecido interesante poder hacer cosas como esta:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//Oh, sin lvalues es imposible hacer esto</span>
auto mejorCliente <span style="color: #339933;">=</span> metodoQueDevuelveElMejorCliente<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//así inferiríamos el tipo de la colección. Java 7 FAIL</span>
<span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>auto cliente <span style="color: #339933;">:</span> metodoQueDevuelveUnaColeccionDeClientes<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Identificadores exóticos</h2>
<p>Los identificadores exóticos están aquí por la proposición JSR292, que trata principalmente de hacer la JVM accesible a lenguajes dinámicos. Un identificador exótico nos permitiría llamar a una variable &#8220;mira que nombre tan mono&#8221;. Lo siguiente sería correcto:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">int</span> #<span style="color: #0000ff;">&quot;mira que nombre&quot;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">22</span><span style="color: #339933;">;</span>
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>#<span style="color: #0000ff;">&quot;mira que nombre&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// muestra 22</span></pre></div></div>

<p>Vamos a ver, por mi perfecto, pero ¿no había más caracteres en el universo? ¿les pagan por popularizar #? Ojo al dato:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">int</span> x <span style="color: #339933;">=</span> <span style="color: #cc66cc;">22</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">int</span> #<span style="color: #0000ff;">&quot;x+100&quot;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>#<span style="color: #0000ff;">&quot;x+100&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Muestra 100;</span>
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>#<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>x<span style="color: #339933;">+</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Muestra 122;</span></pre></div></div>

<p>Es un ejemplo y puede ser rebuscado, sí. Pero ahora decidme que nunca habéis puesto donde no era unas comillas y unos paréntesis&#8230; sobre todo con la manía que tienen los IDEs de decidir por tí donde poner dobles comillas o cerrar los paréntesis.</p>
<p>¿Por qué es válida la segunda línea? <a href="http://mail.openjdk.java.net/pipermail/lambda-dev/attachments/20100122/3764c21a/attachment.txt">Por la inclusión de los cierres lambda</a>. El compilador no detectará ningún error porque no lo entenderá como un identificador exótico ni como una expresión inválida, sino como un cierre lambda.</p>
<p>Personalmente hubiera preferido que el indicador de una expresión lambda fuera &#8220;-&gt;&#8221; o &#8220;&lt;-&#8221;.</p>
<h2>Conclusión</h2>
<p>Podría seguir con otras características, pero voy a parar aquí porque esto está quedando muy largo. Sin duda muchas de las características implementadas son útiles y resuelven problemas reales. Mi crítica es más bien que ese trabajo es bueno, pero corto. Con la impresión que me quedo después de haber leído las propuestas es que el excesivo celo por la compatibilidad, la peculiar forma que tienen de entender la ortogonalidad y la falta de innovación parece llevarles a un &#8220;quiero y no puedo&#8221;.</p>
<p>¿Qué opináis vosotros?</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-shr">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.carballude.es/blog/?p=743&amp;t=Java+7%3A+Hacia+d%C3%B3nde+va+y+por+qu%C3%A9+no+me+gusta" rel="nofollow" class="external" title="Compartir con Facebook">Compartir con Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Java+7%3A+Hacia+d%C3%B3nde+va+y+por+qu%C3%A9+no+me+gusta+-+http://b2l.me/aaxczk&amp;source=shareaholic" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo en Twitter!">&iexcl;Comp&aacute;rtelo en Twitter!</a>
		</li>
		<li class="shr-meneame">
			<a href="http://meneame.net/submit.php?url=http://www.carballude.es/blog/?p=743" rel="nofollow" class="external" title="Enviar a Meneame">Enviar a Meneame</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.carballude.es/blog/?p=743&amp;title=Java+7%3A+Hacia+d%C3%B3nde+va+y+por+qu%C3%A9+no+me+gusta&amp;summary=Para%20aquellos%20que%20no%20hayan%20visto%20nada%20de%20Java%207%2C%20el%20%E2%80%9CProject%20Coin%E2%80%9D%20ha%20aprobado%20cinco%20%28realmente%20siete%29%20nuevas%20caracter%C3%ADsticas.%20Voy%20a%20comentar%20algunas%20de%20ellas%20y%2C%20como%20habr%C3%A9is%20notado%20por%20el%20t%C3%ADtulo%20del%20post%2C%20a%20explicar%20por%20qu%C3%A9%20no%20me%20gustan.%0D%0AStrings%20en%20switchs%0D%0AComo%20todos%20sab%C3%A9is%2C%20en%20Java%20no%20e&amp;source=La playina del norte" rel="nofollow" class="external" title="Compartir con LinkedIn">Compartir con LinkedIn</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.google.com/reader/link?url=http://www.carballude.es/blog/?p=743&amp;title=Java+7%3A+Hacia+d%C3%B3nde+va+y+por+qu%C3%A9+no+me+gusta&amp;srcUrl=http://www.carballude.es/blog/?p=743&amp;srcTitle=Java+7%3A+Hacia+d%C3%B3nde+va+y+por+qu%C3%A9+no+me+gusta&amp;snippet=Para%20aquellos%20que%20no%20hayan%20visto%20nada%20de%20Java%207%2C%20el%20%E2%80%9CProject%20Coin%E2%80%9D%20ha%20aprobado%20cinco%20%28realmente%20siete%29%20nuevas%20caracter%C3%ADsticas.%20Voy%20a%20comentar%20algunas%20de%20ellas%20y%2C%20como%20habr%C3%A9is%20notado%20por%20el%20t%C3%ADtulo%20del%20post%2C%20a%20explicar%20por%20qu%C3%A9%20no%20me%20gustan.%0D%0AStrings%20en%20switchs%0D%0AComo%20todos%20sab%C3%A9is%2C%20en%20Java%20no%20e" rel="nofollow" class="external" title="A&ntilde;dirlo a Google Reader">A&ntilde;dirlo a Google Reader</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.carballude.es/blog/?p=743&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.carballude.es/blog/?p=743&amp;title=Java+7%3A+Hacia+d%C3%B3nde+va+y+por+qu%C3%A9+no+me+gusta" rel="nofollow" class="external" title="&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon">&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.carballude.es/blog/?p=743&amp;title=Java+7%3A+Hacia+d%C3%B3nde+va+y+por+qu%C3%A9+no+me+gusta" rel="nofollow" class="external" title="Compartir con del.icio.us">Compartir con del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.carballude.es/blog/?p=743&amp;title=Java+7%3A+Hacia+d%C3%B3nde+va+y+por+qu%C3%A9+no+me+gusta" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo con Digg!">&iexcl;Comp&aacute;rtelo con Digg!</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.carballude.es/blog/?p=743" rel="nofollow" class="external" title="Compartir con Technorati">Compartir con Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.carballude.es/blog/?feed=rss2&amp;p=743</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Firefox 4: ¡Pestañas arriba!</title>
		<link>http://www.carballude.es/blog/?p=735&amp;utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=firefox-4-%25c2%25a1pestanas-arriba</link>
		<comments>http://www.carballude.es/blog/?p=735#comments</comments>
		<pubDate>Wed, 07 Jul 2010 17:13:03 +0000</pubDate>
		<dc:creator>Carballude</dc:creator>
				<category><![CDATA[HCI]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.carballude.es/blog/?p=735</guid>
		<description><![CDATA[Iba a escribir acerca de lo acertada que ha sido la decisión de poner las pestañas de Firefox en la parte superior de la ventana. Tenía casi terminado el post cuando me he dado cuenta que Alex Faaborg había hecho eso mismo… sólo que 100...]]></description>
			<content:encoded><![CDATA[<p>Iba a escribir acerca de lo acertada que ha sido la decisión de poner las pestañas de Firefox en la parte superior de la ventana. Tenía casi terminado el post cuando me he dado cuenta que <a href="http://blog.mozilla.com/faaborg/">Alex Faaborg</a> había hecho eso mismo… sólo que 100 veces mejor y con información de primera mano.</p>
<p>El post en cuestión es: <a href="http://blog.mozilla.com/faaborg/2010/06/24/why-tabs-are-on-top-in-firefox-4/">http://blog.mozilla.com/faaborg/2010/06/24/why-tabs-are-on-top-in-firefox-4/</a></p>
<p><a href="http://www.carballude.es/blog/wp-content/uploads/2010/07/firefox-tabs.jpg"><img src="http://www.carballude.es/blog/wp-content/uploads/2010/07/firefox-tabs.jpg" alt="" title="firefox tabs" width="827" height="363" class="aligncenter size-full wp-image-737" /></a></p>
<p>¿A vosotros qué os parece?</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-shr">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.carballude.es/blog/?p=735&amp;t=Firefox+4%3A+%C2%A1Pesta%C3%B1as+arriba%21" rel="nofollow" class="external" title="Compartir con Facebook">Compartir con Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Firefox+4%3A+%C2%A1Pesta%C3%B1as+arriba%21+-+http://b2l.me/9he4f&amp;source=shareaholic" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo en Twitter!">&iexcl;Comp&aacute;rtelo en Twitter!</a>
		</li>
		<li class="shr-meneame">
			<a href="http://meneame.net/submit.php?url=http://www.carballude.es/blog/?p=735" rel="nofollow" class="external" title="Enviar a Meneame">Enviar a Meneame</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.carballude.es/blog/?p=735&amp;title=Firefox+4%3A+%C2%A1Pesta%C3%B1as+arriba%21&amp;summary=Iba%20a%20escribir%20acerca%20de%20lo%20acertada%20que%20ha%20sido%20la%20decisi%C3%B3n%20de%20poner%20las%20pesta%C3%B1as%20de%20Firefox%20en%20la%20parte%20superior%20de%20la%20ventana.%20Ten%C3%ADa%20casi%20terminado%20el%20post%20cuando%20me%20he%20dado%20cuenta%20que%20Alex%20Faaborg%20hab%C3%ADa%20hecho%20eso%20mismo%E2%80%A6%20s%C3%B3lo%20que%20100%20veces%20mejor%20y%20con%20informaci%C3%B3n%20de%20primera%20mano.%0D%0AEl%20post&amp;source=La playina del norte" rel="nofollow" class="external" title="Compartir con LinkedIn">Compartir con LinkedIn</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.google.com/reader/link?url=http://www.carballude.es/blog/?p=735&amp;title=Firefox+4%3A+%C2%A1Pesta%C3%B1as+arriba%21&amp;srcUrl=http://www.carballude.es/blog/?p=735&amp;srcTitle=Firefox+4%3A+%C2%A1Pesta%C3%B1as+arriba%21&amp;snippet=Iba%20a%20escribir%20acerca%20de%20lo%20acertada%20que%20ha%20sido%20la%20decisi%C3%B3n%20de%20poner%20las%20pesta%C3%B1as%20de%20Firefox%20en%20la%20parte%20superior%20de%20la%20ventana.%20Ten%C3%ADa%20casi%20terminado%20el%20post%20cuando%20me%20he%20dado%20cuenta%20que%20Alex%20Faaborg%20hab%C3%ADa%20hecho%20eso%20mismo%E2%80%A6%20s%C3%B3lo%20que%20100%20veces%20mejor%20y%20con%20informaci%C3%B3n%20de%20primera%20mano.%0D%0AEl%20post" rel="nofollow" class="external" title="A&ntilde;dirlo a Google Reader">A&ntilde;dirlo a Google Reader</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.carballude.es/blog/?p=735&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.carballude.es/blog/?p=735&amp;title=Firefox+4%3A+%C2%A1Pesta%C3%B1as+arriba%21" rel="nofollow" class="external" title="&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon">&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.carballude.es/blog/?p=735&amp;title=Firefox+4%3A+%C2%A1Pesta%C3%B1as+arriba%21" rel="nofollow" class="external" title="Compartir con del.icio.us">Compartir con del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.carballude.es/blog/?p=735&amp;title=Firefox+4%3A+%C2%A1Pesta%C3%B1as+arriba%21" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo con Digg!">&iexcl;Comp&aacute;rtelo con Digg!</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.carballude.es/blog/?p=735" rel="nofollow" class="external" title="Compartir con Technorati">Compartir con Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.carballude.es/blog/?feed=rss2&amp;p=735</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hilos en Java: Que funcione no quiere decir que esté bien</title>
		<link>http://www.carballude.es/blog/?p=720&amp;utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=hilos-en-java-que-funcione-no-quiere-decir-que-este-bien</link>
		<comments>http://www.carballude.es/blog/?p=720#comments</comments>
		<pubDate>Mon, 05 Jul 2010 08:00:41 +0000</pubDate>
		<dc:creator>Carballude</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[hilos]]></category>
		<category><![CDATA[synchronized]]></category>
		<category><![CDATA[thread]]></category>
		<category><![CDATA[threads]]></category>
		<category><![CDATA[volatile]]></category>

		<guid isPermaLink="false">http://www.carballude.es/blog/?p=720</guid>
		<description><![CDATA[Hace tiempo que leo código con los mismos fallos que, creo, son errores de concepto. Mucha gente supone cosas sobre el funcionamiento de los hilos en Java que, directamente, son falsas. En esta entrada aportaré mi granito de arena para aclarar algunos de esos conceptos....]]></description>
			<content:encoded><![CDATA[<p>Hace tiempo que leo código con los mismos fallos que, creo, son errores de concepto. Mucha gente supone cosas sobre el funcionamiento de los hilos en Java que, directamente, son falsas. En esta entrada aportaré mi granito de arena para aclarar algunos de esos conceptos.</p>
<h3>La sincronía es importante</h3>
<p>Pongamos por ejemplo esta clase:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Prueba <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> a <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> b <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> marcar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		a <span style="color: #339933;">=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
		b <span style="color: #339933;">=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> siempreVerdadero<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> a <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>  a <span style="color: #339933;">==</span> b <span style="color: #339933;">&amp;&amp;</span> b <span style="color: #339933;">==</span> <span style="color: #cc66cc;">5</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>Aunque la clase tiene una dudosa aplicación práctica (vale, no tiene nada de dudosa, es inútil), parece claro que el método “siempreVerdadero” retornará invariablemente true. ¿Seguro? No. Esta es una de las suposiciones que hacen muchos programadores y que suele provocar esos misteriosos errores de “algunas veces falla… pero no hay forma de saber cuándo”.</p>
<div class="cajaFoto" style="width:196px">
<a href="http://www.carballude.es/blog/wp-content/uploads/2010/07/java-evil-edition-orfjackal_net-lores.png"><img style="width:186px" src="http://www.carballude.es/blog/wp-content/uploads/2010/07/java-evil-edition-orfjackal_net-lores-186x300.png" alt="" title="java-evil-edition-orfjackal_net-lores" width="186" height="300" class="alignright size-medium wp-image-728" /></a></p>
<p>Evil Java Edition matará gatitos ahogándolos en café si no haces tus programas &#8220;thread safe&#8221;</p>
</div>
<p>Supongamos que un hilo llama a marcar al mismo tiempo que otro llama a siempreVerdadero. Estamos ante una situación “data race”, vamos, que el resultado de la operación depende del momento en el que la máquina virtual ejecute las instrucciones. ¿Por qué? Voy a tratar de explicarlo:</p>
<ol>
<li>Hilo 1 llama a marcar e Hilo 2 llama a siempreVerdadero</li>
<li>a = 5;</li>
<li>b = 5;</li>
<li>return a == 0 || (  a == b &#038;&#038; b == 5);</li>
</ol>
<p>En este caso el orden de ejecución de las instrucciones era el que el programador estaba esperando. Todo perfecto&#8230;. pero podría darse el siguiente escenario:</p>
<ol>
<li>Hilo 1 llama a marcar e Hilo 2 llama a siempreVerdadero</li>
<li>a = 5;</li>
<li>return a == 0 || (  a == b &#038;&#038; b == 5); // a vale 5 y b vale0, false</li>
<li>b=5;</li>
</ol>
<p>El problema es que suponemos atomicidad donde no la hay. Es evidente que el programador no quiere que ningún método que acceda a “a” o “b” pueda tener lugar mientras se ejecuta el método “marcar”. ¿Cómo deberíamos haberlo hecho? Lo más sencillo sería hacer uso de “synchronized” que nos garantiza precisamente eso:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">synchronized</span> <span style="color: #000066; font-weight: bold;">void</span> marcar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		a <span style="color: #339933;">=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
		b <span style="color: #339933;">=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h3>Publicar el objeto antes de finalizar la construcción</h3>
<p>Los constructores son métodos especiales. Sirven, valga la redundancia, para construir un objeto. Es decir, una vez el método constructor haya finalizado, el objeto está listo para publicarse. Si se publicase antes de su finalización, los resultados serían impredecible. Y lo que es peor, cada vez que publicas un objeto sin estar totalmente construido, ¡Java mata un gatito ahogándolo en café!</p>
<p>¿Qué mi madre es eso de “publicar un objeto”? Pues básicamente, hacer que otros objetos lo conozcan.</p>
<p>Publicar un objeto antes de tiempo se conoce como “fuga de publicación”. El caso más típico es pasar una referencia a “this” (es decir, el objeto que estamos construyendo) a otro objeto en el código del constructor.</p>
<p>Supongamos el siguiente código:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> MiFuga <span style="color: #009900;">&#123;</span>
	ArrayList<span style="color: #339933;">&lt;</span>Cliente<span style="color: #339933;">&gt;</span> clientes<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> MiFuga<span style="color: #009900;">&#40;</span>OtraClase otraClase<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		clientes <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>Cliente<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		otraClase.<span style="color: #006633;">subscribeToPeticionCliente</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</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;">public</span> <span style="color: #000066; font-weight: bold;">void</span> añadirCliente<span style="color: #009900;">&#40;</span>Cliente cliente<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		clientes.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>cliente<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>La clase crea una lista de clientes y se subscribe al objeto “otraClase” que le informará cuando un cliente deba ser añadido. Obviamente para que el método “añadirCliente” pueda ser ejecutado correctamente, “clientes” ha de ser creado.</p>
<p>El código, aunque pueda parecer correcto, tiene un “data race”, es decir, puede funcionar, o no, dependiendo del orden en que se ejecuten sus sentencias.  ¿Dónde está ese data race? Pues en que “otraClase” recibe una referencia a una instancia de MiFuga que podría no estar totalmente construida.</p>
<p>En Java, un constructor debe construir el objeto y NO publicarse a sí mismo. Muchos programadores creen que, dado que la construcción del objeto parece finalizada (clientes ha sido creado) antes de realizar la publicación (es decir, de hacer el subscribe), no hay problema. Lo que nadie les debe haber dicho es que Java no garantiza que el orden en el que escribas las sentencias se cumpla.</p>
<p>El compilador tiene total libertad para reordenar las instrucciones siempre que no se rompa ninguna relación de dependencia. En el caso anterior, la creación de clientes no depende de la llamada a subscribe ni viceversa, por lo que el compilador podría poner la llamada a subscribe delante de la creación de clientes. De ocurrir esto, y “otraClase” lanzar el evento para procesar un cliente antes de la ejecución  de la instrucción que crea clientes, obtendríamos un NullPointerException, ya que clientes tendría valor nulo.</p>
<p>En otras palabras, el código anterior puede funcionar, o no, dependiendo del orden que decida el compilador y de que “otraClase” lance el evento en el momento menos oportuno. Un “data race” en toda regla.</p>
<div class="cajaFoto" style="width:160px;">
<a href="http://www.carballude.es/blog/wp-content/uploads/2010/07/cat2.jpg"><img style="width:150px; height:132px;" src="http://www.carballude.es/blog/wp-content/uploads/2010/07/cat2-300x264.jpg" alt="" title="cat2" width="300" height="264" class="alignright size-medium wp-image-732" /></a></p>
<p>¡Apiádate de él!</p>
</div>
<p>Llegados a este punto tienes dos soluciones: evitar la publicación prematura de un objeto o enseñar a nadar en café a los gatitos. Personalmente creo que la segunda sería más divertida… pero es poco práctica.</p>
<p>Si queremos evitar la publicación prematura, la solución no es hacer un constructor “synchronized”. Intuitivamente parece correcto, ya que aseguraría la ejecución de las instrucciones en el orden escrito… pero el compilador se negará a hacer un constructor “synchronized”. Aunque pudiera parecer lógico, realmente carece de sentido. Los constructores sólo son accesibles por el hilo que los crea y por tanto, no requieren de sincronización… simplemente NO debes publicar un objeto en el constructor.</p>
<h3>Las cachés existen, tenlas en cuenta</h3>
<p>Las cachés se sienten menospreciadas porque la gente no se acuerda de ellas :( Se compasivo y escribe código que las contemple. No sólo harás a las cachés felices y evitarás su suicidio, también lograrás que tu programa falle cuando Jupiter se alinea con Saturno y una paloma te mira por la ventana. (Eh, no me miréis así, que todos hemos llegado a la conclusión de que nuestro programa falla sólo cuando hay un posible comprador/ jefe/profesor delante)</p>
<p>Antes de nada ¿Qué es una caché  y por qué tiene que importarme?</p>
<p>Cuando un hilo se crea, puede tomar la decisión de cachear ciertas variables. Es decir, creará copias de los valores de las variables de la memoria principal, a su “espacio de trabajo”. Esto se hace para mejorar la eficiencia. ¿Por qué debe importarte? Sencillo, si un hilo cachea una variable que va a usar luego, y esa variable cambia de valor… su copia cacheada ¿reflejará el cambio? La respuesta es “ni puñetera idea”… a menos que tengas la caché en cuenta.</p>
<p>Para el ejemplo, tomaré un <a href="http://codecrab.blogspot.com/2010/05/ejecutando-hilos-comparativa-java-y-c.html">código de CodeCrab</a> que no tiene en cuenta la caché:</p>

<div class="wp_syntax"><table><tr><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"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ThreadClass <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">Thread</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">boolean</span> thrbool <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
&nbsp;
	<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>
		<span style="color: #000000; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>thrbool<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hello from thread &quot;</span><span style="color: #339933;">+</span><span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">getId</span><span style="color: #009900;">&#40;</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;">try</span><span style="color: #009900;">&#123;</span>
			 <span style="color: #003399;">Thread</span>.<span style="color: #006633;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">300</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;">catch</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> stopThread<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		thrbool <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>El planteamiento es intuitivo. El bucle de run se ejecutará hasta que alguien realice una llamada a “stopThread”, que cambiará el valor de “thrbool” a false y provocará la condición de salida del bucle.</p>
<p>¿Qué os he dicho de las cachés? Son muy rencorosas… si no os acordáis de ellas, se pondrán tristes y se enfadarán con vosotros haciendo que vuestros códigos no funcionen.</p>
<p>El método “run” puede estar viendo versiones cacheadas de las variables de la clase. Vamos, que puede haber cacheado “thrbool” con su valor original, true. Si alguien llama a “stopThread” , no tenemos ninguna garantía de que “run” vea el cambio… porque si ha creado caché, no estamos forzando ningún tipo de actualización.</p>
<p>¿Qué solución tenemos? Una de ellas consiste en marcar “thrbool” como “volatile”. Una variable volatile garantiza que todos los hilos la vean con el mismo valor. Dicho de otra forma, una variable volatile NO será cacheada.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">volatile</span> <span style="color: #000066; font-weight: bold;">boolean</span> thrbool <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Eso garantizaría que “run” viera siempre los cambios hechos por “stopThread”. ¿Por qué hay tantos códigos con este fallo? Porque no marcarla como volatile no implica que no funcione… simplemente que podría no hacerlo. Dependerá de la plataforma, la máquina virtual y la carga de trabajo de la máquina sobre la que se ejecuta… vamos, todo un encaje de bolillos. (¿Nunca os ha pasado eso de “pues en mi máquina funcionaba”?).</p>
<h3>¿Y a mí que me importa si no uso hilos?</h3>
<p>Es que SÍ usas hilos. Para empezar, probablemente uses Swing… así que ya hay hilos de por medio. Aún sin usar Swing, lo más probable es que el sistema sea multi-núcleo o tenga hyperthreading&#8230; con lo que los efectos serán los mismos. No busques excusas y haz tu código “thread safe” ;)</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-shr">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.carballude.es/blog/?p=720&amp;t=Hilos+en+Java%3A+Que+funcione+no+quiere+decir+que+est%C3%A9+bien" rel="nofollow" class="external" title="Compartir con Facebook">Compartir con Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Hilos+en+Java%3A+Que+funcione+no+quiere+decir+que+est%C3%A9+bien+-+http://b2l.me/8xxuv&amp;source=shareaholic" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo en Twitter!">&iexcl;Comp&aacute;rtelo en Twitter!</a>
		</li>
		<li class="shr-meneame">
			<a href="http://meneame.net/submit.php?url=http://www.carballude.es/blog/?p=720" rel="nofollow" class="external" title="Enviar a Meneame">Enviar a Meneame</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.carballude.es/blog/?p=720&amp;title=Hilos+en+Java%3A+Que+funcione+no+quiere+decir+que+est%C3%A9+bien&amp;summary=Hace%20tiempo%20que%20leo%20c%C3%B3digo%20con%20los%20mismos%20fallos%20que%2C%20creo%2C%20son%20errores%20de%20concepto.%20Mucha%20gente%20supone%20cosas%20sobre%20el%20funcionamiento%20de%20los%20hilos%20en%20Java%20que%2C%20directamente%2C%20son%20falsas.%20En%20esta%20entrada%20aportar%C3%A9%20mi%20granito%20de%20arena%20para%20aclarar%20algunos%20de%20esos%20conceptos.%0D%0ALa%20sincron%C3%ADa%20es%20important&amp;source=La playina del norte" rel="nofollow" class="external" title="Compartir con LinkedIn">Compartir con LinkedIn</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.google.com/reader/link?url=http://www.carballude.es/blog/?p=720&amp;title=Hilos+en+Java%3A+Que+funcione+no+quiere+decir+que+est%C3%A9+bien&amp;srcUrl=http://www.carballude.es/blog/?p=720&amp;srcTitle=Hilos+en+Java%3A+Que+funcione+no+quiere+decir+que+est%C3%A9+bien&amp;snippet=Hace%20tiempo%20que%20leo%20c%C3%B3digo%20con%20los%20mismos%20fallos%20que%2C%20creo%2C%20son%20errores%20de%20concepto.%20Mucha%20gente%20supone%20cosas%20sobre%20el%20funcionamiento%20de%20los%20hilos%20en%20Java%20que%2C%20directamente%2C%20son%20falsas.%20En%20esta%20entrada%20aportar%C3%A9%20mi%20granito%20de%20arena%20para%20aclarar%20algunos%20de%20esos%20conceptos.%0D%0ALa%20sincron%C3%ADa%20es%20important" rel="nofollow" class="external" title="A&ntilde;dirlo a Google Reader">A&ntilde;dirlo a Google Reader</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.carballude.es/blog/?p=720&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.carballude.es/blog/?p=720&amp;title=Hilos+en+Java%3A+Que+funcione+no+quiere+decir+que+est%C3%A9+bien" rel="nofollow" class="external" title="&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon">&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.carballude.es/blog/?p=720&amp;title=Hilos+en+Java%3A+Que+funcione+no+quiere+decir+que+est%C3%A9+bien" rel="nofollow" class="external" title="Compartir con del.icio.us">Compartir con del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.carballude.es/blog/?p=720&amp;title=Hilos+en+Java%3A+Que+funcione+no+quiere+decir+que+est%C3%A9+bien" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo con Digg!">&iexcl;Comp&aacute;rtelo con Digg!</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.carballude.es/blog/?p=720" rel="nofollow" class="external" title="Compartir con Technorati">Compartir con Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.carballude.es/blog/?feed=rss2&amp;p=720</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>El mundo contra Flash: Google Chrome bloquear&#225; plug-ins desactualizados</title>
		<link>http://www.carballude.es/blog/?p=700&amp;utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=el-mundo-contra-flash-google-chrome-bloquear-plug-ins-desactualizados</link>
		<comments>http://www.carballude.es/blog/?p=700#comments</comments>
		<pubDate>Thu, 01 Jul 2010 07:00:00 +0000</pubDate>
		<dc:creator>Carballude</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[navegador]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://www.carballude.es/blog/?p=700</guid>
		<description><![CDATA[Hace unos meses traduje el texto “Pensamientos sobre Flash” de Steve Jobs acerca de los motivos que le llevaron a no incluir Flash en sus dispositivos. Al margen de la tremenda hipocresía de la que Jobs hace gala en su texto, lo cierto es que...]]></description>
			<content:encoded><![CDATA[<p>Hace unos meses <a href="http://www.carballude.es/blog/?p=548">traduje el texto “Pensamientos sobre Flash”</a> de Steve Jobs acerca de los motivos que le llevaron a no incluir Flash en sus dispositivos. Al margen de la tremenda hipocresía de la que Jobs hace gala en su texto, lo cierto es que a Flash no le faltan detractores.</p>
<div class="cajaFoto">
<a href="http://www.carballude.es/blog/wp-content/uploads/2010/07/chrome-crash.png"><img title="chrome-crash" src="http://www.carballude.es/blog/wp-content/uploads/2010/07/chrome-crash-300x215.png" alt="" width="300" height="215" /></a></p>
<p>¿Evitarán estas medidas que veamos esta imagen con tanta frecuencia?</p>
</div>
<p>Como <a href="http://www.carballude.es/blog/?p=548&amp;cpage=1#comment-6059">comentaba Guti</a>, Flash está sobre-utilizado y con CSS3 y HTML5 quedan pocos casos que justifiquen su uso. Sin embargo, esta vez quiero hablar de la (merecida) humillación pública que está sufriendo Adobe.</p>
<p>Quienes hayan actualizado recientemente su Firefox y tuvieran una versión desactualizada de Flash habrán recibido un mensaje informándoles del peligro que corren y pidiéndoles encarecidamente que actualicen. Supongo que la publicidad para Adobe no es excesivamente buena… pero no tienen de que preocuparse, va a ser aun peor.</p>
<p>Google <a href="http://blog.chromium.org/2010/06/improving-plug-in-security.html">ha tomado la decisión</a> de <strong>bloquear</strong> <strong>ciertos plug-ins desactualizados</strong> para evitar brechas de seguridad. Supongo que es cuestionable, pero creo que todos los productos deberían tomar la misma determinación.</p>
<p>Este movimiento me sugiere algunas preguntas: ¿Cuánto tardará Flash en ver reducida drásticamente su cuota de mercado? ¿Es lícito que un programa bloquee a otros? ¿Deberían todos los programas negarse a funcionar si no disponen de los últimos parches de seguridad?</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-shr">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.carballude.es/blog/?p=700&amp;t=El+mundo+contra+Flash%3A+Google+Chrome+bloquear%26aacute%3B+plug-ins+desactualizados" rel="nofollow" class="external" title="Compartir con Facebook">Compartir con Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=El+mundo+contra+Flash%3A+Google+Chrome+bloquear%26aacute%3B+plug-ins+desactualizados+-+http://b2l.me/7y9eb&amp;source=shareaholic" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo en Twitter!">&iexcl;Comp&aacute;rtelo en Twitter!</a>
		</li>
		<li class="shr-meneame">
			<a href="http://meneame.net/submit.php?url=http://www.carballude.es/blog/?p=700" rel="nofollow" class="external" title="Enviar a Meneame">Enviar a Meneame</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.carballude.es/blog/?p=700&amp;title=El+mundo+contra+Flash%3A+Google+Chrome+bloquear%26aacute%3B+plug-ins+desactualizados&amp;summary=Hace%20unos%20meses%20traduje%20el%20texto%20%E2%80%9CPensamientos%20sobre%20Flash%E2%80%9D%20de%20Steve%20Jobs%20acerca%20de%20los%20motivos%20que%20le%20llevaron%20a%20no%20incluir%20Flash%20en%20sus%20dispositivos.%20Al%20margen%20de%20la%20tremenda%20hipocres%C3%ADa%20de%20la%20que%20Jobs%20hace%20gala%20en%20su%20texto%2C%20lo%20cierto%20es%20que%20a%20Flash%20no%20le%20faltan%20detractores.%0D%0A%0D%0A%0D%0A%0D%0A%C2%BFEvitar%C3%A1n&amp;source=La playina del norte" rel="nofollow" class="external" title="Compartir con LinkedIn">Compartir con LinkedIn</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.google.com/reader/link?url=http://www.carballude.es/blog/?p=700&amp;title=El+mundo+contra+Flash%3A+Google+Chrome+bloquear%26aacute%3B+plug-ins+desactualizados&amp;srcUrl=http://www.carballude.es/blog/?p=700&amp;srcTitle=El+mundo+contra+Flash%3A+Google+Chrome+bloquear%26aacute%3B+plug-ins+desactualizados&amp;snippet=Hace%20unos%20meses%20traduje%20el%20texto%20%E2%80%9CPensamientos%20sobre%20Flash%E2%80%9D%20de%20Steve%20Jobs%20acerca%20de%20los%20motivos%20que%20le%20llevaron%20a%20no%20incluir%20Flash%20en%20sus%20dispositivos.%20Al%20margen%20de%20la%20tremenda%20hipocres%C3%ADa%20de%20la%20que%20Jobs%20hace%20gala%20en%20su%20texto%2C%20lo%20cierto%20es%20que%20a%20Flash%20no%20le%20faltan%20detractores.%0D%0A%0D%0A%0D%0A%0D%0A%C2%BFEvitar%C3%A1n" rel="nofollow" class="external" title="A&ntilde;dirlo a Google Reader">A&ntilde;dirlo a Google Reader</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.carballude.es/blog/?p=700&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.carballude.es/blog/?p=700&amp;title=El+mundo+contra+Flash%3A+Google+Chrome+bloquear%26aacute%3B+plug-ins+desactualizados" rel="nofollow" class="external" title="&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon">&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.carballude.es/blog/?p=700&amp;title=El+mundo+contra+Flash%3A+Google+Chrome+bloquear%26aacute%3B+plug-ins+desactualizados" rel="nofollow" class="external" title="Compartir con del.icio.us">Compartir con del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.carballude.es/blog/?p=700&amp;title=El+mundo+contra+Flash%3A+Google+Chrome+bloquear%26aacute%3B+plug-ins+desactualizados" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo con Digg!">&iexcl;Comp&aacute;rtelo con Digg!</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.carballude.es/blog/?p=700" rel="nofollow" class="external" title="Compartir con Technorati">Compartir con Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.carballude.es/blog/?feed=rss2&amp;p=700</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Curso de la Universidad de Oviedo: C&#243;mo NO escribir un correo</title>
		<link>http://www.carballude.es/blog/?p=694&amp;utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=curso-de-la-universidad-de-oviedo-cmo-no-escribir-un-correo</link>
		<comments>http://www.carballude.es/blog/?p=694#comments</comments>
		<pubDate>Wed, 30 Jun 2010 02:17:17 +0000</pubDate>
		<dc:creator>Carballude</dc:creator>
				<category><![CDATA[educación]]></category>
		<category><![CDATA[oviedo]]></category>
		<category><![CDATA[universidad]]></category>
		<category><![CDATA[correo]]></category>
		<category><![CDATA[nettiqueta]]></category>

		<guid isPermaLink="false">http://www.carballude.es/blog/?p=694</guid>
		<description><![CDATA[Ayer me llegó un correo de la Universidad de Oviedo informándome que se abría el plazo para la solicitud de unas becas. Nada más empezar a leer algo me olía raro: De Vicerrectorado de Estudiantes y Empleo A Sres. Alumnos de la Universidad de Oviedo...]]></description>
			<content:encoded><![CDATA[<p>Ayer me llegó un correo de la Universidad de Oviedo informándome que se abría el plazo para la solicitud de unas becas. Nada más empezar a leer algo me olía raro:</p>
<blockquote><p>De Vicerrectorado de Estudiantes y Empleo<br />
A Sres. Alumnos de la Universidad de Oviedo</p></blockquote>
<p>Sí, ese es el encabezado del email. Sólo les ha faltado poner la imagen de un sello y el cuño de “Correo Postal”. Un correo electrónico NO es una carta.</p>
<div class="cajaFoto">
<a href="http://www.carballude.es/blog/wp-content/uploads/2010/06/universidad-oviedo.jpg"><img src="http://www.carballude.es/blog/wp-content/uploads/2010/06/universidad-oviedo-300x225.jpg" alt="" title="universidad  oviedo" height="225" class="alignright size-medium wp-image-695" /></a></p>
<p>No estaría tan tranquilo si supiera que tipo de correos envía ahora la universidad</p>
</div>
<p>Sigamos analizando el texto:</p>
<blockquote><p>Hoy se han publicado en el BOPA las convocatorias de becas de colaboración para servicios<br />
informáticos y servicios universitarios para el Curso Académico 2010/11.</p></blockquote>
<p>¿Soy la única persona que esperaba encontrarse un hiperenlace al BOPA en cuestión? Se trata del correo de una universidad que van a leer cientos de alumnos, creo que emplear uno segundos en poner el enlace habría sido un detalle.</p>
<p>En cualquier caso, la cosa continúa:</p>
<blockquote><p>El plazo de solicitud (exclusivamente telemática) abarca desde mañana, 30 de junio, hasta el 9 de julio.</p>
<p>Las solicitudes se cubrirán en una página web preparada al efecto en la dirección: www.uniovi.es</p></blockquote>
<p>Genial. El próximo correo enlazará a Google.com y ya te lo buscas tú. ¿En qué momento les pareció razonable hablar de un contenido concreto y enlazar la página principal? Sobretodo sabiendo que encontrar algo en una web de ese estilo es una tarea digna de elogios.</p>
<p>Otro detalle curioso es que el email lo firma “Eduardo Rodríguez Enríquez”, aunque el correo dice proceder de “vicestudiantes@uniovi.es” , en la firma figura el correo <a href="mailto:dirserviciosuniversitarios@uniovi.es">dirserviciosuniversitarios@uniovi.es</a> ¿Tiene este señor personalidad múltiple? No estaría de más que antes de enviar un correo pensaran quién o qué lo envía y quién o qué debería atender las respuestas.</p>
<p>Lo que sí sabemos a ciencia cierta, es que el señor “Eduardo Rodríguez”, si es que ha sido él quien realmente ha escrito el correo, lo que no tiene es educación. Por si todo lo anterior no fuese ya de lo suficientemente rudo, se han encargado de disipar nuestras dudas con el siguiente asunto:</p>
<blockquote><p>CONVOCATORIAS BECAS COLABORACIÓN (INFORMÁTICA Y SERVICIOS UNIVERSITARIOS)</p></blockquote>
<p>El próximo email de la Universidad de Oviedo será un HTML dentro de un ZIP que tendrá un control ActiveX con sonido MIDI y fondo negro con letras blancas parpadeantes.</p>
<p>Generalmente excusaría un correo como este que viniese de una persona a título personal porque asumiría que es lego en el medio de comunicación y ha tratado de hacerlo lo mejor posible. No obstante, no creo que se le pueda permitir a una institución, y menos a un centro educativo, el envío masivo de comunicados que atentan de forma clara contra las normas de educación más básicas.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-shr">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.carballude.es/blog/?p=694&amp;t=Curso+de+la+Universidad+de+Oviedo%3A+C%26oacute%3Bmo+NO+escribir+un+correo" rel="nofollow" class="external" title="Compartir con Facebook">Compartir con Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Curso+de+la+Universidad+de+Oviedo%3A+C%26oacute%3Bmo+NO+escribir+un+correo+-+http://b2l.me/7pfen&amp;source=shareaholic" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo en Twitter!">&iexcl;Comp&aacute;rtelo en Twitter!</a>
		</li>
		<li class="shr-meneame">
			<a href="http://meneame.net/submit.php?url=http://www.carballude.es/blog/?p=694" rel="nofollow" class="external" title="Enviar a Meneame">Enviar a Meneame</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.carballude.es/blog/?p=694&amp;title=Curso+de+la+Universidad+de+Oviedo%3A+C%26oacute%3Bmo+NO+escribir+un+correo&amp;summary=Ayer%20me%20lleg%C3%B3%20un%20correo%20de%20la%20Universidad%20de%20Oviedo%20inform%C3%A1ndome%20que%20se%20abr%C3%ADa%20el%20plazo%20para%20la%20solicitud%20de%20unas%20becas.%20Nada%20m%C3%A1s%20empezar%20a%20leer%20algo%20me%20ol%C3%ADa%20raro%3A%20%20De%20Vicerrectorado%20de%20Estudiantes%20y%20Empleo%0D%0AA%20Sres.%20Alumnos%20de%20la%20Universidad%20de%20Oviedo%0D%0A%0D%0AS%C3%AD%2C%20ese%20es%20el%20encabezado%20del%20email.%20S%C3%B3l&amp;source=La playina del norte" rel="nofollow" class="external" title="Compartir con LinkedIn">Compartir con LinkedIn</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.google.com/reader/link?url=http://www.carballude.es/blog/?p=694&amp;title=Curso+de+la+Universidad+de+Oviedo%3A+C%26oacute%3Bmo+NO+escribir+un+correo&amp;srcUrl=http://www.carballude.es/blog/?p=694&amp;srcTitle=Curso+de+la+Universidad+de+Oviedo%3A+C%26oacute%3Bmo+NO+escribir+un+correo&amp;snippet=Ayer%20me%20lleg%C3%B3%20un%20correo%20de%20la%20Universidad%20de%20Oviedo%20inform%C3%A1ndome%20que%20se%20abr%C3%ADa%20el%20plazo%20para%20la%20solicitud%20de%20unas%20becas.%20Nada%20m%C3%A1s%20empezar%20a%20leer%20algo%20me%20ol%C3%ADa%20raro%3A%20%20De%20Vicerrectorado%20de%20Estudiantes%20y%20Empleo%0D%0AA%20Sres.%20Alumnos%20de%20la%20Universidad%20de%20Oviedo%0D%0A%0D%0AS%C3%AD%2C%20ese%20es%20el%20encabezado%20del%20email.%20S%C3%B3l" rel="nofollow" class="external" title="A&ntilde;dirlo a Google Reader">A&ntilde;dirlo a Google Reader</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.carballude.es/blog/?p=694&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.carballude.es/blog/?p=694&amp;title=Curso+de+la+Universidad+de+Oviedo%3A+C%26oacute%3Bmo+NO+escribir+un+correo" rel="nofollow" class="external" title="&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon">&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.carballude.es/blog/?p=694&amp;title=Curso+de+la+Universidad+de+Oviedo%3A+C%26oacute%3Bmo+NO+escribir+un+correo" rel="nofollow" class="external" title="Compartir con del.icio.us">Compartir con del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.carballude.es/blog/?p=694&amp;title=Curso+de+la+Universidad+de+Oviedo%3A+C%26oacute%3Bmo+NO+escribir+un+correo" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo con Digg!">&iexcl;Comp&aacute;rtelo con Digg!</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.carballude.es/blog/?p=694" rel="nofollow" class="external" title="Compartir con Technorati">Compartir con Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.carballude.es/blog/?feed=rss2&amp;p=694</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hackeada la web de S&#225;lvame</title>
		<link>http://www.carballude.es/blog/?p=669&amp;utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=hackeada-la-web-de-slvame</link>
		<comments>http://www.carballude.es/blog/?p=669#comments</comments>
		<pubDate>Sat, 19 Jun 2010 14:54:29 +0000</pubDate>
		<dc:creator>Carballude</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[belén]]></category>
		<category><![CDATA[esteban]]></category>
		<category><![CDATA[sálvame]]></category>
		<category><![CDATA[telecinco]]></category>
		<category><![CDATA[televisión]]></category>

		<guid isPermaLink="false">http://www.carballude.es/blog/?p=669</guid>
		<description><![CDATA[La web de Sálvame de Telecinco ha sido hackeada… y le han dejado un mensaje a Belén Esteban :D http://clubsalvame.telecinco.es/ Compartir con Facebook &#161;Comp&#225;rtelo en Twitter! Enviar a Meneame Compartir con LinkedIn A&#241;dirlo a Google Reader Post on Google Buzz &#191;Has encontrado algo bueno? Comp&#225;rtelo...]]></description>
			<content:encoded><![CDATA[<p>La web de Sálvame de Telecinco ha sido hackeada… y le han dejado un mensaje a Belén Esteban :D</p>
<p><a title="http://clubsalvame.telecinco.es/" href="http://clubsalvame.telecinco.es/">http://clubsalvame.telecinco.es/</a></p>
<p><a href="http://www.carballude.es/blog/wp-content/uploads/2010/06/image9.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.carballude.es/blog/wp-content/uploads/2010/06/image_thumb9.png" width="630" height="637" /></a></p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-shr">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.carballude.es/blog/?p=669&amp;t=Hackeada+la+web+de+S%26aacute%3Blvame" rel="nofollow" class="external" title="Compartir con Facebook">Compartir con Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Hackeada+la+web+de+S%26aacute%3Blvame+-+http://b2l.me/4xzxu&amp;source=shareaholic" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo en Twitter!">&iexcl;Comp&aacute;rtelo en Twitter!</a>
		</li>
		<li class="shr-meneame">
			<a href="http://meneame.net/submit.php?url=http://www.carballude.es/blog/?p=669" rel="nofollow" class="external" title="Enviar a Meneame">Enviar a Meneame</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.carballude.es/blog/?p=669&amp;title=Hackeada+la+web+de+S%26aacute%3Blvame&amp;summary=La%20web%20de%20S%C3%A1lvame%20de%20Telecinco%20ha%20sido%20hackeada%E2%80%A6%20y%20le%20han%20dejado%20un%20mensaje%20a%20Bel%C3%A9n%20Esteban%20%3AD%20%20http%3A%2F%2Fclubsalvame.telecinco.es%2F%20%20&amp;source=La playina del norte" rel="nofollow" class="external" title="Compartir con LinkedIn">Compartir con LinkedIn</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.google.com/reader/link?url=http://www.carballude.es/blog/?p=669&amp;title=Hackeada+la+web+de+S%26aacute%3Blvame&amp;srcUrl=http://www.carballude.es/blog/?p=669&amp;srcTitle=Hackeada+la+web+de+S%26aacute%3Blvame&amp;snippet=La%20web%20de%20S%C3%A1lvame%20de%20Telecinco%20ha%20sido%20hackeada%E2%80%A6%20y%20le%20han%20dejado%20un%20mensaje%20a%20Bel%C3%A9n%20Esteban%20%3AD%20%20http%3A%2F%2Fclubsalvame.telecinco.es%2F%20%20" rel="nofollow" class="external" title="A&ntilde;dirlo a Google Reader">A&ntilde;dirlo a Google Reader</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.carballude.es/blog/?p=669&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.carballude.es/blog/?p=669&amp;title=Hackeada+la+web+de+S%26aacute%3Blvame" rel="nofollow" class="external" title="&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon">&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.carballude.es/blog/?p=669&amp;title=Hackeada+la+web+de+S%26aacute%3Blvame" rel="nofollow" class="external" title="Compartir con del.icio.us">Compartir con del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.carballude.es/blog/?p=669&amp;title=Hackeada+la+web+de+S%26aacute%3Blvame" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo con Digg!">&iexcl;Comp&aacute;rtelo con Digg!</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.carballude.es/blog/?p=669" rel="nofollow" class="external" title="Compartir con Technorati">Compartir con Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.carballude.es/blog/?feed=rss2&amp;p=669</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Eliminar la publicidad de Spotify</title>
		<link>http://www.carballude.es/blog/?p=661&amp;utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=eliminar-la-publicidad-de-spotify</link>
		<comments>http://www.carballude.es/blog/?p=661#comments</comments>
		<pubDate>Mon, 14 Jun 2010 18:40:08 +0000</pubDate>
		<dc:creator>Carballude</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[anuncios]]></category>
		<category><![CDATA[eliminar]]></category>
		<category><![CDATA[publicidad]]></category>
		<category><![CDATA[spotify]]></category>

		<guid isPermaLink="false">http://www.carballude.es/blog/?p=661</guid>
		<description><![CDATA[Ayer os contaba que Spotify me tocaba la moral al suicidarse cada vez que abría un desensamblador. Hoy escribo esta entrada para presentar un pequeño programa que pone en mute los anuncios de Spotify. El programa es extremadamente cutre, pero funciona y cumple lo más...]]></description>
			<content:encoded><![CDATA[<p>Ayer <a href="http://www.carballude.es/blog/?p=655">os contaba</a> que Spotify me tocaba la moral al suicidarse cada vez que abría un desensamblador. Hoy escribo esta entrada para presentar un pequeño programa que pone en mute los anuncios de Spotify.</p>
<p>El programa es extremadamente cutre, pero funciona y cumple lo más importante: no modifica Spotify y no se necesita para nada un desensamblador. A ver si los de Spotify dejan de creerse el ombligo del mundo y no me dicen qué puedo y qué no puedo correr en mi máquina.</p>
<p>Si eres muy muy vago y sólo quieres saber si esto funciona, vete al final a la sección “Funcionamiento para vagos”</p>
<h3>Funcionamiento</h3>
<p>El programa necesita hacer dos cosas: saber qué canción está reproduciendo Spotify y poner en mute la canción que quiera. Por si alguien no lo sabe, los anuncios de Spotify son canciones que no te dejan “saltar” ni “silenciar”.</p>
<h4>Saber que se está reproduciendo</h4>
<p><a href="http://www.carballude.es/blog/?p=655#comment-6120">JaviCV apuntaba</a> que dado que MSN Live Messenger logra saber qué reproduce Spotify, quizá hubiera alguna API por ahí que me lo permitiera a mi también. La idea es muy buena y es la correcta&#8230; pero como no quería gastar tiempo mirando documentación de esa API (que probablemente sea “secreta”) he optado por una solución rápida y sucia.</p>
<p>Spotify cambia el título de la ventana cuando reproduce de “Spotify” a “Spotify &#8211; &lt;Artista&gt; &#8211; &lt;Canción&gt;”. Lo que hago es preguntarle al S.O. por el nombre de todas las ventanas y quedarme con la que se llame “Spotify”.</p>
<p>Evidentemente esto tiene muchos problemas, por ejemplo, como tengas Spotify abierto y abras una carpeta llamada Spotify, el programa encontrará un error y se cerrará.</p>
<h4>Poner en mute los anuncios</h4>
<p>Spotify controla el volumen y si este baja mucho, o directamente a 0, pausa el anuncio hasta que se sube el volumen. Sin embargo, hay un fallo en su planteamiento&#8230; al parecer sólo controlan el volumen del dispositivo de reproducción, pero no miran si está activo el dispositivo de comunicación.</p>
<h5>¿Qué es un dispositivo de comunicación?</h5>
<p>Seguramente alguna vez habrás estado viendo una peli, escuchando música, etc&#8230; y te han llamado por Skype o cualquier otro sitio. Lo primero que haces es parar la música, la peli, etc&#8230; y contestar la llamada. En Windows 7 puedes decirle al S.O. que cuando se active el “dispositivo de comunicación” ponga en mute a todas las demás aplicaciones.</p>
<h5>¿De qué nos sirve esto?</h5>
<p>En este caso, cuando detecto que se va a reproducir una canción anuncio (como por ejemplo, aquellas cuyo artista es Spotify) realizo una llamada por Skype, lo que hace que se active el dispositivo de comunicación y sea Windows quién ponga en mute a Spotify :) Cuando el anuncio termina, cuelgo la llamada y volvemos a escuchar a Spotify.</p>
<h5>¿Y vas a estar molestando a los contactos de Skype con llamadas cada vez que suena un auncio?</h5>
<p>No, la llamada se realiza a “echo123”, el servicio de prueba de Skype.</p>
<h4>¿Cómo funciona el programa?</h4>
<p>Necesitas decirle a Windows 7 que cuando detecte una comunicación ponga en mute a todas las demás aplicaciones.</p>
<p>Luego, necesitas decirle a Skype que ponga los altavoces al mínimo (así no oiremos tampoco la llamada).</p>
<p>Hecho esto, puedes abrir el programa. La primera vez Skype te preguntará si quieres autorizarle a realizar llamadas, deberás decirle que sí. Ojo a esto, la programación es tan cutre que como abras el programa sin tener abierto Skype, lo más probable es que falle.</p>
<p>A partir de ahora, el programa realizará la llamada cada vez que detecte un anuncio. Si suena un anuncio, no tienes más que darle a “This is an ad!” y lo añadirá a su base de datos (que por cierto es un txt en UTF-8).</p>
<h3>Nota final</h3>
<p>El programa funciona gracias a dos efectos laterales&#8230; obviamente esto es una chapuza muy grande. Aunque funciona y elimina los anuncios, el objetivo de esto no es que la gente deje de pagar su subscripción a Spotify y por eso no voy a realizar una versión “decente”, simplemente es una forma de demostrar que la política de Spotify es un coñazo y además estúpida.</p>
<h3>Funcionamiento para vagos</h3>
<h4>Instalación (hacer sólo la primera vez)</h4>
<p>Dile a windows que ponga en mute todo cuando recibes una llamada.</p>
<p><a href="http://www.carballude.es/blog/wp-content/uploads/2010/06/image7.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.carballude.es/blog/wp-content/uploads/2010/06/image_thumb7.png" width="418" height="465" /></a> </p>
<p>Abre Skype.</p>
<p>Abre el programa, Skype preguntará si deseas autorizar al programa a hacer llamadas. Dile que sí.</p>
<p>Dile a Skype que ponga el volumen al mínimo.</p>
<p><a href="http://www.carballude.es/blog/wp-content/uploads/2010/06/image8.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.carballude.es/blog/wp-content/uploads/2010/06/image_thumb8.png" width="421" height="439" /></a> </p>
<h4>Uso diario</h4>
<p>Abre Skype</p>
<p>Abre el programa</p>
<p>Abre Spotify y&#8230; no más anuncios :)</p>
<p>Si se reproduce un anuncio es que el programa no lo tiene en su base de datos, dale a “This is an ad!” y no volverás a escucharlo.</p>
<h3></h3>
</p>
<h3>Descarga</h3>
<p><a href="http://www.carballude.es/Creaciones/AdsSpotify.zip">Binarios</a></p>
<p><a href="http://www.carballude.es/Creaciones/AdsSpotifySrc.zip">Código fuente</a></p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-shr">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.carballude.es/blog/?p=661&amp;t=Eliminar+la+publicidad+de+Spotify" rel="nofollow" class="external" title="Compartir con Facebook">Compartir con Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Eliminar+la+publicidad+de+Spotify+-+http://b2l.me/3q3jv&amp;source=shareaholic" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo en Twitter!">&iexcl;Comp&aacute;rtelo en Twitter!</a>
		</li>
		<li class="shr-meneame">
			<a href="http://meneame.net/submit.php?url=http://www.carballude.es/blog/?p=661" rel="nofollow" class="external" title="Enviar a Meneame">Enviar a Meneame</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.carballude.es/blog/?p=661&amp;title=Eliminar+la+publicidad+de+Spotify&amp;summary=Ayer%20os%20contaba%20que%20Spotify%20me%20tocaba%20la%20moral%20al%20suicidarse%20cada%20vez%20que%20abr%C3%ADa%20un%20desensamblador.%20Hoy%20escribo%20esta%20entrada%20para%20presentar%20un%20peque%C3%B1o%20programa%20que%20pone%20en%20mute%20los%20anuncios%20de%20Spotify.%20%20El%20programa%20es%20extremadamente%20cutre%2C%20pero%20funciona%20y%20cumple%20lo%20m%C3%A1s%20importante%3A%20no%20modifica%20Spot&amp;source=La playina del norte" rel="nofollow" class="external" title="Compartir con LinkedIn">Compartir con LinkedIn</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.google.com/reader/link?url=http://www.carballude.es/blog/?p=661&amp;title=Eliminar+la+publicidad+de+Spotify&amp;srcUrl=http://www.carballude.es/blog/?p=661&amp;srcTitle=Eliminar+la+publicidad+de+Spotify&amp;snippet=Ayer%20os%20contaba%20que%20Spotify%20me%20tocaba%20la%20moral%20al%20suicidarse%20cada%20vez%20que%20abr%C3%ADa%20un%20desensamblador.%20Hoy%20escribo%20esta%20entrada%20para%20presentar%20un%20peque%C3%B1o%20programa%20que%20pone%20en%20mute%20los%20anuncios%20de%20Spotify.%20%20El%20programa%20es%20extremadamente%20cutre%2C%20pero%20funciona%20y%20cumple%20lo%20m%C3%A1s%20importante%3A%20no%20modifica%20Spot" rel="nofollow" class="external" title="A&ntilde;dirlo a Google Reader">A&ntilde;dirlo a Google Reader</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.carballude.es/blog/?p=661&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.carballude.es/blog/?p=661&amp;title=Eliminar+la+publicidad+de+Spotify" rel="nofollow" class="external" title="&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon">&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.carballude.es/blog/?p=661&amp;title=Eliminar+la+publicidad+de+Spotify" rel="nofollow" class="external" title="Compartir con del.icio.us">Compartir con del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.carballude.es/blog/?p=661&amp;title=Eliminar+la+publicidad+de+Spotify" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo con Digg!">&iexcl;Comp&aacute;rtelo con Digg!</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.carballude.es/blog/?p=661" rel="nofollow" class="external" title="Compartir con Technorati">Compartir con Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.carballude.es/blog/?feed=rss2&amp;p=661</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Peque&#241;a investigaci&#243;n para eliminar la publicidad de Spotify</title>
		<link>http://www.carballude.es/blog/?p=655&amp;utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=pequea-investigacin-para-eliminar-la-publicidad-de-spotify</link>
		<comments>http://www.carballude.es/blog/?p=655#comments</comments>
		<pubDate>Sun, 13 Jun 2010 05:33:10 +0000</pubDate>
		<dc:creator>Carballude</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[multimedia]]></category>
		<category><![CDATA[eliminar]]></category>
		<category><![CDATA[publicidad]]></category>
		<category><![CDATA[spotify]]></category>

		<guid isPermaLink="false">http://www.carballude.es/blog/?p=655</guid>
		<description><![CDATA[Hoy me he hartado de que Spotify se crea el ombligo del mundo y se niegue a funcionar si detecta un desensamblador, supongo que para prevenir que lo desensamblen a él. Como me ha tocado bastante la moral, me he puesto a pensar formas de...]]></description>
			<content:encoded><![CDATA[<p>Hoy me he hartado de que <a href="http://www.spotify.com">Spotify</a> se crea el ombligo del mundo y se niegue a funcionar si detecta un desensamblador, supongo que para prevenir que lo desensamblen a él. Como me ha tocado bastante la moral, me he puesto a pensar formas de reventar la publicidad que no necesiten desensamblado… y se me ha ocurrido una bastante decente que además funciona (a pedales, pero funciona).</p>
<p>Supongo que todos habréis notado que si cuando suena un anuncio, bajáis el volumen o silenciáis la aplicación, el anuncio se pone en pausa y continua cuando se suba el volumen. Ahora bien, a nosotros nos da igual el volumen del anuncio, lo que no queremos es oírlo. ¿Qué pasaría si hacemos que el sonido se dirija, durante los anuncios, al un dispositivo nulo? Exacto, no oímos nada, pero Spotify sigue reproduciendo tan contento.</p>
<p>Para la prueba, he esperado a que Spotify reprodujera un anuncio y en ese momento le he dicho a Windows que ponga como dispositivo por defecto la interfaz SPDIF de mi portátil (que por supuesto no se está usando) y tras el anuncio, volviendo a seleccionar los altavoces.</p>
<p>Evidentemente el sistema es aun más incómodo que aguantar la publicidad, pero demuestra que existe una solución. Si creamos un dispositivo nulo (esto no debería ser un problema… al menos en teoría) y logramos obtener el nombre de las canciones que va reproduciendo Spotify (¿alguien sabe cómo?) podríamos realizar el cambio de dispositivo automágicamente :)</p>
<p>De hecho, hay otra manera aun más sencilla:</p>
<ul>
<li>Configurad Windows para que haga mute a todo si se recibe una llamada.</li>
<li>Abrid Skype y llamad a cualquiera durante un anuncio.</li>
</ul>
<p>Efectivamente… el anuncio no se escucha, pero Spotify sigue reproduciendo.</p>
<p>Todo esto porque Spotify no me deja arrancar los programas que yo quiero… deberían pensárselo mejor la próxima vez xD</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-shr">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.carballude.es/blog/?p=655&amp;t=Peque%26ntilde%3Ba+investigaci%26oacute%3Bn+para+eliminar+la+publicidad+de+Spotify" rel="nofollow" class="external" title="Compartir con Facebook">Compartir con Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Peque%26ntilde%3Ba+investigaci%26oacute%3Bn+para+eliminar+la+publicidad+de+Spotify+-+http://b2l.me/3cffu&amp;source=shareaholic" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo en Twitter!">&iexcl;Comp&aacute;rtelo en Twitter!</a>
		</li>
		<li class="shr-meneame">
			<a href="http://meneame.net/submit.php?url=http://www.carballude.es/blog/?p=655" rel="nofollow" class="external" title="Enviar a Meneame">Enviar a Meneame</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.carballude.es/blog/?p=655&amp;title=Peque%26ntilde%3Ba+investigaci%26oacute%3Bn+para+eliminar+la+publicidad+de+Spotify&amp;summary=Hoy%20me%20he%20hartado%20de%20que%20Spotify%20se%20crea%20el%20ombligo%20del%20mundo%20y%20se%20niegue%20a%20funcionar%20si%20detecta%20un%20desensamblador%2C%20supongo%20que%20para%20prevenir%20que%20lo%20desensamblen%20a%20%C3%A9l.%20Como%20me%20ha%20tocado%20bastante%20la%20moral%2C%20me%20he%20puesto%20a%20pensar%20formas%20de%20reventar%20la%20publicidad%20que%20no%20necesiten%20desensamblado%E2%80%A6%20y%20se%20&amp;source=La playina del norte" rel="nofollow" class="external" title="Compartir con LinkedIn">Compartir con LinkedIn</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.google.com/reader/link?url=http://www.carballude.es/blog/?p=655&amp;title=Peque%26ntilde%3Ba+investigaci%26oacute%3Bn+para+eliminar+la+publicidad+de+Spotify&amp;srcUrl=http://www.carballude.es/blog/?p=655&amp;srcTitle=Peque%26ntilde%3Ba+investigaci%26oacute%3Bn+para+eliminar+la+publicidad+de+Spotify&amp;snippet=Hoy%20me%20he%20hartado%20de%20que%20Spotify%20se%20crea%20el%20ombligo%20del%20mundo%20y%20se%20niegue%20a%20funcionar%20si%20detecta%20un%20desensamblador%2C%20supongo%20que%20para%20prevenir%20que%20lo%20desensamblen%20a%20%C3%A9l.%20Como%20me%20ha%20tocado%20bastante%20la%20moral%2C%20me%20he%20puesto%20a%20pensar%20formas%20de%20reventar%20la%20publicidad%20que%20no%20necesiten%20desensamblado%E2%80%A6%20y%20se%20" rel="nofollow" class="external" title="A&ntilde;dirlo a Google Reader">A&ntilde;dirlo a Google Reader</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.carballude.es/blog/?p=655&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.carballude.es/blog/?p=655&amp;title=Peque%26ntilde%3Ba+investigaci%26oacute%3Bn+para+eliminar+la+publicidad+de+Spotify" rel="nofollow" class="external" title="&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon">&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.carballude.es/blog/?p=655&amp;title=Peque%26ntilde%3Ba+investigaci%26oacute%3Bn+para+eliminar+la+publicidad+de+Spotify" rel="nofollow" class="external" title="Compartir con del.icio.us">Compartir con del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.carballude.es/blog/?p=655&amp;title=Peque%26ntilde%3Ba+investigaci%26oacute%3Bn+para+eliminar+la+publicidad+de+Spotify" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo con Digg!">&iexcl;Comp&aacute;rtelo con Digg!</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.carballude.es/blog/?p=655" rel="nofollow" class="external" title="Compartir con Technorati">Compartir con Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.carballude.es/blog/?feed=rss2&amp;p=655</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>XSS en la antigua web de la EUITIO</title>
		<link>http://www.carballude.es/blog/?p=646&amp;utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=xss-en-la-antigua-web-de-la-euitio</link>
		<comments>http://www.carballude.es/blog/?p=646#comments</comments>
		<pubDate>Fri, 11 Jun 2010 17:13:36 +0000</pubDate>
		<dc:creator>Carballude</dc:creator>
				<category><![CDATA[seguridad]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[eii]]></category>
		<category><![CDATA[euitio]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://www.carballude.es/blog/?p=646</guid>
		<description><![CDATA[Hace algún tiempo hablaba con un compañero sobre vulnerabilidades web y él mantenía que los ataques XSS no eran un peligro real, ya que no se modificaban los datos del servidor ni se accedían a sitios restringidos. Lo preocupante es que no es el único...]]></description>
			<content:encoded><![CDATA[<p>Hace algún tiempo hablaba con un compañero sobre vulnerabilidades web y él mantenía que los ataques XSS no eran un peligro real, ya que no se modificaban los datos del servidor ni se accedían a sitios restringidos. Lo preocupante es que no es el único que piensa así.</p>
<p>Ya había publicado antes cosas relacionadas con XSS, como el fallo que tuvo <a href="http://www.carballude.es/blog/?p=407">RTVE con la web de Eurovisión</a>, o el <a href="http://www.carballude.es/blog/?p=581">falló que descubrí en Crellan</a>. La <a href="http://www.euitio.uniovi.es">EUITIO</a>, que ahora se llama EII (sí, lo sé, suena a chiste), ha estrenado nueva web&#8230; así que voy a publicar dos XSS que descubrí hace algún tiempo para la web antigua y luego que venga alguien a decirme que no son “peligrosos”.</p>
<p>Una de las vulnerabilidades se encuentra en “<a href="http://www.euitio.uniovi.es/info_academica/asignaturas/index.php">http://www.euitio.uniovi.es/info_academica/asignaturas/index.php</a>” que acepta el parámetro “plan” para indicarle que plan de estudios tiene que mostrar. Si no recibe parámetro, toma por defecto 2002. ¿Qué pasa si le pasamos un plan que no exista, por ejemplo 1234 (<a href="http://www.euitio.uniovi.es/info_academica/asignaturas/index.php?plan=1234">http://www.euitio.uniovi.es/info_academica/asignaturas/index.php?plan=1234</a>)? Pues que intenta mostrarnoslo&#8230; y nos dice que no tiene asignaturas.</p>
<p>Yo he creado una inyección un pelín más sofisticada y me he creado el mio:</p>
<p><a href="http://www.euitio.uniovi.es/info_academica/asignaturas/index.php?plan=2011%3Cstyle%20type=text/css%3Ebody%3Eul%7Bdisplay:none;%7Dbody%3Eh2%7Bdisplay:none;%7Dh2%2Bdiv%7Bdisplay:none;%7Ddiv%2Bh2%7Bdisplay:none;%7D%3C/style%3E%3Ch2%3EPrimero%3C/h2%3E%3Cul%3E%3Cli%3ETrigonometr%EDa%20cu%E1ntica%20de%20los%20campos%20hiperb%F3licos%3C/li%3E%3C/ul%3E%3Ch2%3ESegundo%3C/h2%3E%3Cul%3E%3Cli%3EParabolas%20senocoidales%20del%20flujo%20espacio-tiempo%3C/li%3E%3C/ul%3E%3Ch2%3ETercero%3C/h2%3E%3Cul%3E%3Cli%3EFiesta,%20sexo,%20alcohol%20y%20Rock%20and%20Roll%3C/li%3E%3Cli%3EDisertaci%F3n%20sobre%20la%20respuesta%20universal:%2042%3C/li%3E%3C/ul%3E%3Cdiv%20style=display:none%3E.%3C/div%3E">http://www.euitio.uniovi.es/info_academica/asignaturas/index.php?plan=2011%3Cstyle%20type=text/css%3Ebody%3Eul%7Bdisplay:none;%7Dbody%3Eh2%7Bdisplay:none;%7Dh2%2Bdiv%7Bdisplay:none;%7Ddiv%2Bh2%7Bdisplay:none;%7D%3C/style%3E%3Ch2%3EPrimero%3C/h2%3E%3Cul%3E%3Cli%3ETrigonometr%EDa%20cu%E1ntica%20de%20los%20campos%20hiperb%F3licos%3C/li%3E%3C/ul%3E%3Ch2%3ESegundo%3C/h2%3E%3Cul%3E%3Cli%3EParabolas%20senocoidales%20del%20flujo%20espacio-tiempo%3C/li%3E%3C/ul%3E%3Ch2%3ETercero%3C/h2%3E%3Cul%3E%3Cli%3EFiesta,%20sexo,%20alcohol%20y%20Rock%20and%20Roll%3C/li%3E%3Cli%3EDisertaci%F3n%20sobre%20la%20respuesta%20universal:%2042%3C/li%3E%3C/ul%3E%3Cdiv%20style=display:none%3E.%3C/div%3E</a></p>
<p>La url puede parecer muy larga.. pero si usamos un acortador de URL, o la ponemos en una web, o en un email o&#8230; en fin, que las posibilidades son muchas.</p>
<p>El resultado es este (clic para ampliar):</p>
<p><a href="http://www.carballude.es/blog/wp-content/uploads/2010/06/Plan2011.png"></a><a href="http://www.carballude.es/blog/wp-content/uploads/2010/06/Plan20111.png"></a><a href="http://www.carballude.es/blog/wp-content/uploads/2010/06/Plan20111.png"><img class="aligncenter size-large wp-image-648" title="Plan2011" src="http://www.carballude.es/blog/wp-content/uploads/2010/06/Plan20111-1024x665.png" alt="" width="598" height="447" /></a> </p>
<p>Otra vulnerable es la sección de becas. En este caso me he tomado la libertad de añadir una nueva beca:</p>
<p><a title="http://www.euitio.uniovi.es/servicios/ofertas/index.php?tipo=Becas%3Cul%3E%3Cli%3E%3Ca%20href=%23%20OnClick=alert%28/Lo_sentimos_la_beca_ha_sido_ocupada_por_El_Hombre_Invisible/%29%3EBeca%20de%20colaboraci%F3n%20con%20Superman%3C/a%3E%3C/li%3E%3C/ul%3E%3Cstyle%20type=text/css%3E%20body%3Eul%20{display:none;}%3C/style%3E#" href="http://www.euitio.uniovi.es/servicios/ofertas/index.php?tipo=Becas%3Cul%3E%3Cli%3E%3Ca%20href=%23%20OnClick=alert%28/Lo_sentimos_la_beca_ha_sido_ocupada_por_El_Hombre_Invisible/%29%3EBeca%20de%20colaboraci%F3n%20con%20Superman%3C/a%3E%3C/li%3E%3C/ul%3E%3Cstyle%20type=text/css%3E%20body%3Eul%20{display:none;}%3C/style%3E#">http://www.euitio.uniovi.es/servicios/ofertas/index.php?tipo=Becas%3Cul%3E%3Cli%3E%3Ca%20href=%23%20OnClick=alert%28/Lo_sentimos_la_beca_ha_sido_ocupada_por_El_Hombre_Invisible/%29%3EBeca%20de%20colaboraci%F3n%20con%20Superman%3C/a%3E%3C/li%3E%3C/ul%3E%3Cstyle%20type=text/css%3E%20body%3Eul%20{display:none;}%3C/style%3E#</a></p>
<p>Y el resultado (clic para ampliar):</p>
<p><a href="http://www.carballude.es/blog/wp-content/uploads/2010/06/BecaSuperman.png"></a><a href="http://www.carballude.es/blog/wp-content/uploads/2010/06/BecaSuperman1.png"><img class="aligncenter size-large wp-image-647" title="BecaSuperman" src="http://www.carballude.es/blog/wp-content/uploads/2010/06/BecaSuperman1-1024x523.png" alt="" width="595" height="354" /></a> </p>
<p>Obviamente ambos ejemplos son evidentemente falsos y nadie con dos dedos de frente se creería ninguno de ellos. No están pensados para “hacer daño” ni para “engañar” a nadie, sino para demostrar que hay un problema&#8230; ¿os imagináis que pasaría si el objetivo del XSS fuese la caja de login? No sería muy difícil reemplazarla y que la gente enviase la contraseña a una dirección de mail&#8230;.</p>
<p>PD: Por si alguien prueba estos enlaces y no consigue nada&#8230; están probados con Firefox 3.x,<span style="text-decoration: line-through;"> si usais IE8 no funcionarán porque tiene de serie protección contra XSS</span> (aunque la gente siga diciendo que IE es inseguro&#8230; yo no dejo de verle características de seguridad que los demás no tienen&#8230;). IE8 tiene protección contra XSS y saltó cuando me envié el enlace por GMail:<a href="http://www.carballude.es/blog/wp-content/uploads/2010/06/xssIE.png"><img class="aligncenter size-full wp-image-651" title="xssIE" src="http://www.carballude.es/blog/wp-content/uploads/2010/06/xssIE.png" alt="" width="631" height="281" /></a></p>
<p>Curiosamente desde aquí no pone ninguna pega&#8230; algo me dice que ese filtro tiene que mejorar bastante xD</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-shr">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.carballude.es/blog/?p=646&amp;t=XSS+en+la+antigua+web+de+la+EUITIO" rel="nofollow" class="external" title="Compartir con Facebook">Compartir con Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=XSS+en+la+antigua+web+de+la+EUITIO+-+http://b2l.me/2ypd3&amp;source=shareaholic" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo en Twitter!">&iexcl;Comp&aacute;rtelo en Twitter!</a>
		</li>
		<li class="shr-meneame">
			<a href="http://meneame.net/submit.php?url=http://www.carballude.es/blog/?p=646" rel="nofollow" class="external" title="Enviar a Meneame">Enviar a Meneame</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.carballude.es/blog/?p=646&amp;title=XSS+en+la+antigua+web+de+la+EUITIO&amp;summary=Hace%20alg%C3%BAn%20tiempo%20hablaba%20con%20un%20compa%C3%B1ero%20sobre%20vulnerabilidades%20web%20y%20%C3%A9l%20manten%C3%ADa%20que%20los%20ataques%20XSS%20no%20eran%20un%20peligro%20real%2C%20ya%20que%20no%20se%20modificaban%20los%20datos%20del%20servidor%20ni%20se%20acced%C3%ADan%20a%20sitios%20restringidos.%20Lo%20preocupante%20es%20que%20no%20es%20el%20%C3%BAnico%20que%20piensa%20as%C3%AD.%0D%0A%0D%0AYa%20hab%C3%ADa%20publicado%20an&amp;source=La playina del norte" rel="nofollow" class="external" title="Compartir con LinkedIn">Compartir con LinkedIn</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.google.com/reader/link?url=http://www.carballude.es/blog/?p=646&amp;title=XSS+en+la+antigua+web+de+la+EUITIO&amp;srcUrl=http://www.carballude.es/blog/?p=646&amp;srcTitle=XSS+en+la+antigua+web+de+la+EUITIO&amp;snippet=Hace%20alg%C3%BAn%20tiempo%20hablaba%20con%20un%20compa%C3%B1ero%20sobre%20vulnerabilidades%20web%20y%20%C3%A9l%20manten%C3%ADa%20que%20los%20ataques%20XSS%20no%20eran%20un%20peligro%20real%2C%20ya%20que%20no%20se%20modificaban%20los%20datos%20del%20servidor%20ni%20se%20acced%C3%ADan%20a%20sitios%20restringidos.%20Lo%20preocupante%20es%20que%20no%20es%20el%20%C3%BAnico%20que%20piensa%20as%C3%AD.%0D%0A%0D%0AYa%20hab%C3%ADa%20publicado%20an" rel="nofollow" class="external" title="A&ntilde;dirlo a Google Reader">A&ntilde;dirlo a Google Reader</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.carballude.es/blog/?p=646&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.carballude.es/blog/?p=646&amp;title=XSS+en+la+antigua+web+de+la+EUITIO" rel="nofollow" class="external" title="&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon">&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.carballude.es/blog/?p=646&amp;title=XSS+en+la+antigua+web+de+la+EUITIO" rel="nofollow" class="external" title="Compartir con del.icio.us">Compartir con del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.carballude.es/blog/?p=646&amp;title=XSS+en+la+antigua+web+de+la+EUITIO" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo con Digg!">&iexcl;Comp&aacute;rtelo con Digg!</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.carballude.es/blog/?p=646" rel="nofollow" class="external" title="Compartir con Technorati">Compartir con Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.carballude.es/blog/?feed=rss2&amp;p=646</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ver la contrase&#241;a de nuestra WiFi</title>
		<link>http://www.carballude.es/blog/?p=641&amp;utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ver-la-contrasea-de-nuestra-wifi</link>
		<comments>http://www.carballude.es/blog/?p=641#comments</comments>
		<pubDate>Wed, 09 Jun 2010 07:00:00 +0000</pubDate>
		<dc:creator>Carballude</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[contraseña]]></category>
		<category><![CDATA[windows7]]></category>
		<category><![CDATA[wireless]]></category>

		<guid isPermaLink="false">http://www.carballude.es/blog/?p=641</guid>
		<description><![CDATA[Acabo de llegar a un artículo de MuyComputer en el que explican cómo obtener la clave de nuestra red WiFi. Hablamos de la clave de una red ya configurada en nuestro equipo. Típica situación en la que ponemos la clave y un año después necesitamos...]]></description>
			<content:encoded><![CDATA[<p>Acabo de llegar a <a href="http://muycomputer.com/Zona-Practica/Trucos/Recupera-tus-claves-WiFi/_wE9ERk2XxDDWZo_xsnmFRrF6XY4bt0hn2V0vRsHrTQBfiuw_X-x5IxXan76BDWiP">un artículo de MuyComputer</a> en el que explican cómo obtener la clave de nuestra red WiFi. Hablamos de la clave de una red ya configurada en nuestro equipo. Típica situación en la que ponemos la clave y un año después necesitamos conectar otro ordenador y no tenemos ni idea de qué clave habíamos puesto (que levante la mano el que nunca se haya olvidado una contraseña…).</p>
<p>No dudo de que el artículo esté bien y obtengas la clave… pero hacer un volcado del disco, abrir un editor hexadecimal y buscarla también funcionaría y no por ello lo hacemos :P Se han montado un lío muy grande para hacer esto:</p>
<p>“Botón derecho en la red -&gt; Propiedades -&gt; Seguridad -&gt; Marcar la casilla de ver la contraseña”</p>
<p><a href="http://www.carballude.es/blog/wp-content/uploads/2010/06/image5.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.carballude.es/blog/wp-content/uploads/2010/06/image_thumb5.png" width="289" height="448" /></a> </p>
<p><a href="http://www.carballude.es/blog/wp-content/uploads/2010/06/image6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.carballude.es/blog/wp-content/uploads/2010/06/image_thumb6.png" width="393" height="509" /></a> </p>
<p>Uff… lo menos 5 segundos xD Yo creo que la gente se complica demasiado la vida…</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-shr">
<ul class="socials">
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.carballude.es/blog/?p=641&amp;t=Ver+la+contrase%26ntilde%3Ba+de+nuestra+WiFi" rel="nofollow" class="external" title="Compartir con Facebook">Compartir con Facebook</a>
		</li>
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Ver+la+contrase%26ntilde%3Ba+de+nuestra+WiFi+-+http://b2l.me/2bvcz&amp;source=shareaholic" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo en Twitter!">&iexcl;Comp&aacute;rtelo en Twitter!</a>
		</li>
		<li class="shr-meneame">
			<a href="http://meneame.net/submit.php?url=http://www.carballude.es/blog/?p=641" rel="nofollow" class="external" title="Enviar a Meneame">Enviar a Meneame</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.carballude.es/blog/?p=641&amp;title=Ver+la+contrase%26ntilde%3Ba+de+nuestra+WiFi&amp;summary=Acabo%20de%20llegar%20a%20un%20art%C3%ADculo%20de%20MuyComputer%20en%20el%20que%20explican%20c%C3%B3mo%20obtener%20la%20clave%20de%20nuestra%20red%20WiFi.%20Hablamos%20de%20la%20clave%20de%20una%20red%20ya%20configurada%20en%20nuestro%20equipo.%20T%C3%ADpica%20situaci%C3%B3n%20en%20la%20que%20ponemos%20la%20clave%20y%20un%20a%C3%B1o%20despu%C3%A9s%20necesitamos%20conectar%20otro%20ordenador%20y%20no%20tenemos%20ni%20idea%20de%20&amp;source=La playina del norte" rel="nofollow" class="external" title="Compartir con LinkedIn">Compartir con LinkedIn</a>
		</li>
		<li class="shr-googlereader">
			<a href="http://www.google.com/reader/link?url=http://www.carballude.es/blog/?p=641&amp;title=Ver+la+contrase%26ntilde%3Ba+de+nuestra+WiFi&amp;srcUrl=http://www.carballude.es/blog/?p=641&amp;srcTitle=Ver+la+contrase%26ntilde%3Ba+de+nuestra+WiFi&amp;snippet=Acabo%20de%20llegar%20a%20un%20art%C3%ADculo%20de%20MuyComputer%20en%20el%20que%20explican%20c%C3%B3mo%20obtener%20la%20clave%20de%20nuestra%20red%20WiFi.%20Hablamos%20de%20la%20clave%20de%20una%20red%20ya%20configurada%20en%20nuestro%20equipo.%20T%C3%ADpica%20situaci%C3%B3n%20en%20la%20que%20ponemos%20la%20clave%20y%20un%20a%C3%B1o%20despu%C3%A9s%20necesitamos%20conectar%20otro%20ordenador%20y%20no%20tenemos%20ni%20idea%20de%20" rel="nofollow" class="external" title="A&ntilde;dirlo a Google Reader">A&ntilde;dirlo a Google Reader</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.carballude.es/blog/?p=641&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.carballude.es/blog/?p=641&amp;title=Ver+la+contrase%26ntilde%3Ba+de+nuestra+WiFi" rel="nofollow" class="external" title="&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon">&iquest;Has encontrado algo bueno? Comp&aacute;rtelo en StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.carballude.es/blog/?p=641&amp;title=Ver+la+contrase%26ntilde%3Ba+de+nuestra+WiFi" rel="nofollow" class="external" title="Compartir con del.icio.us">Compartir con del.icio.us</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.carballude.es/blog/?p=641&amp;title=Ver+la+contrase%26ntilde%3Ba+de+nuestra+WiFi" rel="nofollow" class="external" title="&iexcl;Comp&aacute;rtelo con Digg!">&iexcl;Comp&aacute;rtelo con Digg!</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.carballude.es/blog/?p=641" rel="nofollow" class="external" title="Compartir con Technorati">Compartir con Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.carballude.es/blog/?feed=rss2&amp;p=641</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
